projects/guix·blob beam-team · refs

43283 lines · 1.5 MiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013-2025 Ludovic Courtès <[email protected]>
4;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2023 Andreas Enge <[email protected]>
5;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
6;;; Copyright © 2014, 2017, 2021, 2022, 2024 Eric Bavier <[email protected]>
7;;; Copyright © 2014, 2015 Federico Beffa <[email protected]>
8;;; Copyright © 2015 Omar Radwan <[email protected]>
9;;; Copyright © 2015 Pierre-Antoine Rault <[email protected]>
10;;; Copyright © 2015-2026 Ricardo Wurmus <[email protected]>
11;;; Copyright © 2015, 2016, 2020 Christine Lemmer-Webber <[email protected]>
12;;; Copyright © 2015 Eric Dvorsak <[email protected]>
13;;; Copyright © 2015, 2016 David Thompson <[email protected]>
14;;; Copyright © 2015, 2016, 2017, 2019, 2022 Leo Famulari <[email protected]>
15;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
16;;; Copyright © 2015, 2016 Erik Edrosa <[email protected]>
17;;; Copyright © 2015-2026 Efraim Flashner <[email protected]>
18;;; Copyright © 2015, 2017, 2020 Kyle Meyer <[email protected]>
19;;; Copyright © 2015, 2016 Chris Marusich <[email protected]>
20;;; Copyright © 2016 Danny Milosavljevic <[email protected]>
21;;; Copyright © 2016 Lukas Gradl <[email protected]>
22;;; Copyright © 2016, 2018, 2019, 2021 Hartmut Goebel <[email protected]>
23;;; Copyright © 2016 Daniel Pimentel <[email protected]>
24;;; Copyright © 2016 Sou Bunnbu <[email protected]>
25;;; Copyright © 2016, 2017 Troy Sankey <[email protected]>
26;;; Copyright © 2016, 2017 Nikita <[email protected]>
27;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
28;;; Copyright © 2016 David Craven <[email protected]>
29;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
30;;; Copyright © 2016, 2017, 2021, 2022 Stefan Reichör <[email protected]>
31;;; Copyright © 2016, 2017, 2019 Alex Vong <[email protected]>
32;;; Copyright © 2016–2018, 2021–2024, 2026 Arun Isaac <[email protected]>
33;;; Copyright © 2016, 2017, 2018, 2020, 2021 Julien Lepiller <[email protected]>
34;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <[email protected]>
35;;; Copyright © 2016, 2017 Thomas Danckaert <[email protected]>
36;;; Copyright © 2017 Carlo Zancanaro <[email protected]>
37;;; Copyright © 2017 Frederick M. Muriithi <[email protected]>
38;;; Copyright © 2017, 2018 Adriano Peluso <[email protected]>
39;;; Copyright © 2017 Ben Sturmfels <[email protected]>
40;;; Copyright © 2017, 2018, 2019, 2021, 2022 Mathieu Othacehe <[email protected]>
41;;; Copyright © 2017 José Miguel Sánchez García <[email protected]>
42;;; Copyright © 2017, 2020, 2021 Roel Janssen <[email protected]>
43;;; Copyright © 2017, 2018, 2019 Kei Kebreau <[email protected]>
44;;; Copyright © 2017 Rutger Helling <[email protected]>
45;;; Copyright © 2017, 2019, 2021, 2025 Brendan Tildesley <[email protected]>
46;;; Copyright © 2018 Ethan R. Jones <[email protected]
47;;; Copyright © 2018 Fis Trivial <[email protected]>
48;;; Copyright © 2018 Vijayalakshmi Vedantham <[email protected]>
49;;; Copyright © 2018 Mathieu Lirzin <[email protected]>
50;;; Copyright © 2018 Adam Massmann <[email protected]>
51;;; Copyright © 2016, 2018 Tomáš Čech <[email protected]>
52;;; Copyright © 2018-2025 Nicolas Goaziou <[email protected]>
53;;; Copyright © 2018 Oleg Pykhalov <[email protected]>
54;;; Copyright © 2018, 2019, 2021, 2023 Clément Lassieur <[email protected]>
55;;; Copyright © 2018-2025 Maxim Cournoyer <[email protected]>
56;;; Copyright © 2018 Luther Thompson <[email protected]>
57;;; Copyright © 2018 Vagrant Cascadian <[email protected]>
58;;; Copyright © 2015, 2018 Pjotr Prins <[email protected]>
59;;; Copyright © 2019 [email protected] <[email protected]>
60;;; Copyright © 2019, 2020 Brett Gilio <[email protected]>
61;;; Copyright © 2019 Sam <[email protected]>
62;;; Copyright © 2019, 2023 Jack Hill <[email protected]>
63;;; Copyright © 2019-2023, Guillaume Le Vaillant <[email protected]>
64;;; Copyright © 2019, 2020 Alex Griffin <[email protected]>
65;;; Copyright © 2019, 2020, 2021, 2022, 2023 Pierre Langlois <[email protected]>
66;;; Copyright © 2019 Jacob MacDonald <[email protected]>
67;;; Copyright © 2019-2021, 2023, 2024, 2026 Giacomo Leidi <[email protected]>
68;;; Copyright © 2019 Wiktor Żelazny <[email protected]>
69;;; Copyright © 2019, 2020, 2021, 2022, 2026 Tanguy Le Carrour <[email protected]>
70;;; Copyright © 2019, 2021-2023 Mădălin Ionel Patrașcu <[email protected]>
71;;; Copyright © 2020 Riku Viitanen <[email protected]>
72;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
73;;; Copyright © 2020 sirgazil <[email protected]>
74;;; Copyright © 2020 Sebastian Schott <[email protected]>
75;;; Copyright © 2020, 2021 Alexandros Theodotou <[email protected]>
76;;; Copyright © 2020 Josh Marshall <[email protected]>
77;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
78;;; Copyright © 2020 Alex ter Weele <[email protected]>
79;;; Copyright © 2020, 2022 Matthew James Kraai <[email protected]>
80;;; Copyright © 2020 Ryan Prior <[email protected]>
81;;; Copyright © 2020 Josh Holland <[email protected]>
82;;; Copyright © 2020 Yuval Kogman <[email protected]>
83;;; Copyright © 2020, 2022 Michael Rohleder <[email protected]>
84;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <[email protected]>
85;;; Copyright © 2020 Guy Fleury Iteriteka <[email protected]>
86;;; Copyright © 2020 Hendursaga <[email protected]>
87;;; Copyright © 2020 Malte Frank Gerdes <[email protected]>
88;;; Copyright © 2020 Joseph LaFreniere <[email protected]>
89;;; Copyright © 2020 Tim Gesthuizen <[email protected]>
90;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <[email protected]>
91;;; Copyright © 2020 Ekaitz Zarraga <[email protected]>
92;;; Copyright © 2020 Diego N. Barbato <[email protected]>
93;;; Copyright © 2020 Liliana Marie Prikler <[email protected]>
94;;; Copyright © 2019 Kristian Trandem <[email protected]>
95;;; Copyright © 2020, 2021, 2024, 2025 Zheng Junjie <[email protected]>
96;;; Copyright © 2020 EuAndreh <[email protected]>
97;;; Copyright © 2021, 2022 Morgan Smith <[email protected]>
98;;; Copyright © 2021-2026 Sharlatan Hellseher <[email protected]>
99;;; Copyright © 2021 Ellis Kenyő <[email protected]>
100;;; Copyright © 2021 LibreMiami <[email protected]>
101;;; Copyright © 2021 Mathieu Othacehe <[email protected]>
102;;; Copyright © 2021 Xinglu Chen <[email protected]>
103;;; Copyright © 2021 Raghav Gururajan <[email protected]>
104;;; Copyright © 2021, 2023-2025 jgart <[email protected]>
105;;; Copyright © 2021 Danial Behzadi <[email protected]>
106;;; Copyright © 2021 Maxime Devos <[email protected]>
107;;; Copyright © 2021 Hugo Lecomte <[email protected]>
108;;; Copyright © 2021 Franck Pérignon <[email protected]>
109;;; Copyright © 2021, 2022 Petr Hodina <[email protected]>
110;;; Copyright © 2021 Simon Streit <[email protected]>
111;;; Copyright © 2021 Stefan Reichör <[email protected]>
112;;; Copyright © 2021, 2022, 2023 Daniel Meißner <[email protected]>
113;;; Copyright © 2021, 2022 Pradana Aumars <[email protected]>
114;;; Copyright © 2021–2024, 2026 Felix Gruber <[email protected]>
115;;; Copyright © 2021 Sébastien Lerique <[email protected]>
116;;; Copyright © 2021 Raphaël Mélotte <[email protected]>
117;;; Copyright © 2021 ZmnSCPxj <[email protected]>
118;;; Copyright © 2021 Filip Lajszczak <[email protected]>
119;;; Copyright © 2021 Greg Hogan <[email protected]>
120;;; Copyright © 2022, 2023 John Kehayias <[email protected]>
121;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
122;;; Copyright © 2022, 2024-2026 Evgeny Pisemsky <[email protected]>
123;;; Copyright © 2022 drozdov <[email protected]>
124;;; Copyright © 2022 Peter Polidoro <[email protected]>
125;;; Copyright © 2022, 2023 Wamm K. D. <[email protected]>
126;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
127;;; Copyright © 2022-2025 Artyom V. Poptsov <[email protected]>
128;;; Copyright © 2022, 2023 Paul A. Patience <[email protected]>
129;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <[email protected]>
130;;; Copyright © 2022 Philip McGrath <[email protected]>
131;;; Copyright © 2022 Marek Felšöci <[email protected]>
132;;; Copyright © 2022 Hilton Chain <[email protected]>
133;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
134;;; Copyright © 2022 Mathieu Laparie <[email protected]>
135;;; Copyright © 2022 Garek Dyszel <[email protected]>
136;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
137;;; Copyright © 2022-2025 Nicolas Graves <[email protected]>
138;;; Copyright © 2023 Gabriel Wicki <[email protected]>
139;;; Copyright © 2023 Amade Nemes <[email protected]>
140;;; Copyright © 2023 Bruno Victal <[email protected]>
141;;; Copyright © 2023 Lu Hui <[email protected]>
142;;; Copyright © 2023 Jean-Pierre De Jesus DIAZ <[email protected]>
143;;; Copyright © 2023 Kaelyn Takata <[email protected]>
144;;; Copyright © 2023 dan <[email protected]>
145;;; Copyright © 2023 Dominik Delgado Steuter <[email protected]>
146;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
147;;; Copyright © 2023 Ontje Lünsdorf <[email protected]>
148;;; Copyright © 2023, 2025 gemmaro <[email protected]>
149;;; Copyright © 2023 Parnikkapore <[email protected]>
150;;; Copyright © 2023 Foundation Devices, Inc. <[email protected]>
151;;; Copyright © c4droid <[email protected]>
152;;; Copyright © 2023, 2024, 2025 Janneke Nieuwenhuizen <[email protected]>
153;;; Copyright © 2023 Attila Lendvai <[email protected]>
154;;; Copyright © 2023, 2024 Troy Figiel <[email protected]>
155;;; Copyright © 2023 Adam Faiz <[email protected]>
156;;; Copyright © 2023 Wiktor Żelazny <[email protected]>
157;;; Copyright © 2023-2026 Spencer King <[email protected]>
158;;; Copyright © 2024 Timothee Mathieu <[email protected]>
159;;; Copyright © 2024 Ian Eure <[email protected]>
160;;; Copyright © 2024 Adriel Dumas--Jondeau <[email protected]>
161;;; Copyright © 2024 Navid Afkhami <[email protected]>
162;;; Copyright © 2024 TakeV <[email protected]>
163;;; Copyright © 2024, 2025 David Elsing <[email protected]>
164;;; Copyright © 2024 Rick Huijzer <[email protected]>
165;;; Copyright © 2024 Peter Kannewitz <[email protected]>
166;;; Copyright © 2024 Aaron Covrig <[email protected]>
167;;; Copyright © 2024 Markku Korkeala <[email protected]>
168;;; Copyright © 2025 Jordan Moore <[email protected]>
169;;; Copyright © 2025 Dariqq <[email protected]>
170;;; Copyright © 2025-2026 Nguyễn Gia Phong <[email protected]>
171;;; Copyright © 2025, 2026 Cayetano Santos <[email protected]>
172;;; Copyright © 2025 Jake Forster <[email protected]>
173;;; Copyright © 2025 Luis Felipe López Acevedo <[email protected]>
174;;; Copyright © 2025 Josep Bigorra <[email protected]>
175;;; Copyright © 2025 Matthias Riße <[email protected]>
176;;; Copyright © 2025 Ghislain Vaillant <[email protected]>
177;;; Copyright © 2025 Allan Adair <[email protected]>
178;;; Copyright © 2025-2026 Hennadii Stepanov <[email protected]>
179;;; Copyright © 2025 Luca Kredel <[email protected]>
180;;; Copyright © 2025 Isidor Zeuner <[email protected]>
181;;; Copyright © 2025 Andy Tai <[email protected]>
182;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
183;;; Copyright © 2026 Akiyoshi Suda <[email protected]>
184;;; Copyright © 2026 Sughosha <[email protected]>
185;;; Copyright © 2026 orahcio <[email protected]>
186;;; Copyright © 2026 John Dawson <[email protected]>
187;;; Copyright © 2026 Kevin Deldycke <[email protected]>
188;;; Copyright © 2026 Ryan Desfosses <[email protected]>
189;;; Copyright © 2026 nick <[email protected]>
190;;;
191;;; This file is part of GNU Guix.
192;;;
193;;; GNU Guix is free software; you can redistribute it and/or modify it
194;;; under the terms of the GNU General Public License as published by
195;;; the Free Software Foundation; either version 3 of the License, or (at
196;;; your option) any later version.
197;;;
198;;; GNU Guix is distributed in the hope that it will be useful, but
199;;; WITHOUT ANY WARRANTY; without even the implied warranty of
200;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
201;;; GNU General Public License for more details.
202;;;
203;;; You should have received a copy of the GNU General Public License
204;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
205
206(define-module (gnu packages python-xyz)
207 #:use-module (gnu packages algebra)
208 #:use-module (gnu packages attr)
209 #:use-module (gnu packages autotools)
210 #:use-module (gnu packages backup)
211 #:use-module (gnu packages base)
212 #:use-module (gnu packages bash)
213 #:use-module (gnu packages bdw-gc)
214 #:use-module (gnu packages bioinformatics)
215 #:use-module (gnu packages boost)
216 #:use-module (gnu packages build-tools)
217 #:use-module (gnu packages c)
218 #:use-module (gnu packages check)
219 #:use-module (gnu packages cmake)
220 #:use-module (gnu packages compression)
221 #:use-module (gnu packages cpp)
222 #:use-module (gnu packages crypto)
223 #:use-module (gnu packages databases)
224 #:use-module (gnu packages dbm)
225 #:use-module (gnu packages dictionaries)
226 #:use-module (gnu packages digest)
227 #:use-module (gnu packages django)
228 #:use-module (gnu packages djvu)
229 #:use-module (gnu packages dns)
230 #:use-module (gnu packages documentation)
231 #:use-module (gnu packages duckdb)
232 #:use-module (gnu packages elf)
233 #:use-module (gnu packages emulators)
234 #:use-module (gnu packages enchant)
235 #:use-module (gnu packages file)
236 #:use-module (gnu packages fonts)
237 #:use-module (gnu packages fontutils)
238 #:use-module (gnu packages freedesktop)
239 #:use-module (gnu packages gcc)
240 #:use-module (gnu packages gdb)
241 #:use-module (gnu packages geo)
242 #:use-module (gnu packages ghostscript)
243 #:use-module (gnu packages glib)
244 #:use-module (gnu packages gnome)
245 #:use-module (gnu packages gnupg)
246 #:use-module (gnu packages graphviz)
247 #:use-module (gnu packages gsasl)
248 #:use-module (gnu packages gtk)
249 #:use-module (gnu packages guile-xyz)
250 #:use-module (gnu packages haskell-xyz)
251 #:use-module (gnu packages icu4c)
252 #:use-module (gnu packages image)
253 #:use-module (gnu packages image-processing)
254 #:use-module (gnu packages imagemagick)
255 #:use-module (gnu packages inkscape)
256 #:use-module (gnu packages iso-codes)
257 #:use-module (gnu packages java)
258 #:use-module (gnu packages javascript)
259 #:use-module (gnu packages jupyter)
260 #:use-module (gnu packages kerberos)
261 #:use-module (gnu packages less)
262 #:use-module (gnu packages libevent)
263 #:use-module (gnu packages libffi)
264 #:use-module (gnu packages libusb)
265 #:use-module (gnu packages linux)
266 #:use-module (gnu packages llvm)
267 #:use-module (gnu packages machine-learning)
268 #:use-module (gnu packages man)
269 #:use-module (gnu packages markup)
270 #:use-module (gnu packages maths)
271 #:use-module (gnu packages messaging)
272 #:use-module (gnu packages monitoring)
273 #:use-module (gnu packages multiprecision)
274 #:use-module (gnu packages ncurses)
275 #:use-module (gnu packages networking)
276 #:use-module (gnu packages node)
277 #:use-module (gnu packages nss)
278 #:use-module (gnu packages openstack)
279 #:use-module (gnu packages pcre)
280 #:use-module (gnu packages pdf)
281 #:use-module (gnu packages perl)
282 #:use-module (gnu packages photo)
283 #:use-module (gnu packages pkg-config)
284 #:use-module (gnu packages protobuf)
285 #:use-module (gnu packages python)
286 #:use-module (gnu packages python-build)
287 #:use-module (gnu packages python-check)
288 #:use-module (gnu packages python-compression)
289 #:use-module (gnu packages python-crypto)
290 #:use-module (gnu packages python-science)
291 #:use-module (gnu packages python-web)
292 #:use-module (gnu packages qt)
293 #:use-module (gnu packages rdf)
294 #:use-module (gnu packages readline)
295 #:use-module (gnu packages regex)
296 #:use-module (gnu packages rpc)
297 #:use-module (gnu packages rust)
298 #:use-module (gnu packages rust-apps)
299 #:use-module (gnu packages scanner)
300 #:use-module (gnu packages search)
301 #:use-module (gnu packages serialization)
302 #:use-module (gnu packages shells)
303 #:use-module (gnu packages sphinx)
304 #:use-module (gnu packages ssh)
305 #:use-module (gnu packages statistics)
306 #:use-module (gnu packages task-management)
307 #:use-module (gnu packages tcl)
308 #:use-module (gnu packages tex)
309 #:use-module (gnu packages texinfo)
310 #:use-module (gnu packages time)
311 #:use-module (gnu packages tls)
312 #:use-module (gnu packages tree-sitter)
313 #:use-module (gnu packages valgrind)
314 #:use-module (gnu packages version-control)
315 #:use-module (gnu packages video)
316 #:use-module (gnu packages web)
317 #:use-module (gnu packages wxwidgets)
318 #:use-module (gnu packages xdisorg)
319 #:use-module (gnu packages xml)
320 #:use-module (gnu packages xorg)
321 #:use-module (gnu packages)
322 #:use-module (guix build-system cargo)
323 #:use-module (guix build-system cmake)
324 #:use-module (guix build-system copy)
325 #:use-module (guix build-system gnu)
326 #:use-module (guix build-system meson)
327 #:use-module (guix build-system pyproject)
328 #:use-module (guix deprecation)
329 #:use-module (guix download)
330 #:use-module (guix gexp)
331 #:use-module (guix git-download)
332 #:use-module (guix hg-download)
333 #:use-module ((guix licenses) #:prefix license:)
334 #:use-module (guix packages)
335 #:use-module (guix utils)
336 #:use-module (ice-9 match)
337 #:use-module (srfi srfi-1)
338 #:use-module (srfi srfi-26))
339
340(define-public python-aenum
341 (package
342 (name "python-aenum")
343 (version "3.1.17")
344 (source
345 (origin
346 (method git-fetch)
347 (uri (git-reference
348 (url "https://github.com/ethanfurman/aenum")
349 (commit version)))
350 (file-name (git-file-name name version))
351 (sha256
352 (base32 "0nygn64ydkvlpz9hw1f26z8w1dk7bws8qsirwkxyfw99vpbzlz3v"))))
353 (build-system pyproject-build-system)
354 (arguments
355 (list
356 #:phases
357 #~(modify-phases %standard-phases
358 (add-after 'unpack 'fix
359 (lambda _
360 (substitute* "aenum/_py2.py"
361 (("raise exc.*")
362 "raise exc.with_traceback(tb)")))))
363 #:tests? #f)) ;no tests
364 (native-inputs (list python-setuptools))
365 (home-page "https://github.com/ethanfurman/aenum")
366 (synopsis
367 "Support for advanced enumerations, namedtuples and namedconstants")
368 (description
369 "AEnum is a set of symbolic names (members) bound to unique, constant
370values. Within an enumeration, the members can be compared by identity, and
371the enumeration itself can be iterated over. There is built-in support for
372unique values, multiple values, auto-numbering, and suspension of aliasing
373(members with the same value are not identical), plus the ability to have
374values automatically bound to attributes.")
375 (license license:bsd-3)))
376
377(define-public python-accumulation-tree
378 ;; Only minor releases (0.x) are tagged, not patch versions.
379 (let ((commit "3617051f952ce12385c015be8e3d052d1883f17a")
380 (revision "0"))
381 (package
382 (name "python-accumulation-tree")
383 (version (git-version "0.6.4" revision commit))
384 (source
385 (origin
386 (method git-fetch)
387 (uri (git-reference
388 (url "https://github.com/tkluck/accumulation_tree")
389 (commit commit)))
390 (file-name (git-file-name name version))
391 (sha256
392 (base32 "0bgqy07rpiyz60y8nfh8mha38l650x25l4bbbv6fx42czw7kzhbx"))
393 (modules '((guix build utils)))
394 (snippet ;use src layout for isolated tests
395 #~(let* ((src "src/")
396 (old "accumulation_tree/")
397 (new (string-append src old)))
398 (mkdir src)
399 (rename-file old new)
400 (substitute* "setup.py"
401 (("packages=" all)
402 (string-append "package_dir={'': '" src "'}, " all))
403 ((old)
404 new))))))
405 (build-system pyproject-build-system)
406 (arguments
407 (list #:test-backend #~'custom
408 #:test-flags #~'("-m" "doctest" "README.md" "tests.md")))
409 (native-inputs (list python-cloudpickle python-cython python-setuptools))
410 (home-page "https://github.com/tkluck/accumulation_tree")
411 (synopsis "Red-black tree with fast value accumulation in a key range")
412 (description
413 "This Python package implements a red-black tree which also stores
414partial aggregations at each node, making getting aggregations
415of key range slices an O(log(N)) operation.
416
417This data structure is very similar to a binary indexed tree,
418with heap allocation instead of a flat array to represent a tree.")
419 (license license:expat))))
420
421(define-public python-anaconda-cli-base
422 (package
423 (name "python-anaconda-cli-base")
424 (version "0.8.1")
425 (source
426 (origin
427 (method url-fetch)
428 (uri (pypi-uri "anaconda_cli_base" version))
429 (sha256
430 (base32 "0r2cvz99vrvcm399qsfxiak5qb3mbr0kbvdrkbnm20l9lq2g18zr"))))
431 (build-system pyproject-build-system)
432 (native-inputs
433 (list python-hatch-vcs
434 python-hatchling
435 python-pytest
436 python-pytest-mock
437 python-setuptools-scm
438 python-types-requests))
439 (propagated-inputs
440 (list python-click
441 python-packaging
442 python-pydantic-settings
443 python-readchar
444 python-rich
445 python-tomli
446 python-tomlkit
447 python-typer))
448 (home-page "https://anaconda.github.io/anaconda-cli-base/")
449 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
450 (description
451 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
452 (license license:bsd-3)))
453
454(define-public python-annexremote
455 (package
456 (name "python-annexremote")
457 (version "1.6.6")
458 (source
459 (origin
460 (method git-fetch)
461 (uri (git-reference
462 (url "https://github.com/Lykos153/AnnexRemote")
463 (commit (string-append "v" version))))
464 (file-name (git-file-name name version))
465 (sha256
466 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
467 (build-system pyproject-build-system)
468 (native-inputs
469 (list python-pytest
470 python-setuptools
471 python-setuptools-scm))
472 (home-page "https://github.com/Lykos153/AnnexRemote")
473 (synopsis "Helper module to easily develop git-annex special remotes")
474 (description
475 "This package provides a helper module to develop special remotes for
476git-annex. AnnexRemote implements the line-based external special remote
477protocol of git-annex, while leaving the behavior of the remote up to the
478user.")
479 (license license:gpl3)))
480
481(define-public python-annotated-doc
482 (package
483 (name "python-annotated-doc")
484 (version "0.0.4")
485 (source
486 (origin
487 (method git-fetch)
488 (uri (git-reference
489 (url "https://github.com/fastapi/annotated-doc")
490 (commit version)))
491 (file-name (git-file-name name version))
492 (sha256
493 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
494 (build-system pyproject-build-system)
495 (native-inputs
496 (list python-pytest
497 python-pdm-backend))
498 (home-page "https://github.com/fastapi/annotated-doc")
499 (synopsis "Annotated for some Python objects")
500 (description
501 "This package implements a functionality for document parameters, class
502attributes, return types, and variables inline, with
503Annotated.")
504 (license license:expat)))
505
506(define-public python-archspec
507 (package
508 (name "python-archspec")
509 (version "0.2.5")
510 (source
511 (origin
512 (method git-fetch)
513 (uri (git-reference
514 (url "https://github.com/archspec/archspec")
515 (commit (string-append "v" version))
516 (recursive? #t)))
517 (file-name (git-file-name name version))
518 (sha256
519 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
520 (build-system pyproject-build-system)
521 (native-inputs
522 (list python-jsonschema
523 python-poetry-core
524 python-pytest))
525 (home-page "https://github.com/archspec/archspec")
526 (synopsis "Library to query system architecture")
527 (description
528 "Archspec offers human-readable labels for system architecture aspects.
529These aspects include CPU, network fabrics, etc. In addition, it offers
530APIs to detect, query, and compare them.")
531 (license license:expat)))
532
533(define-public python-astar
534 ;; The Git repository has no tag.
535 (let ((commit "b48388f5fa7dc1e5069ff85b05f0ad72ea8d5e93")
536 (revision "0"))
537 (package
538 (name "python-astar")
539 (version (git-version "0.99" revision commit))
540 (source
541 (origin
542 (method git-fetch)
543 (uri (git-reference
544 (url "https://github.com/jrialland/python-astar")
545 (commit commit)))
546 (file-name (git-file-name name version))
547 (sha256
548 (base32 "1gc4r3xmvw7hgqfadr2cz024ywbzmfak319cdkahd3dzpvyh404q"))))
549 (build-system pyproject-build-system)
550 ;; Despite pytest being listed in tool.poetry.group.dev.dependencies,
551 ;; the test suite has been written for unittest.
552 (native-inputs (list python-poetry-core))
553 (home-page "https://github.com/jrialland/python-astar")
554 (synopsis "Implementation of the A* search algorithm")
555 (description
556 "The @code{astar} Python package provide a generic implementation
557of the A* graph traversal and pathfinding algorithm.")
558 (license license:bsd-3))))
559
560(define-public python-asyncclick
561 (package
562 (name "python-asyncclick")
563 (version "8.3.0.3")
564 (source
565 (origin
566 (method url-fetch)
567 (uri (pypi-uri "asyncclick" version))
568 (sha256
569 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
570 (build-system pyproject-build-system)
571 ;; tests: 1418 passed, 21 skipped, 1 xfailed
572 (native-inputs
573 (list less
574 python-flit-core
575 python-pytest
576 python-trio))
577 (propagated-inputs
578 (list python-anyio))
579 (home-page "https://github.com/python-trio/asyncclick")
580 (synopsis "Python composable command line utility, trio-compatible version ")
581 (description
582 "AsyncClick is a fork of Click that works well with anyio, Trio, or
583asyncio.")
584 (license license:bsd-3)))
585
586(define-public python-asyncstdlib
587 (package
588 (name "python-asyncstdlib")
589 (version "3.13.0")
590 (source
591 (origin
592 (method url-fetch)
593 (uri (pypi-uri "asyncstdlib" version))
594 (sha256
595 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
596 (build-system pyproject-build-system)
597 (native-inputs (list python-flit-core python-pytest))
598 (home-page "https://asyncstdlib.readthedocs.io")
599 (synopsis "Compatibility layer between the Python stdlib and @code{async}
600callables")
601 (description
602 "The @code{asyncstdlib} library re-implements functions and classes of
603the Python standard library to make them compatible with @code{async}
604callables, iterables and context managers. It is fully agnostic to
605@code{async} event loops and seamlessly works with @code{asyncio}, third-party
606libraries such as @code{trio}, as well as any custom @code{async} event
607loop.")
608 (license license:expat)))
609
610(define-public python-awesomeversion
611 (package
612 (name "python-awesomeversion")
613 (version "24.6.0")
614 (source
615 (origin
616 (method git-fetch)
617 (uri (git-reference
618 (url "https://github.com/ludeeus/awesomeversion")
619 (commit version)))
620 (file-name (git-file-name name version))
621 (sha256
622 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
623 (modules '((guix build utils)))
624 (snippet #~(substitute* "pyproject.toml"
625 (("version = \"0\"")
626 (format #f "version = \"~a\"" #$version))))))
627 (build-system pyproject-build-system)
628 (native-inputs
629 (list python-poetry-core
630 python-pytest
631 python-pytest-snapshot))
632 (home-page "https://github.com/ludeeus/awesomeversion")
633 (synopsis "Create and compare version objects")
634 (description
635 "This package provides a way to make anything a version object, and
636compare against a vast section of other version formats.")
637 (license license:expat)))
638
639(define-public python-awkward-cpp
640 (package
641 (name "python-awkward-cpp")
642 ;; TODO: any higher versions need pybind11 >= 3, see:
643 ;; <https://codeberg.org/guix/guix/pulls/4696>.
644 (version "47")
645 (source
646 (origin
647 (method url-fetch)
648 (uri (pypi-uri "awkward_cpp" version))
649 (sha256
650 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
651 (build-system pyproject-build-system)
652 ;; tests: 22304 passed, 524 skipped
653 (native-inputs
654 (list cmake-minimal
655 pybind11-2
656 python-pytest
657 python-scikit-build-core))
658 (propagated-inputs
659 (list python-numpy))
660 (home-page "https://awkward-array.org/")
661 (synopsis "CPU kernels and compiled extensions for Awkward Array")
662 (description "Awkward CPP provides precompiled routines for the awkward
663package. It is not useful on its own, only as a dependency for awkward.")
664 (license license:bsd-3)))
665
666(define-public python-awkward
667 (package
668 (name "python-awkward")
669 (version "2.8.5")
670 (source
671 (origin
672 (method url-fetch)
673 (uri (pypi-uri "awkward" version))
674 (sha256
675 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
676 (build-system pyproject-build-system)
677 (arguments
678 (list
679 ;; tests: 2798 passed, 156 skipped
680 #:test-flags
681 ;; CUDA is and requires proprietary software.
682 #~(list "--ignore=tests-cuda-kernels/"
683 "--ignore=tests-cuda/")))
684 (native-inputs
685 (list python-hatch-fancy-pypi-readme
686 python-hatchling
687 python-pytest))
688 (propagated-inputs
689 (list python-awkward-cpp
690 python-fsspec
691 python-importlib-metadata
692 python-numpy
693 python-packaging))
694 (home-page "https://awkward-array.org/")
695 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
696 (description "Awkward Array is a library for nested, variable-sized data,
697including arbitrary-length lists, records, mixed types, and missing data,
698using NumPy-like idioms.")
699 (license license:bsd-3)))
700
701(define-public python-bracex
702 (package
703 (name "python-bracex")
704 (version "2.6")
705 (source
706 (origin
707 (method git-fetch)
708 (uri (git-reference
709 (url "https://github.com/facelessuser/bracex")
710 (commit version)))
711 (file-name (git-file-name name version))
712 (sha256
713 (base32 "1j717bsjr3ms4snzrbv4izbblcwgdk1lzxzi2cjhr9365zgz4kdk"))))
714 (build-system pyproject-build-system)
715 (native-inputs
716 (list python-hatchling
717 python-pytest))
718 (home-page "https://facelessuser.github.io/bracex/")
719 (synopsis "Bash-style brace expansion for Python")
720 (description
721 "Bracex is a brace expansion library for Python that implements
722Bash-style brace expansion. It can generate strings from patterns like
723@code{@{a,b,c@}} or @code{@{1..10@}}.")
724 (license license:expat)))
725
726(define-public python-bresenham
727 (package
728 (name "python-bresenham")
729 (version "0.2.1")
730 (source
731 (origin
732 (method git-fetch)
733 (uri (git-reference
734 (url "https://github.com/encukou/bresenham")
735 (commit (string-append "v" version))))
736 (file-name (git-file-name name version))
737 (sha256
738 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
739 (build-system pyproject-build-system)
740 (native-inputs
741 (list python-pytest
742 python-setuptools
743 python-wheel))
744 (home-page "https://github.com/encukou/bresenham")
745 (synopsis "Implementation of Bresenham's line drawing algorithm")
746 (description
747 "This package provides a Python implementation of
748@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
749line drawing algorithm}.")
750 (license license:expat)))
751
752(define-public python-catppuccin
753 (package
754 (name "python-catppuccin")
755 (version "2.5.0")
756 (source
757 (origin
758 (method url-fetch)
759 (uri (pypi-uri "catppuccin" version))
760 (sha256
761 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
762 (build-system pyproject-build-system)
763 (native-inputs
764 (list python-hatchling python-pytest
765 ;; These are optional dependencies but required for tests.
766 python-matplotlib python-pygments python-rich))
767 (home-page "https://github.com/catppuccin/python")
768 (synopsis "Pastel palette for Python libraries")
769 (description "Catppuccin for Python is a soothing pastel palette for Python
770libraries. It aims to be the middle ground between low and high contrast
771themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
772 (license license:expat)))
773
774(define-public python-calmjs-parse
775 (package
776 (name "python-calmjs-parse")
777 (version "1.3.3")
778 (source
779 (origin
780 (method git-fetch)
781 (uri (git-reference
782 (url "https://github.com/calmjs/calmjs.parse/")
783 (commit version)))
784 (file-name (git-file-name name version))
785 (sha256
786 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
787 (build-system pyproject-build-system)
788 ;; tests: 797 passed, 1 warning
789 (native-inputs (list python-pytest python-setuptools))
790 (propagated-inputs (list python-ply))
791 (home-page "https://github.com/calmjs/calmjs.parse/")
792 (synopsis "Parsers for ECMA standards")
793 (description
794 "@code{Calmjs-parse} is a collection of helper libraries for
795understanding ECMA script.")
796 (license license:expat)))
797
798(define-public python-chameleon
799 (package
800 (name "python-chameleon")
801 (version "4.6.0")
802 (source
803 (origin
804 (method url-fetch)
805 (uri (pypi-uri "Chameleon" version))
806 (sha256
807 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
808 (build-system pyproject-build-system)
809 (native-inputs
810 (list python-pytest
811 python-setuptools))
812 (home-page "https://chameleon.readthedocs.io")
813 (synopsis "Fast HTML/XML Template Compiler")
814 (description
815 "Chameleon is an HTML/XML template engine for Python. It uses the page
816templates language.")
817 ;; Project is duo licensed, see: LICENSE.txt.
818 (license (list license:zpl2.1
819 license:psfl))))
820
821(define-public python-click-extra
822 (package
823 (name "python-click-extra")
824 (version "8.1.4")
825 (source
826 (origin
827 (method git-fetch)
828 (uri (git-reference
829 (url "https://github.com/kdeldycke/click-extra")
830 (commit (string-append "v" version))))
831 (file-name (git-file-name name version))
832 (sha256
833 (base32 "1mglhfrmwq616irga69vv206bf3d20kp1jm8fvhgcidj53cxygj7"))))
834 (build-system pyproject-build-system)
835 ;; Upstream uses uv-build which is not yet available in Guix.
836 (arguments
837 (list
838 #:build-backend "setuptools.build_meta"
839 #:test-flags
840 ;; Skip the network tests.
841 #~(list "-m" "not network")
842 #:phases
843 ;; The setuptools backend used here (in place of upstream's
844 ;; uv-build) installs only ``*.py``; declare the data files loaded
845 ;; at import time as package data.
846 #~(modify-phases %standard-phases
847 (add-after 'unpack 'declare-package-data
848 (lambda _
849 (substitute* "pyproject.toml"
850 (("^\\[build-system\\]")
851 (string-append
852 "[tool.setuptools.package-data]\n"
853 "click_extra = [\"*.toml\", \"py.typed\"]\n"
854 "\n[build-system]"))))))))
855
856 (native-inputs
857 ;; Optional libraries imported at module level by the test suite.
858 (list python-hjson
859 python-jsonschema
860 python-pygments
861 python-pytest
862 python-pytest-httpserver
863 python-pyyaml
864 python-requests
865 python-setuptools
866 python-tomlkit
867 python-xmltodict))
868 (propagated-inputs
869 (list python-boltons
870 python-click
871 python-cloup
872 python-deepmerge
873 python-extra-platforms
874 python-tabulate
875 python-wcmatch
876 python-wcwidth))
877 (home-page "https://kdeldycke.github.io/click-extra/")
878 (synopsis "Drop-in replacement for Click to build colorful CLIs")
879 (description
880 "Click Extra extends the Click framework with colored help screens,
881configuration file support, table rendering, and platform detection. It
882serves as a drop-in replacement adding features for user-friendly command-line
883interfaces.")
884 (license license:gpl2+)))
885
886(define-public python-conda-content-trust
887 (package
888 (name "python-conda-content-trust")
889 (version "0.2.0")
890 (source
891 (origin
892 (method git-fetch)
893 (uri (git-reference
894 (url "https://github.com/conda/conda-content-trust")
895 (commit version)))
896 (file-name (git-file-name name version))
897 (sha256
898 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
899 (build-system pyproject-build-system)
900 (arguments
901 (list
902 #:test-flags
903 ;; XXX: Not packaged yet:
904 ;; <https://github.com/secure-systems-lab/securesystemslib>.
905 ;;
906 ;; ImportError: The securesystemslib library is required, which appears
907 ;; to be unavailable.
908 #~(list #$@(map (lambda (test) (string-append "--deselect="
909 "tests/test_root.py::"
910 test))
911 (list "test_sign_root_metadata_dict_via_gpg"
912 "test_sign_root_metadata_via_gpg"
913 "test_gpg_pubkey_in_ssl_format")))))
914 (native-inputs
915 (list python-hatch-vcs
916 python-hatchling
917 python-pytest))
918 (propagated-inputs
919 (list python-cryptography))
920 (home-page "https://github.com/conda/conda-content-trust")
921 (synopsis "Signing and verification tools for Conda")
922 (description
923 "This package implements a functionalit of signing and verification tools
924for Conda. @url{https://theupdateframework.io/, Based on The Update
925Framework (TUF)}, conda-content-trust is intended to ensure that when users in
926the conda ecosystem obtain a package or data about that package, they can know
927whether or not it is trustworthy (e.g. originally comes from a reliable source
928and has not been tampered with). A basic library and basic CLI are included
929to provide signing, verification, and trust delegation functionality.")
930 (license license:bsd-3)))
931
932(define-public python-conda-inject
933 (package
934 (name "python-conda-inject")
935 (version "1.3.2")
936 (source
937 (origin
938 (method git-fetch)
939 (uri (git-reference
940 (url "https://github.com/koesterlab/conda-inject")
941 (commit (string-append "v" version))))
942 (file-name (git-file-name name version))
943 (sha256
944 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
945 (build-system pyproject-build-system)
946 (arguments
947 (list #:tests? #f)) ; tests require setting up Conda
948 (native-inputs
949 (list python-poetry-core))
950 (propagated-inputs
951 (list python-pyyaml))
952 (home-page "https://github.com/koesterlab/conda-inject")
953 (synopsis "Inject a conda environment into the current python environment")
954 (description
955 "This package provides helper functions for injecting a conda
956environment into the current python environment (by modifying @code{sys.path},
957without actually changing the current python environment).")
958 (license license:expat)))
959
960(define-public python-copydetect
961 (package
962 (name "python-copydetect")
963 (version "0.5.0")
964 (source
965 (origin
966 (method git-fetch)
967 (uri (git-reference
968 (url "https://github.com/blingenf/copydetect")
969 (commit version)))
970 (sha256
971 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
972 (build-system pyproject-build-system)
973 (propagated-inputs (list python-jinja2
974 python-matplotlib
975 python-numpy
976 python-pygments
977 python-tqdm))
978 (native-inputs (list python-setuptools
979 python-pytest
980 python-wheel))
981 (home-page "https://github.com/blingenf/copydetect")
982 (synopsis "Code plagiarism detection tool")
983 (description "Copydetect is a tool to detect likely instances of plagiarism
984based on the winnowing algorithm. It takes a list of directories as input and
985generates an HTML report displaying copied slices as output.")
986 (license license:expat)))
987
988(define-public python-couleur
989 (package
990 (name "python-couleur")
991 (version "0.7.4")
992 (source
993 (origin
994 (method url-fetch)
995 (uri (pypi-uri "couleur" version))
996 (sha256
997 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
998 (build-system pyproject-build-system)
999 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
1000 (native-inputs
1001 (list python-setuptools
1002 python-wheel))
1003 (home-page "https://github.com/gabrielfalcao/couleur")
1004 (synopsis "ANSI terminal tool for Python")
1005 (description
1006 "This package provides an ANSI terminal tool for Python, colored shell
1007and other handy fancy features.")
1008 (license license:lgpl3+)))
1009
1010(define-public python-crc
1011 (package
1012 (name "python-crc")
1013 (version "7.1.0")
1014 (source
1015 (origin
1016 (method git-fetch)
1017 (uri (git-reference
1018 (url "https://github.com/Nicoretti/crc/")
1019 (commit version)))
1020 (file-name (git-file-name name version))
1021 (sha256
1022 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
1023 (build-system pyproject-build-system)
1024 (native-inputs
1025 (list python-poetry-core
1026 python-pytest
1027 python-wheel))
1028 (home-page "https://nicoretti.github.io/crc/")
1029 (synopsis "Pure Python CRC library")
1030 (description
1031 "This library computes and verifies @acronym{Cyclic Redundancy Check,
1032CRC} checksums, using predefined and custom CRC configurations.
1033
1034Configurations:
1035@table @asis
1036@item CRC8
1037 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
1038@item CRC16
1039 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
1040@item CRC32
1041 CRC32 AUTOSAR BZIP2 POSIX
1042@item CRC64
1043 CRC64
1044@end table")
1045 (license license:bsd-2)))
1046
1047(define-public python-cron-converter
1048 (package
1049 (name "python-cron-converter")
1050 (version "1.3.1")
1051 (source
1052 (origin
1053 (method git-fetch)
1054 (uri (git-reference
1055 (url "https://github.com/Sonic0/cron-converter")
1056 (commit (string-append "v" version))))
1057 (file-name (git-file-name name version))
1058 (sha256
1059 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
1060 (build-system pyproject-build-system)
1061 (arguments
1062 (list #:test-backend #~'unittest
1063 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
1064 (native-inputs
1065 (list python-dateutil
1066 python-setuptools))
1067 (propagated-inputs
1068 (list python-dateutil))
1069 (home-page "https://github.com/Sonic0/cron-converter")
1070 (synopsis "Cron string parser and scheduler for Python")
1071 (description
1072 "Cron-converter provides a Cron string parser (from string/lists to
1073string/lists) and iteration for the datetime object with a cron like format.")
1074 (license license:expat)))
1075
1076(define-public python-curtsies
1077 (package
1078 (name "python-curtsies")
1079 (version "0.4.3")
1080 (source
1081 (origin
1082 (method url-fetch)
1083 (uri (pypi-uri "curtsies" version))
1084 (sha256
1085 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
1086 (build-system pyproject-build-system)
1087 (native-inputs
1088 (list python-pyte
1089 python-pytest
1090 python-setuptools
1091 python-wheel))
1092 (propagated-inputs
1093 (list python-blessed
1094 python-cwcwidth))
1095 (home-page "https://github.com/bpython/curtsies")
1096 (synopsis "Library for curses-like terminal interaction with colored strings")
1097 (description
1098 "Curtsies is a Python library for interacting with the terminal. It
1099features string-like objects which carry formatting information, per-line
1100fullscreen terminal rendering, and keyboard input event reporting.")
1101 (license license:expat)))
1102
1103(define-public python-customtkinter
1104 (package
1105 (name "python-customtkinter")
1106 (version "5.2.2")
1107 (source
1108 (origin
1109 (method git-fetch)
1110 (uri (git-reference
1111 (url "https://github.com/TomSchimansky/CustomTkinter")
1112 (commit (string-append "v" version))))
1113 (file-name (git-file-name name version))
1114 (sha256
1115 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
1116 (build-system pyproject-build-system)
1117 (arguments
1118 (list
1119 #:phases
1120 #~(modify-phases %standard-phases
1121 (add-before 'check 'start-xorg-server
1122 (lambda _
1123 (setenv "HOME" "/tmp")
1124 ;; The test suite requires a running X server.
1125 (system "Xvfb :99 -screen 0 1024x768x24 &")
1126 (setenv "DISPLAY" ":99.0")))
1127 (replace 'check
1128 (lambda* (#:key tests? #:allow-other-keys)
1129 (when tests?
1130 (with-directory-excursion "test"
1131 (invoke "python" "unit_tests/test_all.py"))))))))
1132 (propagated-inputs
1133 (list (list python "tk")
1134 python-darkdetect
1135 python-packaging))
1136 (native-inputs
1137 (list python-setuptools
1138 xorg-server-for-tests))
1139 (home-page "https://customtkinter.tomschimansky.com")
1140 (synopsis
1141 "Python @acronym{User Interface, UI} library based on Tkinter")
1142 (description
1143 "CustomTkinter provides fully customizable widgets, created and used
1144like normal Tkinter widgets, which can also be used in combination with normal
1145Tkinter elements.")
1146 (license license:expat)))
1147
1148(define-public python-cyclopts
1149 (package
1150 (name "python-cyclopts")
1151 (version "4.14.0")
1152 (source
1153 (origin
1154 (method git-fetch)
1155 (uri (git-reference
1156 (url "https://github.com/BrianPugh/cyclopts")
1157 (commit (string-append "v" version))))
1158 (file-name (git-file-name name version))
1159 (sha256
1160 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1161 (build-system pyproject-build-system)
1162 (arguments
1163 (list
1164 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1165 #:test-flags
1166 #~(list #$@(map (lambda (test) (string-append "--deselect="
1167 "tests/completion/"
1168 "test_bash.py::"
1169 test))
1170 (list "test_list_path_multi_positional_default_case"
1171 "test_eq_form_path_completion"
1172 "test_bash_path_completion_reflects_caller_cwd"))
1173 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1174 (native-inputs
1175 (list python-docutils
1176 python-hatch-vcs
1177 python-hatchling
1178 python-mkdocs
1179 python-pexpect
1180 python-pydantic
1181 python-pytest
1182 python-pytest-mock
1183 python-pyyaml
1184 python-sphinx
1185 python-syrupy
1186 python-toml
1187 python-trio))
1188 (propagated-inputs
1189 (list python-attrs
1190 python-docstring-parser
1191 python-rich
1192 python-rich-rst
1193 python-tomli
1194 python-typing-extensions))
1195 (home-page "https://github.com/BrianPugh/cyclopts")
1196 (synopsis "Intuitive, easy CLIs based on type hints")
1197 (description
1198 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1199that aims to provide an intuitive & efficient developer experience.")
1200 (license license:asl2.0)))
1201
1202(define-public python-darkdetect
1203 (package
1204 (name "python-darkdetect")
1205 (version "0.8.0")
1206 (source
1207 (origin
1208 (method url-fetch)
1209 (uri (pypi-uri "darkdetect" version))
1210 (sha256
1211 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1212 (build-system pyproject-build-system)
1213 (arguments
1214 (list
1215 #:tests? #f)) ;no tests in PyPI or Git.
1216 (native-inputs (list python-setuptools))
1217 (home-page "https://github.com/albertosottile/darkdetect")
1218 (synopsis "Detect OS dark mode from Python")
1219 (description
1220 "This package allows to detect if the user is using Dark Mode.")
1221 (license license:bsd-3)))
1222
1223(define-public python-decopatch
1224 (package
1225 (name "python-decopatch")
1226 (version "1.4.10")
1227 (source
1228 (origin
1229 (method url-fetch)
1230 (uri (pypi-uri "decopatch" version))
1231 (sha256
1232 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1233 (build-system pyproject-build-system)
1234 (arguments
1235 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1236 (native-inputs
1237 (list python-setuptools
1238 python-setuptools-scm))
1239 (propagated-inputs
1240 (list python-makefun))
1241 (home-page "https://github.com/smarie/python-decopatch")
1242 (synopsis "Create decorators easily in Python")
1243 (description
1244 "This package provide implements a functionality to simplify writing
1245decorators in Python.")
1246 (license license:bsd-3)))
1247
1248(define-public python-discovery
1249 (package
1250 (name "python-discovery")
1251 (version "1.2.1")
1252 (source
1253 (origin
1254 (method git-fetch)
1255 (uri (git-reference
1256 (url "https://github.com/tox-dev/python-discovery")
1257 (commit version)))
1258 (file-name (git-file-name name version))
1259 (sha256
1260 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1261 (build-system pyproject-build-system)
1262 (arguments
1263 (list
1264 #:test-flags
1265 ;; assert []
1266 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1267 (native-inputs
1268 (list python-pytest
1269 python-pytest-mock
1270 python-hatchling
1271 python-hatch-vcs))
1272 (propagated-inputs
1273 (list python-filelock
1274 python-platformdirs))
1275 (home-page "https://github.com/tox-dev/python-discovery")
1276 (synopsis "Python interpreter discovery")
1277 (description
1278 "@code{python-discovery} is a library for discovering Python interpreters
1279installed on the current machine which may have multiple Python versions from
1280system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1281Windows registry (PEP 514). This library finds the right one.")
1282 (license license:expat)))
1283
1284(define-public python-distance
1285 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1286 (revision "0"))
1287 (package
1288 (name "python-distance")
1289 (version (git-version "0.1.3" revision commit))
1290 (source
1291 (origin
1292 (method git-fetch)
1293 (uri (git-reference
1294 (url "https://github.com/doukremt/distance")
1295 (commit commit)))
1296 (file-name (git-file-name name version))
1297 (sha256
1298 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1299 (build-system pyproject-build-system)
1300 (arguments
1301 (list #:test-backend #~'custom
1302 #:test-flags #~(list "tests/tests.py")))
1303 (native-inputs (list python-setuptools))
1304 (home-page "https://github.com/doukremt/distance")
1305 (synopsis "Utilities for comparing sequences")
1306 (description
1307 "This package provides helpers for computing similarities between
1308arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1309Sorensen distance, plus some bonuses. All distance computations are
1310implemented in pure Python, and most of them are also implemented in C.")
1311 (license license:gpl2+))))
1312
1313(define-public python-doi
1314 (package
1315 (name "python-doi")
1316 (version "0.2.0")
1317 (source
1318 (origin
1319 (method url-fetch)
1320 (uri (pypi-uri "python-doi" version))
1321 (sha256
1322 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1323 (build-system pyproject-build-system)
1324 (arguments
1325 (list #:test-flags
1326 #~(list "-vv"
1327 (string-append "-k not (test_validate_doi "
1328 "or test_get_real_url_from_doi)"))))
1329 (native-inputs
1330 (list python-pytest
1331 python-pytest-xdist
1332 python-setuptools
1333 python-sphinx
1334 python-sphinx-autobuild
1335 python-sphinx-rtd-theme))
1336 (home-page "https://github.com/papis/python-doi")
1337 (synopsis "Python package to work with Document Object Identifier (doi)")
1338 (description
1339 "Python package to work with Document Object Identifier (doi).")
1340 (license license:gpl3)))
1341
1342(define-public python-domdf-python-tools
1343 (package
1344 (name "python-domdf-python-tools")
1345 (version "3.10.0")
1346 (source
1347 (origin
1348 (method url-fetch)
1349 (uri (pypi-uri "domdf_python_tools" version))
1350 (sha256
1351 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1352 (build-system pyproject-build-system)
1353 (native-inputs (list python-hatch-requirements-txt))
1354 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1355 (propagated-inputs
1356 (list python-natsort
1357 python-typing-extensions))
1358 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1359 (synopsis "Helpful functions for Python")
1360 (description
1361 "This package provide helpful functions for Python's testing and
1362packaging tasks.")
1363 (license license:expat)))
1364
1365(define-public python-donfig
1366 (package
1367 (name "python-donfig")
1368 (version "0.8.1.post1")
1369 (source
1370 (origin
1371 (method git-fetch)
1372 (uri (git-reference
1373 (url "https://github.com/pytroll/donfig")
1374 (commit (string-append "v" version))))
1375 (file-name (git-file-name name version))
1376 (sha256
1377 (base32 "0hp6v9lh4gaym48ljvpb00cgcwssj306ypyszha2rlwb7mkknmj6"))))
1378 (build-system pyproject-build-system)
1379 (native-inputs
1380 (list python-cloudpickle
1381 python-pytest
1382 python-setuptools
1383 python-versioneer))
1384 (propagated-inputs
1385 (list python-pyyaml))
1386 (home-page "https://github.com/pytroll/donfig")
1387 (synopsis "Python package for configuring a python package")
1388 (description
1389 "Donfig is a Python library meant to make configuration easier for other
1390python packages. Donfig can be configured programmatically, by environment
1391variables, or from YAML files in standard locations. The below examples show
1392the basics of using donfig.")
1393 (license license:expat)))
1394
1395(define-public python-duet
1396 (package
1397 (name "python-duet")
1398 (version "0.2.9")
1399 (source
1400 (origin
1401 (method git-fetch)
1402 (uri (git-reference
1403 (url "https://github.com/google/duet")
1404 (commit (string-append "v" version))))
1405 (file-name (git-file-name name version))
1406 (sha256
1407 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1408 (build-system pyproject-build-system)
1409 (native-inputs (list python-pytest python-setuptools))
1410 (home-page "https://github.com/google/duet")
1411 (synopsis "Simple future-based async library for Python")
1412 (description
1413 "This package provides a simple @code{Future}-based async library for
1414Python. Duet uses a structured concurrency approach to async programming,
1415relying on the @code{Future} interface for parallelism. Duet also provides
1416a way to run async/await coroutines around those @code{Future}s. Unlike most
1417async libraries, duet is re-entrant.")
1418 (license license:asl2.0)))
1419
1420(define-public python-envs
1421 (package
1422 (name "python-envs")
1423 (version "1.4")
1424 (source
1425 (origin
1426 (method url-fetch)
1427 (uri (pypi-uri "envs" version))
1428 (sha256
1429 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1430 (build-system pyproject-build-system)
1431 (arguments
1432 (list #:test-backend #~'unittest))
1433 (native-inputs
1434 (list python-packaging python-poetry-core))
1435 (propagated-inputs
1436 (list python-click python-jinja2 python-terminaltables))
1437 (home-page "https://github.com/capless/envs")
1438 (synopsis "Easy access of environment variables from Python")
1439 (description
1440 "This package implements a functionality to access of environment
1441variables from Python with support for strings, booleans, list, tuples, and
1442dicts.")
1443 (license license:asl2.0)))
1444
1445(define-public python-exitcode
1446 (package
1447 (name "python-exitcode")
1448 (version "0.1.0")
1449 (source
1450 (origin
1451 (method url-fetch)
1452 (uri (pypi-uri "exitcode" version))
1453 (sha256
1454 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1455 (build-system pyproject-build-system)
1456 (arguments
1457 (list #:tests? #f)) ; no tests in PyPI or Git
1458 (native-inputs
1459 (list python-poetry-core
1460 python-setuptools))
1461 (home-page "https://github.com/rumpelsepp/exitcode")
1462 (synopsis "Preferred system exit codes as defined by sysexits.h")
1463 (description
1464 "This package implements a preferred system exit codes as defined by
1465@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1466Rust's @url{https://docs.rs/exitcode, exitcode}.")
1467 (license license:expat)))
1468
1469(define-public python-exrex
1470 (package
1471 (name "python-exrex")
1472 (version "0.12.0")
1473 (source
1474 (origin
1475 (method git-fetch)
1476 (uri (git-reference
1477 (url "https://github.com/asciimoo/exrex")
1478 (commit (string-append "v" version))))
1479 (file-name (git-file-name name version))
1480 (sha256
1481 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1482 (build-system pyproject-build-system)
1483 (arguments (list #:test-backend #~'custom
1484 #:test-flags #~'("tests.py")))
1485 (native-inputs (list python-setuptools))
1486 (home-page "https://github.com/asciimoo/exrex")
1487 (synopsis "Irregular methods for regular expressions")
1488 (description
1489 "Exrex is a command line tool and Python module that generates all,
1490or random, matching strings to a given regular expression.")
1491 (license license:agpl3+)))
1492
1493(define-public python-extra-platforms
1494 (package
1495 (name "python-extra-platforms")
1496 (version "13.0.1")
1497 (source
1498 (origin
1499 (method git-fetch)
1500 (uri (git-reference
1501 (url "https://github.com/kdeldycke/extra-platforms")
1502 (commit (string-append "v" version))))
1503 (file-name (git-file-name name version))
1504 (sha256
1505 (base32 "0mqyz6m1sdy6y7iz9yf63hljpbjvzcw16vda394b0w2pb41s5sv1"))))
1506 (build-system pyproject-build-system)
1507 (arguments
1508 (list
1509 #:build-backend "setuptools.build_meta"
1510 ;; Skip network tests and one that shells out to ``uv``.
1511 #:test-flags #~(list "-m" "not network"
1512 "--ignore=tests/test_sphinx_crossrefs.py")))
1513 (native-inputs
1514 (list python-pytest
1515 python-requests
1516 python-setuptools))
1517 (home-page "https://kdeldycke.github.io/extra-platforms/")
1518 (synopsis "Detection of architectures, platforms, and OS families")
1519 (description
1520 "Extra Platforms detects and identifies operating systems, platforms,
1521architectures, and OS families. It groups them by family for conditional
1522logic in cross-platform applications.")
1523 (license license:asl2.0)))
1524
1525(define-public python-ezdxf
1526 (package
1527 (name "python-ezdxf")
1528 (version "1.3.5")
1529 (source
1530 (origin
1531 (method git-fetch)
1532 (uri (git-reference
1533 (url "https://github.com/mozman/ezdxf")
1534 (commit (string-append "v" version))))
1535 (sha256
1536 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1537 (build-system pyproject-build-system)
1538 (native-inputs (list python-cython python-pillow python-pytest
1539 python-setuptools unzip))
1540 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1541 python-typing-extensions))
1542 (home-page "https://ezdxf.mozman.at/")
1543 (synopsis "Python library to read and write DXF drawings")
1544 (description "ezdxf is a Python package to create new DXF files and
1545read/modify/write existing DXF files.")
1546 (license license:expat)))
1547
1548(define-public python-fastnumbers
1549 (package
1550 (name "python-fastnumbers")
1551 (version "5.1.1")
1552 (source
1553 (origin
1554 (method url-fetch)
1555 (uri (pypi-uri "fastnumbers" version))
1556 (sha256
1557 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1558 (build-system pyproject-build-system)
1559 (native-inputs
1560 (list python-numpy
1561 python-pytest
1562 python-setuptools
1563 python-setuptools-scm))
1564 (home-page "https://github.com/SethMMorton/fastnumbers")
1565 (synopsis "Super-fast and clean conversions to numbers")
1566 (description
1567 "This package provides provides drop-in replacements for the Python
1568built-in @code{int} and @code{float} that are on par or faster with the Python
1569equivalents.")
1570 (license license:expat)))
1571
1572(define-public python-findpython
1573 (package
1574 (name "python-findpython")
1575 (version "0.7.0")
1576 (source
1577 (origin
1578 (method url-fetch)
1579 (uri (pypi-uri "findpython" version))
1580 (sha256
1581 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1582 (build-system pyproject-build-system)
1583 (native-inputs
1584 (list python-pdm-backend
1585 python-pytest))
1586 (propagated-inputs
1587 (list python-packaging
1588 python-platformdirs))
1589 (home-page "https://github.com/frostming/findpython")
1590 (synopsis "Find Python versions the system")
1591 (description
1592 "This package provides a utility to find Python versions on the current
1593system.")
1594 (license license:expat)))
1595
1596(define-public python-flexcache
1597 (package
1598 (name "python-flexcache")
1599 (version "0.3")
1600 (source
1601 (origin
1602 (method url-fetch)
1603 (uri (pypi-uri "flexcache" version))
1604 (sha256
1605 (base32 "0mh6c3s0ykmnnhzys72xq5ls4myzpz1y86fmz0ngw6v2l3aknx0q"))))
1606 (build-system pyproject-build-system)
1607 (native-inputs
1608 (list python-pytest
1609 python-pytest-mpl
1610 python-pytest-subtests
1611 python-setuptools
1612 python-setuptools-scm
1613 python-wheel))
1614 (propagated-inputs
1615 (list python-typing-extensions))
1616 (home-page "https://github.com/hgrecco/flexcache")
1617 (synopsis "Caching transformed versions of a source object")
1618 (description
1619 "This package implements a functionality to cache on disk the result of
1620expensive calculations. It was started as part of
1621@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1622 (license license:bsd-3)))
1623
1624(define-public python-flexparser
1625 (package
1626 (name "python-flexparser")
1627 (version "0.4")
1628 (source
1629 (origin
1630 (method url-fetch)
1631 (uri (pypi-uri "flexparser" version))
1632 (sha256
1633 (base32 "1cpn5scxnxbd2jrnany4znzzn9im5h5gwr59bp62rglman89hv96"))))
1634 (build-system pyproject-build-system)
1635 (native-inputs
1636 (list python-pytest
1637 python-pytest-mpl
1638 python-pytest-subtests
1639 python-setuptools
1640 python-setuptools-scm
1641 python-wheel))
1642 (propagated-inputs
1643 (list python-typing-extensions))
1644 (home-page "https://github.com/hgrecco/flexparser")
1645 (synopsis "Parsing made fun ... using typing")
1646 (description "This project provides a typed parser. It was started as
1647part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1648package. ")
1649 (license license:bsd-3)))
1650
1651(define-public python-fortranformat
1652 (package
1653 (name "python-fortranformat")
1654 (version "2.0.3")
1655 (source
1656 (origin
1657 (method git-fetch)
1658 (uri (git-reference
1659 (url "https://github.com/brendanarnold/py-fortranformat")
1660 (commit (string-append "v" version))))
1661 (file-name (git-file-name name version))
1662 (sha256
1663 (base32 "0k4lpj72a6zy1m5855w6b127q8h20c1xfr0x3gasqbkqqz65kli6"))))
1664 (build-system pyproject-build-system)
1665 (native-inputs
1666 (list python-poetry-core
1667 python-pytest))
1668 (home-page "https://github.com/brendanarnold/py-fortranformat")
1669 (synopsis "FORTRAN format interpreter for Python")
1670 (description
1671 "This package mimics FORTRAN textual IO in Python - generates text from a
1672Python list of variables or will read a line of text into Python variables
1673according to the FORTRAN format statement passed.")
1674 (license license:expat)))
1675
1676(define-public python-gest-api
1677 (package
1678 (name "python-gest-api")
1679 (version "0.1")
1680 (source
1681 (origin
1682 (method url-fetch)
1683 (uri (pypi-uri "gest_api" version))
1684 (sha256
1685 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1686 (build-system pyproject-build-system)
1687 (native-inputs
1688 (list python-pytest
1689 python-setuptools))
1690 (propagated-inputs
1691 (list python-pydantic))
1692 (home-page "https://github.com/campa-consortium/gest-api")
1693 (synopsis "Standardization for generators")
1694 (description
1695 "This package provides a standard for generating test points and
1696exchanging variables, objectives, and constraints in optimization problems.
1697
1698It is an effort to standardize the interface of the generators in optimization
1699libraries such as:
1700@itemize
1701@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1702high-level optimization in Python
1703@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1704scale, powered by @code{libEnsemble}
1705@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1706toolkit for coordinating asynchronous and dynamic ensembles of calculations
1707@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1708and execution of large, black-box optimization problems
1709@end itemize")
1710 (license license:bsd-3)))
1711
1712(define-public python-grapheme
1713 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1714 ;; branch.
1715 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1716 (revision "0"))
1717 (package
1718 (name "python-grapheme")
1719 (version (git-version "0.6.0" revision commit))
1720 (source
1721 (origin
1722 (method git-fetch)
1723 (uri (git-reference
1724 (url "https://github.com/alvinlindstam/grapheme")
1725 (commit commit)))
1726 (file-name (git-file-name name version))
1727 (sha256
1728 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1729 (build-system pyproject-build-system)
1730 (native-inputs
1731 (list python-pytest
1732 python-setuptools))
1733 (home-page "https://github.com/alvinlindstam/grapheme")
1734 (synopsis "Unicode grapheme helpers")
1735 (description
1736 "This package provides a functionality for working with user perceived
1737characters. More specifically, string manipulation and calculation functions
1738for working with grapheme cluster groups (graphemes) as defined by the
1739@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1740 (license license:expat))))
1741
1742(define-public python-halo
1743 (package
1744 (name "python-halo")
1745 (version "0.0.31")
1746 (source
1747 (origin
1748 (method url-fetch)
1749 (uri (pypi-uri "halo" version))
1750 (sha256
1751 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1752 (build-system pyproject-build-system)
1753 (arguments
1754 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1755 (native-inputs
1756 (list python-setuptools))
1757 (propagated-inputs
1758 (list python-colorama
1759 python-log-symbols
1760 python-six
1761 python-spinners
1762 python-termcolor))
1763 (home-page "https://github.com/manrajgrover/halo")
1764 (synopsis "Python library to display graphical spinners in the terminal")
1765 (description
1766 "Halo is a Python library to display graphical spinners in the terminal.
1767It also supports IPython/Jupyter.")
1768 (license license:expat)))
1769
1770(define-public python-hatch-argparse-manpage
1771 (package
1772 (name "python-hatch-argparse-manpage")
1773 (version "1.0.0")
1774 (source
1775 (origin
1776 (method git-fetch)
1777 (uri (git-reference
1778 (url "https://github.com/damonlynch/hatch-argparse-manpage")
1779 (commit (string-append "v" version))))
1780 (file-name (git-file-name name version))
1781 (sha256
1782 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
1783 (build-system pyproject-build-system)
1784 (arguments (list #:tests? #f)) ; No tests upstream.
1785 (native-inputs (list python-hatchling))
1786 (propagated-inputs (list python-argparse-manpage python-rich))
1787 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1788 (synopsis "Hatch build hook plugin to generate manual pages")
1789 (description
1790 "This package provides a build hook plugin for Hatch to automatically
1791 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1792by Pavel Raiskup.")
1793 (license license:gpl3+)))
1794
1795(define-public python-hatch-gettext
1796 (package
1797 (name "python-hatch-gettext")
1798 (version "1.1.0")
1799 (source
1800 (origin
1801 (method git-fetch)
1802 (uri (git-reference
1803 (url "https://github.com/damonlynch/hatch-gettext")
1804 (commit (string-append "v" version))))
1805 (file-name (git-file-name name version))
1806 (sha256
1807 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
1808 (build-system pyproject-build-system)
1809 (arguments (list #:tests? #f)) ; No tests upstream.
1810 (native-inputs (list python-hatchling))
1811 (propagated-inputs (list python-rich))
1812 (home-page "https://github.com/damonlynch/hatch-gettext")
1813 (synopsis "Hatch build hook plugin for GNU gettext")
1814 (description
1815 "This package provides a build hook plugin for Hatch that compiles
1816 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1817 (license license:gpl3+)))
1818
1819(define-public python-hatch-nodejs-version
1820 (package
1821 (name "python-hatch-nodejs-version")
1822 (version "0.4.0")
1823 (source
1824 (origin
1825 (method git-fetch)
1826 (uri (git-reference
1827 (url "https://github.com/agoose77/hatch-nodejs-version")
1828 (commit (string-append "v" version))))
1829 (file-name (git-file-name name version))
1830 (sha256
1831 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
1832 (build-system pyproject-build-system)
1833 (propagated-inputs (list python-hatchling))
1834 (native-inputs (list python-hatchling python-pytest))
1835 (home-page "https://github.com/agoose77/hatch-nodejs-version")
1836 (synopsis "Hatch plugin for versioning from a package.json file")
1837 (description "This package provides a hatch plugin for fetching a version
1838from a @code{package.json} file.")
1839 (license license:expat)))
1840
1841(define-public python-hatch-regex-commit
1842 (package
1843 (name "python-hatch-regex-commit")
1844 (version "0.0.4")
1845 (source
1846 (origin
1847 (method git-fetch)
1848 (uri (git-reference
1849 (url "https://github.com/frankie567/hatch-regex-commit")
1850 (commit (string-append "v" version))))
1851 (file-name (git-file-name name version))
1852 (sha256
1853 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
1854 (build-system pyproject-build-system)
1855 (arguments (list #:tests? #f)) ;test directory is empty
1856 (propagated-inputs (list python-hatchling))
1857 (native-inputs (list python-hatchling))
1858 (home-page "https://github.com/frankie567/hatch-regex-commit")
1859 (synopsis "Hatch plugin to create a commit and tag when bumping version")
1860 (description
1861 "This provides a plugin for Hatch that automatically creates a Git commit
1862and tag after version bumping.")
1863 (license license:expat)))
1864
1865;; TODO: Move to ci or task-runners, see:
1866;; <https://codeberg.org/guix/guix/issues/3096>.
1867(define-public python-huey
1868 (package
1869 (name "python-huey")
1870 (version "2.5.3")
1871 (source
1872 (origin
1873 (method git-fetch)
1874 (uri (git-reference
1875 (url "https://github.com/coleifer/huey")
1876 (commit version)))
1877 (file-name (git-file-name name version))
1878 (sha256
1879 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
1880 (build-system pyproject-build-system)
1881 (arguments
1882 (list
1883 #:phases
1884 #~(modify-phases %standard-phases
1885 (add-after 'unpack 'remove-which
1886 (lambda _
1887 (substitute* "huey/tests/test_kt_huey.py"
1888 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
1889 "has_ktserver = False"))))
1890 (replace 'check
1891 (lambda* (#:key tests? #:allow-other-keys)
1892 (when tests?
1893 (spawn "redis-server" '("redis-server"))
1894 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
1895 (native-inputs (list python-setuptools redis tzdata-for-tests))
1896 (propagated-inputs (list python-redis))
1897 (home-page "https://huey.readthedocs.io")
1898 (synopsis "Lightweight task queue for Python")
1899 (description
1900 "Huey is a lightweight task queue for Python applications. Huey
1901supports:
1902@itemize
1903@item Redis, SQLite, file-system, or in-memory storage
1904@item multi-process, multi-thread or greenlet task execution models
1905@item scheduling tasks to execute at a given time, or after a given delay
1906@item scheduling recurring tasks, like a crontab
1907@item automatically retrying tasks that fail
1908@item task prioritization
1909@item task result storage
1910@item task expiration
1911@item task locking
1912@item task pipelines and chains
1913@end itemize")
1914 (license license:expat)))
1915
1916(define-public python-id
1917 (package
1918 (name "python-id")
1919 (version "1.5.0")
1920 (source
1921 (origin
1922 (method url-fetch)
1923 (uri (pypi-uri "id" version))
1924 (sha256
1925 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
1926 (build-system pyproject-build-system)
1927 (native-inputs
1928 (list python-flit-core
1929 python-pretend
1930 python-pytest))
1931 (propagated-inputs
1932 (list python-requests))
1933 (home-page "https://github.com/di/id")
1934 (synopsis "Tool for generating OIDC identities")
1935 (description
1936 "This package provides a tool for generating @code{OIDC, OpenID Connect}
1937identities.")
1938 (license license:asl2.0)))
1939
1940(define-public python-iniparse
1941 (package
1942 (name "python-iniparse")
1943 (version "0.5.1")
1944 (source
1945 (origin
1946 (method git-fetch)
1947 (uri (git-reference
1948 (url "https://github.com/candlepin/python-iniparse")
1949 (commit version)))
1950 (file-name (git-file-name name version))
1951 (sha256
1952 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
1953 (build-system pyproject-build-system)
1954 (arguments
1955 (list
1956 #:test-backend #~'custom
1957 #:test-flags #~(list "runtests.py")
1958 #:phases
1959 #~(modify-phases %standard-phases
1960 (add-before 'check 'disable-tests
1961 (lambda _
1962 ;; XXX: Three tests failed to compare lists.
1963 (substitute* "tests/test_compat.py"
1964 (("test_read_returns_file_list")
1965 "disabled_test_read_returns_file_list")))))))
1966 (native-inputs
1967 (list python-setuptools))
1968 (home-page "https://github.com/candlepin/python-iniparse")
1969 (synopsis "Accessing and Modifying INI files")
1970 (description
1971 "iniparse is a INI parser for Python which is:
1972@itemize
1973@item Compatible with ConfigParser: Backward compatible implementations of
1974ConfigParser, RawConfigParser, and SafeConfigParser are included that are
1975API-compatible with the Python standard library.
1976@item Preserves structure of INI files: Order of sections & options,
1977indentation, comments, and blank lines are preserved as far as possible when
1978data is updated.
1979@item More convenient: Values can be accessed using dotted notation
1980(@code{cfg.user.name}), or using container syntax
1981(@code{cfg['user']['name']}).
1982@end itemize")
1983 (license license:expat)))
1984
1985(define-public python-inotify
1986 (package
1987 (name "python-inotify")
1988 (version "0.2.12")
1989 (source
1990 (origin
1991 (method git-fetch)
1992 (uri (git-reference
1993 (url "https://github.com/dsoprea/PyInotify")
1994 (commit version)))
1995 (file-name (git-file-name name version))
1996 (sha256
1997 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
1998 (build-system pyproject-build-system)
1999 (arguments
2000 (list
2001 #:phases
2002 #~(modify-phases %standard-phases
2003 (add-after 'unpack 'fix-requirements
2004 (lambda _
2005 (substitute* "inotify/resources/requirements.txt"
2006 (("build")
2007 "")))))))
2008 (native-inputs (list python-pytest python-setuptools))
2009 (propagated-inputs (list python-pyasyncore))
2010 (home-page "https://github.com/dsoprea/PyInotify")
2011 (synopsis "Linux filesystem activity monitor library for Python")
2012 (description
2013 "This package provides an efficient and elegant inotify (Linux filesystem
2014activity monitor) library for Python.")
2015 (license license:gpl2)))
2016
2017(define-public python-intervaltree
2018 (package
2019 (name "python-intervaltree")
2020 (version "3.1.0")
2021 (source
2022 (origin
2023 (method url-fetch)
2024 (uri (pypi-uri "intervaltree" version))
2025 (sha256
2026 (base32
2027 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
2028 (build-system pyproject-build-system)
2029 (arguments
2030 `(#:phases
2031 (modify-phases %standard-phases
2032 ;; pytest seems to have a check to make sure the user is testing
2033 ;; their checked-out code and not an installed, potentially
2034 ;; out-of-date copy. This is harmless here, since we just installed
2035 ;; the package, so we disable the check to avoid skipping tests
2036 ;; entirely.
2037 (add-before 'check 'import-mismatch-error-workaround
2038 (lambda _
2039 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
2040 #t)))))
2041 (propagated-inputs
2042 (list python-sortedcontainers))
2043 (native-inputs
2044 (list python-setuptools python-pytest))
2045 (home-page "https://github.com/chaimleib/intervaltree")
2046 (synopsis "Editable interval tree data structure")
2047 (description
2048 "This package provides a mutable, self-balancing interval tree
2049implementation for Python. Queries may be by point, by range overlap, or by
2050range envelopment. This library was designed to allow tagging text and time
2051intervals, where the intervals include the lower bound but not the upper
2052bound.")
2053 (license license:asl2.0)))
2054
2055(define-public python-jschon
2056 (package
2057 (name "python-jschon")
2058 (version "0.11.1")
2059 (source
2060 (origin
2061 (method git-fetch)
2062 (uri (git-reference
2063 (url "https://github.com/marksparkza/jschon/")
2064 (commit (string-append "v" version))
2065 (recursive? #t))) ;required for tests
2066 (sha256
2067 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
2068 (file-name (git-file-name name version))))
2069 (build-system pyproject-build-system)
2070 (propagated-inputs
2071 (list python-rfc3986))
2072 (native-inputs
2073 (list python-coverage
2074 python-hypothesis
2075 python-pytest
2076 python-pytest-benchmark
2077 python-pytest-httpserver
2078 python-requests
2079 python-setuptools))
2080 (home-page "https://jschon.readthedocs.io/")
2081 (synopsis "Object-oriented JSON Schema implementation for Python")
2082 (description
2083 "This package provides a JSON toolkit for Python developers.")
2084 (license license:expat)))
2085
2086(define-public python-jsonpath-ng
2087 (package
2088 (name "python-jsonpath-ng")
2089 (version "1.7.0" )
2090 (source
2091 (origin
2092 (method url-fetch)
2093 (uri (pypi-uri "jsonpath-ng" version))
2094 (sha256
2095 (base32 "0g5bpq02pl9mv7mbqixvnagq8f9v0jab6wqmbxw9rxsz9vyzgxgn"))))
2096 (build-system pyproject-build-system)
2097 (native-inputs
2098 (list python-pytest
2099 python-setuptools
2100 python-wheel))
2101 (propagated-inputs
2102 (list python-ply))
2103 (home-page "https://github.com/h2non/jsonpath-ng")
2104 (synopsis "JSONPath Next-Generation")
2105 (description
2106 "This package provides a final implementation of @code{JSONPath} for
2107Python that aims to be standard compliant, including arithmetic and binary
2108comparison operators, as defined in the original
2109@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
2110 (license license:asl2.0)))
2111
2112(define-public python-json-log-formatter
2113 (package
2114 (name "python-json-log-formatter")
2115 (version "1.1.1")
2116 (source
2117 (origin
2118 (method git-fetch)
2119 (uri (git-reference
2120 (url "https://github.com/marselester/json-log-formatter")
2121 (commit (string-append "v" version))))
2122 (file-name (git-file-name name version))
2123 (sha256
2124 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
2125 (build-system pyproject-build-system)
2126 (arguments
2127 (list
2128 #:phases
2129 #~(modify-phases %standard-phases
2130 (replace 'check
2131 (lambda* (#:key tests? #:allow-other-keys)
2132 (when tests?
2133 (invoke "pytest" "-s" "tests.py")))))))
2134 (native-inputs (list python-django
2135 python-pytest
2136 python-setuptools
2137 python-simplejson
2138 python-ujson
2139 python-wheel))
2140 (home-page "https://github.com/marselester/json-log-formatter")
2141 (synopsis "JSON log formatter")
2142 (description "The library helps you to store logs in JSON format.")
2143 (license license:expat)))
2144
2145(define-public python-keeper-secrets-manager-core
2146 ;; released from a monorepo with other packages following various versioning
2147 ;; schemes. This commit was selected because some failing tests were fixed
2148 ;; since the most recent release of the Python SDK packages.
2149 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2150 (revision "0"))
2151 (package
2152 (name "python-keeper-secrets-manager-core")
2153 (version (git-version "17.0.0" revision commit))
2154 (source
2155 (origin
2156 (method git-fetch)
2157 (uri (git-reference
2158 (url "https://github.com/Keeper-Security/secrets-manager")
2159 (commit commit)))
2160 (file-name (git-file-name name version))
2161 (sha256
2162 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2163 (build-system pyproject-build-system)
2164 (arguments
2165 (list
2166 #:phases
2167 #~(modify-phases %standard-phases
2168 (add-after 'unpack 'chdir
2169 (lambda _
2170 (chdir "sdk/python/core"))))))
2171 (propagated-inputs
2172 (list python-cryptography
2173 python-importlib-metadata
2174 python-requests))
2175 (native-inputs
2176 (list python-pytest
2177 python-setuptools))
2178 (home-page "https://github.com/Keeper-Security/secrets-manager")
2179 (synopsis "Keeper Secrets Manager for Python SDK")
2180 (description
2181 "The Keeper Secrets Manager Python SDK provides access to
2182@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
2183Management} services.")
2184 (license license:expat))))
2185
2186(define-public python-keeper-secrets-manager-helper
2187 ;; released alongside keeper-secrets-manager-core, but with a different
2188 ;; versioning scheme.
2189 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2190 (revision "0"))
2191 (package
2192 (name "python-keeper-secrets-manager-helper")
2193 (version (git-version "1.0.6" revision commit))
2194 (source
2195 (origin
2196 (method git-fetch)
2197 (uri (git-reference
2198 (url "https://github.com/Keeper-Security/secrets-manager")
2199 (commit commit)))
2200 (file-name (git-file-name name version))
2201 (sha256
2202 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2203 (build-system pyproject-build-system)
2204 (arguments
2205 (list
2206 #:phases
2207 #~(modify-phases %standard-phases
2208 (add-after 'unpack 'chdir
2209 (lambda _
2210 (chdir "sdk/python/helper"))))))
2211 (propagated-inputs
2212 (list python-iso8601
2213 python-keeper-secrets-manager-core
2214 python-pyyaml))
2215 (native-inputs
2216 (list python-pytest
2217 python-setuptools))
2218 (home-page "https://github.com/Keeper-Security/secrets-manager")
2219 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2220 (description
2221 "Keeper Secrets Manager SDK helper is for creating and managing secret
2222records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2223 (license license:expat))))
2224
2225(define-public python-language-data
2226 (package
2227 (name "python-language-data")
2228 (version "1.3.0")
2229 (source
2230 (origin
2231 (method url-fetch)
2232 (uri (pypi-uri "language_data" version))
2233 (sha256
2234 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2235 (build-system pyproject-build-system)
2236 (native-inputs
2237 (list python-pytest
2238 python-setuptools
2239 python-setuptools-scm))
2240 (propagated-inputs
2241 (list python-marisa-trie))
2242 (home-page "https://github.com/georgkrause/language_data")
2243 (synopsis "Supplementary data about languages used by the langcodes module")
2244 (description
2245 "language_data is a supplement to the langcodes module, for working with
2246standardized codes for human languages. It stores the more bulky and
2247hard-to-index data about languages, particularly what they are named in
2248various languages.")
2249 (license license:expat)))
2250
2251(define-public python-log-symbols
2252 (package
2253 (name "python-log-symbols")
2254 (version "0.0.14")
2255 (source
2256 (origin
2257 (method url-fetch)
2258 (uri (pypi-uri "log_symbols" version))
2259 (sha256
2260 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2261 (build-system pyproject-build-system)
2262 (arguments
2263 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2264 (native-inputs
2265 (list python-setuptools))
2266 (propagated-inputs
2267 (list python-colorama))
2268 (home-page "https://github.com/manrajgrover/py-log-symbols")
2269 (synopsis "Python library with graphical symbols for logging on the terminal")
2270 (description
2271 "This package provides a Python library with graphical symbols that can
2272be displayed on the terminal, with color if possible, for logging purposes.")
2273 (license license:expat)))
2274
2275(define-public python-lsprotocol
2276 (package
2277 (name "python-lsprotocol")
2278 (version "2025.0.0")
2279 (source
2280 (origin
2281 (method git-fetch)
2282 (uri (git-reference
2283 (url "https://github.com/microsoft/lsprotocol")
2284 (commit version)))
2285 (file-name (git-file-name name version))
2286 (sha256
2287 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2288 (build-system pyproject-build-system)
2289 (arguments
2290 (list
2291 #:tests? #f ;no tests for Python package
2292 #:phases
2293 #~(modify-phases %standard-phases
2294 (add-after 'unpack 'cd-packages-python
2295 (lambda _
2296 (chdir "packages/python"))))))
2297 (native-inputs
2298 (list python-flit-core))
2299 (propagated-inputs
2300 (list python-attrs
2301 python-cattrs))
2302 (home-page "https://github.com/microsoft/lsprotocol")
2303 (synopsis "Python types for Language Server Protocol.")
2304 (description
2305 "@code{lsprotocol} is a Python implementation of object types used in
2306the Language Server Protocol (LSP). This repository contains the code
2307generator and the generated types for LSP.")
2308 (license license:expat)))
2309
2310(define-public python-marisa-trie
2311 (package
2312 (name "python-marisa-trie")
2313 (version "1.3.1")
2314 (source
2315 (origin
2316 (method url-fetch)
2317 (uri (pypi-uri "marisa_trie" version))
2318 (sha256
2319 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2320 (build-system pyproject-build-system)
2321 (native-inputs
2322 (list python-cython
2323 python-hypothesis
2324 python-pytest
2325 python-readme-renderer
2326 python-setuptools))
2327 (home-page "https://github.com/pytries/marisa-trie")
2328 (synopsis "Static memory-efficient Trie-like structures for Python")
2329 (description
2330 "This package provides static memory-efficient and fast Trie-like structures
2331for Python.")
2332 (license license:expat)))
2333
2334(define-public python-materialyoucolor
2335 (package
2336 (name "python-materialyoucolor")
2337 (version "3.0.2")
2338 (source
2339 (origin
2340 (method git-fetch)
2341 (uri (git-reference
2342 (url "https://github.com/T-Dynamos/materialyoucolor-python")
2343 (commit (string-append "v" version))))
2344 (file-name (git-file-name name version))
2345 (sha256
2346 (base32 "1yxz05g681zpvxzfcvp4dwayq8hjvw773n4lixkhgxkvvan5hah8"))))
2347 (build-system pyproject-build-system)
2348 (arguments
2349 (list #:test-backend #~'custom
2350 #:test-flags #~(list "tests/test_all.py")))
2351 (propagated-inputs (list python-pillow))
2352 (native-inputs (list pybind11 python-psutil python-rich python-setuptools))
2353 (home-page "https://github.com/T-Dynamos/materialyoucolor-python")
2354 (synopsis "Material You color generation algorithms")
2355 (description
2356 "@code{python-materialyoucolor} provides a tool that generates harmonious
2357color palettes from the dominant colors of an image, based on the
2358@uref{https://m3.material.io/styles/color/system/overview, Material color
2359system}.")
2360 (license license:expat)))
2361
2362(define-public python-menuinst
2363 (package
2364 (name "python-menuinst")
2365 (version "2.4.1")
2366 (source
2367 (origin
2368 (method git-fetch)
2369 (uri (git-reference
2370 (url "https://github.com/conda/menuinst")
2371 (commit version)))
2372 (file-name (git-file-name name version))
2373 (sha256
2374 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2375 (build-system pyproject-build-system)
2376 (arguments
2377 (list
2378 #:tests? #f)) ;tests need conda
2379 (native-inputs
2380 (list python-setuptools
2381 python-setuptools-scm))
2382 (home-page "https://conda.github.io/menuinst/")
2383 (synopsis "Cross platform menu item installation")
2384 (description
2385 "This package provides cross platform menu item installation for conda
2386packages.")
2387 (license license:bsd-3)))
2388
2389(define-public python-multiplex
2390 (package
2391 (name "python-multiplex")
2392 (version "0.6.1")
2393 (source
2394 (origin
2395 (method git-fetch) ;no tests in PyPI archive
2396 (uri (git-reference
2397 (url "https://github.com/dankilman/multiplex")
2398 (commit version)))
2399 (file-name (git-file-name name version))
2400 (sha256
2401 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2402 (build-system pyproject-build-system)
2403 (native-inputs
2404 (list python-poetry-core
2405 python-pytest
2406 python-pytest-asyncio))
2407 (propagated-inputs
2408 (list python-aiofiles
2409 python-aiostream
2410 python-click
2411 python-easy-ansi-0.3
2412 python-pyte))
2413 (home-page "https://github.com/dankilman/multiplex")
2414 (synopsis "Parallel stream of outputs from multiple processes")
2415 (description
2416 "This package provides a functionality to view output of multiple
2417processes, in parallel, in the console, with an interactive TUI.")
2418 (license license:expat)))
2419
2420(define-public python-nrepl
2421 (package
2422 (name "python-nrepl")
2423 (version "0.3.1")
2424 (source
2425 (origin
2426 (method git-fetch)
2427 (uri (git-reference
2428 (url "https://git.sr.ht/~ngraves/nrepl-python")
2429 (commit version)))
2430 (file-name (git-file-name name version))
2431 (sha256
2432 (base32 "1ns8c5d29vi11qma1nnazsja5nibknp97ig0lg45wfpjbb5ngl2b"))))
2433 (build-system pyproject-build-system)
2434 (arguments
2435 (list
2436 #:test-flags
2437 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2438 (native-inputs
2439 (list python-flit-core
2440 python-pytest
2441 python-pytest-asyncio
2442 python-pytest-xdist))
2443 (propagated-inputs
2444 (list python-fastbencode
2445 python-gevent
2446 python-ipython))
2447 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2448 (synopsis "NREPL server for Python")
2449 (description
2450 "This package provides an implementation of the @url{https://nrepl.org,
2451NREPL} protocol for Python.")
2452 (license license:gpl3+)))
2453
2454(define-public python-num2words
2455 (package
2456 (name "python-num2words")
2457 (version "0.5.14")
2458 (source
2459 (origin
2460 (method git-fetch)
2461 (uri (git-reference
2462 (url "https://github.com/savoirfairelinux/num2words")
2463 (commit (string-append "v" version))))
2464 (file-name (git-file-name name version))
2465 (sha256
2466 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2467 (build-system pyproject-build-system)
2468 (arguments
2469 (list
2470 #:test-flags
2471 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2472 (native-inputs (list python-pytest python-setuptools))
2473 (propagated-inputs (list python-docopt))
2474 (home-page "https://github.com/savoirfairelinux/num2words")
2475 (synopsis "Convert numbers to words in multiple languages")
2476 (description
2477 "@code{num2words} is a library that converts numbers like 42 to words like
2478forty-two. It supports multiple languages, and can even generate ordinal
2479numbers like forty-second.")
2480 (license license:lgpl2.1)))
2481
2482(define-public python-orderly-set
2483 (package
2484 (name "python-orderly-set")
2485 (version "5.5.0")
2486 (source
2487 (origin
2488 (method url-fetch)
2489 (uri (pypi-uri "orderly_set" version))
2490 (sha256
2491 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2492 (build-system pyproject-build-system)
2493 (native-inputs (list python-flit-core python-pytest))
2494 (home-page "https://github.com/seperman/orderly-set")
2495 (synopsis "Multiple implementations of Ordered Set")
2496 (description "Orderly Set is a package containing multiple implementations
2497of Ordered Set.")
2498 (license license:expat)))
2499
2500(define-public python-packageurl
2501 (package
2502 (name "python-packageurl")
2503 (version "0.17.6")
2504 (source
2505 (origin
2506 (method git-fetch)
2507 (uri (git-reference
2508 (url "https://github.com/package-url/packageurl-python")
2509 (commit (string-append "v" version))))
2510 (file-name (git-file-name name version))
2511 (sha256
2512 (base32 "03b6nf6jxzcbgkmqdp3bsl2lvzszqiaiqfwk88cnpvqbgq67lafb"))
2513 (modules '((guix build utils)))
2514 ;; Remove bundled virtualenv and license files used only for
2515 ;; development; not needed at build or runtime.
2516 (snippet '(delete-file-recursively "thirdparty"))))
2517 (build-system pyproject-build-system)
2518 (arguments
2519 (list #:test-flags
2520 ;; test_purl_spec.py reads JSON fixtures from the 'spec' git
2521 ;; submodule at import time; skip it when the submodule is absent.
2522 #~(list "--ignore=tests/test_purl_spec.py")))
2523 (native-inputs
2524 (list python-pytest
2525 python-setuptools))
2526 (home-page "https://www.packageurl.org")
2527 (synopsis "Package URL parser and builder")
2528 (description
2529 "This library parses and builds Package URLs (purls) as defined in the
2530purl specification. It provides a @code{PackageURL} class for creating,
2531parsing, and normalizing package URL strings across different package
2532management ecosystems.")
2533 (license license:expat)))
2534
2535(define-public python-pandocfilters
2536 (package
2537 (name "python-pandocfilters")
2538 (version "1.5.1")
2539 (source
2540 (origin
2541 (method url-fetch)
2542 (uri (pypi-uri "pandocfilters" version))
2543 (sha256
2544 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2545 (build-system pyproject-build-system)
2546 (arguments
2547 (list #:tests? #f)) ;require pandoc to run tests
2548 (native-inputs
2549 (list python-setuptools))
2550 (home-page "https://github.com/jgm/pandocfilters")
2551 (synopsis "Python module for writing Pandoc filters")
2552 (description "Pandoc is a powerful utility to transform various
2553input formats into a wide range of output formats. To alter the
2554exported output document, Pandoc allows the usage of filters, which
2555are pipes that read a JSON serialization of the Pandoc AST from stdin,
2556transform it in some way, and write it to stdout. It allows therefore
2557to alter the processing of Pandoc's supported input formats, for
2558instance one can add new syntax elements to markdown, etc.
2559
2560This package provides Python bindings.")
2561 (license license:bsd-3)))
2562
2563(define-public python-panflute
2564 (package
2565 (name "python-panflute")
2566 (version "2.3.1")
2567 (source
2568 (origin
2569 (method url-fetch)
2570 (uri (pypi-uri "panflute" version))
2571 (sha256
2572 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2573 (build-system pyproject-build-system)
2574 (arguments
2575 (list #:tests? #f)) ;require pandoc to run tests
2576 (native-inputs
2577 (list python-setuptools))
2578 (propagated-inputs
2579 (list python-click
2580 python-pyyaml))
2581 (home-page "http://scorreia.com/software/panflute/")
2582 (synopsis "Pythonic Pandoc filters")
2583 (description
2584 "Panflute is a Python package that makes Pandoc filters fun to write.
2585It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2586is heavily inspired.")
2587 (license license:bsd-3)))
2588
2589(define-public python-pastel
2590 (package
2591 (name "python-pastel")
2592 (version "0.2.1")
2593 (source
2594 (origin
2595 (method git-fetch)
2596 (uri (git-reference
2597 (url "https://github.com/sdispater/pastel")
2598 (commit version)))
2599 (file-name (git-file-name name version))
2600 (sha256
2601 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2602 (build-system pyproject-build-system)
2603 (arguments
2604 (list
2605 #:test-flags
2606 #~(list "pastel" "tests/")
2607 #:phases
2608 #~(modify-phases %standard-phases
2609 (add-after 'unpack 'use-poetry-core
2610 (lambda _
2611 ;; Patch to use the core poetry API.
2612 (substitute* "pyproject.toml"
2613 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2614 (native-inputs (list python-poetry-core python-pytest))
2615 (home-page "https://github.com/sdispater/pastel")
2616 (synopsis "Library to colorize strings in your terminal")
2617 (description
2618 "Pastel is a simple library to help you colorize strings in your
2619terminal.")
2620 (license license:expat)))
2621
2622(define-public python-pathlib-abc
2623 (package
2624 (name "python-pathlib-abc")
2625 (version "0.5.0")
2626 (source
2627 (origin
2628 (method url-fetch)
2629 (uri (pypi-uri "pathlib_abc" version))
2630 (sha256
2631 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2632 (build-system pyproject-build-system)
2633 (native-inputs (list python-pytest python-hatchling))
2634 (home-page "https://github.com/barneygale/pathlib-abc")
2635 (synopsis "Python base classes for rich path objects")
2636 (description
2637 "This package is a preview of pathlib functionality planned for a future
2638release of Python; specifically, it provides three ABCs that can be used to
2639implement path classes for non-local filesystems")
2640 (license license:psfl)))
2641
2642;; XXX: It's for [email protected], remove when no longer required.
2643(define-public python-pathlib-abc-for-python-pathy
2644 (hidden-package
2645 (package
2646 (inherit python-pathlib-abc)
2647 (version "0.1.1")
2648 (source
2649 (origin
2650 (method url-fetch)
2651 (uri (pypi-uri "pathlib_abc" version))
2652 (sha256
2653 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2654
2655(define-public python-pbs-installer
2656 (package
2657 (name "python-pbs-installer")
2658 (version "2025.09.18")
2659 (source
2660 (origin
2661 (method git-fetch)
2662 (uri (git-reference
2663 (url "https://github.com/frostming/pbs-installer")
2664 (commit version)))
2665 (file-name (git-file-name name version))
2666 (sha256
2667 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2668 (build-system pyproject-build-system)
2669 (arguments
2670 (list
2671 #:tests? #f ;no tests provided
2672 #:phases
2673 #~(modify-phases %standard-phases
2674 (add-before 'build 'set-version
2675 (lambda _
2676 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2677 (native-inputs
2678 (list python-pdm-backend
2679 python-pytest))
2680 (propagated-inputs
2681 (list python-httpx
2682 python-zstandard))
2683 (home-page "https://github.com/frostming/pbs-installer")
2684 (synopsis "Installer for Python Build Standalone")
2685 (description
2686 "This package implements an installer for
2687@url{https://github.com/astral-sh/python-build-standalone, Python Build
2688Standalone}.")
2689 (license license:expat)))
2690
2691(define-public python-phply
2692 (package
2693 (name "python-phply")
2694 (version "1.2.6")
2695 (source
2696 (origin
2697 (method url-fetch)
2698 (uri (pypi-uri "phply" version))
2699 (sha256
2700 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2701 (build-system pyproject-build-system)
2702 (native-inputs
2703 (list python-pytest
2704 python-setuptools))
2705 (propagated-inputs
2706 (list python-ply))
2707 (home-page "https://github.com/viraptor/phply")
2708 (synopsis "PHP parser written in Python using PLY")
2709 (description
2710 "@code{phply} is a parser for the PHP programming language written using
2711PLY,a Lex/YACC-style parser generator toolkit for Python.")
2712 (license license:bsd-3)))
2713
2714(define-public python-puccinialin
2715 (package
2716 (name "python-puccinialin")
2717 (version "0.1.5")
2718 (source
2719 (origin
2720 (method url-fetch)
2721 (uri (pypi-uri "puccinialin" version))
2722 (sha256
2723 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2724 (build-system pyproject-build-system)
2725 (arguments
2726 (list #:tests? #f)) ;no tests in PyPI or Git
2727 (native-inputs
2728 (list python-hatchling))
2729 (propagated-inputs
2730 (list python-httpx
2731 python-platformdirs
2732 python-tqdm))
2733 (home-page "https://github.com/konstin/puccinialin")
2734 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2735 (description
2736 "This tool helps to install Rust into a temporary directory, allowing
2737support of Rust-based Python builds. Cargo and rustc are installed into a
2738cache directory, to avoid modifying the host's environment, and further
2739activated using a set of environment variables.")
2740 (license (list license:expat license:asl2.0))))
2741
2742(define-public python-py010parser
2743 (package
2744 (name "python-py010parser")
2745 (version "0.1.18")
2746 (source
2747 (origin
2748 (method git-fetch)
2749 (uri (git-reference
2750 (url "https://github.com/d0c-s4vage/py010parser")
2751 (commit (string-append "v" version))))
2752 (file-name (git-file-name name version))
2753 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
2754 (modules '((guix build utils)))
2755 (snippet #~(begin
2756 ;; Unbundle ply.
2757 (substitute* "requirements.txt"
2758 (("^six\\>.*") ""))
2759 (substitute* "setup.py"
2760 (("(packages += \\['py010parser').*\\]" all first)
2761 (string-append first "]")))
2762 (delete-file-recursively "py010parser/ply")
2763 (substitute* (find-files "py010parser" "\\.py$")
2764 ((" .*\\.ply\\>") " ply"))
2765 ;; Avoid regenerating the lex table.
2766 (substitute* '("py010parser/__init__.py"
2767 "py010parser/c_parser.py")
2768 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
2769 (string-append open "False" close)))
2770 (substitute* '("py010parser/__init__.py"
2771 "setup.py")
2772 (("\\{\\{VERSION\\}\\}") #$version))
2773 (substitute* "setup.cfg"
2774 (("description-file") "description_file"))))))
2775 (build-system pyproject-build-system)
2776 (arguments (list #:test-backend #~'unittest
2777 #:test-flags #~'("discover" "tests")))
2778 (propagated-inputs (list python-regex python-ply))
2779 (native-inputs (list python-setuptools))
2780 (home-page "https://github.com/d0c-s4vage/py010parser")
2781 (synopsis "Parser of 010 editor's template")
2782 (description
2783 "@code{py010parser} is a Python library for parsing templates
2784for the Sweetscape 010 binary-format editor.")
2785 (license license:bsd-3)))
2786
2787(define-public python-pyasynchat
2788 (package
2789 (name "python-pyasynchat")
2790 (version "1.0.5")
2791 (source
2792 (origin
2793 (method git-fetch)
2794 (uri (git-reference
2795 (url "https://github.com/simonrob/pyasynchat")
2796 (commit (string-append "v" version))))
2797 (file-name (git-file-name name version))
2798 (sha256
2799 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
2800 (build-system pyproject-build-system)
2801 (native-inputs
2802 (list python-pytest
2803 python-setuptools))
2804 (propagated-inputs
2805 (list python-pyasyncore))
2806 (home-page "https://github.com/simonrob/pyasynchat")
2807 (synopsis "Make asynchat available for Python 3.12 onwards")
2808 (description
2809 "This package contains the
2810@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
2811found in Python versions prior to 3.12. It is provided so that existing code
2812relying on @code{import asynchat} is able to continue being used without
2813significant refactoring.")
2814 (license license:psfl)))
2815
2816(define-public python-pyasyncore
2817 (package
2818 (name "python-pyasyncore")
2819 (version "1.0.5")
2820 (source
2821 (origin
2822 (method git-fetch)
2823 (uri (git-reference
2824 (url "https://github.com/simonrob/pyasyncore")
2825 (commit (string-append "v" version))))
2826 (file-name (git-file-name name version))
2827 (sha256
2828 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
2829 (build-system pyproject-build-system)
2830 (native-inputs (list python-pytest python-setuptools))
2831 (home-page "https://github.com/simonrob/pyasyncore")
2832 (synopsis "Make asyncore available for Python 3.12 onwards")
2833 (description
2834 "This package contains the
2835@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
2836found in Python versions prior to 3.12. It is provided so that existing code
2837relying on @code{import asyncore} is able to continue being used without
2838significant refactoring.")
2839 (license license:psfl)))
2840
2841(define-public python-pyconify
2842 (package
2843 (name "python-pyconify")
2844 (version "0.2.1")
2845 (source
2846 (origin
2847 (method git-fetch)
2848 (uri (git-reference
2849 (url "https://github.com/pyapp-kit/pyconify")
2850 (commit (string-append "v" version))))
2851 (file-name (git-file-name name version))
2852 (sha256
2853 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
2854 (build-system pyproject-build-system)
2855 (arguments
2856 (list #:tests? #f)) ;require netwok access
2857 (native-inputs
2858 (list python-hatch-vcs
2859 python-hatchling))
2860 (propagated-inputs
2861 (list python-requests))
2862 (home-page "https://github.com/pyapp-kit/pyconify")
2863 (synopsis "Python wrapper for the Iconify API")
2864 (description
2865 "This packge provides a Python wrapper for the
2866@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
2867framework that includes 100+ icon sets with more than 100,000 icons from
2868FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
2869Emoji and many other open source icon sets.")
2870 (license license:bsd-3)))
2871
2872(define-public python-pygls
2873 (package
2874 (name "python-pygls")
2875 (version "2.0.0")
2876 (source
2877 (origin
2878 (method git-fetch)
2879 (uri (git-reference
2880 (url "https://github.com/openlawlibrary/pygls")
2881 (commit (string-append "v" version))))
2882 (file-name (git-file-name name version))
2883 (sha256
2884 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
2885 (build-system pyproject-build-system)
2886 ;; tests: 265 passed, 8 skipped
2887 (native-inputs
2888 (list python-pytest
2889 python-pytest-asyncio
2890 python-poetry-core))
2891 (propagated-inputs
2892 (list python-attrs
2893 python-cattrs
2894 python-lsprotocol))
2895 (home-page "https://github.com/openlawlibrary/pygls")
2896 (synopsis "Pythonic generic language server")
2897 (description
2898 "This package provides a pythonic generic language server (pronounced
2899like pie glass').")
2900 (license license:asl2.0)))
2901
2902(define-public python-pyls-spyder
2903 (package
2904 (name "python-pyls-spyder")
2905 (version "0.4.0")
2906 (source
2907 (origin
2908 (method git-fetch)
2909 (uri (git-reference
2910 (url "https://github.com/spyder-ide/pyls-spyder")
2911 (commit (string-append "v" version))))
2912 (file-name (git-file-name name version))
2913 (sha256
2914 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
2915 (build-system pyproject-build-system)
2916 (propagated-inputs (list python-lsp-server))
2917 (native-inputs (list python-pytest python-setuptools))
2918 (home-page "https://github.com/spyder-ide/pyls-spyder")
2919 (synopsis "Spyder extensions for @code{python-lsp-server}")
2920 (description "This package provides Spyder-specific extras for the
2921Language Server Protocol (LSP) on Python, such as document symbol searching
2922and others.")
2923 (license license:expat)))
2924
2925(define-public python-pylsp-rope
2926 (package
2927 (name "python-pylsp-rope")
2928 (version "0.1.17")
2929 (source
2930 (origin
2931 (method git-fetch)
2932 (uri (git-reference
2933 (url "https://github.com/python-rope/pylsp-rope")
2934 (commit version)))
2935 (file-name (git-file-name name version))
2936 (sha256
2937 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
2938 (build-system pyproject-build-system)
2939 (native-inputs
2940 (list python-pytest
2941 python-setuptools))
2942 (propagated-inputs
2943 (list python-lsp-server
2944 python-rope))
2945 (home-page "https://github.com/python-rope/pylsp-rope")
2946 (synopsis
2947 "Extended refactoring capabilities for Python LSP Server using Rope")
2948 (description
2949 "This plugs in to Python LSP Server, adding code actions that refactor
2950using Rope.")
2951 (license license:expat)))
2952
2953(define-public python-pypydispatcher
2954 (package
2955 (name "python-pypydispatcher")
2956 (version "2.1.2")
2957 (source
2958 (origin
2959 (method url-fetch)
2960 (uri (pypi-uri "PyPyDispatcher" version))
2961 (sha256
2962 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
2963 (build-system pyproject-build-system)
2964 (native-inputs
2965 (list python-pytest
2966 python-setuptools
2967 python-setuptools-scm))
2968 (home-page "https://github.com/scrapy/pypydispatcher")
2969 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
2970 (description
2971 "This package implements a functionality of pulti-producer-multi-consumer
2972signal dispatching mechanism. It's a fork of
2973http://pydispatcher.sourceforge.net/ with PyPy support.")
2974 (license license:bsd-3)))
2975
2976(define-public python-pyread-eagle
2977 (package
2978 (name "python-pyread-eagle")
2979 (version "1.0.3")
2980 (source
2981 (origin
2982 (method git-fetch)
2983 (uri (git-reference
2984 (url "https://github.com/kyleaoman/pyread_eagle")
2985 (commit version)))
2986 (file-name (git-file-name name version))
2987 (sha256
2988 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
2989 (build-system pyproject-build-system)
2990 (arguments
2991 ;; TODO: Tests need additional test data, see tests/test_regions.py.
2992 (list #:tests? #f))
2993 (native-inputs
2994 (list python-setuptools))
2995 (propagated-inputs
2996 (list python-h5py
2997 python-numpy))
2998 (home-page "https://github.com/kyleaoman/pyread_eagle")
2999 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
3000 (description
3001 "This package provides a pure-python port of
3002@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
3003 (license license:gpl3)))
3004
3005(define-public python-pyte
3006 (package
3007 (name "python-pyte")
3008 (version "0.8.2")
3009 (source
3010 (origin
3011 (method git-fetch)
3012 (uri (git-reference
3013 (url "https://github.com/selectel/pyte")
3014 (commit version)))
3015 (file-name (git-file-name name version))
3016 (sha256
3017 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
3018 (build-system pyproject-build-system)
3019 (propagated-inputs (list python-wcwidth))
3020 (native-inputs (list python-pytest python-setuptools python-wheel))
3021 (home-page "https://pyte.readthedocs.io/")
3022 (synopsis "Simple VTXXX-compatible terminal emulator")
3023 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
3024emulator. @var{VTxxx} stands for a series of video terminals, developed by
3025DEC between 1970 and 1995. The first and probably most famous one was the
3026VT100 terminal, which is now a de-facto standard for all virtual terminal
3027emulators.
3028
3029pyte is a fork of vt102, which was an incomplete pure Python implementation
3030of VT100 terminal.")
3031 (license license:lgpl3+)))
3032
3033(define-public python-pytokens
3034 (package
3035 (name "python-pytokens")
3036 (version "0.4.1")
3037 (source
3038 (origin
3039 (method git-fetch)
3040 (uri (git-reference
3041 (url "https://github.com/tusharsadhwani/pytokens")
3042 (commit version)))
3043 (file-name (git-file-name name version))
3044 (sha256
3045 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
3046 (build-system pyproject-build-system)
3047 (arguments
3048 (list
3049 #:phases
3050 #~(modify-phases %standard-phases
3051 (add-before 'build 'build-with-cython
3052 (lambda _
3053 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
3054 (native-inputs
3055 (list python-cython
3056 python-pytest
3057 python-setuptools))
3058 (home-page "https://github.com/tusharsadhwani/pytokens")
3059 (synopsis "Spec compliant Python 3.14+ tokenizer")
3060 (description
3061 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
3062runs on older Pythons.")
3063 (license license:expat)))
3064
3065(define-public python-pyuca
3066 (package
3067 (name "python-pyuca")
3068 (version "1.2")
3069 (source
3070 (origin
3071 (method git-fetch)
3072 (uri (git-reference
3073 (url "https://github.com/jtauber/pyuca")
3074 (commit (string-append "v" version))))
3075 (file-name (git-file-name name version))
3076 (sha256
3077 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
3078 (build-system pyproject-build-system)
3079 (arguments
3080 (list #:tests? #f)) ; there are no tests
3081 (native-inputs (list python-setuptools))
3082 (home-page "https://github.com/jtauber/pyuca")
3083 (synopsis "Python implementation of the Unicode Collation Algorithm")
3084 (description "This package provides a Python implementation of the
3085@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
3086 (license license:expat)))
3087
3088(define-public python-pyxdameraulevenshtein
3089 (package
3090 (name "python-pyxdameraulevenshtein")
3091 (version "1.8.0")
3092 (source
3093 (origin
3094 (method git-fetch)
3095 (uri (git-reference
3096 (url "https://github.com/lanl/pyxDamerauLevenshtein")
3097 (commit (string-append "v" version))))
3098 (file-name (git-file-name name version))
3099 (sha256
3100 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
3101 (build-system pyproject-build-system)
3102 (native-inputs (list python-cython python-pytest python-setuptools))
3103 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
3104 (synopsis "Damerau-Levenshtein edit distance algorithm")
3105 (description
3106 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
3107edit distance algorithm for Python in Cython for high performance.")
3108 (license license:bsd-3)))
3109
3110(define-public python-qrcodegen
3111 (package
3112 (name "python-qrcodegen")
3113 (version "1.8.0")
3114 (source
3115 (origin
3116 (method git-fetch)
3117 (uri (git-reference
3118 (url "https://github.com/nayuki/QR-Code-generator")
3119 (commit (string-append "v" version))))
3120 (sha256
3121 (base32 "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39"))))
3122 (build-system pyproject-build-system)
3123 (arguments
3124 (list
3125 #:tests? #f ;no tests
3126 #:phases
3127 #~(modify-phases %standard-phases
3128 (add-before 'build 'chdir
3129 (lambda _
3130 (chdir "python"))))))
3131 (native-inputs (list python-setuptools))
3132 (home-page "https://www.nayuki.io/page/qr-code-generator-library")
3133 (synopsis "QR Code generator")
3134 (description
3135 "@code{python-qrcodegen} is a QR code generator library in Python.")
3136 (license license:expat)))
3137
3138(define-public python-represent
3139 (package
3140 (name "python-represent")
3141 (version "2.1")
3142 (source
3143 (origin
3144 (method url-fetch)
3145 (uri (pypi-uri "Represent" version))
3146 (sha256
3147 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
3148 (build-system pyproject-build-system)
3149 (native-inputs
3150 ;; XXX This might be too much for testing, maybe switch them off as it's
3151 ;; a simple middleware library.
3152 (list python-ipython
3153 python-pytest
3154 python-rich
3155 python-setuptools))
3156 (home-page "https://github.com/RazerM/represent")
3157 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
3158 (description
3159 "This package implements a functionality to generate Python
3160@code{__repr__} methods automatically or declaratively.")
3161 (license license:expat)))
3162
3163(define-public python-rich-argparse
3164 (package
3165 (name "python-rich-argparse")
3166 (version "1.8.0")
3167 (source
3168 (origin
3169 (method git-fetch)
3170 (uri (git-reference
3171 (url "https://github.com/hamdanal/rich-argparse")
3172 (commit (string-append "v" version))))
3173 (file-name (git-file-name name version))
3174 (sha256
3175 (base32
3176 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
3177 (build-system pyproject-build-system)
3178 (native-inputs
3179 (list python-pytest
3180 python-hatchling))
3181 (propagated-inputs
3182 (list python-rich))
3183 (home-page "https://github.com/hamdanal/rich-argparse")
3184 (synopsis "Format argparse and optparse help using rich")
3185 (description
3186 "This package improves the look and readability of argparse's help while
3187requiring minimal changes to the code.")
3188 (license license:expat)))
3189
3190(define-public python-rich-rst
3191 (package
3192 (name "python-rich-rst")
3193 (version "2.0.1")
3194 (source
3195 (origin
3196 (method git-fetch)
3197 (uri (git-reference
3198 (url "https://github.com/wasi-master/rich-rst")
3199 (commit (string-append "v" version))))
3200 (file-name (git-file-name name version))
3201 (sha256
3202 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
3203 (build-system pyproject-build-system)
3204 (native-inputs
3205 (list python-pytest
3206 python-setuptools))
3207 (propagated-inputs
3208 (list python-pygments
3209 python-rich))
3210 (home-page "https://wasi-master.github.io/rich-rst")
3211 (synopsis "Beautiful reStructuredText renderer for Rich")
3212 (description
3213 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
3214documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
3215renderables.")
3216 (license license:expat)))
3217
3218(define-public python-roman-numerals
3219 (package
3220 (name "python-roman-numerals")
3221 (version "3.1.0")
3222 (source
3223 (origin
3224 (method url-fetch)
3225 (uri (pypi-uri "roman_numerals" version))
3226 (sha256
3227 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
3228 (build-system pyproject-build-system)
3229 (native-inputs (list python-flit-core python-pytest))
3230 (home-page "https://pypi.org/project/roman-numbers/")
3231 (synopsis "Python library to manipulate Roman numerals")
3232 (description "This package provides a Python library to manipulate
3233well-formed Roman numerals.")
3234 (license license:expat)))
3235
3236(define-public python-rush
3237 (package
3238 (name "python-rush")
3239 (version "2021.04.0")
3240 (source
3241 (origin
3242 (method git-fetch)
3243 (uri (git-reference
3244 (url "https://github.com/sigmavirus24/rush")
3245 (commit version)))
3246 (file-name (git-file-name name version))
3247 (sha256
3248 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
3249 (build-system pyproject-build-system)
3250 (arguments
3251 (list
3252 #:test-flags
3253 ;; E ValueError: Redis URL must specify one of the following schemes
3254 ;; (redis://, rediss://, unix://)
3255 #~(list "-k" (string-append "not test_valid_url[redis://]"
3256 " and not test_valid_url[rediss://]"))))
3257 (native-inputs
3258 (list python-mock
3259 python-redis
3260 python-rfc3986
3261 python-pytest
3262 python-setuptools))
3263 (propagated-inputs
3264 (list python-attrs))
3265 (home-page "https://github.com/sigmavirus24/rush")
3266 (synopsis "Throttling and rate-limiting algorithms for Python")
3267 (description
3268 "This package provides is a small collection of algorithms that can be
3269reused when throttling user interactions with a resource (e.g., an API).")
3270 (license license:expat)))
3271
3272(define-public python-rustworkx
3273 (package
3274 (name "python-rustworkx")
3275 (version "0.17.1")
3276 (source
3277 (origin
3278 (method git-fetch)
3279 (uri (git-reference
3280 (url "https://github.com/Qiskit/rustworkx")
3281 (commit version)))
3282 (file-name (git-file-name name version))
3283 (sha256
3284 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
3285 (build-system pyproject-build-system)
3286 (arguments
3287 (list
3288 #:test-flags #~(list "--test-path" "tests")
3289 #:imported-modules (append %cargo-build-system-modules
3290 %pyproject-build-system-modules)
3291 #:modules '(((guix build cargo-build-system)
3292 #:prefix cargo:)
3293 (guix build pyproject-build-system)
3294 (guix build utils))
3295 #:phases
3296 #~(modify-phases %standard-phases
3297 (add-after 'unpack 'prepare-cargo-build-system
3298 (lambda args
3299 (for-each
3300 (lambda (phase)
3301 (format #t "Running cargo phase: ~a~%" phase)
3302 (apply (assoc-ref cargo:%standard-phases phase)
3303 #:cargo-target #$(cargo-triplet) args))
3304 '(unpack-rust-crates
3305 configure
3306 check-for-pregenerated-files
3307 patch-cargo-checksums))))
3308 (add-before 'check 'pre-check
3309 (lambda _
3310 ;; Delete the source directory to avoid interference.
3311 (delete-file-recursively "rustworkx")
3312 ;; Matplotlib needs to be able to write its configuration file
3313 ;; somewhere.
3314 (setenv "MPLCONFIGDIR" "/tmp")
3315 ;; For fontconfig.
3316 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3317 (propagated-inputs (list python-numpy))
3318 (native-inputs
3319 (append (list graphviz
3320 python-matplotlib
3321 python-networkx
3322 python-pillow
3323 python-setuptools
3324 python-setuptools-rust
3325 python-stestr
3326 rust
3327 `(,rust "cargo"))
3328 (or (and=> (%current-target-system)
3329 (compose list make-rust-sysroot))
3330 '())))
3331 (inputs (cargo-inputs 'python-rustworkx))
3332 (home-page "https://www.rustworkx.org")
3333 (synopsis "High performance graph library for Python")
3334 (description
3335 "@code{rustworkx} is a Python package for working with graphs and complex
3336networks. It enables the creation, interaction with, and study of graphs and
3337networks.")
3338 (license license:asl2.0)))
3339
3340(define-public python-safety-schemas
3341 (package
3342 (name "python-safety-schemas")
3343 (version "0.0.14")
3344 (source
3345 (origin
3346 (method url-fetch)
3347 (uri (pypi-uri "safety_schemas" version))
3348 (sha256
3349 (base32 "0smgszbd3nb7jh61cgpycqhcvfwwdyaai5amw8mmf6g9b5x3z5a9"))))
3350 (build-system pyproject-build-system)
3351 (arguments
3352 (list
3353 #:test-flags
3354 #~(list "-k" (string-join
3355 ;; These tests are failing for unknown reasons.
3356 ;; (AssertionError).
3357 (list "not test_model[ConfigModel-ConfigModel]"
3358 "test_model[MetadataModel-MetadataModel]"
3359 "test_model[PolicyFileModel-PolicyFileModel]"
3360 "test_model[ProjectModel-ProjectModel]"
3361 "test_model[ReportModel-ReportModel]")
3362 " and not "))))
3363 (propagated-inputs (list python-dparse
3364 python-packaging
3365 python-pydantic
3366 python-ruamel.yaml
3367 python-typing-extensions))
3368 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3369 ;; Source code is not yet published outside of PyPI:
3370 ;; https://github.com/pyupio/safety/issues/494
3371 (home-page "https://pypi.org/project/safety-schemas/")
3372 (synopsis "Schemas for Safety tools")
3373 (description "This package contains models and schemas used by Safety.")
3374 (license license:expat)))
3375
3376(define-public python-scverse-misc
3377 (package
3378 (name "python-scverse-misc")
3379 (version "0.1.1")
3380 (source
3381 (origin
3382 (method git-fetch)
3383 (uri (git-reference
3384 (url "https://github.com/scverse/scverse-misc")
3385 (commit (string-append "v" version))))
3386 (file-name (git-file-name name version))
3387 (sha256
3388 (base32 "14gqrafilfzlc9rydz90rifs48icqvdqa80qsfsmhrwv25mwwjry"))))
3389 (build-system pyproject-build-system)
3390 (arguments
3391 (list
3392 #:test-flags
3393 ;; Optinal tests, Pydantic fails to validate inputs.
3394 #~(list "--deselect=tests/settings/test_runtime.py::test_dotenv[2]"
3395 "--deselect=tests/settings/test_runtime.py::test_dotenv[4]")))
3396 (native-inputs
3397 (list python-hatch-vcs
3398 python-hatchling
3399 python-pytest
3400 python-pyyaml))
3401 (propagated-inputs
3402 (list python-session-info2
3403 python-typing-extensions
3404 ;; [optional]
3405 python-dotenv
3406 python-pydantic-settings))
3407 (home-page "https://github.com/scverse/scverse-misc")
3408 (synopsis "Miscellaneous utility code used by scverse packages")
3409 (description
3410 "This package provides miscellaneous utility code used by scverse
3411packages.")
3412 (license license:bsd-3)))
3413
3414(define-public python-senf
3415 (package
3416 (name "python-senf")
3417 (version "1.5.1")
3418 (source
3419 (origin
3420 (method git-fetch)
3421 (uri (git-reference
3422 (url "https://github.com/quodlibet/senf")
3423 (commit (string-append "v" version))))
3424 (file-name (git-file-name name version))
3425 (sha256
3426 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3427 (build-system pyproject-build-system)
3428 (arguments
3429 (list
3430 #:test-flags
3431 ;; These tests fail due to various home fetching methods during build.
3432 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3433 "--deselect" "tests/test_api.py::test_expanduser_user")))
3434 (native-inputs (list python-pytest python-setuptools))
3435 (home-page "https://github.com/quodlibet/senf")
3436 (synopsis "Text, bytes and paths conversion functions for Python")
3437 (description "Senf introduces a new platform native string type called
3438fsnative. It adds functions to convert text, bytes and paths to and from that
3439new type and helper functions to integrate it nicely with the Python
3440stdlib.")
3441 (license license:expat)))
3442
3443(define-public python-session-info2
3444 (package
3445 (name "python-session-info2")
3446 (version "0.2")
3447 (source
3448 (origin
3449 (method url-fetch)
3450 (uri (pypi-uri "session_info2" version))
3451 (sha256
3452 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3453 (build-system pyproject-build-system)
3454 (arguments
3455 (list
3456 #:test-flags
3457 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3458 ;; Tests require Jupyter Client.
3459 "--ignore=tests/test_subprocess.py")))
3460 (native-inputs
3461 (list python-hatch-docstring-description
3462 python-hatch-vcs
3463 python-hatchling
3464 python-pytest
3465 python-pytest-asyncio))
3466 (home-page "https://session-info2.readthedocs.io/")
3467 (synopsis "Print versions of imported packages")
3468 (description
3469 "This package implements a functionality to print versions of imported
3470Python packages.")
3471 (license license:mpl2.0)))
3472
3473(define-public python-show-in-file-manager
3474 (package
3475 (name "python-show-in-file-manager")
3476 (version "1.1.6")
3477 (source
3478 (origin
3479 (method git-fetch)
3480 (uri (git-reference
3481 (url "https://github.com/damonlynch/showinfilemanager")
3482 (commit (string-append "v" version))))
3483 (file-name (git-file-name name version))
3484 (sha256
3485 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3486 (build-system pyproject-build-system)
3487 (arguments (list #:tests? #f)) ;no tests upstream
3488 (native-inputs
3489 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3490 (propagated-inputs
3491 (list python-packaging python-pyxdg))
3492 (home-page "https://github.com/damonlynch/showinfilemanager")
3493 (synopsis "Open the system file manager and select files in it")
3494 (description
3495 "Show in File Manager is a Python package to open the system file manager
3496and optionally select files in it. The point is not to open the files, but to
3497select them in the file manager, thereby highlighting the files and allowing
3498the user to quickly do something with them.")
3499 (license license:expat)))
3500
3501(define-public python-shxparser
3502 (package
3503 (name "python-shxparser")
3504 (version "0.0.2")
3505 (source
3506 (origin
3507 (method url-fetch)
3508 (uri (pypi-uri "shxparser" version))
3509 (sha256
3510 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3511 (build-system pyproject-build-system)
3512 (arguments (list #:test-backend #~'unittest))
3513 (native-inputs
3514 (list python-svgelements python-setuptools))
3515 (home-page "https://github.com/tatarize/shxparser")
3516 (synopsis "SHX line font parser")
3517 (description
3518 "This is a pure python parser for SHX Hershey font files that are an
3519AutoCad format which can encode single line fonts. This format is used for
3520many CNC and laser operations.")
3521 (license license:expat)))
3522
3523(define-public python-simplify-polyline
3524 (package
3525 (name "python-simplify-polyline")
3526 (version "0.1.0")
3527 (source
3528 (origin
3529 (method url-fetch)
3530 (uri (pypi-uri "simplify_polyline" version))
3531 (sha256
3532 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3533 (build-system pyproject-build-system)
3534 (native-inputs
3535 (list python-pytest
3536 python-setuptools
3537 python-setuptools-scm
3538 python-wheel))
3539 (propagated-inputs
3540 (list python-numpy))
3541 (home-page "https://github.com/ShayHill/simplify_polyline")
3542 (synopsis "Simplify an open or closed polyline")
3543 (description
3544 "This package implements functionality to work with plyline.
3545Features:
3546@itemize
3547@item Visvalingham-Whyatt - removes the smallest triangles formed by
3548three consecutive points in a polyline or polygon
3549@item Douglas-Peucker - gives a better representation of the convex hull
3550@end itemize")
3551 (license license:expat)))
3552
3553(define-public python-siphash24
3554 (package
3555 (name "python-siphash24")
3556 (version "1.8")
3557 (source
3558 (origin
3559 (method git-fetch)
3560 (uri (git-reference
3561 (url "https://github.com/dnicolodi/python-siphash24/")
3562 (commit (string-append "v" version))))
3563 (file-name (git-file-name name version))
3564 (sha256
3565 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3566 (build-system pyproject-build-system)
3567 (arguments
3568 (list
3569 #:test-backend #~'custom
3570 #:test-flags #~(list "test.py")
3571 #:phases
3572 #~(modify-phases %standard-phases
3573 (add-after 'unpack 'patch-pyproject
3574 (lambda _
3575 (substitute* "pyproject.toml"
3576 ;; meson-python: error: Field `project.license` has an invalid
3577 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3578 ;; LGPL-2.1-or-later`)
3579 (("^license = .*")
3580 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3581 (native-inputs
3582 (list pkg-config
3583 python-meson
3584 python-pytest))
3585 (inputs
3586 (list c-siphash))
3587 (home-page "https://github.com/dnicolodi/python-siphash24/")
3588 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3589 (description
3590 "This package provides a C-based implementation of
3591@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3592compatible with the hash functions provided by the hashlib standard library
3593module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3594 ;; They are in LICENSES directory:
3595 (license (list license:asl2.0
3596 license:lgpl2.1+))))
3597
3598(define-public python-snakesay
3599 (package
3600 (name "python-snakesay")
3601 (version "0.10.4")
3602 (source
3603 (origin
3604 (method git-fetch)
3605 (uri (git-reference
3606 (url "https://github.com/pythonanywhere/snakesay")
3607 (commit (string-append "v" version))))
3608 (file-name (git-file-name name version))
3609 (sha256
3610 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
3611 (build-system pyproject-build-system)
3612 (arguments
3613 ;; XXX: We don't have python-uv-build yet.
3614 (list #:build-backend "setuptools.build_meta"))
3615 (native-inputs (list python-pytest python-setuptools))
3616 (home-page "https://github.com/pythonanywhere/snakesay")
3617 (synopsis "Like @command{cowsay} but with Python flavor")
3618 (description
3619 "This package provides a simple ASCII art pictures generator of a
3620Snake with a message.")
3621 (license license:expat)))
3622
3623(define-public python-jaconv
3624 (package
3625 (name "python-jaconv")
3626 ;; Last release is not tagged.
3627 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
3628 (revision . "0")))
3629 (version (git-version "0.4.0"
3630 (assoc-ref properties 'revision)
3631 (assoc-ref properties 'commit)))
3632 (source
3633 (origin
3634 (method git-fetch)
3635 (uri (git-reference
3636 (url "https://github.com/ikegami-yukino/jaconv")
3637 (commit (assoc-ref properties 'commit))))
3638 (file-name (git-file-name name version))
3639 (sha256
3640 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
3641 (build-system pyproject-build-system)
3642 (native-inputs (list python-setuptools python-pynose))
3643 (home-page "https://github.com/ikegami-yukino/jaconv")
3644 (synopsis
3645 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
3646Hankaku, Zenkaku")
3647 (description
3648 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
3649Hankaku (half-width character) and Zenkaku (full-width character)")
3650 (license license:expat)))
3651
3652(define-public python-janus
3653 (package
3654 (name "python-janus")
3655 (version "1.0.0")
3656 (source
3657 (origin
3658 (method url-fetch)
3659 (uri (pypi-uri "janus" version))
3660 (sha256
3661 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
3662 (build-system pyproject-build-system)
3663 (native-inputs
3664 (list python-pytest python-pytest-asyncio
3665 python-setuptools python-wheel))
3666 (propagated-inputs (list python-typing-extensions))
3667 (home-page "https://github.com/aio-libs/janus/")
3668 (synopsis
3669 "Sync-async queue to interoperate between asyncio tasks and classic threads")
3670 (description
3671 "Mixed sync-async queue, supposed to be used for communicating between
3672classic synchronous (threaded) code and asynchronous (in terms of
3673@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
3674@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
3675library has two faces: synchronous and asynchronous interface. Synchronous is
3676fully compatible with
3677@url{https://docs.python.org/3/library/queue.html,standard queue},
3678asynchronous one follows
3679@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
3680design}.")
3681 (license license:asl2.0)))
3682
3683(define-public python-concurrent-log-handler
3684 (package
3685 (name "python-concurrent-log-handler")
3686 (version "0.9.25")
3687 ;; No tests in the PyPI tarball.
3688 (source
3689 (origin
3690 (method git-fetch)
3691 (uri (git-reference
3692 (url "https://github.com/Preston-Landers/concurrent-log-handler")
3693 (commit version)))
3694 (file-name (git-file-name name version))
3695 (sha256
3696 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
3697 (build-system pyproject-build-system)
3698 (arguments
3699 (list
3700 ;; XXX: Tests are broken, no new version fixing them yet.
3701 #:tests? #f))
3702 (native-inputs
3703 (list python-hatchling))
3704 (propagated-inputs
3705 (list python-portalocker))
3706 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
3707 (synopsis
3708 "Additional log handler for Python's standard @code{logging} package")
3709 (description
3710 "This package provides an additional log handler for Python's standard
3711@code{logging} package (PEP 282). This handler will write log events to a log
3712file which is rotated when the log file reaches a certain size. Multiple
3713processes can safely write to the same log file concurrently and rotated logs
3714can be gzipped if desired. An optional threaded queue logging handler is
3715provided to perform logging in the background.")
3716 (license license:asl2.0)))
3717
3718(define-public python-lazy
3719 (package
3720 (name "python-lazy")
3721 (version "1.6")
3722 (source
3723 (origin
3724 (method url-fetch)
3725 (uri (pypi-uri "lazy" version))
3726 (sha256
3727 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
3728 (build-system pyproject-build-system)
3729 (native-inputs (list python-pytest python-setuptools python-wheel))
3730 (home-page "https://github.com/stefanholek/lazy")
3731 (synopsis "Lazy attributes for Python objects")
3732 (description "This package provides a decorator to create lazy
3733attributes.")
3734 (license license:bsd-2)))
3735
3736(define-public python-logfury
3737 (package
3738 (name "python-logfury")
3739 (version "1.0.1")
3740 (source
3741 (origin
3742 (method url-fetch)
3743 (uri (pypi-uri "logfury" version))
3744 (sha256
3745 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
3746 (build-system pyproject-build-system)
3747 (native-inputs
3748 (list python-pytest
3749 python-setuptools
3750 python-setuptools-scm
3751 python-testfixtures
3752 python-wheel))
3753 (home-page "https://github.com/reef-technologies/logfury/")
3754 (synopsis "Logging of method calls for python libraries")
3755 (description
3756 "Logfury is a tool for python library maintainers. It allows for
3757responsible, low-boilerplate logging of method calls.")
3758 (license license:bsd-3)))
3759
3760(define-public python-logzero
3761 (package
3762 (name "python-logzero")
3763 (version "1.7.0")
3764 (source
3765 (origin
3766 (method git-fetch)
3767 (uri (git-reference
3768 (url "https://github.com/metachris/logzero")
3769 (commit (string-append "v" version))))
3770 (file-name (git-file-name name version))
3771 (sha256
3772 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
3773 (build-system pyproject-build-system)
3774 (native-inputs (list python-pytest python-setuptools))
3775 (home-page "https://github.com/metachris/logzero")
3776 (synopsis "Robust and effective logging for Python")
3777 (description
3778 "@code{logzero} provides a fully configured Python logger object for
3779easy logging and rotating to a console or a file.")
3780 (license license:expat)))
3781
3782(define-public python-logbook
3783 (package
3784 (name "python-logbook")
3785 (version "1.8.2")
3786 (source
3787 (origin
3788 (method url-fetch)
3789 (uri (pypi-uri "logbook" version))
3790 (sha256
3791 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
3792 (build-system pyproject-build-system)
3793 (native-inputs
3794 (list python-brotli
3795 python-cython
3796 python-pytest
3797 python-setuptools
3798 python-wheel))
3799 (home-page "https://github.com/getlogbook/logbook")
3800 (synopsis "Logbook is a logging replacement for Python")
3801 (description
3802 "Logbook is a logging system for Python that replaces the standard
3803library’s logging module. It was designed with both complex and simple
3804applications in mind and the idea to make logging fun.")
3805 (license license:bsd-3)))
3806
3807(define-public python-databind-core
3808 (package
3809 (name "python-databind-core")
3810 (version "4.4.2")
3811 (source
3812 (origin
3813 (method url-fetch)
3814 (uri (pypi-uri "databind.core" version))
3815 (sha256
3816 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
3817 (snippet
3818 #~(begin (use-modules (guix build utils))
3819 ;; The problem with python-typing-extensions >= 4.7 is only
3820 ;; with python-3.7.
3821 (substitute* "pyproject.toml"
3822 ((",<4.7.*") "\"\n"))))))
3823 (build-system pyproject-build-system)
3824 (arguments
3825 (list
3826 #:phases
3827 #~(modify-phases %standard-phases
3828 (add-after 'install 'fix-name
3829 (lambda* (#:key inputs outputs #:allow-other-keys)
3830 (let* ((sitedir (site-packages inputs outputs))
3831 (dist-info
3832 (string-append sitedir "/databind_core-" #$version ".dist-info")))
3833 (substitute* (string-append dist-info "/METADATA")
3834 (("Name: databind-core")
3835 "Name: databind.core"))
3836 (substitute* (string-append dist-info "/RECORD")
3837 (("databind_core") "databind.core"))
3838 (rename-file dist-info
3839 (string-append sitedir
3840 "/databind.core-"
3841 #$version ".dist-info"))))))))
3842 (propagated-inputs
3843 (list python-deprecated
3844 python-nr-date
3845 python-nr-stream
3846 python-typeapi
3847 python-typing-extensions))
3848 (native-inputs
3849 (list python-poetry-core python-pytest))
3850 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
3851 (synopsis
3852 "Library for de-/serializing Python dataclasses")
3853 (description
3854 "Databind is a library inspired by jackson-databind to de-/serialize
3855Python dataclasses.")
3856 (license license:expat)))
3857
3858(define-public python-databind-json
3859 (package
3860 (name "python-databind-json")
3861 (version "4.4.2")
3862 (source
3863 (origin
3864 (method url-fetch)
3865 (uri (pypi-uri "databind.json" version))
3866 (sha256
3867 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
3868 (snippet
3869 #~(begin (use-modules (guix build utils))
3870 ;; The problem with python-typing-extensions >= 4.7 is only
3871 ;; with python-3.7.
3872 (substitute* "pyproject.toml"
3873 ((",<4.7.*") "\"\n"))))))
3874 (build-system pyproject-build-system)
3875 (arguments
3876 (list
3877 #:phases
3878 #~(modify-phases %standard-phases
3879 (add-after 'install 'fix-name
3880 (lambda* (#:key inputs outputs #:allow-other-keys)
3881 (let* ((sitedir (site-packages inputs outputs))
3882 (dist-info
3883 (string-append sitedir "/databind_json-" #$version ".dist-info")))
3884 (substitute* (string-append dist-info "/METADATA")
3885 (("Name: databind-json")
3886 "Name: databind.json"))
3887 (substitute* (string-append dist-info "/RECORD")
3888 (("databind_json") "databind.json"))
3889 (rename-file dist-info
3890 (string-append sitedir
3891 "/databind.json-"
3892 #$version ".dist-info"))))))))
3893 (propagated-inputs
3894 (list python-databind-core python-nr-date
3895 python-typeapi python-typing-extensions))
3896 (native-inputs (list python-poetry-core python-pytest))
3897 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
3898 (synopsis
3899 "De-/serialize Python dataclasses to or from JSON payloads")
3900 (description
3901 "The @code{databind.json} package implements the de-/serialization to or
3902from JSON payloads using the @code{databind.core} framework.")
3903 (license license:expat)))
3904
3905(define-public python-docspec
3906 (package
3907 (name "python-docspec")
3908 (version "2.2.1")
3909 (source
3910 (origin
3911 (method url-fetch)
3912 (uri (pypi-uri "docspec" version))
3913 (sha256
3914 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
3915 (build-system pyproject-build-system)
3916 (arguments (list #:tests? #false)) ;there are none
3917 (propagated-inputs
3918 (list python-databind-core
3919 python-databind-json
3920 python-deprecated))
3921 (native-inputs
3922 (list python-poetry-core))
3923 (home-page "https://github.com/NiklasRosenstein/python-docspec")
3924 (synopsis "Represent API documentation of programming languages")
3925 (description
3926 "Docspec is a JSON object specification for representing API
3927documentation of programming languages.")
3928 (license license:expat)))
3929
3930(define-public python-docspec-python
3931 (package
3932 (name "python-docspec-python")
3933 (version "2.2.1")
3934 (source
3935 (origin
3936 (method url-fetch)
3937 (uri (pypi-uri "docspec_python" version))
3938 (sha256
3939 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
3940 (build-system pyproject-build-system)
3941 (arguments
3942 (list #:tests? #false)) ;there are none
3943 (propagated-inputs (list python-docspec python-nr-util))
3944 (native-inputs (list python-poetry-core))
3945 (home-page "https://github.com/NiklasRosenstein/docspec/")
3946 (synopsis "Produce docspec data from Python source code")
3947 (description
3948 "This package provides a parser based on @code{lib2to3} producing
3949@code{docspec} data from Python source code.")
3950 (license license:expat)))
3951
3952(define-public python-fqdn
3953 (package
3954 (name "python-fqdn")
3955 (version "1.5.1")
3956 (source
3957 (origin
3958 (method url-fetch)
3959 (uri (pypi-uri "fqdn" version))
3960 (sha256
3961 (base32 "17yqckhymnamszhg06751c83rg3fnr5iy33a135bazvngrkx6phh"))))
3962 (build-system pyproject-build-system)
3963 (arguments (list #:tests? #false)) ;there are none
3964 (propagated-inputs (list python-cached-property))
3965 (native-inputs (list python-setuptools python-wheel))
3966 (home-page "https://github.com/ypcrts/fqdn")
3967 (synopsis "Validate domain names against RFC 1123")
3968 (description
3969 "This package validates fully-qualified domain names against RFC 1123, so
3970that they are acceptable to modern bowsers")
3971 (license license:mpl2.0)))
3972
3973(define-public python-fire
3974 (package
3975 (name "python-fire")
3976 (version "0.7.0")
3977 (source
3978 (origin
3979 (method url-fetch)
3980 (uri (pypi-uri "fire" version))
3981 (sha256
3982 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
3983 (build-system pyproject-build-system)
3984 (propagated-inputs (list python-termcolor))
3985 (native-inputs (list python-pytest python-setuptools python-wheel))
3986 (synopsis "Library for automatically generating command line interfaces")
3987 (description
3988 "Fire is a library for automatically generating command line interfaces
3989from absolutely any Python object. The following are the advantages:
3990@itemize
3991@item A simple way to create a CLI in Python.
3992@item A helpful tool for developing and debugging Python code.
3993@item Helps with exploring existing code or turning other people's code into a
3994command line interface.
3995@item Makes transitioning between Bash and Python easier.
3996@item Makes using a Python REPL easier by setting up the REPL with the modules
3997and variables you'll need already imported and created.
3998@end itemize")
3999 (home-page "https://github.com/google/python-fire")
4000 (license license:asl2.0)))
4001
4002(define-public python-fit-nbinom
4003 (package
4004 (name "python-fit-nbinom")
4005 (version "1.1")
4006 (source (origin
4007 (method url-fetch)
4008 (uri (pypi-uri "fit_nbinom" version))
4009 (sha256
4010 (base32
4011 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
4012 (build-system pyproject-build-system)
4013 (arguments
4014 (list
4015 #:tests? #false ;there are none
4016 #:phases
4017 '(modify-phases %standard-phases
4018 (add-after 'unpack 'remove-invalid-syntax
4019 (lambda _
4020 (substitute* "setup.py"
4021 ((".\\*\"") "\"")))))))
4022 (propagated-inputs (list python-numpy python-scipy))
4023 (native-inputs (list python-setuptools python-wheel))
4024 (home-page "https://github.com/joachimwolff/fit_nbinom")
4025 (synopsis "Negative binomial maximum likelihood estimator")
4026 (description "This package provides an implementation in Python using
4027scipy and numpy of negative binomial maximum likelihood estimation.")
4028 (license license:gpl3+)))
4029
4030(define-public python-docrep
4031 (package
4032 (name "python-docrep")
4033 (version "0.3.2")
4034 (source (origin
4035 (method url-fetch)
4036 (uri (pypi-uri "docrep" version))
4037 (sha256
4038 (base32
4039 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
4040 (build-system pyproject-build-system)
4041 (propagated-inputs (list python-six))
4042 (native-inputs (list python-pytest python-setuptools python-wheel))
4043 (home-page "https://github.com/Chilipp/docrep")
4044 (synopsis "Python package for docstring repetition")
4045 (description "Docrep is the documentation repetition module. This module
4046targets developers that develop complex and nested Python APIs and helps them
4047to create a well-documented piece of software.")
4048 (license license:asl2.0)))
4049
4050(define-public python-dotmap
4051 (package
4052 (name "python-dotmap")
4053 (version "1.3.30")
4054 (source
4055 (origin
4056 (method url-fetch)
4057 (uri (pypi-uri "dotmap" version))
4058 (sha256
4059 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
4060 (build-system pyproject-build-system)
4061 (arguments (list #:test-backend #~'unittest))
4062 (native-inputs (list python-setuptools))
4063 (home-page "https://github.com/drgrib/dotmap")
4064 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
4065 (description
4066 "DotMap is a dot-access dictionary subclass that has dynamic
4067hierarchy creation, can be initialized with keys, can be initialized from a
4068dictionary, can be convert to a dictionary, and is ordered by insertion.")
4069 (license license:expat)))
4070
4071(define-public python-dotty-dict
4072 (package
4073 (name "python-dotty-dict")
4074 (version "1.3.1")
4075 (source
4076 (origin
4077 (method git-fetch)
4078 (uri (git-reference
4079 (url "https://github.com/pawelzny/dotty_dict")
4080 (commit (string-append "v" version))))
4081 (sha256
4082 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
4083 (build-system pyproject-build-system)
4084 (native-inputs
4085 (list python-poetry-core
4086 python-pytest
4087 python-setuptools))
4088 (home-page "https://github.com/pawelzny/dotty_dict")
4089 (synopsis "Python library for accessing dictionaries using a dot syntax")
4090 (description "This package provides a library that wraps the traditional
4091Python dictionaries and provides a syntax to access nested dictionaries values
4092using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
4093 (license license:expat)))
4094
4095(define-public python-affine
4096 (package
4097 (name "python-affine")
4098 (version "2.4.0")
4099 (source (origin
4100 (method url-fetch)
4101 (uri (pypi-uri "affine" version))
4102 (sha256
4103 (base32
4104 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
4105 (build-system pyproject-build-system)
4106 (propagated-inputs (list python-flake8
4107 python-pytest python-pytest-cov))
4108 (native-inputs (list python-flit-core))
4109 (home-page "https://github.com/rasterio/affine")
4110 (synopsis "Matrices describing affine transformation of the plane")
4111 (description "This is a package for matrices describing the affine
4112transformation of the plane.")
4113 (license license:bsd-3)))
4114
4115(define-public python-argopt
4116 (package
4117 (name "python-argopt")
4118 (version "0.9.1")
4119 (source
4120 (origin
4121 (method url-fetch)
4122 (uri (pypi-uri "argopt" version))
4123 (sha256
4124 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
4125 (build-system pyproject-build-system)
4126 (native-inputs
4127 (list python-pytest
4128 python-pytest-timeout
4129 python-setuptools
4130 python-setuptools-scm
4131 python-wheel))
4132 (home-page "https://github.com/casperdcl/argopt")
4133 (synopsis "Generate a command-line interface from a docstring")
4134 (description
4135 "This package provides tools to define a command line interface
4136from a docstring rather than the other way around.")
4137 (license license:mpl2.0)))
4138
4139(define-public python-array-api-compat
4140 (package
4141 (name "python-array-api-compat")
4142 (version "1.12.0")
4143 (source
4144 (origin
4145 (method url-fetch)
4146 (uri (pypi-uri "array_api_compat" version))
4147 (sha256
4148 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
4149 (build-system pyproject-build-system)
4150 ;; Tests would require all supported array libraries, including pytorch
4151 (arguments (list #:tests? #false))
4152 (native-inputs
4153 (list python-setuptools))
4154 (home-page "https://data-apis.org/array-api-compat/")
4155 (synopsis "Array API compatibility wrapper for NumPy et al")
4156 (description
4157 "This package provides a wrapper around @code{NumPy} and other array
4158libraries to make them compatible with the Array API standard")
4159 (license license:expat)))
4160
4161(define-public python-array-api-strict
4162 (package
4163 (name "python-array-api-strict")
4164 (version "2.4.1")
4165 (source
4166 (origin
4167 (method url-fetch)
4168 (uri (pypi-uri "array_api_strict" version))
4169 (sha256
4170 (base32 "0k1v3h54y1yny8mhgwjk6p51zf87farfk1xn9842g5lcrfhxqxvc"))))
4171 (build-system pyproject-build-system)
4172 (arguments
4173 (list
4174 ;; tests: 584 passed, 1 skipped, 2 deselected
4175 #:test-flags
4176 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
4177 #~(list "-k" (string-append "not test_disabled_extensions"
4178 " and not test_environment_variables"))))
4179 (native-inputs
4180 (list python-pytest
4181 python-setuptools
4182 python-setuptools-scm))
4183 (propagated-inputs
4184 (list python-numpy))
4185 (home-page "https://data-apis.org/array-api-strict/")
4186 (synopsis "Strict implementation of the Python array API")
4187 (description
4188 "@code{array_api_strict} is a strict, minimal implementation of the
4189@url{https://data-apis.org/array-api/latest/, Python array API}.
4190
4191The purpose of array-api-strict is to provide an implementation of the array
4192API for consuming libraries to test against so they can be completely sure
4193their usage of the array API is portable.")
4194 (license license:bsd-3)))
4195
4196(define-public python-cachedir-tag
4197 (package
4198 (name "python-cachedir-tag")
4199 (version "0.0.4")
4200 (source
4201 (origin
4202 (method git-fetch)
4203 (uri (git-reference
4204 (url "https://github.com/moreati/python-cachedir-tag")
4205 (commit (string-append "v" version))))
4206 (file-name (git-file-name name version))
4207 (sha256
4208 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
4209 (build-system pyproject-build-system)
4210 (arguments '(#:tests? #f)) ;no test
4211 (native-inputs (list python-setuptools))
4212 (home-page "https://github.com/moreati/python-cachedir-tag")
4213 (synopsis
4214 "Handle @file{CACHEDIR.TAG} in cache directories")
4215 (description
4216 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
4217a file llowing any arbitrary directory to be marked as a cache directory.")
4218 (license license:expat)))
4219
4220(define-public python-cachetools
4221 (package
4222 (name "python-cachetools")
4223 (version "6.1.0")
4224 (source
4225 (origin
4226 (method url-fetch)
4227 (uri (pypi-uri "cachetools" version))
4228 (sha256
4229 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
4230 (build-system pyproject-build-system)
4231 (native-inputs
4232 (list python-pytest
4233 python-setuptools
4234 python-wheel))
4235 (home-page "https://github.com/tkem/cachetools/")
4236 (synopsis "Extensible memoizing collections and decorators")
4237 (description "This module provides various memoizing collections and
4238decorators, including variants of the Python standard library's
4239@code{lru_cache} function decorator.")
4240 (license license:expat)))
4241
4242(define-public python-cachetools-5
4243 (package
4244 (inherit python-cachetools)
4245 (version "5.5.2")
4246 (source
4247 (origin
4248 (method url-fetch)
4249 (uri (pypi-uri "cachetools" version))
4250 (sha256
4251 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
4252
4253(define-public python-colorclass
4254 (package
4255 (name "python-colorclass")
4256 (version "2.2.2")
4257 (source
4258 (origin
4259 (method git-fetch)
4260 (uri (git-reference
4261 (url "https://github.com/matthewdeanmartin/colorclass")
4262 (commit (string-append "v" version))))
4263 (file-name (git-file-name name version))
4264 (sha256
4265 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
4266 (build-system pyproject-build-system)
4267 (arguments
4268 (list
4269 #:test-flags
4270 #~(list "-k" "not test_piped") ; Unclear why this test fails.
4271 #:phases
4272 #~(modify-phases %standard-phases
4273 (add-after 'unpack 'use-poetry-core
4274 (lambda _
4275 ;; Patch to use the core poetry API.
4276 (substitute* "pyproject.toml"
4277 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
4278 (native-inputs (list python-poetry-core python-pytest))
4279 (home-page "https://github.com/matthewdeanmartin/colorclass")
4280 (synopsis "Colorful console applications with Python")
4281 (description
4282 "This package provides an ANSI color text library for Python. It
4283provides automatic coloring for dark or light terminals.")
4284 (license license:expat)))
4285
4286(define-public python-colorcet
4287 (package
4288 (name "python-colorcet")
4289 (version "3.1.1a1")
4290 (source
4291 (origin
4292 (method url-fetch)
4293 (uri (pypi-uri "colorcet" version))
4294 (sha256
4295 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
4296 (build-system pyproject-build-system)
4297 (native-inputs (list python-nbval
4298 python-packaging
4299 python-pytest
4300 python-pytest-mpl
4301 python-setuptools
4302 python-setuptools-scm))
4303 (home-page "https://colorcet.holoviz.org/")
4304 (synopsis "Collection of perceptually uniform colormaps")
4305 (description "Colorcet is a collection of perceptually accurate 256-color
4306colormaps for use with Python plotting programs like Bokeh, Matplotlib,
4307HoloViews, and Datashader.")
4308 (license license:cc-by4.0)))
4309
4310(define-public python-colored
4311 (package
4312 (name "python-colored")
4313 (version "2.3.0")
4314 (source (origin
4315 (method git-fetch)
4316 (uri (git-reference
4317 (url "https://gitlab.com/dslackw/colored")
4318 (commit version)))
4319 (file-name (git-file-name name version))
4320 (sha256
4321 (base32
4322 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
4323 (build-system pyproject-build-system)
4324 (arguments
4325 (list
4326 #:phases
4327 #~(modify-phases %standard-phases
4328 (add-before 'check 'pre-check
4329 (lambda _
4330 ;; Tests expect ANSI escape codes for colors.
4331 (setenv "FORCE_COLOR" "1"))))))
4332 (native-inputs (list python-flit-core python-pytest))
4333 (home-page "https://gitlab.com/dslackw/colored")
4334 (synopsis "Simple library for color and formatting to terminal")
4335 (description "This is a very simple Python library for color and
4336formatting in the terminal. It comes with a collection of color codes and
4337names for 256 color terminal setups.")
4338 (license license:expat)))
4339
4340(define-public python-colored-traceback
4341 ;; No tags in upstream repository.
4342 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
4343 (revision "0"))
4344 (package
4345 (name "python-colored-traceback")
4346 (version (git-version "0.4.2" revision commit))
4347 (source
4348 (origin
4349 (method git-fetch)
4350 (uri (git-reference
4351 (url "https://github.com/staticshock/colored-traceback.py")
4352 (commit commit)))
4353 (file-name (git-file-name name version))
4354 (sha256
4355 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4356 (build-system pyproject-build-system)
4357 (arguments
4358 ;; Tests are incompatible with current python version.
4359 (list #:tests? #f))
4360 (propagated-inputs (list python-colorama python-pygments))
4361 (native-inputs (list python-setuptools python-wheel))
4362 (home-page "https://github.com/staticshock/colored-traceback.py")
4363 (synopsis "Automatically color uncaught exception tracebacks")
4364 (description "This package provides python utilities to automatically
4365color uncaught exception tracebacks.")
4366 (license license:isc))))
4367
4368(define-public python-colorful
4369 (package
4370 (name "python-colorful")
4371 (version "0.5.8")
4372 (source
4373 (origin
4374 (method git-fetch)
4375 (uri (git-reference
4376 (url "https://github.com/timofurrer/colorful")
4377 (commit (string-append "v" version))))
4378 (file-name (git-file-name name version))
4379 (sha256
4380 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4381 (build-system pyproject-build-system)
4382 (native-inputs
4383 (list python-pytest
4384 python-setuptools))
4385 (propagated-inputs
4386 (list python-colorama))
4387 (home-page "http://github.com/timofurrer/colorful")
4388 (synopsis "Terminal string styling")
4389 (description "Colorful provides an array of text styles, that can be used
4390as functions or string constants to form colored terminal output.")
4391 (license license:expat)))
4392
4393(define-public python-colorthief
4394 (package
4395 (name "python-colorthief")
4396 (version "0.2.1")
4397 (source
4398 (origin
4399 (method url-fetch)
4400 (uri (pypi-uri "colorthief" version))
4401 (sha256
4402 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4403 (build-system pyproject-build-system)
4404 (arguments
4405 (list #:tests? #f)) ;no tests in PyPI or Git
4406 (native-inputs (list python-setuptools))
4407 (propagated-inputs (list python-pillow))
4408 (home-page "https://github.com/fengsp/color-thief-py")
4409 (synopsis "Grab the color palette of an image")
4410 (description
4411 "This package provides methods to determine the dominant color
4412of an image, as well as constructing a representative color palette.")
4413 (license license:bsd-3)))
4414
4415(define-public python-construct-classes
4416 (package
4417 (name "python-construct-classes")
4418 (version "0.1.2")
4419 (source
4420 (origin
4421 (method git-fetch)
4422 (uri (git-reference
4423 (url "https://github.com/matejcik/construct-classes")
4424 (commit (string-append "v" version))))
4425 (file-name (git-file-name name version))
4426 (sha256
4427 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4428 (build-system pyproject-build-system)
4429 (propagated-inputs
4430 (list python-construct))
4431 (native-inputs
4432 (list python-poetry-core
4433 python-pytest))
4434 (home-page "https://github.com/matejcik/construct-classes")
4435 (synopsis "Parse binary structs into dataclasses")
4436 (description "This package provides a parser to parse binary structs
4437into dataclasses.")
4438 (license license:expat)))
4439
4440(define-public python-contourpy
4441 (package
4442 (name "python-contourpy")
4443 (version "1.3.3")
4444 (source
4445 (origin
4446 (method url-fetch)
4447 (uri (pypi-uri "contourpy" version))
4448 (sha256
4449 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4450 (build-system pyproject-build-system)
4451 (arguments
4452 (list
4453 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4454 #:test-flags
4455 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4456 #~(list "-m" "not image"
4457 ;; Tests that pass but avoided for load reasons.
4458 "-k" "not test_filled_random_big and not test_lines_random_big")))
4459 (native-inputs
4460 (list pybind11-2
4461 python-meson
4462 python-pytest
4463 python-wurlitzer))
4464 (propagated-inputs
4465 (list python-numpy))
4466 (home-page "https://contourpy.readthedocs.io/")
4467 (synopsis
4468 "Python library for calculating contours of 2D quadrilateral grids")
4469 (description
4470 "ContourPy is a Python library for calculating contours of 2D
4471quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4472 (license license:bsd-3)))
4473
4474(define-public python-lunr
4475 (package
4476 (name "python-lunr")
4477 (version "0.8.0")
4478 (source
4479 (origin
4480 (method url-fetch)
4481 (uri
4482 (pypi-uri "lunr" version))
4483 (sha256
4484 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4485 (build-system pyproject-build-system)
4486 (arguments
4487 (list
4488 #:test-flags
4489 '(list "-k" "not TestLanguageSupport"
4490 "--ignore-glob=tests/acceptance_tests/*")))
4491 (native-inputs
4492 (list python-hatch-fancy-pypi-readme
4493 python-hatchling
4494 python-pytest
4495 python-pytest-timeout))
4496 (propagated-inputs
4497 (list python-nltk))
4498 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4499 (synopsis "Full-text search library")
4500 (description "This package provides python library for full-text search.
4501It indexes documents and provides a search interface for retrieving documents
4502that best match text queries.")
4503 (license license:expat)))
4504
4505(define-public python-mdit-py-plugins
4506 (package
4507 (name "python-mdit-py-plugins")
4508 (version "0.5.0")
4509 (source (origin
4510 (method git-fetch) ;for tests
4511 (uri (git-reference
4512 (url "https://github.com/executablebooks/mdit-py-plugins")
4513 (commit (string-append "v" version))))
4514 (file-name (git-file-name name version))
4515 (sha256
4516 (base32
4517 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4518 (build-system pyproject-build-system)
4519 (propagated-inputs
4520 (list python-markdown-it-py
4521 python-attrs))
4522 (native-inputs
4523 (list python-flit-core
4524 python-pytest
4525 python-pytest-regressions))
4526 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4527 (synopsis "Collection of plugins for markdown-it-py")
4528 (description "This package contains a collection of plugins for
4529@code{markdown-it-py} like:
4530@enumerate
4531@item amsmath,
4532@item attrs,
4533@item container,
4534@item definition list,
4535@item dollarmath,
4536@item field list,
4537@item footnote,
4538@item textmath, and
4539@item wordcount.
4540@end enumerate")
4541 (license license:expat)))
4542
4543(define-public python-mdurl
4544 (package
4545 (name "python-mdurl")
4546 (version "0.1.2")
4547 (source
4548 (origin
4549 (method git-fetch) ; no tests data in PyPi package
4550 (uri (git-reference
4551 (url "https://github.com/executablebooks/mdurl")
4552 (commit version)))
4553 (file-name (git-file-name name version))
4554 (sha256
4555 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4556 (build-system pyproject-build-system)
4557 (native-inputs (list python-flit python-pytest))
4558 (home-page "https://github.com/executablebooks/mdurl")
4559 (synopsis "Markdown URL utilities")
4560 (description
4561 "This package implements a Python port of the JavaScript @code{mdurl}.")
4562 (license license:expat)))
4563
4564(define-public python-mkdocs
4565 (package
4566 (name "python-mkdocs")
4567 (version "1.6.1")
4568 (source
4569 (origin
4570 (method git-fetch)
4571 (uri (git-reference
4572 (url "https://github.com/mkdocs/mkdocs")
4573 (commit version)))
4574 (file-name (git-file-name name version))
4575 (sha256
4576 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4577 (build-system pyproject-build-system)
4578 (arguments
4579 (list
4580 ;; tests: 687 passed
4581 #:test-backend #~'unittest
4582 #:test-flags
4583 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4584 #:phases
4585 #~(modify-phases %standard-phases
4586 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4587 ;; to run tests with pytest (and thus ignore them selectively).
4588 (add-before 'check 'delete-failing-tests
4589 (lambda _
4590 (delete-file "mkdocs/tests/cli_tests.py"))))))
4591 (native-inputs
4592 (list python-hatchling
4593 python-setuptools))
4594 (propagated-inputs
4595 (list python-click
4596 python-ghp-import
4597 python-jinja2
4598 python-markdown
4599 python-markupsafe
4600 python-mergedeep
4601 python-mkdocs-get-deps
4602 python-packaging
4603 python-pathspec
4604 python-pyyaml
4605 python-pyyaml-env-tag
4606 python-watchdog
4607 ;; [optional]
4608 python-babel))
4609 (home-page "https://www.mkdocs.org")
4610 (synopsis "Project documentation with Markdown")
4611 (description
4612 "MkDocs is a static site generator geared towards building project
4613documentation. Documentation source files are written in Markdown, and
4614configured with a single YAML configuration file.")
4615 (license license:bsd-3)))
4616
4617(define-public python-mkdocs-get-deps
4618 (package
4619 (name "python-mkdocs-get-deps")
4620 (version "0.2.0")
4621 (source
4622 (origin
4623 (method git-fetch)
4624 (uri (git-reference
4625 (url "https://github.com/mkdocs/get-deps")
4626 (commit (string-append "v" version))))
4627 (file-name (git-file-name name version))
4628 (sha256
4629 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
4630 (build-system pyproject-build-system)
4631 (native-inputs
4632 (list python-pytest
4633 python-hatchling))
4634 (propagated-inputs
4635 (list python-mergedeep
4636 python-platformdirs
4637 python-pyyaml))
4638 (home-page "https://github.com/mkdocs/get-deps")
4639 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
4640 (description
4641 "This package provides an @code{MkDocs} extension that lists all dependencies
4642according to a mkdocs.yml file. This command guesses the Python dependencies
4643that a MkDocs site requires in order to build. It simply prints the PyPI
4644packages that need to be installed.")
4645 (license license:expat)))
4646
4647(define-public python-mkdocs-markdownextradata-plugin
4648 (package
4649 (name "python-mkdocs-markdownextradata-plugin")
4650 (version "0.2.5")
4651 (source
4652 (origin
4653 (method git-fetch)
4654 (uri (git-reference
4655 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
4656 (commit version)))
4657 (file-name (git-file-name name version))
4658 (sha256
4659 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
4660 (build-system pyproject-build-system)
4661 (native-inputs (list python-pytest python-setuptools))
4662 (propagated-inputs (list python-mkdocs python-pyyaml))
4663 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
4664 (synopsis "Inject extra variables into the MkDocs markdown template")
4665 (description
4666 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
4667variables into the markdown template.")
4668 (license license:expat)))
4669
4670(define-public python-docstring-to-markdown
4671 (package
4672 (name "python-docstring-to-markdown")
4673 (version "0.15")
4674 (source
4675 (origin
4676 (method url-fetch)
4677 (uri (pypi-uri "docstring-to-markdown" version))
4678 (sha256
4679 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
4680 (build-system pyproject-build-system)
4681 (native-inputs
4682 (list python-pytest
4683 python-setuptools))
4684 (home-page "https://github.com/python-lsp/docstring-to-markdown")
4685 (synopsis "On the fly conversion of Python docstrings to markdown")
4686 (description
4687 "This module can convert Python docstrings to Markdown. It can recognise
4688reStructuredText inside docstrings and convert multiple of its features to
4689Markdown. It also includes initial support for Google-formatted docstrings.")
4690 (license license:lgpl2.1+)))
4691
4692(define-public python-pdoc
4693 (package
4694 (name "python-pdoc")
4695 (version "13.0.1")
4696 (source (origin
4697 (method git-fetch)
4698 (uri (git-reference
4699 (url "https://github.com/mitmproxy/pdoc")
4700 (commit (string-append "v" version))))
4701 (file-name (git-file-name name version))
4702 (sha256
4703 (base32
4704 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
4705 (build-system pyproject-build-system)
4706 (native-inputs (list python-pytest python-jinja2 python-pygments
4707 python-setuptools python-wheel))
4708 (arguments
4709 (list
4710 ;; Some tests fail, presumably because of slight version mismatches of
4711 ;; the dependencies.
4712 #:test-flags
4713 '(list "-k" (string-append "not test_var_with_raising_repr and "
4714 "not test_smoke[mock] and "
4715 "not test_snapshots[html"))))
4716 (home-page "https://pdoc.dev/")
4717 (synopsis "API documentation for Python projects")
4718 (description "pdoc auto-generates API documentation that follows your
4719project's Python module hierarchy. It requires no configuration, has
4720first-class support for type annotations, cross-links between identifiers,
4721comes with an integrated live-reloading web server, uses customizable HTML
4722templates, understands numpydoc and Google-style docstrings.")
4723 (license license:unlicense)))
4724
4725(define-public python-py4j
4726 (package
4727 (name "python-py4j")
4728 (version "0.10.9.7")
4729 (source (origin
4730 (method url-fetch)
4731 (uri (pypi-uri "py4j" version))
4732 (sha256
4733 (base32
4734 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
4735 (build-system pyproject-build-system)
4736 (arguments (list #:tests? #f)) ; Requires a running JVM?
4737 (native-inputs (list python-setuptools))
4738 (home-page "https://www.py4j.org/")
4739 (synopsis "Dynamically access arbitrary Java objects from Python")
4740 (description
4741 "This package enables Python programs to dynamically access arbitrary
4742Java objects.")
4743 (license license:bsd-3)))
4744
4745(define-public python-pymdown-extensions
4746 (package
4747 (name "python-pymdown-extensions")
4748 (version "10.16.1")
4749 (source
4750 (origin
4751 (method git-fetch)
4752 (uri (git-reference
4753 (url "https://github.com/facelessuser/pymdown-extensions")
4754 (commit version)))
4755 (file-name (git-file-name name version))
4756 (sha256
4757 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
4758 (build-system pyproject-build-system)
4759 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
4760 (arguments
4761 (list #:tests? #f))
4762 (native-inputs (list python-hatchling python-pytest python-pyyaml))
4763 (propagated-inputs (list python-markdown))
4764 (home-page "https://github.com/facelessuser/pymdown-extensions")
4765 (synopsis "Extension pack for Python Markdown")
4766 (description
4767 "PyMdown Extensions is a collection of extensions for Python Markdown.
4768All extensions are found under the module namespace of pymdownx.")
4769 (license license:expat)))
4770
4771(define-public python-plotext
4772 (package
4773 (name "python-plotext")
4774 (version "5.2.8")
4775 (source (origin
4776 (method url-fetch)
4777 (uri (pypi-uri "plotext" version))
4778 (sha256
4779 (base32
4780 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
4781 (build-system pyproject-build-system)
4782 (arguments (list #:tests? #false)) ;there are none
4783 (native-inputs (list python-setuptools python-wheel))
4784 (home-page "https://github.com/piccolomo/plotext")
4785 (synopsis "Plots in the terminal")
4786 (description "Plotext lets you plot directly to the terminal.")
4787 (license license:expat)))
4788
4789(define-public python-plotille
4790 (package
4791 (name "python-plotille")
4792 (version "5.0.0")
4793 (source
4794 (origin
4795 (method git-fetch)
4796 (uri (git-reference
4797 (url "https://github.com/tammoippen/plotille")
4798 (commit (string-append "v" version))))
4799 (file-name (git-file-name name version))
4800 (sha256
4801 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
4802 (modules '((guix build utils)))
4803 (snippet
4804 #~(begin
4805 ;; Without deleting ./imgs setuptools complains as follows: error:
4806 ;; Multiple top-level packages discovered in a flat-layout:
4807 ;; ['imgs', 'plotille'].
4808 (delete-file-recursively "./imgs")))))
4809 (build-system pyproject-build-system)
4810 (native-inputs
4811 (list python-pytest
4812 python-mock
4813 python-pendulum
4814 python-pytest-mock
4815 python-setuptools
4816 python-wheel))
4817 (home-page "https://github.com/tammoippen/plotille")
4818 (synopsis "Plot in the terminal using braille dots")
4819 (description
4820 "Plotille provides a figure class and graphing functions to create plots,
4821scatter plots, histograms and heatmaps in the terminal using braille dots.")
4822 (license license:expat)))
4823
4824(define-public python-poetry-dynamic-versioning
4825 (package
4826 (name "python-poetry-dynamic-versioning")
4827 (version "1.9.1")
4828 (source
4829 (origin
4830 (method url-fetch)
4831 (uri (pypi-uri "poetry_dynamic_versioning" version))
4832 (sha256
4833 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
4834 (build-system pyproject-build-system)
4835 (arguments
4836 (list
4837 #:test-flags
4838 #~(list "--ignore=tests/test_integration.py"
4839 "-k" (string-join
4840 ;; Tests searching for VCS back end.
4841 (list "not test__get_version__defaults"
4842 "test__enable_in_doc__project_with_dynamic"
4843 "test__enable_in_doc__project_with_version"
4844 "test__get_version__format_jinja"
4845 "test__get_version__format_jinja_imports_with_module_and_item"
4846 "test__get_version__format_jinja_imports_with_module_only"
4847 "test__get_version__format_jinja_with_enforced_style")
4848 " and not "))))
4849 (native-inputs
4850 (list python-poetry-core
4851 python-pytest))
4852 (propagated-inputs
4853 (list python-dunamai
4854 python-jinja2
4855 python-tomlkit))
4856 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
4857 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
4858 (description
4859 "This package provides a build backend that patches Poetry Core to enable
4860the versioning system in PEP 517 build frontends.")
4861 (license license:expat)))
4862
4863(define-public python-poetry-plugin-export
4864 (package
4865 (name "python-poetry-plugin-export")
4866 (version "1.10.0")
4867 (source
4868 (origin
4869 (method url-fetch)
4870 (uri (pypi-uri "poetry_plugin_export" version))
4871 (sha256
4872 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
4873 (build-system pyproject-build-system)
4874 (arguments
4875 (list
4876 #:tests? #f)) ;tests cycle with poetry
4877 (native-inputs
4878 (list python-poetry-core))
4879 (propagated-inputs
4880 (list python-cachy
4881 python-pendulum
4882 python-poetry-core
4883 python-tomlkit))
4884 (home-page "https://python-poetry.org/")
4885 (synopsis "Poetry plugin to export the dependencies to various formats")
4886 (description
4887 "Poetry plugin to export the dependencies to various formats.")
4888 (license license:expat)))
4889
4890(define-public python-portpicker
4891 (package
4892 (name "python-portpicker")
4893 (version "1.6.0")
4894 (source
4895 (origin
4896 (method url-fetch)
4897 (uri (pypi-uri "portpicker" version))
4898 (sha256
4899 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
4900 (build-system pyproject-build-system)
4901 (arguments
4902 (list
4903 #:test-flags
4904 ;; This fails because portserver ends up in bin, not site-packages
4905 '(list "--ignore=src/tests/portserver_test.py")))
4906 (propagated-inputs (list python-psutil))
4907 (native-inputs (list python-pytest python-setuptools python-wheel
4908 net-tools))
4909 (home-page "https://github.com/google/python_portpicker")
4910 (synopsis "Choose unique available network ports")
4911 (description
4912 "This package provides a library to choose unique available network
4913ports.")
4914 (license license:asl2.0)))
4915
4916(define-public python-md-ulb-pwrap
4917 (package
4918 (name "python-md-ulb-pwrap")
4919 (version "0.1.3")
4920 (source
4921 (origin
4922 (method git-fetch)
4923 (uri (git-reference
4924 (url "https://github.com/mondeja/md-ulb-pwrap")
4925 (commit (string-append "v" version))))
4926 (file-name (git-file-name name version))
4927 (sha256
4928 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
4929 (build-system pyproject-build-system)
4930 (arguments
4931 (list
4932 #:imported-modules `(,@%cargo-build-system-modules
4933 ,@%pyproject-build-system-modules)
4934 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4935 (guix build pyproject-build-system)
4936 (guix build utils))
4937 #:test-backend #~'custom
4938 #:test-flags #~(list "test.py")
4939 #:phases
4940 #~(modify-phases %standard-phases
4941 (add-after 'unpack 'prepare-cargo-build-system
4942 (lambda args
4943 (for-each
4944 (lambda (phase)
4945 (format #t "Running cargo phase: ~a~%" phase)
4946 (apply (assoc-ref cargo:%standard-phases phase)
4947 #:cargo-target #$(cargo-triplet)
4948 args))
4949 '(unpack-rust-crates
4950 configure
4951 check-for-pregenerated-files
4952 patch-cargo-checksums))))
4953 (add-after 'prepare-cargo-build-system 'chdir
4954 (lambda _
4955 (chdir "python"))))))
4956 (native-inputs
4957 (append
4958 (list maturin
4959 python-pytest
4960 python-unicode-linebreak
4961 rust
4962 `(,rust "cargo"))
4963 (or (and=> (%current-target-system)
4964 (compose list make-rust-sysroot))
4965 '())))
4966 (inputs (cargo-inputs 'md_ulb_pwrap))
4967 (home-page "https://github.com/mondeja/md-ulb-pwrap")
4968 (synopsis "Markdown paragraph wrapper")
4969 (description
4970 "This package provides a Markdown paragraph wrapper using Unicode Line
4971Breaking Algorithm written in Rust with Python bindings.")
4972 (license license:expat)))
4973
4974(define-public python-mdx-gh-links
4975 (package
4976 (name "python-mdx-gh-links")
4977 (version "0.4")
4978 (source
4979 (origin
4980 (method url-fetch)
4981 (uri (pypi-uri "mdx_gh_links" version))
4982 (sha256
4983 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
4984 (build-system pyproject-build-system)
4985 (arguments (list #:tests? #f)) ;tests connect github
4986 (native-inputs (list python-setuptools))
4987 (propagated-inputs (list python-markdown))
4988 (home-page "https://github.com/Python-Markdown/github-links/")
4989 (synopsis "Python-Markdown extension adding support for shorthand links")
4990 (description "This package is an extension to Python-Markdown which adds
4991support for shorthand links to GitHub users, repositories, issues and
4992commits.")
4993 (license license:bsd-3)))
4994
4995(define-public python-mkdocs-material
4996 (package
4997 (name "python-mkdocs-material")
4998 (version "7.3.6")
4999 (source
5000 (origin
5001 (method git-fetch)
5002 (uri (git-reference
5003 (url "https://github.com/squidfunk/mkdocs-material")
5004 (commit version)))
5005 (file-name (git-file-name name version))
5006 (sha256
5007 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
5008 (modules '((guix build utils)))
5009 (snippet
5010 ;; TODO There are still bundled assets and minified JS.
5011 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
5012 (build-system pyproject-build-system)
5013 (arguments
5014 (list
5015 #:tests? #f ; No tests.
5016 #:phases
5017 #~(let ((symlink-js
5018 (lambda (inputs)
5019 (for-each
5020 (lambda (lang)
5021 (let* ((filename (string-append "lunr." lang ".min.js"))
5022 (file (string-append "share/javascript/" filename)))
5023 (symlink (search-input-file inputs file) filename)))
5024 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
5025 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
5026 "vi")))))
5027 (modify-phases %standard-phases
5028 ;; Requirement mkdocs-material-extensions
5029 ;; in-turn requires mkdocs-material. This causes
5030 ;; circular dependency, so we remove this requirement.
5031 (add-after 'unpack 'patch-requirements
5032 (lambda _
5033 (substitute* "requirements.txt"
5034 (("mkdocs-material-extensions.*$")
5035 ""))))
5036 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
5037 (lambda* (#:key inputs #:allow-other-keys)
5038 (mkdir-p "material/assets/javascripts/lunr/min")
5039 (with-directory-excursion "material/assets/javascripts/lunr/min"
5040 (symlink-js inputs))))
5041 (add-after 'wrap 'replace-javascript-assets
5042 (lambda* (#:key inputs outputs #:allow-other-keys)
5043 (let* ((site (site-packages inputs outputs))
5044 (js-assets (string-append site "/material/"
5045 "assets/javascripts")))
5046 (with-directory-excursion js-assets
5047 (delete-file-recursively "lunr/min")
5048 (mkdir-p "lunr/min")
5049 (with-directory-excursion "lunr/min"
5050 (symlink-js inputs))))))))))
5051 (native-inputs (list python-setuptools))
5052 (inputs (list js-lunr-ar
5053 js-lunr-da
5054 js-lunr-de
5055 js-lunr-es
5056 js-lunr-fi
5057 js-lunr-fr
5058 js-lunr-hu
5059 js-lunr-it
5060 js-lunr-ja
5061 js-lunr-nl
5062 js-lunr-no
5063 js-lunr-pt
5064 js-lunr-ro
5065 js-lunr-ru
5066 js-lunr-sv
5067 js-lunr-tr
5068 js-lunr-vi
5069 js-lunr-multi
5070 js-lunr-stemmer-support))
5071 (propagated-inputs
5072 (list python-markdown python-mkdocs python-pygments
5073 python-pymdown-extensions))
5074 (home-page "https://squidfunk.github.io/mkdocs-material/")
5075 (synopsis "Material Design theme for MkDocs")
5076 (description "This package provides a theme plugin for the static site
5077generator MkDocs.")
5078 (license license:expat)))
5079
5080(define-public python-nanobind
5081 (package
5082 (name "python-nanobind")
5083 (version "2.10.2")
5084 (source
5085 (origin
5086 (method url-fetch)
5087 (uri (pypi-uri "nanobind" version))
5088 (sha256
5089 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
5090 (build-system pyproject-build-system)
5091 (arguments
5092 (list
5093 ;; tests: 466 passed, 27 skipped
5094 #:phases
5095 #~(modify-phases %standard-phases
5096 (add-before 'build 'configure-cmake
5097 (lambda _
5098 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
5099 (add-after 'configure-cmake 'build-c++
5100 (lambda _
5101 (invoke "cmake" "--build" "build" "-j" "2")))
5102 (add-before 'check 'pre-check
5103 (lambda _ (chdir "build"))))))
5104 (native-inputs
5105 (list cmake-minimal
5106 python-numpy
5107 python-pathspec
5108 python-pytest
5109 python-scikit-build-core
5110 python-scipy))
5111 (inputs
5112 (list eigen))
5113 (home-page "https://github.com/wjakob/nanobind/")
5114 (synopsis "Tiny and efficient C++/Python bindings")
5115 (description "Nanobind is a small binding library that exposes C++ types
5116in Python and vice versa. It is reminiscent of @code{Boost.Python} and
5117@code{pybind11} and uses near-identical syntax. In contrast to these existing
5118tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
5119of time, produce smaller binaries, and have better runtime performance.")
5120 (license license:bsd-3)))
5121
5122(define-public python-nr-date
5123 (package
5124 (name "python-nr-date")
5125 (version "2.1.0")
5126 (source
5127 (origin
5128 (method url-fetch)
5129 (uri (pypi-uri "nr_date" version))
5130 (sha256
5131 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
5132 (build-system pyproject-build-system)
5133 (arguments (list #:tests? #false)) ;there are none
5134 (native-inputs (list python-poetry-core))
5135 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
5136 (synopsis "Fast, regex-based date parsing library in plain Python")
5137 (description "This package provides a fast, regex-based date parsing
5138library in pure Python.")
5139 (license license:expat)))
5140
5141(define-public python-nr-stream
5142 (package
5143 (name "python-nr-stream")
5144 (version "1.1.5")
5145 (source
5146 (origin
5147 (method url-fetch)
5148 (uri (pypi-uri "nr_stream" version))
5149 (sha256
5150 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
5151 (build-system pyproject-build-system)
5152 (arguments (list #:tests? #false)) ;there are none
5153 (native-inputs (list python-poetry-core))
5154 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
5155 (synopsis "Stream and Optional classes for Python")
5156 (description "This package provides a @code{Stream} and @code{Optional}
5157class.")
5158 (license license:expat)))
5159
5160(define-public python-nr-util
5161 (package
5162 (name "python-nr-util")
5163 (version "0.8.12")
5164 (source
5165 (origin
5166 (method url-fetch)
5167 (uri (pypi-uri "nr.util" version))
5168 (sha256
5169 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
5170 (build-system pyproject-build-system)
5171 (arguments
5172 (list
5173 #:tests? #false ;there are none
5174 #:phases
5175 #~(modify-phases %standard-phases
5176 (add-after 'unpack 'patch-build-system
5177 (lambda _
5178 (substitute* "pyproject.toml"
5179 (("^config =.*") "config = []\n"))))
5180 (add-after 'install 'fix-name
5181 (lambda* (#:key inputs outputs #:allow-other-keys)
5182 (let* ((sitedir (site-packages inputs outputs))
5183 (dist-info
5184 (string-append sitedir "/nr_util-" #$version ".dist-info")))
5185 (substitute* (string-append dist-info "/METADATA")
5186 (("Name: nr-util")
5187 "Name: nr.util"))
5188 (substitute* (string-append dist-info "/RECORD")
5189 (("nr_util") "nr.util"))
5190 (rename-file dist-info
5191 (string-append sitedir
5192 "/nr.util-"
5193 #$version ".dist-info"))))))))
5194 (propagated-inputs (list python-deprecated python-typing-extensions))
5195 (native-inputs (list python-poetry-core))
5196 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
5197 (synopsis "General purpose Python utility library")
5198 (description "This package provides a general purpose Python utility
5199library.")
5200 (license license:expat)))
5201
5202(define-public python-slicerator
5203 (package
5204 (name "python-slicerator")
5205 (version "1.1.0")
5206 (source
5207 (origin
5208 (method url-fetch)
5209 (uri (pypi-uri "slicerator" version))
5210 (sha256
5211 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
5212 (build-system pyproject-build-system)
5213 (native-inputs
5214 (list python-numpy
5215 python-pytest
5216 python-setuptools))
5217 (home-page "https://github.com/soft-matter/slicerator")
5218 (synopsis "Lazy-loading, fancy-sliceable iterable")
5219 (description
5220 "This package provides a lazy-loading, fancy-sliceable iterable. Think
5221of it like a generator that is \"reusable\" and has a length.")
5222 (license license:bsd-3)))
5223
5224(define-public python-pytelegrambotapi
5225 (package
5226 (name "python-pytelegrambotapi")
5227 (version "4.22.0")
5228 (source
5229 (origin
5230 (method git-fetch)
5231 (uri (git-reference
5232 (url "https://github.com/eternnoir/pyTelegramBotAPI")
5233 (commit version)))
5234 (file-name (git-file-name name version))
5235 (sha256
5236 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
5237 (build-system pyproject-build-system)
5238 (arguments
5239 (list
5240 #:phases
5241 #~(modify-phases %standard-phases
5242 (replace 'check
5243 (lambda* (#:key tests? #:allow-other-keys)
5244 (when tests?
5245 (with-directory-excursion "tests"
5246 (invoke "py.test"))))))))
5247 (propagated-inputs
5248 (list python-requests))
5249 (native-inputs
5250 (list python-hatchling python-pytest))
5251 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
5252 (synopsis "Python Telegram bot api")
5253 (description "This package provides a simple, but extensible Python
5254implementation for the Telegram Bot API.")
5255 (license license:gpl2)))
5256
5257(define-public python-pytoolconfig
5258 (package
5259 (name "python-pytoolconfig")
5260 (version "1.3.1")
5261 (source
5262 (origin
5263 (method url-fetch)
5264 (uri (pypi-uri "pytoolconfig" version))
5265 (sha256
5266 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
5267 (build-system pyproject-build-system)
5268 (arguments
5269 (list
5270 #:test-flags
5271 ;; Requires Sphinx.
5272 #~(list "--ignore=tests/test_documentation.py")))
5273 (native-inputs
5274 (list python-pdm-backend
5275 python-pytest))
5276 (propagated-inputs
5277 (list python-tomli
5278 python-packaging
5279 python-platformdirs))
5280 (home-page "https://pypi.org/project/pytoolconfig/")
5281 (synopsis "Python tool configuration")
5282 (description "The goal of this project is to manage configuration for
5283Python tools, such as rope and add support for a @file{pyproject.toml}
5284configuration file.")
5285 (license license:lgpl3+)))
5286
5287(define-public python-pytooling
5288 (package
5289 (name "python-pytooling")
5290 (version "8.15.0")
5291 (source
5292 (origin
5293 (method git-fetch)
5294 (uri (git-reference
5295 (url "https://github.com/pyTooling/pyTooling/")
5296 (commit (string-append "v" version))))
5297 (file-name (git-file-name name version))
5298 (sha256
5299 (base32 "07h2hj00vs6svjn6qgjf7k914l0ng0zz7d9h9agjfzya33qn06yp"))))
5300 (build-system pyproject-build-system)
5301 (arguments
5302 (list
5303 ;; Tests do not support linux-i686 system: Exception: Unknown
5304 ;; architecture 'linux-i686' for a native Linux.
5305 #:tests? (not (or (%current-target-system)
5306 (target-x86-32?)))
5307 #:test-flags
5308 #~(list
5309 "tests/unit"
5310 ;; These tests try to access the network.
5311 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
5312 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
5313 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
5314 #:phases
5315 #~(modify-phases %standard-phases
5316 (add-after 'unpack 'patch-git-bin-for-tests
5317 (lambda* (#:key inputs #:allow-other-keys)
5318 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
5319 "tests/unit/CLIAbstraction/Program.py")
5320 (("/usr/bin")
5321 (dirname (search-input-file inputs "/bin/git")))))))))
5322 (native-inputs
5323 (list git-minimal/pinned
5324 python-aiohttp
5325 python-colorama
5326 python-pytest
5327 python-requests
5328 python-ruamel.yaml
5329 python-setuptools))
5330 (home-page "https://pytooling.github.io/pyTooling/")
5331 (synopsis "Miscellaneous Python tools")
5332 (description
5333 "pyTooling is a collection of (abstract) data models, lacking classes,
5334decorators, a new performance boosting meta-class, and enhanced exceptions.
5335It also provides lots of helper functions---e.g., to ease the handling of
5336package descriptions or to unify multiple existing APIs into a single API.")
5337 (license license:asl2.0)))
5338
5339(define-public python-colorlog
5340 (package
5341 (name "python-colorlog")
5342 (version "6.9.0")
5343 (source
5344 (origin
5345 (method url-fetch)
5346 (uri (pypi-uri "colorlog" version))
5347 (sha256
5348 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5349 (build-system pyproject-build-system)
5350 (native-inputs
5351 (list python-pytest
5352 python-setuptools))
5353 (home-page "https://github.com/borntyping/python-colorlog")
5354 (synopsis "Log formatting with colors for python")
5355 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5356with Python's logging module that outputs records using terminal colors.")
5357 (license license:expat)))
5358
5359(define-public python-pyprind
5360 (package
5361 (name "python-pyprind")
5362 (version "2.11.3")
5363 (source
5364 (origin
5365 (method url-fetch)
5366 (uri (pypi-uri "PyPrind" version))
5367 (sha256
5368 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5369 (build-system pyproject-build-system)
5370 (native-inputs (list python-pytest python-setuptools))
5371 (propagated-inputs (list python-psutil))
5372 (home-page "https://github.com/rasbt/pyprind")
5373 (synopsis "Python Progress Bar and Percent Indicator Utility")
5374 (description
5375 "The PyPrind (Python Progress Indicator) module provides a progress bar
5376and a percentage indicator object that let you track the progress of a loop
5377structure or other iterative computation.")
5378 (license license:bsd-3)))
5379
5380(define-public python-gh-md-to-html
5381 (package
5382 (name "python-gh-md-to-html")
5383 (version "1.21.2")
5384 (source
5385 (origin
5386 (method url-fetch)
5387 (uri (pypi-uri "gh_md_to_html" version))
5388 (sha256
5389 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5390 (build-system pyproject-build-system)
5391 (arguments
5392 (list
5393 #:tests? #false ;there are none
5394 #:phases
5395 #~(modify-phases %standard-phases
5396 (add-after 'unpack 'relax-shellescape-requirement
5397 (lambda _
5398 (substitute* "src/__init__.py"
5399 (("import shellescape")
5400 "import shlex")
5401 (("shellescape\\.quote")
5402 "shlex.quote"))
5403 (substitute* "setup.py"
5404 (("\"shellescape\",")
5405 "")))))))
5406 (propagated-inputs
5407 (list python-beautifulsoup4
5408 python-emoji-for-gh-md-to-html
5409 python-pillow
5410 python-requests
5411 python-webcolors))
5412 (native-inputs (list python-setuptools))
5413 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5414 (synopsis "Github-flavored Markdown")
5415 (description
5416 "This package provides a feature-rich Github-flavored Markdown to HTML
5417Python library and command line interface.")
5418 (license license:expat)))
5419
5420(define-public python-gfloat
5421 (package
5422 (name "python-gfloat")
5423 (version "0.5.2")
5424 (source
5425 (origin
5426 (method url-fetch)
5427 (uri (pypi-uri "gfloat" version))
5428 (sha256
5429 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5430 (build-system pyproject-build-system)
5431 (arguments
5432 (list
5433 #:test-flags
5434 #~(list
5435 "--ignore=test/test_array_api.py" ;requires array_api_strict
5436 "--ignore=test/test_jax.py" ;requires python-jax
5437 "--ignore=test/test_microxcaling.py" ;requires torchao
5438 ;; Jupyter.
5439 "--ignore-glob=docs/source/*.ipynb")))
5440 (propagated-inputs
5441 (list python-array-api-compat python-more-itertools python-numpy))
5442 (native-inputs (list python-nbval
5443 python-ml-dtypes
5444 python-pytest
5445 python-pytorch
5446 python-setuptools
5447 openssl))
5448 (home-page "https://github.com/graphcore-research/gfloat")
5449 (synopsis "Generic floating point handling in Python")
5450 (description
5451 "This package provides an implementation of generic floating point encode
5452and decode logic in Python. It handles various current and proposed floating
5453point types:
5454
5455@itemize
5456@item IEEE 754: Binary16, Binary32
5457@item OCP Float8: E5M2, E4M3
5458@item IEEE WG P3109
5459@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5460@end itemize")
5461 (license license:expat)))
5462
5463(define-public python-glymur
5464 (package
5465 (name "python-glymur")
5466 (version "0.14.8")
5467 (source
5468 (origin
5469 (method git-fetch)
5470 (uri (git-reference
5471 (url "https://github.com/quintusdias/glymur")
5472 (commit (string-append "v" version))))
5473 (file-name (git-file-name name version))
5474 (sha256
5475 (base32 "0jhnr5p8lrycf9bn9p429rkc82aayc0bjf0pivk870a954br268h"))))
5476 (build-system pyproject-build-system)
5477 (arguments
5478 (list
5479 #:test-flags
5480 #~(list "--numprocesses" (number->string (parallel-job-count))
5481 ;; Failing test due to inability of ctypes.util.find_library()
5482 ;; to determine library path, which is patched above.
5483 "--ignore=tests/test_config.py")
5484 #:phases
5485 #~(modify-phases %standard-phases
5486 (add-after 'unpack 'patch-library-locations
5487 (lambda* (#:key inputs #:allow-other-keys)
5488 ;; XXX: It's a workaround for Python inability to find the
5489 ;; .so libraries with ctypes.util.find_library()
5490 (substitute* '("glymur/config.py")
5491 (("path = find_library\\(libname\\)")
5492 (string-append
5493 "if libname == \"openjp2\":\n"
5494 " path = \""
5495 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5496 " elif libname == \"tiff\":\n"
5497 " path = \""
5498 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5499 " elif libname == \"c\":\n"
5500 " path = \""
5501 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5502 (native-inputs
5503 (list python-pytest
5504 python-pytest-xdist
5505 python-scikit-image
5506 python-setuptools))
5507 (inputs
5508 (list openjpeg ; glymur/lib/openjp2.py
5509 libtiff)) ; glymur/lib/tiff.py
5510 (propagated-inputs
5511 (list python-lxml
5512 python-numpy
5513 python-pillow ))
5514 (home-page "https://github.com/quintusdias/glymur")
5515 (synopsis "Python interface to OpenJPEG and LibTIFF")
5516 (description
5517 "This package provides Python interface to the OpenJPEG library which
5518allows one to read and write JPEG 2000 files")
5519 (license license:expat)))
5520
5521(define-public python-gphoto2
5522 (package
5523 (name "python-gphoto2")
5524 (version "2.6.1")
5525 (source
5526 (origin
5527 (method git-fetch) ; no tests in PyPI
5528 (uri (git-reference
5529 (url "https://github.com/jim-easterbrook/python-gphoto2")
5530 (commit (string-append "v" version))))
5531 (file-name (git-file-name name version))
5532 (sha256
5533 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5534 (build-system pyproject-build-system)
5535 (native-inputs
5536 (list pkg-config python-pytest python-setuptools python-wheel))
5537 (inputs
5538 (list libgphoto2))
5539 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5540 (synopsis "Python interface to libgphoto2")
5541 (description "@code{python-gphoto2} is a comprehensive Python interface
5542(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5543automatically generate the interface code.")
5544 (license license:lgpl3+)))
5545
5546(define-public python-colour
5547 (package
5548 (name "python-colour")
5549 (version "0.1.5")
5550 (source
5551 (origin
5552 (method git-fetch)
5553 (uri (git-reference
5554 (url "https://github.com/vaab/colour")
5555 (commit version)))
5556 (file-name (git-file-name name version))
5557 (sha256
5558 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5559 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5560 (build-system pyproject-build-system)
5561 (arguments
5562 (list
5563 #:tests? #f ; No tests.
5564 #:phases
5565 #~(modify-phases %standard-phases
5566 (add-after 'unpack 'set-version
5567 (lambda _
5568 (substitute* "autogen.sh"
5569 (("if ! \"\\$git\".*")
5570 "if false ; then\n")
5571 (("depends git grep")
5572 "depends grep")
5573 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5574 (format #f "version=~s" #$version))))))))
5575 (native-inputs (list python-setuptools))
5576 (home-page "https://github.com/vaab/colour")
5577 (synopsis "Convert and manipulate various color representations")
5578 (description
5579 "This package provides a pythonic way to manipulate color representations
5580(HSL, RVB,web, X11, ...).")
5581 (license license:expat)))
5582
5583(define-public python-rapidfuzz
5584 (package
5585 (name "python-rapidfuzz")
5586 (version "3.14.3")
5587 (source
5588 (origin
5589 (method git-fetch)
5590 (uri (git-reference
5591 (url "https://github.com/rapidfuzz/RapidFuzz")
5592 (commit (string-append "v" version))))
5593 (file-name (git-file-name name version))
5594 (sha256
5595 (base32 "1vnm1yx12am0ffbh0fj4nd8l1h0m299hdsw6kcp0pmgnl1jxxr8c"))))
5596 (build-system pyproject-build-system)
5597 (native-inputs
5598 (list cmake-minimal
5599 python-cython
5600 python-numpy
5601 python-pandas
5602 python-pytest
5603 python-scikit-build-core
5604 rapidfuzz-cpp
5605 taskflow))
5606 (home-page "https://github.com/rapidfuzz/RapidFuzz")
5607 (synopsis "Rapid fuzzy string matching")
5608 (description
5609 "RapidFuzz is a fast string matching library for Python and
5610C++, which is using the string similarity calculations from FuzzyWuzzy.")
5611 (license license:expat)))
5612
5613(define-public python-easygui
5614 (package
5615 (name "python-easygui")
5616 (version "0.98.1")
5617 (source
5618 (origin
5619 (method git-fetch)
5620 (uri (git-reference
5621 (url "https://github.com/robertlugg/easygui")
5622 (commit version)))
5623 (file-name (git-file-name name version))
5624 (sha256
5625 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
5626 (build-system pyproject-build-system)
5627 (arguments
5628 ;; XXX: There seem to be no tests upstream, although the package itself
5629 ;; seems to provide a lot of demo elements.
5630 (list #:tests? #f))
5631 (native-inputs (list python-pytest python-setuptools))
5632 (propagated-inputs (list `(,python "tk")))
5633 (home-page "https://github.com/robertlugg/easygui")
5634 (synopsis "GUI programming module for Python")
5635 (description
5636 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
5637different from other GUI generators in that EasyGUI is NOT event-driven.
5638Instead, all GUI interactions are invoked by simple function calls.")
5639 (license license:bsd-3)))
5640
5641(define-public python-echo
5642 (package
5643 (name "python-echo")
5644 (version "0.12.1")
5645 (source
5646 (origin
5647 (method url-fetch)
5648 (uri (pypi-uri "echo" version))
5649 (sha256
5650 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
5651 (build-system pyproject-build-system)
5652 (arguments
5653 (list
5654 #:phases
5655 #~(modify-phases %standard-phases
5656 (add-before 'check 'start-xorg-server
5657 (lambda _
5658 ;; The test suite requires a running X server.
5659 (system "Xvfb :99 -screen 0 1024x768x24 &")
5660 (setenv "DISPLAY" ":99.0"))))))
5661 (propagated-inputs
5662 (list python-numpy
5663 python-qtpy
5664 python-pyqt-6))
5665 (native-inputs
5666 (list python-pytest
5667 python-setuptools
5668 python-setuptools-scm
5669 xorg-server-for-tests))
5670 (home-page "https://github.com/glue-viz/echo")
5671 (synopsis "Callback Properties in Python")
5672 (description
5673 "Echo is a small library for attaching callback functions to property
5674state changes.")
5675 (license license:expat)))
5676
5677(define-public python-pymd4c
5678 (package
5679 (name "python-pymd4c")
5680 (version "1.3.0")
5681 (source
5682 (origin
5683 (method git-fetch)
5684 (uri (git-reference
5685 (url "https://github.com/dominickpastore/pymd4c")
5686 (commit (string-append "v" version))))
5687 (file-name (git-file-name name version))
5688 (sha256
5689 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
5690 (build-system pyproject-build-system)
5691 (arguments (list #:test-flags #~(list "test")))
5692 (inputs (list md4c))
5693 (native-inputs
5694 (list pkg-config python-pkgconfig python-pytest python-setuptools))
5695 (home-page "https://github.com/dominickpastore/pymd4c")
5696 (synopsis "Python bindings for MD4C")
5697 (description
5698 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
5699to CommonMark.")
5700 (license license:expat)))
5701
5702(define-public python-pymediainfo
5703 (package
5704 (name "python-pymediainfo")
5705 (version "4.1")
5706 (source
5707 (origin
5708 (method url-fetch)
5709 (uri (pypi-uri "pymediainfo" version))
5710 (sha256
5711 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
5712 (build-system pyproject-build-system)
5713 (arguments
5714 (list
5715 ;; The only failing test requires internet access.
5716 #:test-flags
5717 #~(list "-k" "not test_parse_url")
5718 #:phases
5719 #~(modify-phases %standard-phases
5720 (add-after 'unpack 'patch-libmediainfo
5721 (lambda* (#:key inputs #:allow-other-keys)
5722 (substitute* "pymediainfo/__init__.py"
5723 (("libmediainfo.so.0")
5724 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
5725 (native-inputs (list python-pytest python-setuptools))
5726 (inputs (list libmediainfo))
5727 (home-page "https://github.com/sbraz/pymediainfo")
5728 (synopsis "Python wrapper for the mediainfo library")
5729 (description
5730 "This package provides a Python wrapper for the mediainfo library to
5731access the technical and tag data for video and audio files.")
5732 (license license:expat)))
5733
5734(define-public python-psutil
5735 (package
5736 (name "python-psutil")
5737 (version "7.2.2")
5738 (source
5739 (origin
5740 (method git-fetch)
5741 (uri (git-reference
5742 (url "https://github.com/giampaolo/psutil")
5743 (commit (string-append "release-" version))))
5744 (file-name (git-file-name name version))
5745 (sha256
5746 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
5747 (build-system pyproject-build-system)
5748 (arguments
5749 (list
5750 ;; tests: X86_64-linux 414 passed, 278 skipped
5751 ;; i686-linux 410 passed, 278 skipped
5752 #:test-flags
5753 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
5754 "--dist" "loadgroup"
5755 #$@(map (lambda (ls) (string-append "--deselect=tests/"
5756 (string-join ls "::")))
5757 ;; assert None is not None
5758 '(("test_linux.py" "TestRootFsDeviceFinder"
5759 "test_comparisons")
5760 ;; FileNotFoundError: [Errno 2] No such file or
5761 ;; directory: '/sys/class/net/lo/mtu'
5762 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
5763 ;; AssertionError: assert '/dev/root' != '/dev/root'
5764 ("test_linux.py" "TestRootFsDeviceFinder"
5765 "test_disk_partitions_mocked")
5766 ;; psutil.AccessDenied: (pid=426)
5767 ("test_process.py" "TestProcess" "test_weird_environ")
5768 ;; assert []
5769 ("test_system.py" "TestMiscAPIs" "test_users")
5770 ;; ModuleNotFoundError: No module named '_common'
5771 ("test_scripts.py" "TestSetupScript"
5772 "test_invocation")
5773 ;; AssertionError: assert ''
5774 ("test_scripts.py" "TestExampleScripts" "test_who")
5775 ;; AssertionError: no disks on this system? assert
5776 ;; None is not None
5777 ("test_system.py" "TestDiskAPIs"
5778 "test_disk_io_counters")
5779 ;; psutil.NoSuchProcess: process no longer exists
5780 ;; (pid=247))
5781 ("test_process_all.py" "TestFetchAllProcesses"
5782 "test_all")
5783 ;; ModuleNotFoundError: No module named 'pypinfo'
5784 ("test_scripts.py" "TestInternalScripts"
5785 "test_import_all")
5786 ;; FileNotFoundError: [Errno 2] No such file or
5787 ;; directory: '/sys/class/power_supply'
5788 ("test_misc.py" "TestMisc" "test_serialization")))
5789 #$@(if (target-32bit?)
5790 (map (lambda (ls) (string-append "--deselect=tests/"
5791 (string-join ls "::")))
5792 ;; assert 12884901915 < 500 where 12884901915 =
5793 ;; abs((2596570605 - 15481472520))
5794 '(("test_linux.py" "TestSystemCPUStats"
5795 "test_interrupts")
5796 ;; OSError: [Errno 22] Invalid argument
5797 ("test_process.py" "TestProcess"
5798 "test_zombie_process")))
5799 '()))
5800 #:phases
5801 #~(modify-phases %standard-phases
5802 (add-before 'check 'pre-check
5803 (lambda _
5804 (delete-file-recursively "psutil")
5805 (substitute* "tests/test_linux.py"
5806 (("\"(free|vmstat)\"" _ cmd)
5807 (format #f "~s" (which cmd))))
5808 (setenv "PYTHONWARNINGS" "always")
5809 (setenv "PYTHONUNBUFFERED" "1")
5810 (setenv "PSUTIL_DEBUG" "1")
5811 (setenv "PSUTIL_TESTING" "1"))))))
5812 (native-inputs
5813 (list procps
5814 python-packaging
5815 python-psleak
5816 python-pyperf
5817 python-pytest
5818 python-pytest-instafail
5819 python-pytest-xdist
5820 python-setuptools))
5821 (home-page "https://github.com/giampaolo/psutil")
5822 (synopsis "Library for retrieving information on running processes")
5823 (description
5824 "@code{psutil} (Python system and process utilities) is a library for
5825retrieving information on running processes and system utilization (CPU,
5826memory, disks, network) in Python. It is useful mainly for system monitoring,
5827profiling and limiting process resources and management of running processes.
5828It implements many functionalities offered by command line tools such as: ps,
5829top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
5830iotop, uptime, pidof, tty, taskset, pmap.")
5831 (license license:bsd-3)))
5832
5833(define-public python-psutil-bootstrap
5834 (hidden-package
5835 (package/inherit python-psutil
5836 (name "python-psutil-bootstrap")
5837 (arguments
5838 (list #:tests? #f))
5839 (propagated-inputs '())
5840 (native-inputs
5841 (list python-setuptools)))))
5842
5843(define-public python-scapy
5844 (package
5845 (name "python-scapy")
5846 (version "2.6.1")
5847 (source (origin
5848 (method url-fetch)
5849 (uri (pypi-uri "scapy" version))
5850 (sha256
5851 (base32
5852 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
5853 (arguments
5854 '(#:tests? #f)) ; There is a test directory, but apparently no
5855 ; automatic testing framework.
5856 ;; The package has more optional dependencies such as ipython and
5857 ;; matplotlib. If functionality is missing, these should be added.
5858 ;; See
5859 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
5860 (build-system pyproject-build-system)
5861 (native-inputs (list python-setuptools python-wheel))
5862 (home-page "https://scapy.net")
5863 (synopsis "Python network packet crafting library")
5864 (description
5865 "Scapy is a Python library and executable for interactively
5866manipulating network packets. It can forge or decode packets of a number
5867of protocols, send them on the wire, capture them, store or read them
5868using pcap files, match requests and replies, and so on.
5869It can handle tasks such as scanning, tracerouting, probing, unit tests,
5870attacks or network discovery.")
5871 (license license:gpl2)))
5872
5873(define-public python-icmplib
5874 (package
5875 (name "python-icmplib")
5876 (version "3.0.4")
5877 (source
5878 (origin
5879 (method git-fetch)
5880 (uri (git-reference
5881 (url "https://github.com/ValentinBELYN/icmplib")
5882 (commit (string-append "v" version))))
5883 (file-name (git-file-name name version))
5884 (sha256
5885 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
5886 (build-system pyproject-build-system)
5887 (arguments (list #:tests? #f)) ; No tests.
5888 (native-inputs (list python-setuptools))
5889 (home-page "https://github.com/ValentinBELYN/icmplib")
5890 (synopsis
5891 "Python implementation of the Internet Control Message Protocol (ICMP)")
5892 (description
5893 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
5894ICMP is typically used for diagnostic or control purposes - well known from
5895utilities such as ping(1).")
5896 (license license:lgpl3)))
5897
5898(define-public python-iron-core
5899 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
5900 (revision "0"))
5901 (package
5902 (name "python-iron-core")
5903 (version (git-version "1.2.1" revision commit))
5904 (source
5905 (origin
5906 (method git-fetch)
5907 (uri (git-reference
5908 (url "https://www.github.com/iron-io/iron_core_python")
5909 (commit commit)))
5910 (file-name (git-file-name name version))
5911 (sha256
5912 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
5913 (build-system pyproject-build-system)
5914 (arguments
5915 (list
5916 ;; XXX: Tests are run, but they seem too old/not updated.
5917 #:tests? #f
5918 #:test-backend #~'unittest))
5919 (propagated-inputs (list python-dateutil python-requests))
5920 (native-inputs (list python-setuptools))
5921 (home-page "https://www.github.com/iron-io/iron_core_python")
5922 (synopsis "Universal classes and methods for Iron.io API wrappers")
5923 (description
5924 "This package provides universal classes and methods for the Iron.io
5925API wrappers to build on.")
5926 (license license:bsd-2))))
5927
5928(define-public python-iron-mq
5929 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
5930 (revision "0"))
5931 (package
5932 (name "python-iron-mq")
5933 (version (git-version "0.9" revision commit))
5934 (source
5935 (origin
5936 (method git-fetch)
5937 (uri (git-reference
5938 (url "https://github.com/iron-io/iron_mq_python")
5939 (commit commit)))
5940 (file-name (git-file-name name version))
5941 (sha256
5942 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
5943 (build-system pyproject-build-system)
5944 (arguments
5945 (list
5946 ;; XXX: Tests are broken and require network access.
5947 #:tests? #f
5948 #:test-backend #~'unittest))
5949 (propagated-inputs (list python-iron-core))
5950 (native-inputs (list python-setuptools))
5951 (home-page "https://github.com/iron-io/iron_mq_python")
5952 (synopsis "Client library for IronMQ, a message queue in the cloud")
5953 (description
5954 "This package provides Python language bindings for IronMQ. IronMQ is an
5955elastic message queue for managing data and event flow within cloud
5956applications and between systems.")
5957 (license license:bsd-2))))
5958
5959(define-public python-rasterio
5960 (package
5961 (name "python-rasterio")
5962 (version "1.3.7")
5963 (source (origin
5964 (method url-fetch)
5965 (uri (pypi-uri "rasterio" version))
5966 (sha256
5967 (base32
5968 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
5969 (properties
5970 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
5971 (build-system pyproject-build-system)
5972 (arguments
5973 (list
5974 #:tests? #false ;test data not present
5975 #:phases
5976 '(modify-phases %standard-phases
5977 (add-before 'check 'build-extensions
5978 (lambda _
5979 ;; Cython extensions have to be built before running the tests.
5980 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
5981 (propagated-inputs (list python-affine
5982 python-attrs
5983 python-certifi
5984 python-click
5985 python-click-plugins
5986 python-cligj
5987 python-numpy
5988 python-setuptools ; For pkg_resources.
5989 python-snuggs))
5990 (native-inputs (list gdal
5991 python-boto3
5992 python-cython
5993 python-hypothesis
5994 python-packaging
5995 python-pytest
5996 python-shapely
5997 python-wheel))
5998 (home-page "https://github.com/rasterio/rasterio")
5999 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
6000 (description "This package implements fast and direct raster I/O for use
6001with Numpy and SciPy.")
6002 (license license:bsd-3)))
6003
6004(define-public python-rich-tables
6005 (package
6006 (name "python-rich-tables")
6007 (version "0.8.0")
6008 (source
6009 (origin
6010 (method git-fetch) ; no tests data in PyPi package
6011 (uri (git-reference
6012 (url "https://github.com/snejus/rich-tables")
6013 (commit version)))
6014 (file-name (git-file-name name version))
6015 (sha256
6016 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
6017 (build-system pyproject-build-system)
6018 (arguments
6019 (list
6020 #:test-flags
6021 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
6022 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
6023 (native-inputs
6024 (list python-freezegun
6025 python-poetry-core
6026 python-pytest))
6027 (propagated-inputs
6028 (list python-funcy
6029 python-humanize
6030 python-multimethod
6031 python-platformdirs
6032 python-rgbxy
6033 python-rich
6034 python-sqlparse))
6035 (home-page "https://github.com/snejus/rich-tables")
6036 (synopsis "Ready-made rich tables for various purposes")
6037 (description
6038 "This package implements rich tables for various purposes, it's JSON
6039human-prettifier based on the @code{rich} Python library.")
6040 (license license:expat)))
6041
6042(define-public python-rich-toolkit
6043 (package
6044 (name "python-rich-toolkit")
6045 (version "0.12.0")
6046 (source
6047 (origin
6048 (method url-fetch)
6049 (uri (pypi-uri "rich_toolkit" version))
6050 (sha256
6051 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
6052 (build-system pyproject-build-system)
6053 (propagated-inputs (list python-click python-rich python-typing-extensions))
6054 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
6055 (home-page "https://pypi.org/project/rich-toolkit/")
6056 (synopsis "Rich toolkit for building command-line applications")
6057 (description "This package provides the Rich toolkit for building
6058command-line applications.")
6059 (license license:expat)))
6060
6061(define-public python-shapely
6062 (package
6063 (name "python-shapely")
6064 (version "2.1.1")
6065 (source
6066 (origin
6067 (method url-fetch)
6068 (uri (pypi-uri "shapely" version))
6069 (sha256
6070 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
6071 (build-system pyproject-build-system)
6072 (arguments
6073 (list
6074 #:phases
6075 '(modify-phases %standard-phases
6076 (add-before 'check 'build-extensions
6077 (lambda _
6078 ;; Cython extensions have to be built before running the tests.
6079 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6080 (native-inputs
6081 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
6082 (inputs
6083 (list geos))
6084 (propagated-inputs
6085 (list python-numpy))
6086 (home-page "https://github.com/shapely/shapely")
6087 (synopsis "Library for the manipulation and analysis of geometric objects")
6088 (description "Shapely is a Python package for manipulation and analysis of
6089planar geometric objects. It is based on the @code{GEOS} library.")
6090 (license license:bsd-3)))
6091
6092(define-public python-shortuuid
6093 (package
6094 (name "python-shortuuid")
6095 (version "1.0.13")
6096 (source
6097 (origin
6098 (method url-fetch)
6099 (uri (pypi-uri "shortuuid" version))
6100 (sha256
6101 (base32
6102 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
6103 (build-system pyproject-build-system)
6104 (native-inputs
6105 (list python-poetry-core python-pytest))
6106 (home-page "https://github.com/skorokithakis/shortuuid")
6107 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
6108 (description
6109 "@code{shortuuid} is a Python library for generating concise, unambiguous
6110and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
6111module and then similar looking characters are removed.")
6112 (license license:bsd-3)))
6113
6114(define-public python-logwrap
6115 (package
6116 (name "python-logwrap")
6117 (version "11.1.1")
6118 (source
6119 (origin
6120 (method git-fetch) ; no tests in PyPI release
6121 (uri (git-reference
6122 (url "https://github.com/python-useful-helpers/logwrap")
6123 (commit version)))
6124 (file-name (git-file-name name version))
6125 (sha256
6126 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
6127 (build-system pyproject-build-system)
6128 (native-inputs (list python-pytest
6129 python-setuptools
6130 python-setuptools-scm
6131 python-wheel))
6132 (home-page "https://github.com/python-useful-helpers/logwrap")
6133 (synopsis "Decorator for logging function arguments")
6134 (description "This package provides a decorator to log function arguments
6135and function call return values in a human-readable way.")
6136 (license license:asl2.0)))
6137
6138(define-public python-babel
6139 (package
6140 (name "python-babel")
6141 (version "2.16.0")
6142 (source
6143 (origin
6144 (method url-fetch)
6145 (uri (pypi-uri "babel" version))
6146 (sha256
6147 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
6148 (build-system pyproject-build-system)
6149 (native-inputs
6150 (list python-freezegun
6151 python-pytest
6152 python-setuptools
6153 tzdata-for-tests))
6154 (propagated-inputs
6155 (list python-pytz))
6156 (home-page "https://babel.pocoo.org/")
6157 (synopsis
6158 "Tools for internationalizing Python applications")
6159 (description
6160 "Babel is composed of two major parts:
6161- tools to build and work with gettext message catalogs
6162- a Python interface to the CLDR (Common Locale Data Repository), providing
6163access to various locale display names, localized number and date formatting,
6164etc.")
6165 (license license:bsd-3)))
6166
6167(define-public python-bidict
6168 (package
6169 (name "python-bidict")
6170 (version "0.23.1")
6171 (source
6172 (origin
6173 (method git-fetch) ; no tests in PyPI.
6174 (uri (git-reference
6175 (url "https://github.com/jab/bidict")
6176 (commit (string-append "v" version))))
6177 (file-name (git-file-name name version))
6178 (sha256
6179 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
6180 (build-system pyproject-build-system)
6181 (native-inputs
6182 (list python-pytest
6183 python-pytest-benchmark
6184 python-pytest-xdist
6185 python-setuptools
6186 python-sortedcollections
6187 python-wheel))
6188 (home-page "https://bidict.readthedocs.io")
6189 (synopsis "Bidirectional mapping library")
6190 (description "The @code{bidict} library provides several data structures
6191for working with bidirectional mappings in Python.")
6192 (license license:mpl2.0)))
6193
6194(define-public python-bip39
6195 (package
6196 (name "python-bip39")
6197 (version "0.0.2")
6198 (source
6199 (origin
6200 (method url-fetch)
6201 (uri (pypi-uri "bip39" version))
6202 (sha256
6203 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
6204 (build-system pyproject-build-system)
6205 (native-inputs (list python-pytest python-setuptools))
6206 (home-page "https://github.com/de-centralized-systems/python-bip39/")
6207 (synopsis "Self-contained and simple BIP39 implementation in Python")
6208 (description
6209 "This package provides a self-contained and simple BIP39
6210implementation written in Python. It includes a @code{bip39.py} executable.
6211
6212BIP39 is a standardized mapping between binary data (the @emph{entropy}),
6213and a list of words that are easier to remember for humans (the
6214@emph{mnemonic}).")
6215 (license license:expat)))
6216
6217(define-public python-bitarray
6218 (package
6219 (name "python-bitarray")
6220 (version "3.4.3")
6221 (source (origin
6222 (method url-fetch)
6223 (uri (pypi-uri "bitarray" version))
6224 (sha256
6225 (base32
6226 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
6227 (build-system pyproject-build-system)
6228 (arguments
6229 (list #:phases
6230 #~(modify-phases %standard-phases
6231 (replace 'check
6232 (lambda* (#:key tests? #:allow-other-keys)
6233 (when tests?
6234 ;; Step out of the source directory to avoid interference.
6235 (with-directory-excursion "/tmp"
6236 (invoke "python" "-c"
6237 "import bitarray; bitarray.test()"))))))))
6238 (native-inputs (list python-setuptools python-wheel))
6239 (home-page "https://github.com/ilanschnell/bitarray")
6240 (synopsis "Efficient arrays of booleans")
6241 (description "This package provides an object type which efficiently
6242represents an array of booleans. Bitarrays are sequence types and behave very
6243much like usual lists. Eight bits are represented by one byte in a contiguous
6244block of memory. The user can select between two representations:
6245little-endian and big-endian. All of the functionality is implemented in C.
6246Methods for accessing the machine representation are provided. This can be
6247useful when bit level access to binary files is required, such as portable
6248bitmap image files. Also, when dealing with compressed data which uses
6249variable bit length encoding, you may find this module useful.")
6250 (license license:psfl)))
6251
6252(define-public python-bitarray-2
6253 (package
6254 (inherit python-bitarray)
6255 (version "2.8.1")
6256 (source (origin
6257 (method url-fetch)
6258 (uri (pypi-uri "bitarray" version))
6259 (sha256
6260 (base32
6261 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
6262
6263(define-public python-boolean.py
6264 (package
6265 (name "python-boolean.py")
6266 (version "5.0")
6267 (source
6268 (origin
6269 (method url-fetch)
6270 (uri (pypi-uri "boolean_py" version))
6271 (sha256
6272 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
6273 (build-system pyproject-build-system)
6274 (native-inputs (list python-pytest python-setuptools python-wheel))
6275 (home-page "https://github.com/bastikr/boolean.py")
6276 (synopsis "Boolean algebra in one Python module")
6277 (description
6278 "This is a small Python library that implements boolean algebra.
6279It defines two base elements, @code{TRUE} and @code{FALSE}, and a
6280@code{Symbol} class that can take on one of these two values. Calculations
6281are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
6282compositions like @code{XOR} and @code{NAND} are emulated on top of them.
6283Expressions are constructed from parsed strings or directly in Python.")
6284 (license license:bsd-2)))
6285
6286(define-public python-h5netcdf
6287 (package
6288 (name "python-h5netcdf")
6289 (version "1.3.0")
6290 (source
6291 (origin
6292 (method url-fetch)
6293 (uri (pypi-uri "h5netcdf" version))
6294 (sha256
6295 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
6296 (build-system pyproject-build-system)
6297 (native-inputs
6298 (list python-netcdf4
6299 python-pytest
6300 python-setuptools
6301 python-setuptools-scm
6302 python-wheel))
6303 (propagated-inputs
6304 (list python-h5py python-packaging))
6305 (home-page "https://h5netcdf.org")
6306 (synopsis "Python interface for the netCDF4 file-format based on h5py")
6307 (description "This package provides a Python interface for the netCDF4
6308file-format that reads and writes local or remote HDF5 files directly via
6309@url{h5py, https://www.h5py.org/} or @url{h5pyd,
6310https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
6311library.")
6312 (license license:bsd-3)))
6313
6314(define-public python-h5py
6315 (package
6316 (name "python-h5py")
6317 (version "3.15.1")
6318 (source
6319 (origin
6320 (method url-fetch)
6321 (uri (pypi-uri "h5py" version))
6322 (sha256
6323 (base32 "0sbbw9100f2763czngbpg1jxisp5r5pkpa2swm6mcws4bka3wvn8"))))
6324 (build-system pyproject-build-system)
6325 (arguments
6326 (list
6327 ;; tests: 800 passed, 18 skipped, 4 deselected, 12 warnings
6328 #:test-flags
6329 ;; Tests requiring the build with MPI.
6330 #~(list "-k" (string-append "not test_mpio"
6331 " and not test_mpio_append"
6332 " and not test_mpi_atomic"
6333 " and not test_close_multiple_mpio_driver"))
6334 #:phases
6335 #~(modify-phases %standard-phases
6336 (add-after 'unpack 'fix-hdf5-paths
6337 (lambda _
6338 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))))
6339 (replace 'check
6340 (lambda* (#:key tests? test-flags #:allow-other-keys)
6341 (when tests?
6342 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
6343 (with-directory-excursion #$output
6344 (apply invoke "pytest" "-vv" test-flags))))))))
6345 (native-inputs
6346 (list pkg-config
6347 python-cython
6348 python-pkgconfig
6349 python-pytest
6350 python-setuptools))
6351 (inputs
6352 (list hdf5))
6353 (propagated-inputs
6354 (list python-numpy))
6355 (home-page "https://www.h5py.org/")
6356 (synopsis "Read and write HDF5 files from Python")
6357 (description
6358 "The h5py package provides both a high- and low-level interface to the
6359HDF5 library from Python. The low-level interface is intended to be a
6360complete wrapping of the HDF5 API, while the high-level component supports
6361access to HDF5 files, datasets and groups using established Python and NumPy
6362concepts.")
6363 (license license:bsd-3)))
6364
6365(define-public python-hdf5storage
6366 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6367 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6368 ;;
6369 ;; This package probably is sun setting, consider to remove when stops
6370 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6371 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6372 (revision "0"))
6373 (package
6374 (name "python-hdf5storage")
6375 (version (git-version "0.1.19" revision commit))
6376 (source
6377 (origin
6378 (method git-fetch)
6379 (uri (git-reference
6380 (url "https://github.com/frejanordsiek/hdf5storage")
6381 (commit commit)))
6382 (file-name (git-file-name name version))
6383 (sha256
6384 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6385 (build-system pyproject-build-system)
6386 (arguments
6387 ;; Started failing with the move to [email protected], due to modules changes.
6388 (list
6389 #:test-flags
6390 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6391 (native-inputs
6392 (list python-pytest
6393 python-setuptools))
6394 (propagated-inputs
6395 (list python-h5py
6396 python-numpy-1))
6397 (home-page "https://github.com/frejanordsiek/hdf5storage")
6398 (synopsis "Read and write Python data types from and to HDF5 files")
6399 (description
6400 "This Python package provides high-level utilities to read and write a
6401variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6402formatted files. This package also provides support for MATLAB MAT v7.3
6403formatted files, which are HDF5 files with a different extension and some
6404extra metadata. Because HDF5 and MAT files might need to be read from
6405untrusted sources, pickling is avoided in this package.")
6406 (license license:bsd-2))))
6407
6408(define-public python-prctl
6409 (package
6410 (name "python-prctl")
6411 (version "1.8.1")
6412 (source (origin
6413 (method url-fetch)
6414 (uri (pypi-uri "python-prctl" version))
6415 (sha256
6416 (base32
6417 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6418 (build-system pyproject-build-system)
6419 (arguments
6420 (list #:test-backend ''custom
6421 #:test-flags ''("test_prctl.py")
6422 #:phases
6423 #~(modify-phases %standard-phases
6424 (add-after 'unpack 'patch-tests
6425 (lambda _
6426 (substitute* "test_prctl.py"
6427 ;; actual suffix used in cpython build output dir name
6428 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6429 ;; test_no_new_privs assumes existence of /bin/ping, but
6430 ;; can never run anyway due to it requiring setuid ping.
6431 ;; just short circuit it instead.
6432 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6433 (inputs (list libcap))
6434 (native-inputs (list python-setuptools))
6435 (supported-systems (filter target-linux? %supported-systems))
6436 (home-page "https://pythonhosted.org/python-prctl")
6437 (synopsis "Linux capabilities library")
6438 (description "This package provides a Python library for controlling Linux
6439capabilities and attributes, similar to the prctl syscall.")
6440 (license license:gpl3+)))
6441
6442(define-public python-pyhimitsu
6443 (package
6444 (name "python-pyhimitsu")
6445 (version "0.0.9")
6446 (source (origin
6447 (method url-fetch)
6448 (uri (pypi-uri "py_himitsu" version))
6449 (sha256
6450 (base32
6451 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6452 (build-system pyproject-build-system)
6453 (arguments
6454 (list
6455 #:phases
6456 #~(modify-phases %standard-phases
6457 (replace 'check
6458 (lambda _
6459 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6460 (invoke "make" "check"))))))
6461 (native-inputs (list python-hatchling))
6462 (propagated-inputs (list python-pyxdg))
6463 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6464 (synopsis "Himitsu client protocol implementation in Python")
6465 (description "This package provides a library for writing Himitsu client
6466programs in Python.")
6467 (license license:expat)))
6468
6469(define-public python-hjson
6470 ;; Using commit from master branch as the PyPI version does not contain
6471 ;; the hjson/tests/ directory.
6472 (let ((revision "0")
6473 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6474 (package
6475 (name "python-hjson")
6476 (version (git-version "3.1.0" revision commit))
6477 (source (origin
6478 (method git-fetch)
6479 (uri (git-reference
6480 (url "https://github.com/hjson/hjson-py")
6481 (commit commit)))
6482 (file-name (git-file-name name version))
6483 (sha256
6484 (base32
6485 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6486 (modules '((guix build utils)))
6487 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6488 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6489 (snippet #~(substitute* "hjson/__init__.py"
6490 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6491 "{'foo': 'a', 'bar': 1}")))))
6492 (build-system pyproject-build-system)
6493 (native-inputs (list python-setuptools python-wheel))
6494 (home-page "https://github.com/hjson/hjson-py")
6495 (synopsis "Python package to parse HJSON documents")
6496 (description "This package provides a Python library and a command-line
6497interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6498 (license license:expat))))
6499
6500(define-public python-hnswlib
6501 (package
6502 (name "python-hnswlib")
6503 (version "0.8.0")
6504 (source
6505 (origin
6506 (method git-fetch)
6507 (uri (git-reference
6508 (url "https://github.com/nmslib/hnswlib")
6509 (commit (string-append "v" version))))
6510 (file-name (git-file-name name version))
6511 (sha256
6512 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6513 (build-system pyproject-build-system)
6514 (arguments
6515 (list
6516 #:phases
6517 #~(modify-phases %standard-phases
6518 (add-after 'unpack 'disable-native-optimization
6519 (lambda _
6520 (substitute* "setup.py"
6521 ((", '-march=native'")
6522 "")))))))
6523 (native-inputs
6524 (list pybind11-2
6525 python-pytest
6526 python-setuptools))
6527 (propagated-inputs
6528 (list python-numpy))
6529 (home-page "https://github.com/nmslib/hnswlib")
6530 (synopsis "Fast approximate nearest neighbor search")
6531 (description "Hnswlib is a header-only C++ implementation of fast
6532approximate nearest neighbor search with Python bindings.")
6533 (license license:asl2.0)))
6534
6535(define-public python-pylatex
6536 (package
6537 (name "python-pylatex")
6538 (version "1.4.2")
6539 (source
6540 (origin
6541 (method git-fetch)
6542 (uri (git-reference
6543 (url "https://github.com/JelteF/PyLaTeX")
6544 (commit (string-append "v" version))))
6545 (file-name (git-file-name name version))
6546 (sha256
6547 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6548 (build-system pyproject-build-system)
6549 (arguments
6550 (list #:phases
6551 #~(modify-phases %standard-phases
6552 ;; some tests attempt to create directories
6553 (add-before 'check 'set-home-directory
6554 (lambda _
6555 (setenv "HOME" "/tmp"))))))
6556 (propagated-inputs (list python-ordered-set))
6557 (native-inputs (list python-matplotlib
6558 python-pytest
6559 python-quantities
6560 python-setuptools
6561 (texlive-local-tree
6562 (list texlive-lastpage
6563 texlive-latexmk
6564 texlive-parskip))))
6565 (home-page "https://github.com/JelteF/PyLaTeX")
6566 (synopsis "Library for creating LaTeX files and snippets")
6567 (description
6568 "This package provides a Python library for creating LaTeX files and
6569snippets.")
6570 (license license:expat)))
6571
6572(define-public python-pylatexenc
6573 (package
6574 (name "python-pylatexenc")
6575 (version "2.10")
6576 (source
6577 (origin
6578 (method url-fetch)
6579 (uri (pypi-uri "pylatexenc" version))
6580 (sha256
6581 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6582 (build-system pyproject-build-system)
6583 (native-inputs (list python-pytest python-setuptools python-wheel))
6584 (home-page "https://github.com/phfaist/pylatexenc")
6585 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6586 (description
6587 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6588Unicode-to-LaTeX conversion.")
6589 (license license:expat)))
6590
6591(define-public python-lsp-black
6592 (package
6593 (name "python-lsp-black")
6594 (version "2.0.0")
6595 (source
6596 (origin
6597 (method git-fetch)
6598 (uri (git-reference
6599 (url "https://github.com/python-lsp/python-lsp-black")
6600 (commit (string-append "v" version))))
6601 (file-name (git-file-name name version))
6602 (sha256
6603 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
6604 (build-system pyproject-build-system)
6605 (arguments
6606 ;; The python version is too old for these tests to pass properly.
6607 (list #:test-flags
6608 `'("-k" ,(string-append
6609 "not test_pylsp_format_document_syntax_error"
6610 " and not test_pylsp_format_range_syntax_error"
6611 " and not test_load_config_defaults"
6612 " and not test_load_config_with_skip_options"))))
6613 (propagated-inputs
6614 (list python-black python-lsp-server python-tomli))
6615 (native-inputs
6616 (list python-pytest python-setuptools python-wheel))
6617 (home-page "https://github.com/python-lsp/python-lsp-black")
6618 (synopsis "Black plugin for the Python LSP Server")
6619 (description "This package provides a plugin with support for the
6620@code{python-black} formatter for the Python LSP Server.")
6621 (license license:expat)))
6622
6623(define-public python-pylsp-mypy
6624 (package
6625 (name "python-pylsp-mypy")
6626 (version "0.7.1")
6627 (source
6628 (origin
6629 ;; "The newest version on PyPI is indeed not published on GitHub."
6630 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
6631 (method url-fetch)
6632 (uri (pypi-uri "pylsp_mypy" version))
6633 (sha256
6634 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
6635 (build-system pyproject-build-system)
6636 (native-inputs (list python-pytest python-setuptools))
6637 (propagated-inputs (list python-mypy python-lsp-server))
6638 (home-page "https://github.com/python-lsp/pylsp-mypy")
6639 (synopsis "Mypy linter for the Python LSP Server")
6640 (description
6641 "Mypy linter integration for use with @code{python-lsp-server}.")
6642 (license license:expat)))
6643
6644(define-public python-sh
6645 (package
6646 (name "python-sh")
6647 (version "2.2.2")
6648 (source
6649 (origin
6650 (method url-fetch)
6651 (uri (pypi-uri "sh" version))
6652 (sha256
6653 (base32
6654 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
6655 (build-system pyproject-build-system)
6656 (arguments
6657 (list
6658 #:test-flags
6659 #~(list "-k" (string-join
6660 ;; These tests are shaky.
6661 (list "not test_bad_sig_raise_exception"
6662 "test_doesnt_execute_directories"
6663 "test_environment"
6664 "test_ok_code_ignores_bad_sig_exception"
6665 "test_unicode_path")
6666 " and not ")
6667 "tests")
6668 #:phases
6669 #~(modify-phases %standard-phases
6670 (add-before 'check 'pre-check
6671 (lambda _
6672 (setenv "HOME" "/tmp"))))))
6673 (native-inputs
6674 (list python-poetry-core python-pytest))
6675 (home-page "https://github.com/amoffat/sh")
6676 (synopsis "Python subprocess replacement")
6677 (description "This package provides a replacement for Python's
6678@code{subprocess} feature.")
6679 (license license:expat)))
6680
6681;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
6682;; that is updated.
6683(define-public python-sh-1
6684 (package
6685 (inherit python-sh)
6686 (version "1.14.2")
6687 (source
6688 (origin
6689 (method url-fetch)
6690 (uri (pypi-uri "sh" version))
6691 (sha256
6692 (base32
6693 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
6694 (arguments
6695 '(#:phases
6696 (modify-phases %standard-phases
6697 (replace 'check
6698 (lambda _
6699 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
6700 (setenv "HOME" "/tmp")
6701 (invoke "python" "sh.py" "test"))))))
6702 (native-inputs
6703 (list python-setuptools))))
6704
6705(define-public python-cftime
6706 (package
6707 (name "python-cftime")
6708 (version "1.6.5")
6709 (source
6710 (origin
6711 (method url-fetch)
6712 (uri (pypi-uri "cftime" version))
6713 (sha256
6714 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
6715 (build-system pyproject-build-system)
6716 (propagated-inputs
6717 (list python-numpy))
6718 (native-inputs
6719 (list python-cython
6720 python-pytest
6721 python-setuptools
6722 python-wheel))
6723 (home-page "https://unidata.github.io/cftime/")
6724 (synopsis "Library for time handling")
6725 (description
6726 "This package provides time-handling functionality that used to be part
6727of the netcdf4 package before.")
6728 (license license:expat)))
6729
6730(define-public python-netcdf4
6731 (package
6732 (name "python-netcdf4")
6733 (version "1.7.2")
6734 (source
6735 (origin
6736 (method git-fetch)
6737 (uri (git-reference
6738 (url "https://github.com/Unidata/netcdf4-python")
6739 (commit (string-append "v" version "rel"))))
6740 (file-name (git-file-name name version))
6741 (sha256
6742 (base32 "1bq0dkgq795z00j5z4xi1dqqw0chaj5j80hg5nci1piyr2ic41v9"))))
6743 (build-system pyproject-build-system)
6744 (arguments
6745 (list
6746 ;; tests: Ran 113 tests; skipped=7
6747 #:phases
6748 #~(modify-phases %standard-phases
6749 (add-before 'build 'set-configure-flags
6750 (lambda _
6751 (setenv "CFLAGS" (string-join
6752 (list "-g -O2"
6753 "-Wno-error=incompatible-pointer-types"
6754 "-Wno-error=implicit-function-declaration"
6755 "-Wno-error=int-conversion")
6756 " "))
6757 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
6758 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
6759 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
6760 (setenv "USE_NCCONFIG" "0")))
6761 (replace 'check
6762 (lambda* (#:key tests? #:allow-other-keys)
6763 (when tests?
6764 (with-directory-excursion "test"
6765 (setenv "NO_NET" "1")
6766 (setenv "NO_CDL" "1")
6767 (invoke "python" "run_all.py"))))))))
6768 (native-inputs
6769 (list python-cython
6770 python-packaging
6771 python-pytest
6772 python-setuptools
6773 python-setuptools-scm
6774 python-typing-extensions))
6775 (inputs
6776 (list netcdf
6777 hdf5
6778 zlib))
6779 (propagated-inputs
6780 (list python-certifi
6781 python-cftime
6782 python-numpy))
6783 (home-page "https://github.com/Unidata/netcdf4-python")
6784 (synopsis "Python/numpy interface to the netCDF library")
6785 (description "Netcdf4-python is a Python interface to the netCDF C
6786library. netCDF version 4 has many features not found in earlier
6787versions of the library and is implemented on top of HDF5. This module
6788can read and write files in both the new netCDF 4 and the old netCDF 3
6789format, and can create files that are readable by HDF5 clients. The
6790API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
6791to users of that module.")
6792 ;; The software is mainly ISC, but includes some files covered
6793 ;; by the Expat license.
6794 (license (list license:isc license:expat))))
6795
6796(define-public python-ncclient
6797 (package
6798 (name "python-ncclient")
6799 (version "0.6.19")
6800 (source
6801 (origin
6802 (method git-fetch) ;no tests in PyPI release
6803 (uri (git-reference
6804 (url "https://github.com/ncclient/ncclient")
6805 (commit (string-append "v" version))))
6806 (file-name (git-file-name name version))
6807 (sha256
6808 (base32
6809 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
6810 (build-system pyproject-build-system)
6811 (native-inputs
6812 (list python-pytest
6813 python-setuptools
6814 python-wheel))
6815 (propagated-inputs
6816 (list python-lxml
6817 python-paramiko))
6818 (home-page "https://github.com/ncclient/ncclient")
6819 (synopsis "Python library for NETCONF clients")
6820 (description "@code{ncclient} is a Python library that facilitates
6821client-side scripting and application development around the NETCONF
6822protocol.")
6823 (license license:asl2.0)))
6824
6825(define-public python-ncls
6826 (package
6827 (name "python-ncls")
6828 (version "0.0.68")
6829 (source (origin
6830 (method url-fetch)
6831 (uri (pypi-uri "ncls" version))
6832 (sha256
6833 (base32
6834 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
6835 (build-system pyproject-build-system)
6836 (arguments
6837 ;; Those tests fail with warnings (not errors) for the Numpy update.
6838 ;; Remove it at next python-team iteration.
6839 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
6840 "--ignore=examples/test_find_overlap_list.py")))
6841 (native-inputs (list python-cython
6842 python-pandas
6843 python-pytest
6844 python-setuptools
6845 python-wheel))
6846 (propagated-inputs (list python-numpy))
6847 (home-page "https://github.com/endrebak/ncls")
6848 (synopsis "Nested containment list data structure")
6849 (description
6850 "This package provides a wrapper for the nested containment list data
6851structure. It is a static interval-tree that is fast for both construction
6852and lookups.")
6853 (license license:bsd-3)))
6854
6855(define-public python-license-expression
6856 (package
6857 (name "python-license-expression")
6858 (version "30.1.0")
6859 (source
6860 (origin
6861 (method url-fetch)
6862 (uri (pypi-uri "license-expression" version))
6863 (sha256
6864 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
6865 (build-system pyproject-build-system)
6866 (native-inputs
6867 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
6868 (propagated-inputs
6869 (list python-boolean.py))
6870 (home-page "https://github.com/nexB/license-expression")
6871 (synopsis "Apply boolean logic to license expressions")
6872 (description
6873 "This Python module defines a tiny language to evaluate and compare
6874license expressions using boolean logic. Logical combinations of licenses can
6875be tested for equality, containment, and equivalence. They can be normalised
6876and simplified. It supports SPDX license expressions as well as other naming
6877conventions and aliases in the same expression.")
6878 (license license:gpl2+)))
6879
6880(define-public python-limits
6881 (package
6882 (name "python-limits")
6883 (version "5.8.0")
6884 (source
6885 (origin
6886 (method git-fetch)
6887 (uri (git-reference
6888 (url "https://github.com/alisaifee/limits")
6889 (commit version)))
6890 (file-name (git-file-name name version))
6891 (sha256
6892 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
6893 (build-system pyproject-build-system)
6894 (arguments
6895 (list
6896 ;; tests: 155 passed, 620 deselected
6897 #:test-flags
6898 #~(list
6899 ;; The test suite spawns storages in Docker.
6900 "-k" (simple-format #f "not (~a)"
6901 (string-join
6902 '("lazy_dependency" ;importing redis
6903 "memcache"
6904 "mongo"
6905 "redis"
6906 "valkey")
6907 " or "))
6908 "--ignore=tests/benchmarks")
6909 #:phases
6910 #~(modify-phases %standard-phases
6911 (add-before 'check 'adjust-tests
6912 (lambda _
6913 (substitute* "pytest.ini"
6914 ((".*--cov=.*") "")
6915 ((".*-K.*") ""))
6916 (substitute* (find-files "tests" "\\.py$")
6917 (("import pymemcache.*") "")
6918 (("import pymongo.*") "")
6919 (("import redis.*") "")
6920 (("import valkey.*") "")
6921 ;; Lazy fixtures are only used for storages.
6922 (("from pytest_lazy_fixtures import lf.*") "")
6923 (("lf\\((.+)\\)" all fixture) fixture))
6924 (substitute* "tests/test_storage.py"
6925 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
6926 (propagated-inputs (list python-deprecated python-packaging))
6927 (native-inputs
6928 (list python-flaky
6929 python-hatch-vcs
6930 python-hatchling
6931 python-pytest
6932 python-pytest-asyncio))
6933 (home-page "https://limits.readthedocs.io/")
6934 (synopsis "Rate limiting utilities")
6935 (description
6936 "This package provides a Python library to perform rate limiting with
6937commonly used storage backends.")
6938 (license license:expat)))
6939
6940(define-public python-fb-re2
6941 (package
6942 (name "python-fb-re2")
6943 (version "1.0.7")
6944 (source
6945 (origin
6946 (method git-fetch)
6947 (uri (git-reference
6948 (url "https://github.com/facebook/pyre2")
6949 (commit (string-append "v" version))))
6950 (file-name (git-file-name name version))
6951 (sha256
6952 (base32
6953 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
6954 (build-system pyproject-build-system)
6955 (arguments
6956 (list
6957 #:phases
6958 #~(modify-phases %standard-phases
6959 (add-after 'unpack 'fix-tests
6960 (lambda _
6961 (substitute* "tests/test_match.py"
6962 (("assertRaisesRegexp")
6963 "assertRaisesRegex")))))))
6964 (native-inputs
6965 (list python-pytest python-setuptools))
6966 (inputs
6967 (list re2))
6968 (home-page "https://github.com/facebook/pyre2")
6969 (synopsis "Python wrapper for RE2")
6970 (description "This package provides a Python extension that wraps Google's
6971RE2 regular expression library. It implements many of the features of
6972Python's built-in @code{re} module with compatible interfaces.")
6973 (license license:bsd-3)))
6974
6975(define-public python-filelock
6976 ;; Try to update simultaneously with the bootstrap version in
6977 ;; (gnu packages python-build).
6978 (package
6979 (name "python-filelock")
6980 (version "3.16.1")
6981 (source
6982 (origin
6983 (method url-fetch)
6984 (uri (pypi-uri "filelock" version))
6985 (sha256
6986 (base32
6987 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
6988 (build-system pyproject-build-system)
6989 (arguments
6990 (list
6991 ;; Break cycle with virtualenv.
6992 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
6993 (native-inputs
6994 (list python-hatch-vcs
6995 python-hatchling
6996 python-pytest
6997 python-pytest-asyncio
6998 python-pytest-mock
6999 python-setuptools-scm))
7000 (home-page "https://github.com/tox-dev/py-filelock")
7001 (synopsis "Platform independent file lock")
7002 (description "@code{filelock} contains a single module implementing
7003a platform independent file lock in Python, which provides a simple way of
7004inter-process communication.")
7005 (license license:unlicense)))
7006
7007(define-public python-filelock-next
7008 (package
7009 (inherit python-filelock)
7010 (name "python-filelock")
7011 (version "3.20.0")
7012 (source
7013 (origin
7014 (method url-fetch)
7015 (uri (pypi-uri "filelock" version))
7016 (sha256
7017 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
7018 (native-inputs
7019 (list python-hatch-vcs
7020 python-hatchling
7021 python-pytest
7022 python-pytest-asyncio
7023 python-pytest-mock
7024 python-pytest-timeout))))
7025
7026(define-public python-seedir
7027 (package
7028 (name "python-seedir")
7029 (version "0.5.0")
7030 (source
7031 (origin
7032 (method url-fetch)
7033 (uri (pypi-uri "seedir" version))
7034 (sha256
7035 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
7036 (build-system pyproject-build-system)
7037 (propagated-inputs (list python-natsort))
7038 (native-inputs (list python-pytest python-setuptools python-wheel))
7039 (home-page "https://github.com/earnestt1234/seedir")
7040 (synopsis
7041 "Package for creating, editing, and reading folder tree diagrams.")
7042 (description
7043 "This is a package for creating, editing, and reading folder tree
7044diagrams.")
7045 (license license:expat)))
7046
7047(define-public python-semantic-version
7048 (package
7049 (name "python-semantic-version")
7050 (version "2.10.0")
7051 (source
7052 (origin
7053 (method url-fetch)
7054 (uri (pypi-uri "semantic_version" version))
7055 (sha256
7056 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
7057 (build-system pyproject-build-system)
7058 (arguments (list #:test-backend #~'nose2))
7059 (native-inputs
7060 (list python-nose2
7061 python-setuptools))
7062 (home-page "https://github.com/rbarrois/python-semanticversion")
7063 (synopsis "Semantic versioning module for Python")
7064 (description
7065 "The @code{semantic_version} class is a small library for handling
7066@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
7067
7068It can compare versions, generate a new version that represents a bump in one
7069of the version levels, and check whether any given string is a proper semantic
7070version identifier.")
7071 (license license:bsd-3)))
7072
7073(define-public python-serpent
7074 (package
7075 (name "python-serpent")
7076 (version "1.41")
7077 (source
7078 (origin
7079 (method git-fetch)
7080 (uri (git-reference
7081 (url "https://github.com/irmen/Serpent")
7082 (commit (string-append "serpent-" version))))
7083 (file-name (git-file-name name version))
7084 (sha256
7085 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
7086 (build-system pyproject-build-system)
7087 (arguments (list #:test-backend #~'unittest
7088 #:test-flags #~(list "discover" "-s" "tests")))
7089 (native-inputs
7090 (list python-attrs python-pytz python-setuptools))
7091 (home-page "https://github.com/irmen/Serpent")
7092 (synopsis "Serializer for literal Python expressions")
7093 (description
7094 "Serpent provides @code{ast.literal_eval()}-compatible object tree
7095serialization. It serializes an object tree into bytes (an utf-8 encoded
7096string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
7097to rebuild the original object tree.
7098
7099Because only safe literals are encoded, it is safe to send serpent data to
7100other machines, such as over the network.")
7101 (license license:expat)))
7102
7103(define-public python-setuptools-declarative-requirements
7104 (package
7105 (name "python-setuptools-declarative-requirements")
7106 (version "1.3.0")
7107 (source
7108 (origin
7109 (method url-fetch)
7110 (uri (pypi-uri "setuptools-declarative-requirements" version))
7111 (sha256
7112 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
7113 (build-system pyproject-build-system)
7114 (arguments
7115 (list #:tests? #f)) ;require dated inputs
7116 (native-inputs
7117 (list python-setuptools-scm))
7118 (propagated-inputs
7119 (list python-setuptools))
7120 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
7121 (synopsis "File support for setuptools declarative setup.cfg")
7122 (description
7123 "This package provides file support for setuptools declarative
7124@code{setup.cfg}.")
7125 (license license:asl2.0)))
7126
7127(define-public python-humanfriendly
7128 (package
7129 (name "python-humanfriendly")
7130 (version "10.0")
7131 (source
7132 (origin
7133 (method git-fetch)
7134 (uri (git-reference
7135 (url "https://github.com/xolox/python-humanfriendly")
7136 (commit version)))
7137 (file-name (git-file-name name version))
7138 (sha256
7139 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
7140 (build-system pyproject-build-system)
7141 (arguments
7142 (list
7143 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
7144 #:tests? #f))
7145 (native-inputs (list python-setuptools))
7146 (home-page "https://humanfriendly.readthedocs.io")
7147 (synopsis "Human-friendly input and output in Python")
7148 (description
7149 "The functions and classes in @code{humanfriendly} can be used to make
7150text interfaces more user-friendly. It includes tools to parse and format
7151numbers, file sizes, and timespans, timers for long-running operations, menus
7152to allow the user to choose from a list of options, and terminal interaction
7153helpers.")
7154 (license license:expat)))
7155
7156(define-public python-calver
7157 (package
7158 (name "python-calver")
7159 (version "2022.06.26")
7160 (source
7161 (origin
7162 (method git-fetch)
7163 (uri (git-reference
7164 (url "https://github.com/di/calver")
7165 (commit version)))
7166 (file-name (git-file-name name version))
7167 (sha256
7168 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
7169 (build-system pyproject-build-system)
7170 (native-inputs
7171 (list python-pretend
7172 python-pytest
7173 python-setuptools
7174 python-wheel))
7175 (home-page "https://github.com/di/calver")
7176 (synopsis "Setuptools extension for CalVer package versions")
7177 (description
7178 "The calver package is a setuptools extension for automatically defining
7179your Python package version as a calendar version.")
7180 (license license:asl2.0)))
7181
7182(define-public python-can
7183 (package
7184 (name "python-can")
7185 (version "4.6.1")
7186 (source
7187 (origin
7188 (method git-fetch)
7189 (uri (git-reference
7190 (url "https://github.com/hardbyte/python-can")
7191 (commit (string-append "v" version))))
7192 (file-name (git-file-name name version))
7193 (sha256
7194 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
7195 (build-system pyproject-build-system)
7196 (arguments
7197 (list
7198 #:test-flags
7199 #~(list
7200 ;; TODO: Check if it could be packed:
7201 ;; https://github.com/projectgus/python-canalystii
7202 ;;
7203 ;; Disable tests which require specific CAN drivers we have no
7204 ;; package for in Guix.
7205 "--ignore=test/test_interface_canalystii.py"
7206 ;; These tests fail with "OSError: [Errno 19] No such device".
7207 "-k" "not BasicTestUdpMulticastBusIPv")
7208 #:phases
7209 #~(modify-phases %standard-phases
7210 (add-after 'unpack 'relax-requirements
7211 (lambda _
7212 (substitute* "pyproject.toml"
7213 (("\"wrapt~=.*\"")
7214 "\"wrapt\"")))))))
7215 (propagated-inputs (list python-packaging python-wrapt))
7216 (native-inputs
7217 (list ;; python-canalystii ; Not packed yet
7218 python-hypothesis
7219 python-mock
7220 python-parameterized
7221 python-pyserial
7222 python-pytest
7223 python-pytest-timeout
7224 python-setuptools
7225 python-setuptools-scm))
7226 (home-page "https://github.com/hardbyte/python-can")
7227 (synopsis "Controller Area Network (CAN) interface module for Python")
7228 (description
7229 "This package defines the @code{can} module, which provides controller
7230area network (CAN) support for Python developers; providing common
7231abstractions to different hardware devices, and a suite of utilities for
7232sending and receiving messages on a CAN bus.")
7233 (license license:lgpl3+)))
7234
7235(define-public python-canmatrix
7236 (package
7237 (name "python-canmatrix")
7238 (version "1.2")
7239 (source
7240 (origin
7241 (method git-fetch) ; no tests data in PyPi package
7242 (uri (git-reference
7243 (url "https://github.com/ebroecker/canmatrix")
7244 (commit version)))
7245 (file-name (git-file-name name version))
7246 (sha256
7247 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
7248 (build-system pyproject-build-system)
7249 (native-inputs
7250 (list python-pytest
7251 python-pytest-timeout
7252 python-setuptools
7253 python-wheel))
7254 (propagated-inputs
7255 (list python-attrs
7256 python-canopen
7257 python-click
7258 ;; python-ldfparser
7259 python-lxml
7260 python-openpyxl
7261 python-pyyaml
7262 python-xlrd
7263 python-xlwt))
7264 (home-page "https://github.com/ebroecker/canmatrix")
7265 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
7266 (description
7267 "This package implements a @acronym{CAN, Controller Area Network} matrix
7268object in Python which describes the CAN-communication and its needed objects
7269such as board units, frames, signals, and values. It also includes two
7270command-line tools (@command{canconvert} and @command{cancompare}) for
7271converting and comparing CAN databases.")
7272 (license license:bsd-2)))
7273
7274(define-public python-canopen
7275 (package
7276 (name "python-canopen")
7277 (version "2.4.1")
7278 (source
7279 (origin
7280 (method git-fetch)
7281 (uri (git-reference
7282 (url "https://github.com/canopen-python/canopen")
7283 (commit (string-append "v" version))))
7284 (file-name (git-file-name name version))
7285 (sha256
7286 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
7287 (build-system pyproject-build-system)
7288 (native-inputs (list python-pytest python-setuptools))
7289 (propagated-inputs (list python-can))
7290 (home-page "https://github.com/canopen-python/canopen")
7291 (synopsis "CANopen stack implementation")
7292 (description
7293 "This package provides a Python implementation of the
7294@uref{https://www.can-cia.org/canopen/,CANopen standard} for
7295@acronym{CANs, controller-area networks}. The aim of the project is to
7296support the most common parts of the CiA 301 standard in a simple
7297Pythonic interface. It is mainly targeted for testing and automation
7298tasks rather than a standard compliant master implementation.")
7299 (license license:expat)))
7300
7301(define-public python-diskcache
7302 (package
7303 (name "python-diskcache")
7304 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
7305 ;; Django fixing failing tests.
7306 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
7307 (revision . "0")))
7308 (version (git-version "5.6.3"
7309 (assoc-ref properties 'revision)
7310 (assoc-ref properties 'commit)))
7311 (source
7312 (origin
7313 (method git-fetch)
7314 (uri (git-reference
7315 (url "https://github.com/grantjenks/python-diskcache")
7316 (commit (assoc-ref properties 'commit))))
7317 (file-name (git-file-name name version))
7318 (sha256
7319 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
7320 (build-system pyproject-build-system)
7321 (arguments
7322 (list
7323 #:phases
7324 #~(modify-phases %standard-phases
7325 (add-after 'unpack 'fix-pytest-config
7326 (lambda _
7327 ;; Prevent full threads utilization.
7328 (substitute* "tox.ini"
7329 (("-n auto") "")))))))
7330 (native-inputs
7331 (list python-django
7332 python-pytest
7333 python-setuptools))
7334 (home-page "https://www.grantjenks.com/docs/diskcache/")
7335 (synopsis "Disk and file backed cache library")
7336 (description "DiskCache is a disk and file backed persistent cache.")
7337 (license license:asl2.0)))
7338
7339(define-public python-optparse-pretty
7340 (package
7341 (name "python-optparse-pretty")
7342 (version "0.1.1")
7343 (source
7344 (origin
7345 (method url-fetch)
7346 (uri (pypi-uri "optparse-pretty" version))
7347 (sha256
7348 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7349 (build-system pyproject-build-system)
7350 (arguments (list #:tests? #false)) ;There are none
7351 (native-inputs (list python-setuptools python-wheel))
7352 (home-page "https://github.com/gvalkov/optparse-pretty")
7353 (synopsis "Compact help formatter for optparse")
7354 (description
7355 "This module provides two help formatters for optparse. They provide
7356terser and more customizable option formatting in comparison to the default
7357help formatter.")
7358 (license license:bsd-3)))
7359
7360(define-public python-orjson
7361 (package
7362 (name "python-orjson")
7363 (version "3.9.7")
7364 (source (origin
7365 (method url-fetch)
7366 (uri (pypi-uri "orjson" version))
7367 (sha256
7368 (base32
7369 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7370 (build-system cargo-build-system)
7371 (arguments
7372 (list
7373 #:imported-modules `(,@%cargo-build-system-modules
7374 ,@%pyproject-build-system-modules)
7375 #:modules '((guix build cargo-build-system)
7376 ((guix build pyproject-build-system) #:prefix py:)
7377 (guix build utils))
7378 #:phases
7379 #~(modify-phases %standard-phases
7380 (add-after 'build 'build-python-module
7381 (assoc-ref py:%standard-phases 'build))
7382 (add-after 'build-python-module 'install-python-module
7383 (assoc-ref py:%standard-phases 'install)))
7384 #:install-source? #false))
7385 (inputs
7386 (cons maturin (cargo-inputs 'python-orjson)))
7387 (native-inputs
7388 (list python-wrapper))
7389 (home-page "https://github.com/ijl/orjson")
7390 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7391 (description "Orjson is a fast, correct JSON library for Python. It
7392benchmarks as the fastest Python library for JSON and is more correct than the
7393standard @code{json} library or other third-party libraries. It serializes
7394dataclass, datetime, numpy, and UUID instances natively.")
7395 ;; Either of these licenses
7396 (license (list license:asl2.0 license:expat))))
7397
7398(define-public python-overrides
7399 (package
7400 (name "python-overrides")
7401 (version "7.7.0")
7402 (source
7403 (origin
7404 (method url-fetch)
7405 (uri (pypi-uri "overrides" version))
7406 (sha256
7407 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7408 (build-system pyproject-build-system)
7409 (native-inputs (list python-pytest python-setuptools python-wheel))
7410 (home-page "https://github.com/mkorpela/overrides")
7411 (synopsis "Decorator to detect mismatch when overriding a method")
7412 (description
7413 "This package provides a decorator to automatically detect mismatch when
7414overriding a method.")
7415 (license license:asl2.0)))
7416
7417(define-public python-argparse-addons
7418 (package
7419 (name "python-argparse-addons")
7420 (version "0.12.0")
7421 (source
7422 (origin
7423 (method url-fetch)
7424 (uri (pypi-uri "argparse_addons" version))
7425 (sha256
7426 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7427 (build-system pyproject-build-system)
7428 (native-inputs
7429 (list python-pytest python-setuptools))
7430 (home-page "https://github.com/eerimoq/argparse_addons")
7431 (synopsis "Extensions for Python's @code{argparse} library")
7432 (description "This Python library provides additional types and actions
7433for the standard @code{argparse} library.")
7434 (license license:expat)))
7435
7436(define-public python-bitstruct
7437 (package
7438 (name "python-bitstruct")
7439 (version "8.21.0")
7440 (source
7441 (origin
7442 (method url-fetch)
7443 (uri (pypi-uri "bitstruct" version))
7444 (sha256
7445 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7446 (build-system pyproject-build-system)
7447 (native-inputs
7448 (list python-pytest
7449 python-setuptools
7450 python-wheel))
7451 (home-page "https://github.com/eerimoq/bitstruct")
7452 (synopsis "Python values to and C bit field structs converter")
7453 (description
7454 "This module performs conversions between Python values and C bit field
7455structs represented as Python byte strings. It is intended to have a similar
7456interface as the @code{struct} module from Python, but working on bits instead
7457of primitive data types like @code{char}, @code{int}, etc.")
7458 (license license:expat)))
7459
7460(define-public python-cantools
7461 (package
7462 (name "python-cantools")
7463 (version "40.5.0")
7464 (source
7465 (origin
7466 (method git-fetch)
7467 (uri (git-reference
7468 (url "https://github.com/eerimoq/cantools")
7469 (commit version)))
7470 (file-name (git-file-name name version))
7471 (sha256
7472 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7473 (build-system pyproject-build-system)
7474 (native-inputs
7475 (list python-freezegun
7476 python-parameterized
7477 python-pytest
7478 python-setuptools
7479 python-setuptools-scm))
7480 (propagated-inputs
7481 (list python-argparse-addons
7482 python-bitstruct
7483 python-can
7484 python-crccheck
7485 python-diskcache
7486 python-matplotlib
7487 python-textparser))
7488 (home-page "https://github.com/eerimoq/cantools")
7489 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7490 (description
7491 "This package includes Controller Area Network (CAN) related tools that
7492can be used to:
7493@itemize
7494@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7495@item encode and decode CAN messages
7496@item multiplex simple and extended signals
7497@item diagnose DID encoding and decoding
7498@item dump the CAN decoder output
7499@item test CAN nodes
7500@item generate C source code
7501@item monitor the CAN bus
7502@end itemize")
7503 (license license:expat)))
7504
7505(define-public python-capturer
7506 (package
7507 (name "python-capturer")
7508 (version "3.0")
7509 (source
7510 (origin
7511 (method git-fetch)
7512 (uri (git-reference
7513 (url "https://github.com/xolox/python-capturer")
7514 (commit version)))
7515 (file-name (git-file-name name version))
7516 (sha256
7517 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7518 (build-system pyproject-build-system)
7519 (native-inputs (list python-pytest python-setuptools))
7520 (propagated-inputs (list python-humanfriendly))
7521 (home-page "https://capturer.readthedocs.io")
7522 (synopsis "Capture stdout and stderr streams of the current process")
7523 (description
7524 "The capturer package makes it easy to capture the stdout and stderr
7525streams of the current process and subprocesses. Output can be relayed
7526to the terminal in real time but is also available to the Python program
7527for additional processing.")
7528 (license license:expat)))
7529
7530(define-public python-fastprogress
7531 (package
7532 (name "python-fastprogress")
7533 (version "1.0.3")
7534 (source (origin
7535 (method git-fetch)
7536 (uri (git-reference
7537 (url "https://github.com/fastai/fastprogress")
7538 (commit version)))
7539 (file-name (git-file-name name version))
7540 (sha256
7541 (base32
7542 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7543 (build-system pyproject-build-system)
7544 (arguments
7545 (list #:tests? #f ;there are no tests
7546 #:phases #~(modify-phases %standard-phases
7547 ;; XXX: Fails with: "In procedure utime: No such file
7548 ;; or directory".
7549 (delete 'ensure-no-mtimes-pre-1980))))
7550 (native-inputs (list python-setuptools python-wheel))
7551 (home-page "https://github.com/fastai/fastprogress")
7552 (synopsis "Progress bar for Jupyter Notebook and console")
7553 (description
7554 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7555 (license license:asl2.0)))
7556
7557(define-public python-coloredlogs
7558 (package
7559 (name "python-coloredlogs")
7560 (version "15.0.1")
7561 (source
7562 (origin
7563 (method git-fetch)
7564 (uri (git-reference
7565 (url "https://github.com/xolox/python-coloredlogs")
7566 (commit version)))
7567 (file-name (git-file-name name version))
7568 (sha256
7569 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7570 (build-system pyproject-build-system)
7571 (arguments
7572 (list
7573 #:test-flags
7574 #~(list "-k"
7575 (string-join
7576 (list "not test_auto_install" ; Unclear why this fails.
7577 ;; XXX: Require a "script" executable.
7578 "test_cli_conversion"
7579 "test_empty_conversion"
7580 "test_output_interception")
7581 " and not "))))
7582 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7583 (propagated-inputs (list python-capturer))
7584 (home-page "https://coloredlogs.readthedocs.io")
7585 (synopsis "Colored stream handler for Python's logging module")
7586 (description
7587 "The @code{coloredlogs} package enables colored terminal output for
7588Python's logging module. The @code{ColoredFormatter} class inherits from
7589@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7590messages in color.")
7591 (license license:expat)))
7592
7593(define-public python-editorconfig
7594 (package
7595 (name "python-editorconfig")
7596 (version "0.17.1")
7597 (source
7598 (origin
7599 (method git-fetch)
7600 (uri (git-reference
7601 (url "https://github.com/editorconfig/editorconfig-core-py")
7602 (commit (string-append "v" version))
7603 (recursive? #t)))
7604 (file-name (git-file-name name version))
7605 (sha256
7606 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
7607 (build-system pyproject-build-system)
7608 (arguments
7609 (list
7610 #:phases
7611 #~(modify-phases %standard-phases
7612 (replace 'check
7613 (lambda _
7614 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
7615 (invoke "cmake" ".")
7616 (invoke "ctest" "."))))))
7617 (native-inputs (list cmake python-setuptools python-wheel))
7618 (home-page "https://editorconfig.org/")
7619 (synopsis "EditorConfig bindings for python")
7620 (description "The EditorConfig project consists of a file format for
7621defining coding styles and a collection of text editor plugins that enable
7622editors to read the file format and adhere to defined styles. EditorConfig
7623files are easily readable and they work nicely with version control systems.")
7624 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
7625 (license (list license:bsd-2 license:psfl))))
7626
7627(define-public dosage
7628 (package
7629 (name "dosage")
7630 (version "3.2")
7631 (source
7632 (origin
7633 (method url-fetch)
7634 (uri (pypi-uri "dosage" version))
7635 (sha256
7636 (base32
7637 "0hi5rl17rj9gay7yw7ikrkyp5qhyw5bzp4ig1sj6ahzclsia8y1h"))))
7638 (build-system pyproject-build-system)
7639 (arguments
7640 ;; It requires additional modules for integration tests.
7641 (list #:test-flags #~(list "--ignore=tests/modules/")))
7642 (native-inputs
7643 (list python-pytest
7644 python-responses
7645 python-setuptools
7646 python-setuptools-scm))
7647 (inputs
7648 (list python-imagesize
7649 python-importlib-resources
7650 python-lxml
7651 python-platformdirs
7652 python-requests
7653 python-rich))
7654 (home-page "https://github.com/webcomics/dosage")
7655 (synopsis "Comic strip downloader and archiver")
7656 (description
7657 "Dosage is designed to keep a local copy of specific webcomics and other
7658picture-based content such as Picture of the Day sites. With the
7659@command{dosage} command-line script you can get the latest strip of a
7660webcomic, catch-up to the last strip downloaded, or download a strip for a
7661particular date or index, if possible.")
7662 (license license:expat)))
7663
7664(define-public python-etcd3
7665 (package
7666 (name "python-etcd3")
7667 (version "0.12.0")
7668 (source
7669 (origin
7670 (method git-fetch)
7671 (uri (git-reference
7672 (url "https://github.com/kragniz/python-etcd3")
7673 (commit (string-append "v" version))))
7674 (file-name (git-file-name name version))
7675 (sha256
7676 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
7677 (build-system pyproject-build-system)
7678 (arguments
7679 (list
7680 ;; XXX: Tests require the etcd package.
7681 #:tests? #f
7682 #:test-backend #~'custom
7683 #:test-flags ; Taken from tox.ini.
7684 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
7685 (propagated-inputs (list python-grpcio python-protobuf python-tenacity))
7686 (native-inputs (list python-mock python-pifpaf python-pytest python-setuptools))
7687 (home-page "https://github.com/kragniz/python-etcd3")
7688 (synopsis "Python client for the etcd3 API")
7689 (description
7690 "This package provide a Python client for the @code{etcd3} API.")
7691 (license license:asl2.0)))
7692
7693(define-public python-et-xmlfile
7694 (package
7695 (name "python-et-xmlfile")
7696 (version "2.0.0")
7697 (source
7698 (origin
7699 ;; Use a checkout because the PyPI archive does not contain tests.
7700 (method hg-fetch)
7701 (uri (hg-reference
7702 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
7703 (changeset version)))
7704 (file-name (string-append name "-" version "-checkout"))
7705 (sha256
7706 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
7707 (build-system pyproject-build-system)
7708 (native-inputs
7709 (list python-pytest
7710 python-lxml
7711 python-setuptools))
7712 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
7713 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
7714 (description "This Python library is based upon the @code{xmlfile} module
7715from @code{lxml}. It aims to provide a low memory, compatible implementation
7716of @code{xmlfile}.")
7717 (license license:expat)))
7718
7719(define-public python-omero-py
7720 (let ((omero-blitz-version "5.8.2"))
7721 (package
7722 (name "python-omero-py")
7723 (version "5.20.0")
7724 (source
7725 (origin
7726 (method git-fetch)
7727 (uri (git-reference
7728 (url "https://github.com/ome/omero-py")
7729 (commit (string-append "v" version))))
7730 (file-name (git-file-name name version))
7731 (sha256
7732 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
7733 (build-system pyproject-build-system)
7734 (arguments
7735 (list
7736 #:test-flags
7737 #~(list
7738 "-m" "not broken" "-rf" "test" "-s"
7739 ;; TestImport tries to download Java things; TestSessions
7740 ;; and TestBuildQuery require networking.
7741 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
7742 #:modules '((guix build pyproject-build-system)
7743 (guix build utils)
7744 (ice-9 match)
7745 (srfi srfi-1)
7746 (srfi srfi-26))
7747 #:phases
7748 #~(modify-phases %standard-phases
7749 (add-after 'unpack 'find-artifacts
7750 (lambda* (#:key inputs #:allow-other-keys)
7751 (let ((zip-file
7752 (match inputs
7753 (((labels . files) ...)
7754 (find (cut string-suffix?
7755 (string-append "omero-blitz-"
7756 #$omero-blitz-version
7757 "-python.zip")
7758 <>)
7759 files)))))
7760 (setenv "ZIP_FILE"
7761 (or zip-file (error "failed to find artifact file"))))))
7762 ;; Some tests need this, such as TestTempFileManager
7763 (add-after 'build 'set-HOME
7764 (lambda _ (setenv "HOME" "/tmp")))
7765 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
7766 ;; module to load.
7767 (delete 'sanity-check)
7768 ;; The argument parser is picky and interprets the "-real" part as
7769 ;; the first argument.
7770 (add-after 'wrap 'rename-executable
7771 (lambda _
7772 (with-directory-excursion (string-append #$output "/bin")
7773 (rename-file ".omero-real" ".omero")
7774 (substitute* "omero"
7775 (("bin/.omero-real") "bin/.omero"))))))))
7776 (propagated-inputs
7777 (list python-appdirs
7778 python-future
7779 python-numpy
7780 python-pillow
7781 python-pyyaml
7782 python-requests
7783 python-tables
7784 python-zeroc-ice-3.6))
7785 (native-inputs
7786 (list python-portalocker
7787 python-pytest
7788 python-pytest-mock
7789 python-pytest-rerunfailures
7790 python-pytest-xdist
7791 python-setuptools
7792 python-wheel
7793 unzip
7794 (origin
7795 (method url-fetch)
7796 (uri (format #f "\
7797https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
7798openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
7799 omero-blitz-version
7800 omero-blitz-version))
7801 (sha256
7802 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
7803 (home-page "https://github.com/ome/omero-py")
7804 (synopsis "Python bindings to the OMERO.blitz server")
7805 (description "This package provides Python bindings to the OMERO.blitz
7806server.")
7807 (license license:gpl2))))
7808
7809(define-public python-openpyxl
7810 (package
7811 (name "python-openpyxl")
7812 (version "3.1.5")
7813 (source
7814 (origin
7815 ;; We use the upstream repository, as the tests are not included in the
7816 ;; PyPI releases.
7817 (method hg-fetch)
7818 (uri (hg-reference
7819 (url "https://foss.heptapod.net/openpyxl/openpyxl")
7820 (changeset version)))
7821 (file-name (string-append name "-" version "-checkout"))
7822 (sha256
7823 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
7824 (build-system pyproject-build-system)
7825 (arguments
7826 (list
7827 ;; XXX: The workbook writer doesn't respect SOURCE_DATE_EPOCH
7828 ;; https://foss.heptapod.net/openpyxl/openpyxl/-/issues/2268
7829 ;; It makes a few tests fail.
7830 #:test-flags
7831 #~(list "--ignore=openpyxl/worksheet/tests/test_read_only.py"
7832 "-k" (string-join
7833 (list "not test_unsupport_drawing"
7834 "test_broken_sheet_ref"
7835 "test_no_default_style"
7836 "test_ctor"
7837 "test_force_dimension"
7838 "test_get_max_cell"
7839 "test_read_hyperlinks_read_only"
7840 "test_read_with_missing_cells"
7841 "test_read_empty_rows")
7842 " and not "))))
7843 (native-inputs
7844 (list python-lxml-4.9
7845 python-pillow
7846 python-pytest
7847 python-setuptools))
7848 (propagated-inputs
7849 (list python-et-xmlfile))
7850 (home-page "https://openpyxl.readthedocs.io")
7851 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
7852 (description
7853 "This Python library allows reading and writing to the Excel XLSX, XLSM,
7854XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
7855standard.")
7856 (license license:expat)))
7857
7858(define-public python-sinfo
7859 (package
7860 (name "python-sinfo")
7861 (version "1.0.1")
7862 (source
7863 (origin
7864 (method git-fetch)
7865 (uri (git-reference
7866 (url "https://gitlab.com/joelostblom/session_info")
7867 (commit (string-append "v" version))))
7868 (file-name (git-file-name name version))
7869 (sha256
7870 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
7871 (build-system pyproject-build-system)
7872 (arguments
7873 (list #:tests? #f)) ; no tests in PyPI or Git
7874 (native-inputs
7875 (list python-setuptools))
7876 (propagated-inputs
7877 (list python-stdlib-list))
7878 (home-page "https://gitlab.com/joelostblom/session_info")
7879 (synopsis "Output module version information loaded in a Python session")
7880 (description "This package outputs version information for modules loaded
7881in the current session, Python, and the OS.")
7882 (license license:bsd-3)))
7883
7884(define-public python-schedule
7885 (package
7886 (name "python-schedule")
7887 (version "1.2.2")
7888 (source
7889 (origin
7890 (method url-fetch)
7891 (uri (pypi-uri "schedule" version))
7892 (sha256
7893 (base32
7894 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
7895 (build-system pyproject-build-system)
7896 (native-inputs
7897 (list python-pytest python-setuptools python-wheel))
7898 (home-page "https://github.com/dbader/schedule")
7899 (synopsis "Schedule periodic function calls in Python")
7900 (description
7901 "Schedule is an in-process scheduler for periodic jobs that uses the
7902builder pattern for configuration. Schedule lets you run Python functions (or
7903any other callable) periodically at pre-determined intervals using a simple,
7904human-friendly syntax.")
7905 (license license:expat)))
7906
7907;; XXX: This project is unmaintained since 2020, see:
7908;; <https://github.com/scour-project/scour/issues/321>.
7909;;
7910;; The only user is Inkscape, see:
7911;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
7912(define-public python-scour
7913 (package
7914 (name "python-scour")
7915 (version "0.38.2")
7916 (source
7917 (origin
7918 (method git-fetch)
7919 (uri
7920 (git-reference
7921 (url "https://gitlab.com/inkscape/extras/scour")
7922 (commit
7923 (string-append "v" version))))
7924 (file-name (git-file-name name version))
7925 (sha256
7926 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
7927 (build-system pyproject-build-system)
7928 (arguments
7929 (list #:test-backend #~'custom
7930 #:test-flags #~(list "test_scour.py")))
7931 (native-inputs
7932 (list python-setuptools))
7933 (propagated-inputs
7934 (list python-six))
7935 (home-page "https://gitlab.com/inkscape/extras/scour")
7936 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
7937 (description
7938 "The goal of Scour is to output a file that renders identically at a
7939fraction of the size by removing a lot of redundant information created by
7940most SVG editors. Optimization options are typically lossless but can be
7941tweaked for more aggressive cleaning.")
7942 (license license:asl2.0)))
7943
7944(define-public python-mechanize
7945 (package
7946 (name "python-mechanize")
7947 (version "0.4.10")
7948 (source
7949 (origin
7950 (method url-fetch)
7951 (uri (pypi-uri "mechanize" version))
7952 (sha256
7953 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
7954 (build-system pyproject-build-system)
7955 (arguments
7956 ;; XXX: Unclear why tests are failing.
7957 (list #:tests? #f
7958 #:phases
7959 #~(modify-phases %standard-phases
7960 (add-before 'check 'configure-tests
7961 (lambda _
7962 (setenv "GUIX_PYTHONPATH"
7963 (string-append (getcwd) "/test-tools:"
7964 (getenv "GUIX_PYTHONPATH"))))))))
7965 (native-inputs
7966 (list python-html5-parser
7967 python-html5lib
7968 python-lxml
7969 python-service-identity
7970 python-setuptools
7971 python-six
7972 python-twisted
7973 python-wheel))
7974 (propagated-inputs
7975 (list python-html5lib))
7976 (home-page "https://github.com/python-mechanize/mechanize")
7977 (synopsis
7978 "Stateful programmatic web browsing in Python")
7979 (description
7980 "Mechanize implements stateful programmatic web browsing in Python,
7981after Andy Lester’s Perl module WWW::Mechanize.")
7982 (license license:bsd-3)))
7983
7984(define-public python-mediapy
7985 (package
7986 (name "python-mediapy")
7987 (version "1.2.6")
7988 (source
7989 (origin
7990 (method git-fetch)
7991 (uri (git-reference
7992 (url "https://github.com/google/mediapy")
7993 (commit (string-append "v" version))))
7994 (file-name (git-file-name name version))
7995 (sha256
7996 (base32 "0gpbn1bqm6sp692fg7acs3l46xjr70frh3jv4cp3lbixfqmfb3lc"))))
7997 (build-system pyproject-build-system)
7998 (arguments
7999 (list
8000 #:phases
8001 '(modify-phases %standard-phases
8002 (add-after 'unpack 'fix-references
8003 (lambda _
8004 (substitute* "mediapy_test.py"
8005 (("'/bin/bash")
8006 (string-append "'" (which "bash")))))))))
8007 (inputs (list ffmpeg-6))
8008 (propagated-inputs (list python-absl-py
8009 python-ipython
8010 python-matplotlib
8011 python-numpy
8012 python-pillow))
8013 (native-inputs
8014 (list python-flit-core
8015 python-pytest
8016 python-pytest-xdist))
8017 (home-page "https://github.com/google/mediapy")
8018 (synopsis "Read/write/show images and videos in an IPython notebook")
8019 (description "This Python library makes it easy to display images and
8020videos in a notebook.")
8021 (license license:asl2.0)))
8022
8023(define-public python-simpleaudio
8024 (package
8025 (name "python-simpleaudio")
8026 (version "1.0.4")
8027 (source
8028 (origin
8029 (method git-fetch)
8030 (uri (git-reference
8031 (url "https://github.com/hamiltron/py-simple-audio")
8032 (commit version)))
8033 (file-name (git-file-name name version))
8034 (sha256
8035 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
8036 (build-system pyproject-build-system)
8037 (arguments
8038 (list
8039 #:test-backend #~'unittest
8040 #:phases
8041 #~(modify-phases %standard-phases
8042 (add-before 'check 'fix-test-run
8043 (lambda _
8044 (delete-file-recursively "simpleaudio"))))))
8045 (native-inputs (list python-setuptools))
8046 (inputs (list alsa-lib))
8047 (home-page "https://github.com/hamiltron/py-simple-audio")
8048 (synopsis "Simple, asynchronous audio playback for Python 3")
8049 (description
8050 "The @code{simplaudio} package provides cross-platform, dependency-free
8051audio playback capability for Python 3 on OSX, Windows, and Linux.")
8052 (license license:expat))) ; MIT license
8053
8054(define-public python-jsonalias
8055 (package
8056 (name "python-jsonalias")
8057 (version "0.1.2")
8058 (source (origin
8059 (method url-fetch)
8060 (uri (pypi-uri "jsonalias" version))
8061 (sha256
8062 (base32
8063 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
8064 (build-system pyproject-build-system)
8065 (arguments
8066 (list #:tests? #f)) ; no tests in PyPI or Git
8067 (native-inputs
8068 (list python-poetry-core))
8069 (home-page "https://github.com/kevinheavey/jsonalias/")
8070 (synopsis "JSON type alias for Python")
8071 (description
8072 "This package provides a microlibrary that defines a JSON type alias for
8073Python.")
8074 (license license:expat)))
8075
8076(define-public python-jsonargparse
8077 (package
8078 (name "python-jsonargparse")
8079 (version "4.49.0")
8080 (source
8081 (origin
8082 (method git-fetch)
8083 (uri (git-reference
8084 (url "https://github.com/omni-us/jsonargparse/")
8085 (commit (string-append "v" version))))
8086 (file-name (git-file-name name version))
8087 (sha256
8088 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
8089 (build-system pyproject-build-system)
8090 (propagated-inputs
8091 (list python-pyyaml))
8092 (native-inputs
8093 (list python-attrs
8094 python-pydantic
8095 python-pytest
8096 python-pytest-subtests
8097 python-requests
8098 python-responses
8099 python-setuptools
8100 python-types-pyyaml
8101 python-types-requests))
8102 (home-page "https://github.com/omni-us/jsonargparse/")
8103 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
8104 (description
8105 "This package lets you implement minimal boilerplate CLIs derived from
8106type hints and parse from command line, config files and environment
8107variables.")
8108 (license license:expat)))
8109
8110(define-public python-pymarshal
8111 (package
8112 (name "python-pymarshal")
8113 (version "2.2.3")
8114 (source (origin
8115 (method url-fetch)
8116 (uri (pypi-uri "pymarshal" version))
8117 (sha256
8118 (base32
8119 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
8120 (build-system pyproject-build-system)
8121 (arguments
8122 ;; Test fails with this error:
8123 ;; "CovReportWarning: Failed to generate report: No data to report."
8124 (list #:tests? #f))
8125 (native-inputs
8126 (list python-pytest python-setuptools python-wheel))
8127 (propagated-inputs (list python-bson python-pyyaml))
8128 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
8129 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
8130 (description "PyMarshal replicates the feature of (un)marshalling structs
8131in Golang.")
8132 (license license:bsd-2)))
8133
8134(define-public python-simplejson
8135 (package
8136 (name "python-simplejson")
8137 (version "3.20.1")
8138 (source
8139 (origin
8140 (method url-fetch)
8141 (uri (pypi-uri "simplejson" version))
8142 (sha256
8143 (base32
8144 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
8145 (build-system pyproject-build-system)
8146 (native-inputs
8147 (list python-pytest python-setuptools))
8148 (home-page "https://simplejson.readthedocs.io/en/latest")
8149 (synopsis
8150 "Json library for Python")
8151 (description
8152 "JSON (JavaScript Object Notation) is a subset of JavaScript
8153syntax (ECMA-262 3rd edition) used as a lightweight data interchange
8154format.
8155
8156Simplejson exposes an API familiar to users of the standard library marshal
8157and pickle modules. It is the externally maintained version of the json
8158library contained in Python 2.6, but maintains compatibility with Python 2.5
8159and (currently) has significant performance advantages, even without using
8160the optional C extension for speedups. Simplejson is also supported on
8161Python 3.3+.")
8162 (license license:x11)))
8163
8164(define-public python-simple-rlp
8165 (package
8166 (name "python-simple-rlp")
8167 (version "0.1.3")
8168 (source
8169 (origin
8170 (method git-fetch)
8171 (uri (git-reference
8172 (url "https://github.com/SamuelHaidu/simple-rlp")
8173 ;; Upstream doesn't tag the git repo.
8174 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
8175 (file-name (git-file-name name version))
8176 (sha256
8177 (base32
8178 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
8179 (build-system pyproject-build-system)
8180 (native-inputs
8181 (list
8182 python-pytest
8183 python-setuptools))
8184 (home-page "https://github.com/SamuelHaidu/simple-rlp")
8185 (synopsis
8186 "Python implementation of RLP (Recursive Length Prefix) encoding")
8187 (description
8188 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
8189Prefix) - Encode and decode data structures.")
8190 (license license:expat)))
8191
8192(define-public python-pyicu
8193 (package
8194 (name "python-pyicu")
8195 (version "2.15.2")
8196 (source
8197 (origin
8198 (method url-fetch)
8199 (uri (pypi-uri "pyicu" version))
8200 (sha256
8201 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
8202 (build-system pyproject-build-system)
8203 (native-inputs
8204 (list pkg-config
8205 python-pytest
8206 python-setuptools
8207 python-six))
8208 (inputs
8209 (list icu4c))
8210 (home-page "https://gitlab.pyicu.org/main/pyicu")
8211 (synopsis "Python extension wrapping the ICU C++ API")
8212 (description
8213 "PyICU is a python extension wrapping the ICU C++ API.")
8214 (license license:x11)))
8215
8216(define-public python-dogtail
8217 (package
8218 (name "python-dogtail")
8219 (version "0.9.11")
8220 (source
8221 (origin
8222 (method url-fetch)
8223 (uri (string-append
8224 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
8225 version ".tar.gz"))
8226 (sha256
8227 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
8228 (build-system pyproject-build-system)
8229 (arguments
8230 (list
8231 #:tests? #f ;TODO Launching dbus for the tests fails
8232 #:phases
8233 #~(modify-phases %standard-phases
8234 (replace 'check
8235 (lambda* (#:key tests? #:allow-other-keys)
8236 (when tests?
8237 (system "Xvfb :1 &")
8238 (setenv "DISPLAY" ":1")
8239 (invoke "dbus-run-session" "--"
8240 "nosetests" "-v" "tests/")))))))
8241 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
8242 (native-inputs
8243 (list python-pynose
8244 gtk+
8245 xorg-server-for-tests
8246 dbus
8247 gsettings-desktop-schemas
8248 gobject-introspection
8249 python-setuptools))
8250 (home-page "https://gitlab.com/dogtail/dogtail/")
8251 (synopsis "GUI test tool and automation framework written in Python")
8252 (description
8253 "Dogtail is a GUI test tool and automation framework written in Python.
8254It uses Accessibility (a11y) technologies to communicate with desktop
8255applications. dogtail scripts are written in Python and executed like any
8256other Python program.")
8257 (license license:gpl2+)))
8258
8259(define-public python-doxyqml
8260 (package
8261 (name "python-doxyqml")
8262 (version "0.5.3")
8263 (source (origin
8264 (method url-fetch)
8265 (uri (pypi-uri "doxyqml" version))
8266 (sha256
8267 (base32
8268 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
8269 (build-system pyproject-build-system)
8270 (arguments
8271 (list #:test-backend #~'custom
8272 #:test-flags #~(list "tests/functional/tests.py")))
8273 (native-inputs
8274 (list python-setuptools))
8275 (home-page "https://agateau.com/projects/doxyqml")
8276 (synopsis "Doxygen input filter for QML files")
8277 (description
8278 "This package provides a Doxygen input filter for QML files.")
8279 (license license:bsd-3)))
8280
8281(define-public python-doxypypy
8282 (package
8283 (name "python-doxypypy")
8284 (version "0.8.8.7")
8285 (source (origin
8286 (method url-fetch)
8287 (uri (pypi-uri "doxypypy" version))
8288 (sha256
8289 (base32
8290 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
8291 (build-system pyproject-build-system)
8292 (arguments
8293 (list
8294 #:test-flags
8295 #~(list "-k" (string-join
8296 ;; Test files are not in UTF-8 format and attmet to
8297 ;; substitute shebang fails, while tests fail with error:
8298 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
8299 ;; File w[387 chars]g.')" !=
8300 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
8301 ;; chars]g.')"
8302 (list "not test_utf16be_bom"
8303 "test_utf16le_bom"
8304 "test_utf32be_bom"
8305 "test_utf32le_bom"
8306 "test_utf8_bom")
8307 " and not "))
8308 #:phases
8309 #~(modify-phases %standard-phases
8310 ;; compile-bytecode phases fails with error: SyntaxError: source
8311 ;; code string cannot contain null bytes.
8312 (add-after 'unpack 'fix-setup.py
8313 (lambda _
8314 (substitute* "setup.py"
8315 (("packages=.*") "packages=['doxypypy'],\n")))))))
8316 (native-inputs
8317 (list python-pytest
8318 python-setuptools
8319 python-wheel))
8320 (propagated-inputs
8321 (list python-chardet))
8322 (home-page "https://github.com/Feneric/doxypypy")
8323 (synopsis "Doxygen filter for Python")
8324 (description
8325 "This package provides a Doxygen filter for Python.")
8326 (license license:gpl2+)))
8327
8328(define-public python-empy
8329 (package
8330 (name "python-empy")
8331 (version "3.3.4")
8332 (source
8333 (origin
8334 (method url-fetch)
8335 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
8336 version ".tar.gz"))
8337 (sha256
8338 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
8339 (build-system pyproject-build-system)
8340 (arguments
8341 (list
8342 #:phases
8343 #~(modify-phases %standard-phases
8344 (replace 'check
8345 (lambda* (#:key tests? #:allow-other-keys)
8346 (when tests?
8347 (invoke "./test.sh")))))))
8348 (native-inputs (list python-setuptools))
8349 (home-page "http://www.alcyone.com/software/empy/")
8350 (synopsis "Templating system for Python")
8351 (description
8352 "EmPy is a system for embedding Python expressions and statements in
8353template text; it takes an EmPy source file, processes it, and produces
8354output. This is accomplished via expansions, which are special signals to the
8355EmPy system and are set off by a special prefix (by default the at sign, @@).
8356EmPy can expand arbitrary Python expressions and statements in this way, as
8357well as a variety of special forms. Textual data not explicitly delimited in
8358this way is sent unaffected to the output, allowing Python to be used in
8359effect as a markup language. Also supported are callbacks via hooks,
8360recording and playback via diversions, and dynamic, chainable filters. The
8361system is highly configurable via command line options and embedded
8362commands.")
8363 (license license:lgpl2.1+)))
8364
8365(define-public python-palettable
8366 (package
8367 (name "python-palettable")
8368 (version "3.3.3")
8369 (source (origin
8370 (method url-fetch)
8371 (uri (pypi-uri "palettable" version))
8372 (sha256
8373 (base32
8374 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8375 (build-system pyproject-build-system)
8376 (native-inputs (list python-pytest python-setuptools python-wheel))
8377 (home-page "https://jiffyclub.github.io/palettable/")
8378 (synopsis "Color palettes for Python")
8379 (description "Palettable (formerly brewer2mpl) is a library of color
8380palettes for Python. It’s written in pure Python with no dependencies, but it
8381can supply color maps for matplotlib. You can use Palettable to customize
8382matplotlib plots or supply colors for a web application.")
8383 (license license:expat)))
8384
8385(define-public python-parse-type
8386 (package
8387 (name "python-parse-type")
8388 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8389 ;; 3.12+; move back to git tag when released.
8390 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8391 (revision . "0")))
8392 (version (git-version "0.6.6"
8393 (assoc-ref properties 'revision)
8394 (assoc-ref properties 'commit)))
8395 (source
8396 (origin
8397 (method git-fetch)
8398 (uri (git-reference
8399 (url "https://github.com/jenisys/parse_type")
8400 (commit (assoc-ref properties 'commit))))
8401 (file-name (git-file-name name version))
8402 (sha256
8403 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8404 (build-system pyproject-build-system)
8405 (arguments
8406 (list
8407 ;; tests: 332 passed, 2 skipped
8408 #:phases
8409 #~(modify-phases %standard-phases
8410 (add-after 'unpack 'fix-pytest-config
8411 ;; To bypass options: --metadata, --html and --junit-xml.
8412 (lambda _
8413 (delete-file "pytest.ini"))))))
8414 (native-inputs
8415 (list python-pytest
8416 python-setuptools
8417 python-setuptools-scm))
8418 (propagated-inputs
8419 (list python-six ;hard dependency
8420 python-parse))
8421 (home-page "https://github.com/jenisys/parse_type")
8422 (synopsis "Extended parse module")
8423 (description "Parse_type extends the python parse module.")
8424 (license license:expat)))
8425
8426(define-public python-parse
8427 (package
8428 (name "python-parse")
8429 (version "1.20.2")
8430 (source
8431 (origin
8432 (method git-fetch)
8433 (uri (git-reference
8434 (url "https://github.com/r1chardj0n3s/parse")
8435 (commit version)))
8436 (file-name (git-file-name name version))
8437 (sha256
8438 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8439 (build-system pyproject-build-system)
8440 (native-inputs (list python-pytest python-setuptools))
8441 (home-page "https://github.com/r1chardj0n3s/parse")
8442 (synopsis "Parse strings")
8443 (description
8444 "Parse strings using a specification based on the Python @code{format()}
8445syntax.")
8446 (license license:x11)))
8447
8448(define-public python-parsley
8449 (package
8450 (name "python-parsley")
8451 (version "1.3")
8452 (source
8453 (origin
8454 (method git-fetch)
8455 (uri (git-reference
8456 (url "https://github.com/pyga/parsley")
8457 (commit version)))
8458 (file-name (git-file-name name version))
8459 (sha256
8460 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8461 (patches
8462 (list
8463 (origin
8464 (method url-fetch)
8465 (uri
8466 (string-append "https://github.com/pyga/parsley/commit/"
8467 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8468 (sha256
8469 (base32
8470 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8471 (build-system pyproject-build-system)
8472 (arguments
8473 (list
8474 #:test-flags #~(list "ometa/test" "terml/test")))
8475 (native-inputs
8476 (list python-pytest
8477 python-setuptools
8478 python-twisted))
8479 (home-page "https://launchpad.net/parsley")
8480 (synopsis "Parsing and pattern matching Python library")
8481 (description
8482 "Parsley is a parsing library using PEG algorithm, so each expression in
8483the grammar rules works like a Python expression. In particular, alternatives
8484are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8485Parsley is an implementation of OMeta, an object-oriented pattern-matching
8486language.")
8487 (license license:expat)))
8488
8489(define-public python-petl
8490 (package
8491 (name "python-petl")
8492 (version "1.7.16")
8493 (source
8494 (origin
8495 (method url-fetch)
8496 (uri (pypi-uri "petl" version))
8497 (sha256
8498 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8499 (build-system pyproject-build-system)
8500 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8501 python-pytest))
8502 (home-page "https://github.com/petl-developers/petl")
8503 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8504processing pipelines.")
8505 (description
8506 "This package provides a library for extracting, transforming and loading
8507tables of data. It can read from and write to databases or files in multiple
8508formats, including:
8509@itemize @bullet
8510@item python objects
8511@item delimited files
8512@item pickle files
8513@item text/XML/JSON/HTML files
8514@item python I/O streams
8515@item Excel XLS/XLSX files
8516@item HDF5 files
8517@end itemize")
8518 (license license:expat)))
8519
8520(define-public python-polib
8521 (package
8522 (name "python-polib")
8523 (version "1.2.0")
8524 (source
8525 (origin
8526 (method git-fetch)
8527 (uri (git-reference
8528 (url "https://github.com/izimobil/polib/")
8529 (commit version)))
8530 (file-name (git-file-name name version))
8531 (sha256
8532 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8533 (build-system pyproject-build-system)
8534 (arguments
8535 (list #:test-backend #~'custom
8536 #:test-flags #~(list "tests/tests.py")))
8537 (native-inputs (list python-setuptools))
8538 (home-page "https://github.com/izimobil/polib/")
8539 (synopsis "Manipulate, create and modify gettext files")
8540 (description
8541 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8542be used to create po files from scratch or to modify existing ones.")
8543 (license license:expat)))
8544
8545(define-public python-polling2
8546 (package
8547 (name "python-polling2")
8548 (version "0.5.0")
8549 (source
8550 (origin
8551 (method git-fetch)
8552 (uri (git-reference
8553 (url "https://github.com/ddmee/polling2")
8554 (commit (string-append "v" version))))
8555 (file-name (git-file-name name version))
8556 (sha256
8557 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8558 (build-system pyproject-build-system)
8559 (arguments
8560 ;; XXX: Additional , in string comparison.
8561 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8562 (native-inputs (list python-mock python-pytest python-setuptools))
8563 (home-page "https://github.com/ddmee/polling2")
8564 (synopsis "Polling utility with many configurable options")
8565 (description "Polling2 is a utility used to wait for a function to return
8566a certain expected condition.")
8567 (license license:expat)))
8568
8569(define-public python-daft
8570 (package
8571 (name "python-daft")
8572 (version "0.1.2")
8573 (source (origin
8574 (method url-fetch)
8575 (uri (pypi-uri "daft" version))
8576 (sha256
8577 (base32
8578 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8579 (build-system pyproject-build-system)
8580 (arguments
8581 (list
8582 #:test-flags
8583 '(list "-k"
8584 (string-append
8585 ;; The following tests compare matplotlib output with
8586 ;; previously generated images. They fail due to minor
8587 ;; differences in where matplotlib places labels.
8588 "not test_bca[png]"
8589 " and not test_classic[png]"
8590 " and not test_deconvolution[png]"
8591 " and not test_exoplanets[png]"
8592 " and not test_fixed[png]"
8593 " and not test_gaia[png]"
8594 " and not test_galex[png]"
8595 " and not test_huey_p_newton[png]"
8596 " and not test_logo[png]"
8597 " and not test_no_circles[png]"
8598 " and not test_no_gray[png]"
8599 " and not test_recursive[png]"
8600 " and not test_thick_lines[png]"
8601 " and not test_weaklensing[png]"
8602 " and not test_wordy[png]"))))
8603 (native-inputs
8604 (list python-pytest
8605 python-setuptools
8606 python-wheel))
8607 (propagated-inputs (list python-matplotlib python-numpy))
8608 (home-page "https://docs.daft-pgm.org/")
8609 (synopsis "PGM rendering library")
8610 (description "Daft is a Python package that uses matplotlib to
8611render pixel-perfect probabilistic graphical models for publication in
8612a journal or on the internet. With a short Python script and an
8613intuitive model-building syntax you can design directed (Bayesian
8614Networks, directed acyclic graphs) and undirected (Markov random fields)
8615models and save them in any formats that matplotlib supports (including
8616PDF, PNG, EPS and SVG).")
8617 (license license:expat)))
8618
8619(define-public python-portalocker
8620 (package
8621 (name "python-portalocker")
8622 (version "2.7.0")
8623 (source (origin
8624 (method url-fetch)
8625 (uri (pypi-uri "portalocker" version))
8626 (sha256
8627 (base32
8628 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
8629 (build-system pyproject-build-system)
8630 (native-inputs (list python-pytest
8631 python-pytest-timeout
8632 python-redis
8633 python-setuptools
8634 python-wheel))
8635 (home-page "https://github.com/WoLpH/portalocker")
8636 (synopsis "Python library for file locking")
8637 (description "Portalocker is a library to provide an easy API to file
8638locking..")
8639 (license license:bsd-3)))
8640
8641(define-public python-poyo
8642 (package
8643 (name "python-poyo")
8644 (version "0.5.0")
8645 (source
8646 (origin
8647 (method url-fetch)
8648 (uri (pypi-uri "poyo" version))
8649 (sha256
8650 (base32
8651 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
8652 (build-system pyproject-build-system)
8653 (native-inputs
8654 (list python-pytest python-setuptools))
8655 (home-page "https://github.com/hackebrot/poyo")
8656 (synopsis "Lightweight YAML Parser for Python")
8657 (description
8658 "This package provides a lightweight YAML Parser for Python. It supports
8659only a chosen subset of the YAML format that is required to parse cookiecutter
8660user configuration files. It does not have support for serializing into YAML
8661and is not compatible with JSON.")
8662 (license license:expat)))
8663
8664(define-public python-expandvars
8665 (package
8666 (name "python-expandvars")
8667 (version "1.1.2")
8668 (source
8669 (origin
8670 (method url-fetch)
8671 (uri (pypi-uri "expandvars" version))
8672 (sha256
8673 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
8674 (build-system pyproject-build-system)
8675 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
8676 (native-inputs
8677 (list python-hatchling python-pytest))
8678 (home-page "https://pypi.org/project/expandvars/")
8679 (synopsis "Expand system variables Unix style")
8680 (description "This module is inspired by GNU bash's variable expansion
8681features. It can be used as an alternative to Python's
8682@code{os.path.expandvars} function. A good use case is reading config files
8683with the flexibility of reading values from environment variables using
8684advanced features like returning a default value if some variable is not
8685defined.")
8686 (license license:expat)))
8687
8688(define-public python-expiringdict
8689 (package
8690 (name "python-expiringdict")
8691 (version "1.2.2")
8692 (source
8693 (origin
8694 (method git-fetch)
8695 (uri (git-reference
8696 (url "https://github.com/mailgun/expiringdict")
8697 (commit (string-append "v" version))))
8698 (file-name (git-file-name name version))
8699 (sha256
8700 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
8701 (build-system pyproject-build-system)
8702 (arguments
8703 ;; Started failing with [email protected], but it's only repr not functionality
8704 ;; so we should be fine.
8705 (list #:test-flags #~'("-v" "-e" "test_repr")))
8706 (native-inputs
8707 (list python-dill python-mock python-pynose python-setuptools))
8708 (home-page "https://github.com/mailgun/expiringdict")
8709 (synopsis "Dictionary with auto-expiring values for caching purposes")
8710 (description
8711 "This Python library provides an ordered dictionary
8712with a maximum capacity and auto-expiring values for caching purposes.
8713Expiration happens on any access, object is locked during cleanup
8714from expired values.")
8715 (license license:asl2.0)))
8716
8717(define-public python-extension-helpers
8718 (package
8719 (name "python-extension-helpers")
8720 (version "1.4.0")
8721 (source
8722 (origin
8723 (method git-fetch) ; no tests in the PyPI tarball
8724 (uri (git-reference
8725 (url "https://github.com/astropy/extension-helpers")
8726 (commit (string-append "v" version))))
8727 (file-name (git-file-name name version))
8728 (sha256
8729 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
8730 (build-system pyproject-build-system)
8731 (arguments
8732 (list
8733 #:test-flags
8734 #~(list "--pyargs" "extension_helpers"
8735 "-k" (string-join
8736 ;; XXX: Tests try to check various compilation options and
8737 ;; fail with some incomparability or trying to download
8738 ;; missing modules.
8739 (list "not test_only_pyproject"
8740 "test_no_setup_py"
8741 "test_limited_api")
8742 " and not "))))
8743 (native-inputs
8744 (list python-pytest
8745 python-setuptools-scm))
8746 (propagated-inputs
8747 (list python-setuptools))
8748 (home-page "https://extension-helpers.readthedocs.io")
8749 (synopsis "Astropy ecosystem utilities for building and installing packages")
8750 (description
8751 "The extension-helpers package includes convenience helpers to assist
8752with building Python packages with compiled C/Cython extensions. It is
8753developed by the Astropy project but is intended to be general and usable by
8754any Python package.")
8755 (license license:bsd-3)))
8756
8757(define-public python-milc
8758 (package
8759 (name "python-milc")
8760 (version "1.9.1")
8761 (source
8762 (origin
8763 (method git-fetch) ;no tests in PyPI archive
8764 (uri (git-reference
8765 (url "https://github.com/clueboard/milc")
8766 (commit version)))
8767 (file-name (git-file-name name version))
8768 (sha256
8769 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
8770 (build-system pyproject-build-system)
8771 (native-inputs
8772 (list python-pytest
8773 python-semver
8774 python-setuptools))
8775 (propagated-inputs
8776 (list python-argcomplete
8777 python-colorama
8778 python-halo
8779 python-platformdirs
8780 python-spinners
8781 python-types-colorama))
8782 (home-page "https://github.com/clueboard/milc")
8783 (synopsis "Python library for command line interface programs")
8784 (description "MILC is a Python library for developing command line
8785interface programs. This library provides features to parse arguments,
8786automatic tab-completion, color support, logging to @code{std}, etc.")
8787 (license license:expat)))
8788
8789(define-public python-extract-dtb
8790 (package
8791 (name "python-extract-dtb")
8792 (version "1.2.3")
8793 (source
8794 (origin
8795 (method git-fetch)
8796 (uri (git-reference
8797 (url "https://github.com/PabloCastellano/extract-dtb/")
8798 (commit version)))
8799 (file-name (git-file-name name version))
8800 (sha256
8801 (base32
8802 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
8803 (build-system pyproject-build-system)
8804 (arguments
8805 (list #:tests? #f)) ;no tests
8806 (native-inputs
8807 (list python-setuptools))
8808 (home-page "https://github.com/PabloCastellano/extract-dtb/")
8809 (synopsis "Extract device tree blobs (DTB) from kernel images")
8810 (description
8811 "This package provides a tool to split a kernel image with appended
8812@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
8813 (license license:gpl3+)))
8814
8815(define-public python-mimeparse
8816 (package
8817 (name "python-mimeparse")
8818 (version "2.0.0")
8819 (source
8820 (origin
8821 (method url-fetch)
8822 (uri (pypi-uri "python_mimeparse" version))
8823 (sha256
8824 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
8825 (build-system pyproject-build-system)
8826 (native-inputs
8827 (list python-pytest
8828 python-setuptools))
8829 (home-page "https://github.com/falconry/python-mimeparse")
8830 (synopsis "Python library for parsing MIME types")
8831 (description
8832 "Mimeparse provides basic functions for parsing MIME type names and
8833matching them against a list of media-ranges.")
8834 (license license:expat)))
8835
8836(define-public python-miniboa
8837 (package
8838 (name "python-miniboa")
8839 (version "1.0.9")
8840 (source
8841 (origin
8842 (method git-fetch) ;no tests in PyPI archive
8843 (uri (git-reference
8844 (url "https://github.com/shmup/miniboa")
8845 (commit (string-append "v" version))))
8846 (file-name (git-file-name name version))
8847 (sha256
8848 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
8849 (build-system pyproject-build-system)
8850 (native-inputs
8851 (list python-pytest
8852 python-setuptools
8853 python-wheel))
8854 (home-page "https://github.com/shmup/miniboa")
8855 (synopsis "Simple, single-threaded Telnet server")
8856 (description
8857 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
8858server.")
8859 (license license:asl2.0)))
8860
8861(define-public python-mir-eval
8862 (package
8863 (name "python-mir-eval")
8864 (version "0.8.2")
8865 (source (origin
8866 (method git-fetch)
8867 (uri (git-reference
8868 (url "https://github.com/mir-evaluation/mir_eval")
8869 (commit version)))
8870 (file-name (git-file-name name version))
8871 (sha256
8872 (base32
8873 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
8874 (build-system pyproject-build-system)
8875 (arguments
8876 (list
8877 #:phases
8878 #~(modify-phases %standard-phases
8879 (add-before 'check 'cd-tests
8880 (lambda _
8881 ;; Move to 'tests' directory because tests read data files from
8882 ;; a relative path.
8883 (chdir "tests"))))))
8884 (propagated-inputs (list python-decorator python-numpy python-scipy))
8885 (native-inputs (list python-matplotlib
8886 python-pytest
8887 python-pytest-mpl
8888 python-setuptools
8889 python-wheel))
8890 (home-page "https://github.com/mir-evaluation/mir_eval")
8891 (synopsis "Common metrics for common audio/music processing tasks")
8892 (description "This is a Python library for computing common heuristic
8893accuracy scores for various music/audio information retrieval/signal
8894processing tasks.")
8895 (license license:expat)))
8896
8897(define-public python-mizani
8898 (package
8899 (name "python-mizani")
8900 (version "0.13.1")
8901 (source (origin
8902 (method git-fetch)
8903 (uri (git-reference
8904 (url "https://github.com/has2k1/mizani")
8905 (commit (string-append "v" version))))
8906 (file-name (git-file-name name version))
8907 (sha256
8908 (base32
8909 "0ij0fk4w0jyyj44ij3i2j1nfa0d7dk783w9r25cpwjkpn690xqfx"))))
8910 (build-system pyproject-build-system)
8911 (propagated-inputs
8912 (list python-matplotlib python-numpy python-pandas python-scipy))
8913 (native-inputs
8914 (list python-setuptools
8915 python-setuptools-scm
8916 python-pytest
8917 python-wheel
8918 tzdata))
8919 (home-page "https://github.com/has2k1/mizani")
8920 (synopsis "Create data visualizations in Python")
8921 (description
8922 "Mizani is a Python package for creating data visualizations. It
8923provides functions and tools to help with the creation of visually appealing
8924and informative visualizations, including scales, transformations and color
8925palettes.")
8926 (license license:bsd-3)))
8927
8928(define-public python-miniupnpc
8929 (package
8930 (name "python-miniupnpc")
8931 (version "2.3.3")
8932 (source
8933 (origin
8934 (method git-fetch)
8935 (uri
8936 (git-reference
8937 ;; The project tags miniupnpd_ as well but with a different version,
8938 ;; where updater may select a wrong version.
8939 (url "https://github.com/miniupnp/miniupnp")
8940 (commit
8941 (string-append
8942 "miniupnpc_" (string-replace-substring version "." "_")))))
8943 (file-name
8944 (git-file-name name version))
8945 (sha256
8946 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
8947 (build-system pyproject-build-system)
8948 (arguments
8949 (list
8950 #:phases
8951 #~(modify-phases %standard-phases
8952 (add-after 'unpack 'subdir
8953 (lambda* (#:key inputs #:allow-other-keys)
8954 (chdir "miniupnpc")
8955 (setenv "CC" #$(cc-for-target))
8956 (substitute* "Makefile"
8957 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
8958 (add-before 'subdir 'remove-kernel-version
8959 ;; Avoid embedding the running kernel version for reproducible builds
8960 (lambda _
8961 (substitute*
8962 "miniupnpc/updateminiupnpcstrings.sh"
8963 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
8964 (replace 'check
8965 (lambda* (#:key tests? #:allow-other-keys)
8966 (when tests?
8967 (invoke "make" "check")))))))
8968 (native-inputs
8969 (list python-setuptools
8970 python-wheel))
8971 (inputs (list python)) ;we are building a Python extension
8972 (synopsis "UPnP client for Python")
8973 (description "Miniupnpc is a client library for Python programs to set up
8974port forwards using @acronym{UPnP, Universal Plug and Play}.")
8975 (home-page "http://miniupnp.free.fr")
8976 (license license:bsd-3)))
8977
8978;; NOTE: As taken from upstram: "this library is in maintenance mode and
8979;; should not be used in new code."
8980(define-public python-py
8981 (package
8982 (name "python-py")
8983 (version "1.11.0")
8984 (source
8985 (origin
8986 (method url-fetch)
8987 (uri (pypi-uri "py" version))
8988 (sha256
8989 (base32
8990 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
8991 (build-system pyproject-build-system)
8992 (arguments
8993 '(#:tests? #f)) ;cycle with python-pytest
8994 (native-inputs
8995 (list python-setuptools
8996 python-setuptools-scm
8997 python-wheel))
8998 (home-page "https://github.com/pytest-dev/py")
8999 (synopsis "Python library for parsing, I/O, introspection, and logging")
9000 (description
9001 "Py is a Python library for file name parsing, .ini file parsing, I/O,
9002code introspection, and logging.")
9003 (license license:expat)))
9004
9005(define-public python-pyrsistent
9006 (package
9007 (name "python-pyrsistent")
9008 (version "0.20.0")
9009 (home-page "https://github.com/tobgu/pyrsistent")
9010 (source (origin
9011 (method url-fetch)
9012 (uri (pypi-uri "pyrsistent" version))
9013 (sha256
9014 (base32
9015 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
9016 (build-system pyproject-build-system)
9017 (native-inputs
9018 (list python-pytest python-setuptools python-wheel))
9019 (synopsis "Persistent data structures for Python")
9020 (description
9021 "Pyrsistent is a number of persistent collections (by some referred to as
9022functional data structures). Persistent in the sense that they are immutable.
9023
9024All methods on a data structure that would normally mutate it instead return a
9025new copy of the structure containing the requested updates. The original
9026structure is left untouched.")
9027 (license license:expat)))
9028
9029(define-public python-exif-read
9030 (package
9031 (name "python-exif-read")
9032 (version "3.3.2")
9033 (source
9034 (origin
9035 (method git-fetch) ;PyPI doesn't contain the test images
9036 (uri (git-reference
9037 (url "https://github.com/ianare/exif-py")
9038 (commit version)))
9039 (file-name (git-file-name name version))
9040 (sha256
9041 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
9042 (build-system pyproject-build-system)
9043 (native-inputs (list python-pytest python-setuptools python-wheel))
9044 (home-page "https://github.com/ianare/exif-py")
9045 (synopsis "Python library to extract EXIF data from image files")
9046 (description
9047 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
9048files.")
9049 (license license:bsd-3)))
9050
9051(define-public python-pyld
9052 (package
9053 (name "python-pyld")
9054 (version "2.0.4")
9055 (source
9056 (origin
9057 (method git-fetch)
9058 (uri (git-reference
9059 (url "https://github.com/digitalbazaar/pyld")
9060 ;; Not all tags have the 'v' prefix.
9061 (commit (string-append "v" version))))
9062 (file-name (git-file-name name version))
9063 (sha256
9064 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
9065 (build-system pyproject-build-system)
9066 (arguments
9067 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
9068 (list #:tests? #f))
9069 (native-inputs
9070 (list python-lxml
9071 python-setuptools))
9072 (propagated-inputs
9073 (list python-aiohttp
9074 python-cachetools
9075 python-frozendict
9076 python-requests))
9077 (home-page "https://github.com/digitalbazaar/pyld")
9078 (synopsis "Python implementation of the JSON-LD specification")
9079 (description "PyLD is an implementation of the JSON-LD specification.")
9080 (license license:bsd-3)))
9081
9082(define-public python-cli-helpers
9083 (package
9084 (name "python-cli-helpers")
9085 (version "2.7.0")
9086 (source
9087 (origin
9088 (method url-fetch)
9089 (uri (pypi-uri "cli_helpers" version))
9090 (sha256
9091 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
9092 (build-system pyproject-build-system)
9093 (native-inputs
9094 (list python-pytest
9095 python-setuptools))
9096 (propagated-inputs
9097 (list python-configobj
9098 python-tabulate))
9099 (home-page "https://github.com/dbcli/cli_helpers")
9100 (synopsis "Helpers for building command-line apps")
9101 (description
9102 "CLI Helpers is a Python package that makes it easy to perform common
9103tasks when building command-line apps. It's a helper library for command-line
9104interfaces.")
9105 (license license:bsd-3)))
9106
9107(define-public python-click
9108 (package
9109 (name "python-click")
9110 (version "8.3.1")
9111 (source
9112 (origin
9113 (method git-fetch)
9114 (uri (git-reference
9115 (url "https://github.com/pallets/click")
9116 (commit version)))
9117 (file-name (git-file-name name version))
9118 (sha256
9119 (base32 "041w6s8w11za2jlws7sxvrcfmi0bvr354nq74wyb66gsk908idii"))))
9120 (build-system pyproject-build-system)
9121 (native-inputs
9122 (list less
9123 python-flit-core
9124 python-pytest))
9125 (home-page "https://palletsprojects.com/p/click/")
9126 (synopsis "Command line library for Python")
9127 (description
9128 "Click is a Python package for creating command line interfaces in a
9129composable way with as little code as necessary. Its name stands for
9130\"Command Line Interface Creation Kit\". It's highly configurable but comes
9131with sensible defaults out of the box.")
9132 (license license:bsd-3)))
9133
9134(define-public python-click-7
9135 (package (inherit python-click)
9136 (name "python-click")
9137 (version "7.1.2")
9138 (source
9139 (origin
9140 (method url-fetch)
9141 (uri (pypi-uri "click" version))
9142 (sha256
9143 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
9144 (arguments (list #:tests? #f)) ;no tests in PyPI
9145 (native-inputs
9146 (list python-setuptools))))
9147
9148(define-public python-click-8.1
9149 (package
9150 (inherit python-click)
9151 (name "python-click")
9152 (version "8.1.7")
9153 (source
9154 (origin
9155 (method git-fetch)
9156 (uri (git-reference
9157 (url "https://github.com/pallets/click")
9158 (commit version)))
9159 (file-name (git-file-name name version))
9160 (sha256
9161 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
9162 (native-inputs
9163 (list less
9164 python-pytest
9165 python-setuptools))))
9166
9167(define-public python-click-aliases
9168 (package
9169 (name "python-click-aliases")
9170 (version "1.0.6")
9171 (source
9172 (origin
9173 (method git-fetch)
9174 (uri (git-reference
9175 (url "https://github.com/click-contrib/click-aliases")
9176 (commit (string-append "v" version))))
9177 (file-name (git-file-name name version))
9178 (sha256
9179 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
9180 (build-system pyproject-build-system)
9181 (native-inputs
9182 (list python-pytest
9183 python-poetry-core))
9184 (propagated-inputs
9185 (list python-click))
9186 (home-page "https://github.com/click-contrib/click-aliases")
9187 (synopsis "Enable aliases for Click")
9188 (description
9189 "This package helps to add (mutiple) aliases to a click group or command.")
9190 (license license:expat)))
9191
9192(define-public python-click-option-group
9193 (package
9194 (name "python-click-option-group")
9195 (version "0.5.9")
9196 (source
9197 (origin
9198 (method git-fetch)
9199 (uri (git-reference
9200 (url "https://github.com/click-contrib/click-option-group")
9201 (commit (string-append "v" version))))
9202 (file-name (git-file-name name version))
9203 (sha256
9204 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
9205 (build-system pyproject-build-system)
9206 (native-inputs
9207 (list python-hatch-vcs
9208 python-hatchling
9209 python-pytest))
9210 (propagated-inputs
9211 (list python-click))
9212 (home-page "https://click-option-group.readthedocs.io/")
9213 (synopsis "Option groups missing in Click")
9214 (description
9215 "Click is a package for creating powerful and beautiful command line
9216interfaces (CLI) in Python, but it has no the functionality for creating option
9217groups. The aim of this package is to provide group options with extensible
9218functionality using canonical and clean API (Click-like API as far as
9219possible).")
9220 (license license:bsd-3)))
9221
9222(define-public python-clickgen
9223 (package
9224 (name "python-clickgen")
9225 (version "2.2.5")
9226 (source (origin
9227 (method git-fetch)
9228 (uri (git-reference
9229 (url "https://github.com/ful1e5/clickgen")
9230 (commit (string-append "v" version))))
9231 (file-name (git-file-name name version))
9232 (sha256
9233 (base32
9234 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
9235 (build-system pyproject-build-system)
9236 (arguments
9237 (list
9238 #:test-flags
9239 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
9240 '(list "-k" "not test_clickgen_raises")))
9241 (native-inputs
9242 (list python-pytest
9243 python-setuptools))
9244 (propagated-inputs
9245 (list python-attrs
9246 python-numpy
9247 python-pillow
9248 python-pyyaml
9249 python-toml))
9250 (home-page "https://github.com/ful1e5/clickgen")
9251 (synopsis "The hassle-free cursor building toolbox")
9252 (description
9253 "Clickgen is an API for building X11 and Windows cursors from .png files.
9254clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
9255 (license license:expat)))
9256
9257(define-public python-clickhouse-connect
9258 (package
9259 (name "python-clickhouse-connect")
9260 (version "0.6.1")
9261 (source (origin
9262 (method git-fetch)
9263 (uri (git-reference
9264 (url "https://github.com/ClickHouse/clickhouse-connect")
9265 (commit (string-append "v" version))))
9266 (file-name (git-file-name name version))
9267 (sha256
9268 (base32
9269 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
9270 (build-system pyproject-build-system)
9271 (arguments
9272 (list
9273 #:test-flags
9274 ;; All these tests require docker-compose
9275 '(list "--ignore-glob=tests/integration_tests/*")
9276 #:phases
9277 '(modify-phases %standard-phases
9278 (add-after 'unpack 'patch-pyproject
9279 (lambda _
9280 ;; Our version of pytest is confused by this field.
9281 (substitute* "pyproject.toml"
9282 (("^env_files.*") ""))))
9283 (add-before 'check 'build-extensions
9284 (lambda _
9285 ;; Cython extensions have to be built before running the tests.
9286 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
9287 (propagated-inputs
9288 (list python-arrow
9289 python-certifi
9290 python-lz4
9291 python-numpy
9292 python-orjson
9293 python-pandas
9294 python-pytz
9295 python-setuptools ; For pkg_resources.
9296 python-sqlalchemy
9297 python-urllib3
9298 python-zstandard))
9299 (native-inputs
9300 (list python-cython
9301 python-pytest
9302 python-wheel))
9303 (home-page "https://github.com/ClickHouse/clickhouse-connect")
9304 (synopsis
9305 "ClickHouse database core driver for Python, Pandas, and Superset")
9306 (description
9307 "This package provides a high performance core database driver for
9308connecting ClickHouse to Python, Pandas, and Superset.")
9309 (license license:asl2.0)))
9310
9311(define-public python-cligj
9312 (package
9313 (name "python-cligj")
9314 (version "0.7.2")
9315 (source
9316 (origin
9317 (method url-fetch)
9318 (uri (pypi-uri "cligj" version))
9319 (sha256
9320 (base32
9321 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
9322 (build-system pyproject-build-system)
9323 (native-inputs
9324 (list python-pytest
9325 python-setuptools))
9326 (propagated-inputs
9327 (list python-click))
9328 (home-page "https://github.com/mapbox/cligj")
9329 (synopsis "Click params for command line interfaces to GeoJSON")
9330 (description
9331 "cligj is for Python developers who create command line interfaces
9332for geospatial data. cligj allows you to quickly build consistent,
9333well-tested and interoperable CLIs for handling GeoJSON.")
9334 (license license:bsd-3)))
9335
9336(define-public python-cloup
9337 (package
9338 (name "python-cloup")
9339 (version "3.0.8")
9340 (source (origin
9341 (method url-fetch)
9342 (uri (pypi-uri "cloup" version))
9343 (sha256
9344 (base32
9345 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
9346 (build-system pyproject-build-system)
9347 (propagated-inputs (list python-click))
9348 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9349 (home-page "https://github.com/janLuke/cloup")
9350 (synopsis "Extension library for python-click")
9351 (description
9352 "Cloup enriches Click with several features that make it more expressive
9353and configurable such as option groups, constraints, subcommand aliases,
9354subcommands sections and a themeable HelpFormatter.")
9355 (license license:bsd-3)))
9356
9357(define-public python-jsondiff
9358 (package
9359 (name "python-jsondiff")
9360 (version "2.2.1")
9361 (source
9362 (origin
9363 (method url-fetch)
9364 (uri (pypi-uri "jsondiff" version))
9365 (sha256
9366 (base32
9367 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9368 (build-system pyproject-build-system)
9369 (arguments
9370 (list
9371 #:phases
9372 #~(modify-phases %standard-phases
9373 (add-before 'build 'set-version
9374 (lambda _
9375 (substitute* "pyproject.toml"
9376 (("^version_file.*") "")
9377 (("dynamic = \\[\"version\"\\]")
9378 (string-append "version = \"" #$version "\""))))))))
9379 (propagated-inputs (list python-pyyaml))
9380 (native-inputs
9381 (list python-hypothesis
9382 python-pytest
9383 python-setuptools
9384 python-setuptools-scm
9385 python-wheel))
9386 (home-page "https://github.com/fzumstein/jsondiff")
9387 (synopsis "Compare JSON and JSON-like structures in Python")
9388 (description "@code{jsondiff} is a Python library which lets you compare,
9389diff, and patch JSON and JSON-like structures in Python.")
9390 (license license:expat)))
9391
9392(define-public python-ddlparse
9393 (package
9394 (name "python-ddlparse")
9395 (version "1.10.0")
9396 (source
9397 (origin
9398 (method url-fetch)
9399 (uri (pypi-uri "ddlparse" version))
9400 (sha256
9401 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9402 (build-system pyproject-build-system)
9403 (native-inputs
9404 (list python-pytest python-setuptools))
9405 (propagated-inputs (list python-pyparsing))
9406 (home-page "https://github.com/shinichi-takii/ddlparse")
9407 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9408 (description "This package provides @code{ddlparse}, a Python library to parse
9409and convert DDL to BigQuery JSON schema.")
9410 (license license:bsd-3)))
9411
9412(define-public python-jsonschema
9413 (package
9414 (name "python-jsonschema")
9415 (version "4.23.0")
9416 (source
9417 (origin
9418 (method url-fetch)
9419 (uri (pypi-uri "jsonschema" version))
9420 (sha256
9421 (base32 "1i3b4sckkc3v8vckqa11xbrj695qzrzsfzrkclra6lb3ybz9f56p"))))
9422 (build-system pyproject-build-system)
9423 (arguments
9424 (list
9425 #:phases
9426 #~(modify-phases %standard-phases
9427 (add-before 'check 'pre-check
9428 (lambda _
9429 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9430 (native-inputs
9431 (list python-hatchling
9432 python-hatch-fancy-pypi-readme
9433 python-hatch-vcs
9434 ;; For <tests/test_cli.py::TestCLIIntegration::test_license>.
9435 python-pip
9436 python-pytest))
9437 (propagated-inputs
9438 (list python-attrs
9439 python-fqdn
9440 python-idna
9441 python-importlib-resources
9442 python-isoduration
9443 python-jsonpointer
9444 python-jsonschema-specifications
9445 python-rfc3339-validator
9446 python-rfc3986-validator
9447 python-referencing-bootstrap
9448 python-rpds-py
9449 python-uri-template
9450 python-webcolors))
9451 (home-page "https://github.com/Julian/jsonschema")
9452 (synopsis "Implementation of JSON Schema for Python")
9453 (description
9454 "Jsonschema is an implementation of JSON Schema for Python.")
9455 (license license:expat)))
9456
9457;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9458;; version.
9459(define-public python-jsonschema-3
9460 (package
9461 (inherit python-jsonschema)
9462 (version "3.2.0")
9463 (source (origin
9464 (method url-fetch)
9465 (uri (pypi-uri "jsonschema" version))
9466 (sha256
9467 (base32
9468 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9469 (arguments
9470 (substitute-keyword-arguments arguments
9471 ((#:tests? _ #t) #f)))
9472 (propagated-inputs
9473 (list python-attrs
9474 python-pyrsistent
9475 python-typing-extensions))
9476 (native-inputs
9477 (list python-setuptools-scm python-twisted
9478 python-setuptools python-wheel))))
9479
9480(define-public python-jsonschema-path
9481 (package
9482 (name "python-jsonschema-path")
9483 (version "0.3.2")
9484 (source
9485 (origin
9486 (method url-fetch)
9487 (uri (pypi-uri "jsonschema_path" version))
9488 (sha256
9489 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9490 (build-system pyproject-build-system)
9491 (arguments
9492 (list
9493 #:tests? #false ;there are none
9494 #:phases
9495 '(modify-phases %standard-phases
9496 (add-after 'unpack 'relax-requirements
9497 (lambda _
9498 (substitute* "pyproject.toml"
9499 (("referencing = \">=0.28.0,<0.32.0\"")
9500 "referencing = \">=0.28.0\"")))))))
9501 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9502 python-requests))
9503 (native-inputs (list python-poetry-core))
9504 (home-page "https://github.com/p1c2u/jsonschema-path")
9505 (synopsis "JSONSchema Spec with object-oriented paths")
9506 (description "This package implements object-oriented JSONSchema. It lets
9507you traverse a schema like paths and access a schema on demand with separate
9508dereferencing accessor layer.")
9509 (license license:asl2.0)))
9510
9511(define-public python-jsonschema-objects
9512 (package
9513 (name "python-jsonschema-objects")
9514 (version "0.5.7")
9515 (source
9516 (origin
9517 (method git-fetch)
9518 (uri (git-reference
9519 (url "https://github.com/cwacek/python-jsonschema-objects/")
9520 (commit version)))
9521 (file-name (git-file-name name version))
9522 (sha256
9523 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9524 (build-system pyproject-build-system)
9525 (native-inputs
9526 (list python-pytest
9527 python-pytest-mock
9528 python-setuptools))
9529 (propagated-inputs
9530 (list python-inflection
9531 python-jsonschema
9532 python-markdown))
9533 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9534 (synopsis "Automatic Python binding generation from JSON schemas")
9535 (description
9536 "This package provides an automatic class-based binding to JSON
9537Schemas for use in python.")
9538 (license license:expat)))
9539
9540(define-public python-jsonschema-specifications
9541 (package
9542 (name "python-jsonschema-specifications")
9543 (version "2024.10.1")
9544 (source
9545 (origin
9546 (method url-fetch)
9547 (uri (pypi-uri "jsonschema_specifications" version))
9548 (sha256
9549 (base32 "0wp2g90jsaa48g1v0n6m43ywhh9cj1ig19q25lay334m74vbhf0g"))))
9550 (build-system pyproject-build-system)
9551 (native-inputs
9552 (list python-hatch-vcs
9553 python-hatchling
9554 python-pytest))
9555 (propagated-inputs
9556 (list python-importlib-resources
9557 python-referencing-bootstrap))
9558 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9559 (synopsis
9560 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9561 (description
9562 "This package provides JSON support files from the JSON Schema
9563Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9564from Python as a referencing-based Schema Registry.")
9565 (license license:expat)))
9566
9567(define-public python-schema
9568 (package
9569 (name "python-schema")
9570 (version "0.7.8")
9571 (source
9572 (origin
9573 (method git-fetch)
9574 (uri (git-reference
9575 (url "https://github.com/keleshev/schema")
9576 (commit (string-append "v" version))))
9577 (file-name (git-file-name name version))
9578 (sha256
9579 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9580 (build-system pyproject-build-system)
9581 (native-inputs
9582 (list python-pytest python-setuptools))
9583 (home-page "https://github.com/keleshev/schema")
9584 (synopsis "Simple data validation library")
9585 (description
9586 "@code{python-schema} is a library for validating Python data
9587structures, such as those obtained from config-files, forms, external
9588services or command-line parsing, converted from JSON/YAML (or
9589something else) to Python data-types.")
9590 (license license:psfl)))
9591
9592(define-public python-kitchen
9593 (package
9594 (name "python-kitchen")
9595 (version "1.2.6")
9596 (source
9597 (origin
9598 (method git-fetch)
9599 (uri (git-reference
9600 (url "https://github.com/fedora-infra/kitchen")
9601 (commit version)))
9602 (file-name (git-file-name name version))
9603 (sha256
9604 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
9605 (build-system pyproject-build-system)
9606 (arguments
9607 (list
9608 #:test-flags
9609 #~(list "kitchen3"
9610 ;; XXX: Unclear why these tests fail.
9611 "-e" "test_invalid_fallback_no_raise"
9612 "-e" "test_internal_generate_combining_table"
9613 "-e" "test_lgettext"
9614 "-e" "test_lngettext"
9615 "-e" "test_easy_gettext_setup_non_unicode")
9616 #:phases
9617 #~(modify-phases %standard-phases
9618 (add-before 'check 'delete-broken-test-files
9619 (lambda _
9620 (delete-file "kitchen3/tests/test__all__.py")
9621 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
9622 (native-inputs (list python-pynose python-setuptools))
9623 (home-page "https://github.com/fedora-infra/kitchen")
9624 (synopsis "Python API for snippets")
9625 (description
9626 "@code{kitchen} module provides a python API for all sorts of little
9627useful snippets of code that everybody ends up writing for their projects but
9628never seem big enough to build an independent release. Use kitchen and stop
9629cutting and pasting that code over and over.")
9630 (license (list license:lgpl2.1+
9631 ;; subprocess.py, test_subprocess.py,
9632 ;; kitchen/pycompat25/defaultdict.py:
9633 license:psfl))))
9634
9635(define-public python-roman
9636 (package
9637 (name "python-roman")
9638 (version "5.2")
9639 (source
9640 (origin
9641 (method git-fetch)
9642 (uri (git-reference
9643 (url "https://github.com/zopefoundation/roman")
9644 (commit version)))
9645 (file-name (git-file-name name version))
9646 (sha256
9647 (base32
9648 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
9649 (build-system pyproject-build-system)
9650 (arguments
9651 (list
9652 #:test-backend #~'unittest
9653 #:test-flags #~(list "discover" "-s" "src")))
9654 (native-inputs (list python-setuptools))
9655 (home-page "https://github.com/zopefoundation/roman")
9656 (synopsis "Integer to Roman numerals converter")
9657 (description
9658 "This package provides a small helper library to convert Arabic Numbers
9659to Roman Numerals.")
9660 (license license:zpl2.1)))
9661
9662(define-public python-rollbar
9663 (package
9664 (name "python-rollbar")
9665 (version "1.3.0")
9666 (source (origin
9667 (method url-fetch)
9668 (uri (pypi-uri "rollbar" version))
9669 (sha256
9670 (base32
9671 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
9672 (build-system pyproject-build-system)
9673 (native-inputs (list python-httpx
9674 python-pytest
9675 python-setuptools
9676 python-webob
9677 python-wheel))
9678 (inputs (list python-requests))
9679 (home-page "https://github.com/rollbar/pyrollbar")
9680 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
9681 (description
9682 "Python SDK for reporting exceptions, errors, and log messages
9683to @url{https://rollbar.com/, Rollbar}.
9684
9685Capabilities include:
9686
9687@itemize @bullet
9688@item Sending messages and exceptions with arbitrary context
9689@item Getting back aggregates
9690@item Debugging production issues
9691@end itemize")
9692 (license license:expat)))
9693
9694(define-public python-pyjwt
9695 (package
9696 (name "python-pyjwt")
9697 (version "2.10.1")
9698 (source
9699 (origin
9700 (method url-fetch)
9701 (uri (pypi-uri "pyjwt" version))
9702 (sha256
9703 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
9704 (build-system pyproject-build-system)
9705 (arguments
9706 (list
9707 ;; tests: 286 passed, 4 skipped, 1 deselected
9708 ;;
9709 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
9710 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
9711 ;; resolution>"
9712 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
9713 (native-inputs
9714 (list python-pytest
9715 python-setuptools))
9716 (propagated-inputs
9717 (if (supported-package? python-cryptography)
9718 (list python-cryptography)
9719 '()))
9720 (home-page "https://github.com/progrium/pyjwt")
9721 (synopsis "JSON Web Token implementation in Python")
9722 (description
9723 "PyJWT is a JSON Web Token implementation written in Python.")
9724 (license license:expat)))
9725
9726(define-public python-pymsgbox
9727 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
9728 (revision "1"))
9729 (package
9730 (name "python-pymsgbox")
9731 (version (git-version "1.0.6" revision commit))
9732 (source
9733 (origin
9734 (method git-fetch)
9735 (uri (git-reference
9736 (url "https://github.com/asweigart/PyMsgBox")
9737 (commit commit)))
9738 (file-name (git-file-name name version))
9739 (sha256
9740 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
9741 (build-system pyproject-build-system)
9742 (arguments
9743 ;; Circular dependency to run tests:
9744 ;; Tests need pyautogui, which depends on pymsgbox.
9745 '(#:tests? #f))
9746 (native-inputs (list python-setuptools python-wheel))
9747 (home-page "https://github.com/asweigart/PyMsgBox")
9748 (synopsis "Python module for JavaScript-like message boxes")
9749 (description
9750 "PyMsgBox is a simple, cross-platform, pure Python module for
9751JavaScript-like message boxes. Types of dialog boxes include:
9752@enumerate
9753@item alert
9754@item confirm
9755@item prompt
9756@item password
9757@end enumerate
9758")
9759 (license license:bsd-3))))
9760
9761(define-public python-pympler
9762 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
9763 (revision "0"))
9764 (package
9765 (name "python-pympler")
9766 (version (git-version "1.1" revision commit))
9767 (source
9768 (origin
9769 (method git-fetch)
9770 (uri (git-reference
9771 (url "https://github.com/pympler/pympler")
9772 (commit commit)))
9773 (file-name (git-file-name name version))
9774 (sha256
9775 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
9776 (build-system pyproject-build-system)
9777 (arguments
9778 (list
9779 #:tests? #f ;FIXME: tests timeout.
9780 #:test-flags
9781 #~(list
9782 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
9783 ;; != 'function (muppy.test_summary.func)'.
9784 ;; See <https://github.com/pympler/pympler/issues/134>.
9785 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
9786 ;; This test times out.
9787 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback")))
9788 (native-inputs
9789 (list python-pytest python-setuptools))
9790 (home-page "https://pythonhosted.org/Pympler/")
9791 (synopsis "Measure, monitor and analyze memory behavior")
9792 (description
9793 "Pympler is a development tool to measure, monitor and analyze
9794the memory behavior of Python objects in a running Python application.
9795
9796By pympling a Python application, detailed insight in the size and the
9797lifetime of Python objects can be obtained. Undesirable or unexpected
9798runtime behavior like memory bloat and other @samp{pymples} can easily
9799be identified.
9800
9801A web profiling frontend exposes process statistics, garbage
9802visualisation and class tracker statistics.")
9803 (license license:asl2.0))))
9804
9805(define-public python-itsdangerous
9806 (package
9807 (name "python-itsdangerous")
9808 (version "2.2.0")
9809 (source
9810 (origin
9811 (method url-fetch)
9812 (uri (pypi-uri "itsdangerous" version))
9813 (sha256
9814 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
9815 (build-system pyproject-build-system)
9816 (native-inputs
9817 (list python-flit-core
9818 python-freezegun
9819 python-pytest))
9820 (home-page "https://palletsprojects.com/p/itsdangerous/")
9821 (synopsis "Python library for passing data to/from untrusted environments")
9822 (description
9823 "Itsdangerous provides various helpers to pass trusted data to untrusted
9824environments and back.")
9825 (license license:bsd-3)))
9826
9827;; WARNING: This package is a dependency of mesa.
9828(define-public python-pyyaml
9829 (package
9830 (name "python-pyyaml")
9831 (version "6.0.2")
9832 (source
9833 (origin
9834 (method url-fetch)
9835 (uri (pypi-uri "PyYAML" version))
9836 (sha256
9837 (base32 "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m"))))
9838 (build-system pyproject-build-system)
9839 (native-inputs
9840 (list python-cython
9841 python-pytest
9842 python-setuptools
9843 python-wheel))
9844 (inputs
9845 (list libyaml))
9846 (home-page "https://pyyaml.org")
9847 (synopsis "YAML parser and emitter for Python")
9848 (description
9849 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
9850complete YAML 1.1 parser, Unicode support, pickle support, capable extension
9851API, and sensible error messages. PyYAML supports standard YAML tags and
9852provides Python-specific tags that represent an arbitrary Python object.")
9853 (license license:expat)))
9854
9855(define-public python-crossenv
9856 (package
9857 (name "python-crossenv")
9858 (version "1.6.1")
9859 (source
9860 (origin
9861 (method git-fetch)
9862 (uri (git-reference
9863 (url "https://github.com/benfogle/crossenv")
9864 (commit (string-append "v" version))))
9865 (file-name (git-file-name name version))
9866 (sha256
9867 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
9868 (build-system pyproject-build-system)
9869 (arguments
9870 (list
9871 ;; XXX: Running test require setting environment variables for
9872 ;; architectures.
9873 #:tests? #f))
9874 (native-inputs (list python-hatchling))
9875 (home-page "https://github.com/benfogle/crossenv")
9876 (synopsis "Cross-compiling virtualenv for Python")
9877 (description
9878 "This package is a tool for cross-compiling extension modules. It
9879creates a special virtual environment such that @command{pip} or
9880@file{setup.py} will cross compile packages for you, usually with no further
9881work on your part.")
9882 (license license:expat)))
9883
9884(define-public python-linkify-it-py
9885 (package
9886 (name "python-linkify-it-py")
9887 (version "2.0.0")
9888 (source (origin
9889 (method git-fetch) ;for tests
9890 (uri (git-reference
9891 (url "https://github.com/tsutsu3/linkify-it-py")
9892 (commit (string-append "v" version))))
9893 (file-name (git-file-name name version))
9894 (sha256
9895 (base32
9896 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
9897 (build-system pyproject-build-system)
9898 (propagated-inputs (list python-uc-micro-py))
9899 (native-inputs (list python-pytest python-setuptools python-wheel))
9900 (home-page "https://github.com/tsutsu3/linkify-it-py")
9901 (synopsis "Links recognition library with full Unicode support")
9902 (description "This is Python port of
9903@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
9904recognition library with full Unicode support. It has features like:
9905@itemize
9906@item Full unicode support, with @i{astral} characters
9907@item International domains support
9908@item Allows rules extension and custom normalizers.
9909@end itemize")
9910 (license license:expat)))
9911
9912(define-public python-makefun
9913 (package
9914 (name "python-makefun")
9915 ;; Released version fails tests in Python 3.12 due to asyncio
9916 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
9917 (revision . "0")))
9918 (version (git-version "1.16.0"
9919 (assoc-ref properties 'revision)
9920 (assoc-ref properties 'commit)))
9921 (source
9922 (origin
9923 (method git-fetch)
9924 (uri (git-reference
9925 (url "https://github.com/smarie/python-makefun")
9926 (commit (assoc-ref properties 'commit))))
9927 (file-name (git-file-name name version))
9928 (sha256
9929 (base32
9930 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
9931 (build-system pyproject-build-system)
9932 (native-inputs
9933 (list python-pytest
9934 python-pytest-asyncio
9935 python-setuptools
9936 python-setuptools-scm))
9937 (home-page "https://github.com/smarie/python-makefun")
9938 (synopsis "Library to dynamically create python functions")
9939 (description "@code{makefun} helps create functions dynamically with a
9940given signature. It was largely inspired by @code{python-decorator} and
9941@code{functools}.")
9942 (license license:bsd-3)))
9943
9944(define-public python-markdown-it-py
9945 (package
9946 (name "python-markdown-it-py")
9947 (version "4.0.0")
9948 (source
9949 (origin
9950 (method git-fetch)
9951 (uri (git-reference
9952 (url "https://github.com/executablebooks/markdown-it-py")
9953 (commit (string-append "v" version))))
9954 (file-name (git-file-name name version))
9955 (sha256
9956 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
9957 (build-system pyproject-build-system)
9958 (arguments (list #:test-flags #~(list "--benchmark-disable")))
9959 (native-inputs
9960 (list python-flit-core
9961 python-pytest
9962 python-pytest-benchmark
9963 python-pytest-regressions
9964 python-requests))
9965 (propagated-inputs
9966 (list python-commonmark
9967 python-linkify-it-py
9968 python-markdown
9969 python-mdurl
9970 python-mistletoe
9971 python-mistune
9972 python-panflute
9973 python-pyyaml))
9974 (home-page "https://github.com/executablebooks/markdown-it-py")
9975 (synopsis "Python port of markdown-it")
9976 (description
9977 "This is a Python port of @code{markdown-it}, and some of its associated
9978plugins. The driving design philosophy of the port has been to change as
9979little of the fundamental code structure (file names, function name, etc) as
9980possible.")
9981 (license license:expat)))
9982
9983(define-public python-markupsafe
9984 (package
9985 (name "python-markupsafe")
9986 (version "3.0.3")
9987 (source
9988 (origin
9989 (method url-fetch)
9990 (uri (pypi-uri "markupsafe" version))
9991 (sha256
9992 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
9993 (build-system pyproject-build-system)
9994 ;; tests: 79 passed, 1 skipped
9995 (native-inputs
9996 (list python-pytest
9997 python-setuptools))
9998 (home-page "https://markupsafe.palletsprojects.com")
9999 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
10000 (description
10001 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
10002for Python.")
10003 (license license:bsd-3)))
10004
10005(define-public python-jinja2
10006 (package
10007 (name "python-jinja2")
10008 (version "3.1.2")
10009 (source
10010 (origin
10011 (method url-fetch)
10012 (uri (pypi-uri "Jinja2" version))
10013 (sha256
10014 (base32 "0lp86yadzf8dph67f6g3yxmvnhrzzi863z58jmsrx2j059q1ld9i"))))
10015 (build-system pyproject-build-system)
10016 (native-inputs (list python-pytest python-setuptools python-wheel))
10017 (propagated-inputs (list python-markupsafe))
10018 (home-page "https://jinja.palletsprojects.com/")
10019 (synopsis "Python template engine")
10020 (description
10021 "Jinja2 is a small but fast and easy to use stand-alone template engine
10022written in pure Python.")
10023 (license license:bsd-3)))
10024
10025(define-public python-jinja2-fragments
10026 (package
10027 (name "python-jinja2-fragments")
10028 (version "1.11.0")
10029 (source
10030 (origin
10031 (method git-fetch)
10032 (uri (git-reference
10033 (url "https://github.com/sponsfreixes/jinja2-fragments")
10034 (commit version)))
10035 (file-name (git-file-name name version))
10036 (sha256
10037 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
10038 (patches
10039 ;; Remove test setup code related to `litestar` and `sanic`
10040 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
10041 (build-system pyproject-build-system)
10042 (arguments
10043 (list
10044 #:test-flags
10045 #~(list "--ignore=tests/test_litestar.py"
10046 "--ignore=tests/test_sanic.py")))
10047 (native-inputs
10048 (list python-fastapi
10049 python-flask
10050 python-pytest
10051 python-pytest-asyncio
10052 python-quart
10053 python-setuptools))
10054 (propagated-inputs
10055 (list python-jinja2))
10056 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
10057 (synopsis "Jinja2 extension for template fragments")
10058 (description
10059 "Render Jinja2 template block as HTML page fragments on Python web
10060frameworks.")
10061 (license license:expat)))
10062
10063(define-public python-pypugjs
10064 (package
10065 (name "python-pypugjs")
10066 (version "5.12.0")
10067 (source
10068 (origin
10069 (method git-fetch)
10070 (uri (git-reference
10071 (url "https://github.com/kakulukia/pypugjs")
10072 (commit (string-append "v" version))))
10073 (file-name (git-file-name name version))
10074 (sha256
10075 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
10076 (build-system pyproject-build-system)
10077 (native-inputs (list python-django
10078 python-jinja2
10079 python-flask
10080 python-mako
10081 python-poetry-core
10082 python-pytest
10083 python-tornado))
10084 (propagated-inputs (list python-charset-normalizer python-six))
10085 (home-page "https://github.com/kakulukia/pypugjs")
10086 (synopsis "Convert Pug source files into different template languages")
10087 (description
10088 "PyPugJS is a high-performance port of PugJS for Python, that converts
10089any @file{.pug} source into different template languages: Django, Jinja2,
10090Mako, and Tornado.")
10091 (license license:expat))) ;; MIT
10092
10093(define-public python-pysrt
10094 (package
10095 (name "python-pysrt")
10096 (version "1.1.2")
10097 (source
10098 (origin
10099 (method git-fetch)
10100 (uri (git-reference
10101 (url "https://github.com/byroot/pysrt")
10102 (commit (string-append "v" version))))
10103 (file-name (git-file-name name version))
10104 (sha256
10105 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
10106 (build-system pyproject-build-system)
10107 (arguments
10108 (list
10109 #:test-backend #~'unittest
10110 #:phases
10111 #~(modify-phases %standard-phases
10112 (add-after 'unpack 'fix-python-incompatibilities
10113 (lambda _
10114 (substitute* (find-files "tests" "\\.py$")
10115 (("assertEquals") "assertEqual")))))))
10116 (propagated-inputs (list python-chardet))
10117 (native-inputs (list python-setuptools))
10118 (home-page "https://github.com/byroot/pysrt")
10119 (synopsis "SubRip Text subtitle parser and writer")
10120 (description
10121 "This package provides a Python library to edit or create
10122SubRip Text files, and additionally a command-line program @command{srt}
10123to shift, split or rescale them.")
10124 (license license:gpl3+)))
10125
10126(define-public python-pystache
10127 (package
10128 (name "python-pystache")
10129 (version "0.6.8")
10130 (source (origin
10131 (method url-fetch)
10132 (uri (pypi-uri "pystache" version))
10133 (sha256
10134 (base32
10135 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
10136 (build-system pyproject-build-system)
10137 (native-inputs (list python-pytest python-setuptools python-wheel))
10138 (home-page "http://defunkt.io/pystache/")
10139 (synopsis "Python logic-less template engine")
10140 (description
10141 "Pystache is a Python implementation of the framework agnostic,
10142logic-free templating system Mustache.")
10143 (license license:expat)))
10144
10145(define-public python-pystack
10146 (package
10147 (name "python-pystack")
10148 (version "1.5.1")
10149 (source
10150 (origin
10151 (method git-fetch)
10152 (uri (git-reference
10153 (url "https://github.com/bloomberg/pystack")
10154 (commit (string-append "v" version))))
10155 (file-name (git-file-name name version))
10156 (sha256
10157 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
10158 (build-system pyproject-build-system)
10159 (arguments
10160 (list
10161 ;; Integration tests need ptrace and gcore (gdb).
10162 #:test-flags #~(list "tests/unit")))
10163 (native-inputs
10164 (list python-cython
10165 python-pkgconfig
10166 python-pytest
10167 python-setuptools))
10168 (inputs
10169 (list elfutils))
10170 (home-page "https://github.com/bloomberg/pystack")
10171 (synopsis "Python stack trace analyzer for core dumps and live processes")
10172 (description
10173 "PyStack analyzes stack frames of running Python processes or Python core
10174dumps. It can inspect what a process is doing or what it was doing when it
10175crashed, without modifying any memory or executing code in the target process.")
10176 (license license:asl2.0)))
10177
10178(define-public python-pystitcher
10179 (package
10180 (name "python-pystitcher")
10181 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
10182 (revision . "0")
10183 (upstream-version . "1.0.5")))
10184 (version (git-version (assoc-ref properties 'upstream-version)
10185 (assoc-ref properties 'revision)
10186 (assoc-ref properties 'commit)))
10187 (source
10188 (origin
10189 (method git-fetch)
10190 (uri (git-reference
10191 (url "https://github.com/captn3m0/pystitcher")
10192 (commit (assoc-ref properties 'commit))))
10193 (file-name (git-file-name name version))
10194 (sha256
10195 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
10196 (build-system pyproject-build-system)
10197 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
10198 (inputs (list python-html5lib
10199 python-markdown
10200 python-pypdf
10201 python-validators))
10202 (home-page "https://github.com/captn3m0/pystitcher")
10203 (synopsis "Declaratively stitch together a PDF file from multiple sources")
10204 (description
10205 "This package stitches your PDF files together, generating customizable
10206bookmarks using a declarative input in the form of a markdown file.")
10207 (license license:expat)))
10208
10209(define-public python-joblib
10210 (package
10211 (name "python-joblib")
10212 (version "1.5.2")
10213 (source
10214 (origin
10215 (method url-fetch)
10216 (uri (pypi-uri "joblib" version))
10217 (sha256
10218 (base32 "0mbvch9pzadf0vrm666381ic0ryy5zsv5abxak506bsb0lwmraiz"))))
10219 (build-system pyproject-build-system)
10220 (arguments
10221 (list
10222 #:test-flags
10223 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10224 ;; Disabled to avoid having to depend on ipython/jupyter.
10225 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
10226 (native-inputs
10227 (list python-pytest
10228 python-pytest-asyncio
10229 python-pytest-xdist
10230 python-setuptools
10231 python-wheel))
10232 (home-page "https://joblib.readthedocs.io/")
10233 (synopsis "Using Python functions as pipeline jobs")
10234 (description
10235 "Joblib is a set of tools to provide lightweight pipelining in Python.
10236In particular, joblib offers: transparent disk-caching of the output values
10237and lazy re-evaluation (memoize pattern), easy simple parallel computing
10238logging and tracing of the execution.")
10239 (license license:bsd-3)))
10240
10241(define-public python-daemon
10242 (package
10243 (name "python-daemon")
10244 (version "3.1.2")
10245 (source
10246 (origin
10247 (method git-fetch)
10248 (uri (git-reference
10249 (url "https://pagure.io/python-daemon")
10250 (commit (string-append "release/" version))))
10251 (file-name (git-file-name name version))
10252 (sha256
10253 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
10254 (patches
10255 (search-patches "python-daemon-relax-lockfile.patch"))))
10256 (build-system pyproject-build-system)
10257 (arguments
10258 (list
10259 #:phases
10260 #~(modify-phases %standard-phases
10261 (add-after 'unpack 'discard-dynamic-metadata
10262 (lambda _
10263 (substitute* "pyproject.toml"
10264 (("^dynamic = " all)
10265 (format #f "version = ~s~%~a" #$version all))
10266 (("\"(description|readme|version|maintainers)\",")
10267 ""))
10268 (for-each delete-file
10269 '("setup.py"
10270 "test/test_util_metadata.py"
10271 "test/test_setup.py")))))))
10272 (propagated-inputs (list python-filelock))
10273 (native-inputs (list python-testscenarios python-setuptools))
10274 (home-page "https://pagure.io/python-daemon/")
10275 (synopsis "Python library for making a Unix daemon process")
10276 (description
10277 "Python-daemon is a library that assists a Python program to turn itself
10278into a well-behaved Unix daemon process, as specified in PEP 3143.
10279
10280This library provides a @code{DaemonContext} class that manages the following
10281important tasks for becoming a daemon process:
10282@enumerate
10283@item Detach the process into its own process group.
10284@item Set process environment appropriate for running inside a chroot.
10285@item Renounce suid and sgid privileges.
10286@item Close all open file descriptors.
10287@item Change the working directory, uid, gid, and umask.
10288@item Set appropriate signal handlers.
10289@item Open new file descriptors for stdin, stdout, and stderr.
10290@item Manage a specified PID lock file.
10291@item Register cleanup functions for at-exit processing.
10292@end enumerate")
10293 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
10294 (license (list license:asl2.0 license:gpl3+))))
10295
10296(define-public python-annotated-types
10297 (package
10298 (name "python-annotated-types")
10299 (version "0.7.0")
10300 (source
10301 (origin
10302 (method url-fetch)
10303 (uri (pypi-uri "annotated_types" version))
10304 (sha256
10305 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
10306 (build-system pyproject-build-system)
10307 (native-inputs
10308 (list python-hatchling
10309 python-pytest))
10310 (propagated-inputs (list python-typing-extensions))
10311 (home-page "https://github.com/annotated-types/annotated-types")
10312 (synopsis "Reusable constraint types to use with typing.Annotated")
10313 (description "This package provides metadata objects which can be used to
10314represent common constraints such as upper and lower bounds on scalar values and
10315collection sizes, a Predicate marker for runtime checks, and descriptions of how
10316we intend these metadata to be interpreted. In some cases, we also note
10317alternative representations which do not require this package.")
10318 (license license:expat)))
10319
10320(define-public python-anytree
10321 (package
10322 (name "python-anytree")
10323 (version "2.13.0")
10324 (source
10325 (origin
10326 (method git-fetch) ; no tests data in PyPi package
10327 (uri (git-reference
10328 (url "https://github.com/c0fec0de/anytree")
10329 (commit version)))
10330 (file-name (git-file-name name version))
10331 (sha256
10332 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
10333 (build-system pyproject-build-system)
10334 (arguments
10335 (list
10336 #:phases
10337 #~(modify-phases %standard-phases
10338 (add-before 'check 'pre-check
10339 (lambda _
10340 ;; Tests need to write to that direcroty.
10341 (mkdir-p "tests/dotexport/"))))))
10342 (native-inputs
10343 (list graphviz ;for 'dot'
10344 python-pdm-backend
10345 python-pytest
10346 python-pyyaml
10347 python-test2ref))
10348 (home-page "https://github.com/c0fec0de/anytree")
10349 (synopsis "Lightweight tree data library")
10350 (description
10351 "@code{anytree} is a simple, lightweight, and extensible tree data
10352structure for Python.")
10353 (license license:asl2.0)))
10354
10355(define-public kalamine
10356 (package
10357 (name "kalamine")
10358 (version "0.38")
10359 (source
10360 (origin
10361 (method url-fetch)
10362 (uri (pypi-uri "kalamine" version))
10363 (sha256
10364 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10365 (build-system pyproject-build-system)
10366 (arguments
10367 (list
10368 #:phases
10369 #~(modify-phases %standard-phases
10370 (add-before 'check 'make-test-layouts
10371 (lambda _
10372 (apply invoke
10373 (cons* "python" "-m" "kalamine.cli" "build"
10374 (find-files "layouts" "\\.toml")))
10375 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10376 (propagated-inputs
10377 (list python-click
10378 python-livereload
10379 python-lxml
10380 python-progress
10381 python-pyyaml
10382 python-tomli))
10383 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10384 ;; packaged.
10385 (native-inputs
10386 (list python-hatchling python-pytest))
10387 (home-page "https://github.com/OneDeadKey/kalamine")
10388 (synopsis "Keyboard layout maker")
10389 (description
10390 "Kalamine provides a CLI to create advanced keyboard layout from a
10391textual portable description. It also supports layout emulation via web
10392browser.")
10393 (license license:expat)))
10394
10395(define-public python-dm-tree
10396 (package
10397 (name "python-dm-tree")
10398 (version "0.1.9")
10399 (source
10400 (origin
10401 (method url-fetch)
10402 (uri (pypi-uri "dm_tree" version))
10403 (sha256
10404 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10405 (build-system pyproject-build-system)
10406 (arguments
10407 (list #:tests? #f
10408 #:phases
10409 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10410 ;; and USE_SYSTEM_PYBIND11=true.
10411 #~(modify-phases %standard-phases
10412 (add-before 'build 'build-shared-lib
10413 (lambda _
10414 (let* ((pybind11 #$(this-package-input "pybind11"))
10415 (python #$(this-package-input "python"))
10416 (version (python-version python))
10417 (abseil-cpp #$(this-package-input "abseil-cpp")))
10418 ;; Delete default cmake build.
10419 (substitute* "setup.py"
10420 (("ext_modules.*") "")
10421 (("cmdclass.*") ""))
10422 ;; Actual build phase.
10423 (mkdir-p "build/temp/tree/")
10424 (invoke
10425 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10426 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10427 "-fno-semantic-interposition" "-fPIC"
10428 "-I" (string-append pybind11
10429 "/lib/python" version
10430 "/site-packages/pybind11/include")
10431 "-I" (string-append python "/include/python"
10432 version)
10433 "-I" (string-append abseil-cpp "/include")
10434 "-c" "tree/tree.cc"
10435 "-o" "build/temp/tree/tree.o"
10436 "-fvisibility=hidden" "-g0")
10437 (mkdir-p "build/lib/tree")
10438 (invoke
10439 "g++" "-pthread" "-shared"
10440 (string-append "-Wl," "-rpath=" python "/lib")
10441 "-fno-semantic-interposition"
10442 "build/temp/tree/tree.o"
10443 "-L" (string-append python "/lib")
10444 (string-append abseil-cpp "/lib/libabsl_int128.a")
10445 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10446 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10447 (string-append abseil-cpp "/lib/libabsl_strings.a")
10448 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10449 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10450 "-o" "build/lib/tree/_tree.so")))))))
10451 ;; We link the static abseil libraries here to avoid problems in
10452 ;; downstream libraries using potentially different variants of
10453 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10454 (native-inputs
10455 (list python-setuptools))
10456 (inputs
10457 (list pybind11-2
10458 static-abseil-cpp
10459 python))
10460 (propagated-inputs
10461 (list python-absl-py
10462 python-attrs
10463 python-numpy
10464 python-wrapt))
10465 (home-page "https://github.com/deepmind/tree")
10466 (synopsis "Work with nested data structures in Python")
10467 (description "Tree is a python library for working with nested data
10468structures. In a way, @code{tree} generalizes the builtin @code{map} function
10469which only supports flat sequences, and allows you to apply a function to each
10470leaf preserving the overall structure.")
10471 (license license:asl2.0)))
10472
10473(define-public python-pyment
10474 (package
10475 (name "python-pyment")
10476 (version "0.3.4")
10477 (source
10478 (origin
10479 (method git-fetch)
10480 (uri
10481 (git-reference
10482 (url "https://github.com/dadadel/pyment")
10483 (commit (string-append "v" version))))
10484 (file-name (git-file-name name version))
10485 (sha256
10486 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10487 (build-system pyproject-build-system)
10488 (native-inputs (list python-pytest python-setuptools))
10489 (home-page "https://github.com/dadadel/pyment/")
10490 (synopsis "Convert Python docstrings automatically")
10491 (description "Pyment is a command line tool and library that can be
10492used to convert between several docstring styles.")
10493 (license license:gpl3+)))
10494
10495(define-public python-docstring-parser
10496 (package
10497 (name "python-docstring-parser")
10498 (version "0.15")
10499 (source (origin
10500 (method url-fetch)
10501 (uri (pypi-uri "docstring_parser" version))
10502 (sha256
10503 (base32
10504 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10505 (build-system pyproject-build-system)
10506 (native-inputs (list python-poetry-core python-pytest))
10507 (home-page "https://github.com/rr-/docstring_parser")
10508 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10509 (description "This package lets you parse Python docstrings in reST,
10510Google and Numpydoc format.")
10511 (license license:expat)))
10512
10513(define-public python-docutils
10514 (package
10515 (name "python-docutils")
10516 (version "0.21.2")
10517 (source
10518 (origin
10519 (method url-fetch)
10520 (uri (pypi-uri "docutils" version))
10521 (sha256
10522 (base32 "0vwqzbmzdvwx23myx4cg8s8mdkrqnfxpa9yi7jm2s66z5rrihsrs"))))
10523 (build-system pyproject-build-system)
10524 (arguments
10525 (list
10526 #:test-backend #~'custom
10527 #:test-flags #~(list "test/alltests.py")
10528 #:phases
10529 (if (target-hurd?)
10530 #~(modify-phases %standard-phases
10531 (add-before 'check 'fix-errno
10532 (lambda _
10533 ;; Some tests check for an exact error message
10534 ;; Expecting ENOENT == 2.
10535 (substitute* (find-files "test" "\\.py$")
10536 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10537 #~%standard-phases)))
10538 (native-inputs
10539 (list python-flit-core))
10540 (home-page "https://docutils.sourceforge.net/")
10541 (synopsis "Python Documentation Utilities")
10542 (description
10543 "Docutils is a modular system for processing documentation into useful
10544formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10545easy to use markup language, for input.
10546
10547This package provides tools for converting @file{.rst} files to other formats
10548via commands such as @command{rst2man}, as well as supporting Python code.")
10549 ;; Most of the source code is public domain, but some source files are
10550 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10551 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10552
10553(define-public python-docutils-0.19
10554 (hidden-package
10555 (package
10556 (inherit python-docutils)
10557 (version "0.19")
10558 (source (origin
10559 (method url-fetch)
10560 (uri (pypi-uri "docutils" version))
10561 (sha256
10562 (base32
10563 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10564 (native-inputs
10565 (list python-setuptools python-wheel)))))
10566
10567(define-public python-docx
10568 (package
10569 (name "python-docx")
10570 (version "1.2.0")
10571 (source (origin
10572 (method url-fetch)
10573 (uri (pypi-uri "python_docx" version))
10574 (sha256
10575 (base32
10576 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10577 (build-system pyproject-build-system)
10578 (native-inputs
10579 (list behave
10580 python-pyparsing
10581 python-pytest
10582 python-setuptools
10583 python-wheel))
10584 (propagated-inputs
10585 (list python-lxml python-typing-extensions))
10586 (home-page "https://github.com/python-openxml/python-docx/")
10587 (synopsis "Python library to create and modify Microsoft Word documents")
10588 (description "This Python library can be used to create and update
10589Microsoft Word (.docx) documents.")
10590 (license license:expat)))
10591
10592(define-public python-repoze-lru
10593 (package
10594 (name "python-repoze-lru")
10595 (version "0.7")
10596 (source
10597 (origin
10598 (method url-fetch)
10599 (uri (pypi-uri "repoze.lru" version))
10600 (sha256
10601 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
10602 (build-system pyproject-build-system)
10603 (arguments
10604 (list
10605 #:test-backend #~'unittest
10606 #:test-flags #~(list "discover" "repoze")))
10607 (native-inputs
10608 (list python-setuptools))
10609 (home-page "https://www.repoze.org")
10610 (synopsis "Tiny LRU cache implementation and decorator")
10611 (description
10612 "This package provides a tiny LRU cache implementation and decorator.")
10613 (license license:bsd-4)))
10614
10615(define-public python-reretry
10616 (package
10617 (name "python-reretry")
10618 (version "0.11.8")
10619 (source
10620 (origin
10621 (method git-fetch)
10622 (uri (git-reference
10623 (url "https://github.com/leshchenko1979/reretry")
10624 (commit version)))
10625 (file-name (git-file-name name version))
10626 (sha256
10627 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
10628 (build-system pyproject-build-system)
10629 (native-inputs
10630 (list python-pytest python-pytest-asyncio python-setuptools))
10631 (home-page "https://github.com/leshchenko1979/reretry")
10632 (synopsis "Functional decorator for retrying on exceptions")
10633 (description
10634 "This package is a fork from the retry package, but with some of added
10635community-sourced features. It provides an easy to use, but functional
10636decorator for retrying on exceptions.")
10637 (license license:asl2.0)))
10638
10639(define-public python-restructuredtext-lint
10640 (package
10641 (name "python-restructuredtext-lint")
10642 (version "1.4.0")
10643 (source
10644 (origin
10645 (method git-fetch)
10646 (uri (git-reference
10647 (url "https://github.com/twolfson/restructuredtext-lint")
10648 (commit version)))
10649 (file-name (git-file-name name version))
10650 (sha256
10651 (base32 "19ncbmnq2rnkqxhc9wf0q9whji34iyfv1pz6z61vnv4qhhdrn33v"))))
10652 (build-system pyproject-build-system)
10653 (arguments (list #:test-backend #~'unittest))
10654 (propagated-inputs (list python-docutils))
10655 (native-inputs (list python-setuptools))
10656 (home-page "https://github.com/twolfson/restructuredtext-lint")
10657 (synopsis "Linter")
10658 (description
10659 "This package provides a linter for the reStructuredText format.")
10660 (license license:unlicense)))
10661
10662(define-public python-click-repl
10663 (package
10664 (name "python-click-repl")
10665 ;; To support Python 3.12, see:
10666 ;; <https://github.com/click-contrib/click-repl/issues/128>.
10667 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
10668 (revision . "1")))
10669 (version (git-version "0.3.0"
10670 (assoc-ref properties 'revision)
10671 (assoc-ref properties 'commit)))
10672 (source
10673 (origin
10674 (method git-fetch)
10675 (uri (git-reference
10676 (url "https://github.com/click-contrib/click-repl")
10677 (commit (assoc-ref properties 'commit))))
10678 (file-name (git-file-name name version))
10679 (sha256
10680 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
10681 (build-system pyproject-build-system)
10682 (native-inputs
10683 (list python-pytest
10684 python-setuptools))
10685 (propagated-inputs
10686 (list python-click
10687 python-prompt-toolkit))
10688 (home-page "https://github.com/click-contrib/click-repl")
10689 (synopsis "REPL plugin for Click")
10690 (description "This package provides a REPL plugin for Click.")
10691 (license license:expat)))
10692
10693(define-public python-pygdbmi
10694 (package
10695 (name "python-pygdbmi")
10696 (version "0.11.0.0")
10697 (source
10698 (origin
10699 (method url-fetch)
10700 (uri (pypi-uri "pygdbmi" version))
10701 (sha256
10702 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
10703 (build-system pyproject-build-system)
10704 (arguments (list #:tests? #f)) ;no tests in PyPI archive
10705 (native-inputs (list python-setuptools python-wheel))
10706 (home-page "https://github.com/cs01/pygdbmi")
10707 (synopsis "Parse gdb machine interface output with Python")
10708 (description "This package provides a parse gdb machine interface output
10709with Python.")
10710 (license license:expat)))
10711
10712(define-public python-pygtrie
10713 (package
10714 (name "python-pygtrie")
10715 (version "2.5.0")
10716 (source
10717 (origin
10718 (method git-fetch)
10719 (uri (git-reference
10720 (url "https://github.com/mina86/pygtrie")
10721 (commit (string-append "v" version))))
10722 (file-name (git-file-name name version))
10723 (sha256
10724 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
10725 (build-system pyproject-build-system)
10726 (arguments
10727 (list
10728 #:test-backend #~'unittest
10729 #:phases
10730 #~(modify-phases %standard-phases
10731 (add-after 'unpack 'set-version
10732 (lambda _
10733 (delete-file "version.py")
10734 (substitute* "setup.py"
10735 (("import version")
10736 "")
10737 (("version\\.get_version\\(\\)")
10738 (format #f "~s" #$version))))))))
10739 (native-inputs (list python-setuptools))
10740 (home-page "https://github.com/mina86/pygtrie")
10741 (synopsis "Pure Python trie data structure implementation")
10742 (description
10743 "This package provides a pure Python trie data structure implementation.")
10744 (license license:asl2.0)))
10745
10746(define-public python-bump2version
10747 (package
10748 (name "python-bump2version")
10749 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
10750 (revision . "1")))
10751 (version (git-version "1.0.1"
10752 (assoc-ref properties 'revision)
10753 (assoc-ref properties 'commit)))
10754 (source
10755 (origin
10756 (method git-fetch)
10757 (uri (git-reference
10758 (url "https://github.com/c4urself/bump2version")
10759 (commit (assoc-ref properties 'commit))))
10760 (file-name (git-file-name name version))
10761 (sha256
10762 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
10763 (build-system pyproject-build-system)
10764 (arguments
10765 ;; XXX: Single flaky failing test.
10766 (list #:test-flags #~(list "-k" "not test_usage_string")))
10767 (native-inputs (list python-pytest python-setuptools python-testfixtures))
10768 (home-page "https://github.com/c4urself/bump2version")
10769 (synopsis "Version-bump your software with a single command!")
10770 (description
10771 "This package provides a small command line tool to simplify releasing
10772software by updating all version strings in your source code by the correct
10773increment. It also creates commits and tags.")
10774 (license license:expat)))
10775
10776(define-public python-deprecated
10777 (package
10778 (name "python-deprecated")
10779 (version "1.3.1")
10780 (source
10781 (origin
10782 (method git-fetch)
10783 (uri (git-reference
10784 (url "https://github.com/tantale/deprecated")
10785 (commit (string-append "v" version))))
10786 (file-name (git-file-name name version))
10787 (sha256
10788 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
10789 (build-system pyproject-build-system)
10790 (native-inputs
10791 (list python-pytest
10792 python-setuptools))
10793 (propagated-inputs
10794 (list python-wrapt))
10795 (home-page "https://github.com/tantale/deprecated")
10796 (synopsis "Python decorator to deprecate classes, functions or methods")
10797 (description
10798 "The @code{deprecated} decorator provides a convenient way to deprecate
10799to deprecate classes, functions or methods.")
10800 (license license:expat)))
10801
10802(define-public python-pygithub
10803 (package
10804 (name "python-pygithub")
10805 (version "2.8.1")
10806 (source
10807 (origin
10808 (method git-fetch)
10809 (uri (git-reference
10810 (url "https://github.com/PyGithub/PyGithub")
10811 (commit (string-append "v" version))))
10812 (file-name (git-file-name name version))
10813 (sha256
10814 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
10815 (build-system pyproject-build-system)
10816 (propagated-inputs
10817 (list python-pyjwt
10818 python-pynacl
10819 python-requests
10820 python-typing-extensions
10821 python-urllib3))
10822 (native-inputs
10823 (list python-responses
10824 python-pytest
10825 python-setuptools
10826 python-setuptools-scm))
10827 (home-page "https://pygithub.readthedocs.io/en/latest/")
10828 (synopsis "Python library for the GitHub API")
10829 (description "This library allows managing GitHub resources such as
10830repositories, user profiles, and organizations in your Python applications,
10831using version 3 of the GitHub application programming interface (API).")
10832 (license license:lgpl3+)))
10833
10834(define-public python-rellu
10835 (package
10836 (name "python-rellu")
10837 (version "0.7")
10838 (source
10839 (origin
10840 (method git-fetch)
10841 (uri (git-reference
10842 (url "https://github.com/robotframework/rellu")
10843 (commit (string-append "v" version))))
10844 (file-name (git-file-name name version))
10845 (sha256
10846 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
10847 (build-system pyproject-build-system)
10848 (native-inputs (list python-pytest python-setuptools))
10849 (propagated-inputs (list python-invoke python-pygithub))
10850 (home-page "https://github.com/robotframework/rellu")
10851 (synopsis "Utilities to create PyPI releases")
10852 (description
10853 "This collection of utilities contains tooling and templates to assist in
10854creating releases on GitHub and publishing them on PyPI. It is designed to be
10855used by Robot Framework and tools and libraries in its ecosystem, but can
10856naturally be used also by other projects.")
10857 (license license:asl2.0)))
10858
10859(define-public python-robotframework
10860 (package
10861 (name "python-robotframework")
10862 (version "7.3.2")
10863 (source
10864 (origin
10865 (method git-fetch) ; no tests in the PyPI archive
10866 (uri (git-reference
10867 (url "https://github.com/robotframework/robotframework")
10868 (commit (string-append "v" version))))
10869 (file-name (git-file-name name version))
10870 (sha256
10871 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
10872 (outputs '("out" "doc"))
10873 (build-system pyproject-build-system)
10874 (arguments
10875 (list
10876 #:modules '((guix build pyproject-build-system)
10877 (guix build utils)
10878 (ice-9 ftw)
10879 (ice-9 match)
10880 (srfi srfi-26))
10881 #:phases
10882 #~(modify-phases %standard-phases
10883 (add-before 'build 'build-and-install-doc
10884 (lambda* (#:key outputs #:allow-other-keys)
10885 (let ((doc (string-append #$output:doc
10886 "/share/doc/robotframework")))
10887 (invoke "invoke" "library-docs" "all")
10888 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
10889 (mkdir-p doc)
10890 (with-directory-excursion "dist"
10891 (define user-guide-dir
10892 (match (scandir "." (cut string-prefix?
10893 "robotframework-userguide-" <>))
10894 ((dir) dir)
10895 (_ (error "could not find the user guide directory"))))
10896 (copy-recursively user-guide-dir doc)))))
10897 (replace 'check
10898 (lambda* (#:key tests? #:allow-other-keys)
10899 (when tests?
10900 ;; TODO: Some acceptance failed and took near 30min to
10901 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
10902 ;; to skip failing ones.
10903 (format #t "Running unit tests...~%")
10904 (invoke "utest/run.py")))))))
10905 (native-inputs
10906 (list python-docutils
10907 python-invoke
10908 python-jsonschema
10909 python-pygments
10910 python-rellu
10911 python-typing-extensions
10912 python-setuptools
10913 `(,python "tk") ;used when building the HTML doc
10914 python-wheel))
10915 (home-page "https://robotframework.org")
10916 (synopsis "Generic automation framework")
10917 (description "Robot Framework is a generic automation framework for
10918acceptance testing, acceptance test driven development (ATDD), and robotic
10919process automation (RPA).")
10920 (license license:asl2.0)))
10921
10922(define-public python-robotframework-datadriver
10923 (package
10924 (name "python-robotframework-datadriver")
10925 (version "1.11.2")
10926 (source
10927 (origin
10928 (method git-fetch) ; no tests in PyPI release
10929 (uri (git-reference
10930 (url "https://github.com/Snooz82/robotframework-datadriver")
10931 (commit version)))
10932 (file-name (git-file-name name version))
10933 (sha256
10934 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
10935 (build-system pyproject-build-system)
10936 (arguments
10937 (list
10938 #:phases
10939 #~(modify-phases %standard-phases
10940 (add-before 'check 'skip-problematic-tests
10941 (lambda _
10942 (for-each delete-file-recursively
10943 (list
10944 ;; The test file 'tab-csv-file-name.tsv' contains
10945 ;; special characters for which there is no locale
10946 ;; in the build environment, causing one test to
10947 ;; fail.
10948 "atest/TestCases/csv_reader_config"
10949 ;; Error in file on line 6: Non-existing setting
10950 ;; 'Test Tags'.
10951 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
10952 (replace 'check
10953 (lambda* (#:key tests? #:allow-other-keys)
10954 (when tests?
10955 (with-directory-excursion "atest"
10956 (invoke "sh" "run_atest.sh"))))))))
10957 (native-inputs
10958 (list python-docutils
10959 python-robotframework-stacktrace
10960 python-setuptools
10961 python-xlrd))
10962 (propagated-inputs
10963 (list python-openpyxl
10964 python-pandas
10965 python-pygments
10966 python-robotframework))
10967 (home-page "https://github.com/Snooz82/robotframework-datadriver")
10968 (synopsis "Data-driven test extension for Robot Framework")
10969 (description "DataDriver is a data-driven extension for Robot Framework.
10970DataDriver uses the Listener Interface of Robot Framework to create new test
10971cases based on a data file that contains the test data. DataDriver supports
10972data files in the CSV, XLS or XLSX formats.")
10973 (license license:asl2.0)))
10974
10975(define-public python-robotframework-pabot
10976 (package
10977 (name "python-robotframework-pabot")
10978 (version "4.2.0")
10979 (source
10980 (origin
10981 ;; There are no tests in the PyPI archive.
10982 (method git-fetch)
10983 (uri (git-reference
10984 (url "https://github.com/mkorpela/pabot")
10985 (commit version)))
10986 (file-name (git-file-name name version))
10987 (sha256
10988 (base32
10989 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
10990 (build-system pyproject-build-system)
10991 (arguments
10992 (list
10993 #:test-flags
10994 #~(list "-k" (string-join
10995 ;; XXX: Maybe it's a bad idea to skip these tests which
10996 ;; failing assertions highlight incomparability issues.
10997 ;;
10998 ;; 93 passed, 23 deselected, 11 warnings
10999 (list "not test_argumentfile_outputs"
11000 "test_dependency_ok"
11001 "test_longnames_in_tests"
11002 "test_multiple_dependencies_ok"
11003 "test_orders"
11004 "test_pabotprerunmodifier"
11005 "test_pabotprerunmodifier_with_prerunmodifier"
11006 "test_pabotprerunmodifier_with_testlevelsplit"
11007 "test_pabotprerunmodifier_with_testlevelsplit_and_"
11008 "test_parallel_execution"
11009 "test_parallel_execution_with_testlevelsplit"
11010 "test_pre_run_with_new_name"
11011 "test_pre_run_with_new_tag"
11012 "test_run_dir_2_then_dir_3"
11013 "test_run_dir_3_then_dir_2"
11014 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
11015 "test_sleep_test_cases_and_group"
11016 "test_stdout_should_display_passed_test"
11017 "test_stdout_should_display_passed_test"
11018 "test_stdout_should_display_passed_test_and_not_"
11019 "test_testlevelsplit_output_task_order"
11020 "test_too_big_testname"
11021 "test_two_orders")
11022 " and not "))
11023 #:phases
11024 #~(modify-phases %standard-phases
11025 (add-after 'unpack 'relax-requirements
11026 (lambda _
11027 (substitute* "setup.cfg"
11028 ;; natsort>=8.2.0
11029 ((">=8.2.0") "")))))))
11030 (native-inputs
11031 (list python-pytest
11032 python-setuptools
11033 python-wheel))
11034 (propagated-inputs
11035 (list python-natsort
11036 python-robotframework
11037 python-robotframework-stacktrace))
11038 (home-page "https://pabot.org")
11039 (synopsis "Parallel test runner for Robot Framework")
11040 (description "Pabot is a parallel executor for Robot Framework tests.")
11041 (license license:asl2.0)))
11042
11043(define-public python-robotframework-stacktrace
11044 (package
11045 (name "python-robotframework-stacktrace")
11046 (version "0.4.1")
11047 (source
11048 (origin
11049 (method git-fetch)
11050 (uri (git-reference
11051 (url "https://github.com/MarketSquare/robotframework-stacktrace")
11052 (commit version)))
11053 (file-name (git-file-name name version))
11054 (sha256
11055 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
11056 (build-system pyproject-build-system)
11057 (arguments
11058 ;; XXX: The test suite fails (see:
11059 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
11060 (list
11061 #:tests? #f
11062 #:phases
11063 #~(modify-phases %standard-phases
11064 (add-after 'unpack 'set-version
11065 (lambda _
11066 (substitute* "setup.py"
11067 (("VERSION =.*")
11068 (string-append "VERSION = '" #$version "'"))))))))
11069 (native-inputs (list python-setuptools))
11070 (propagated-inputs (list python-robotframework))
11071 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
11072 (synopsis "Robot Framework listener to print a stack trace on error")
11073 (description "StackTrace is a Robot Framework listener that prints a stack
11074trace directly to the terminal to ease debugging.")
11075 (license license:asl2.0)))
11076
11077(define-public python-robotframework-sshlibrary
11078 (package
11079 (name "python-robotframework-sshlibrary")
11080 (version "3.8.0")
11081 ;; There are no tests in the PyPI archive.
11082 (source
11083 (origin
11084 (method git-fetch)
11085 (uri (git-reference
11086 (url "https://github.com/robotframework/SSHLibrary")
11087 (commit (string-append "v" version))))
11088 (file-name (git-file-name name version))
11089 (sha256
11090 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
11091 (patches (search-patches
11092 "python-robotframework-sshlibrary-rf5-compat.patch"))))
11093 (build-system pyproject-build-system)
11094 (arguments
11095 (list
11096 #:phases
11097 #~(modify-phases %standard-phases
11098 (add-after 'unpack 'fix-python-incompatibilities
11099 (lambda _
11100 (substitute* (find-files "utest" "\\.py$")
11101 (("assertEquals") "assertEqual"))))
11102 (add-before 'build 'build-and-install-doc
11103 (lambda _
11104 (let ((doc (string-append #$output:doc
11105 "/share/doc/robotframework-sshlibrary")))
11106 (invoke "chmod" "-R" "+w" "docs")
11107 (invoke "invoke" "kw-docs" "project-docs")
11108 (mkdir-p doc)
11109 (for-each delete-file
11110 (find-files "docs" "\\.rst"))
11111 (copy-recursively "docs" doc))))
11112 (replace 'check
11113 (lambda* (#:key tests? #:allow-other-keys)
11114 (when tests?
11115 ;; Some tests require an SSH server; we remove them.
11116 (delete-file "utest/test_client_api.py")
11117 (delete-file "utest/test_scp.py")
11118 (invoke "python" "utest/run.py")))))))
11119 (propagated-inputs
11120 (list python-robotframework python-paramiko python-scp))
11121 (native-inputs
11122 (list openssh
11123 which
11124 ;; To generate the documentation
11125 python-docutils
11126 python-invoke
11127 python-pygments
11128 python-rellu
11129 python-setuptools))
11130 (outputs '("out" "doc"))
11131 (home-page "https://github.com/robotframework/SSHLibrary")
11132 (synopsis "Robot Framework library for SSH and SFTP")
11133 (description
11134 "SSHLibrary is a Robot Framework library providing support for SSH and
11135SFTP. It has the following main usages:
11136@itemize @bullet
11137@item Executing commands on the remote machine, either blocking or non-blocking.
11138@item Writing and reading in an interactive shell.
11139@item Transferring files and directories over SFTP.
11140@item Ensuring that files and directories exist on the remote machine.
11141@end itemize")
11142 (license license:asl2.0)))
11143
11144(define-public python-robotframework-pythonlibcore
11145 (package
11146 (name "python-robotframework-pythonlibcore")
11147 (version "4.4.1")
11148 (source
11149 (origin
11150 (method git-fetch) ;no tests in pypi archive
11151 (uri (git-reference
11152 (url "https://github.com/robotframework/PythonLibCore")
11153 (commit (string-append "v" version))))
11154 (file-name (git-file-name name version))
11155 (sha256
11156 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
11157 (build-system pyproject-build-system)
11158 (arguments
11159 (list
11160 #:test-backend #~'custom
11161 #:test-flags #~(list "utest/run.py")))
11162 (native-inputs
11163 (list python-approvaltests
11164 python-pytest
11165 python-pytest-cov ; This package has a custom way to run tests.
11166 python-pytest-mockito
11167 python-robotframework
11168 python-setuptools))
11169 (home-page "https://github.com/robotframework/PythonLibCore")
11170 (synopsis "Robot Framework Python library tools")
11171 (description
11172 "PythonLibCore provides tools for creating larger test libraries for
11173Robot Framework using Python. The Robot Framework hybrid and dynamic library
11174APIs give more flexibility for library than the static library API, but they
11175also set requirements for libraries which need to be implemented in the
11176library side. PythonLibCore eases the problem by providing a simpler
11177interface and by handling all the requirements towards the Robot Framework
11178library APIs.")
11179 (license license:asl2.0)))
11180
11181(define-public python-robotframework-seleniumlibrary
11182 (package
11183 (name "python-robotframework-seleniumlibrary")
11184 (version "6.8.0")
11185 (source
11186 (origin
11187 (method git-fetch)
11188 (uri (git-reference
11189 (url "https://github.com/robotframework/SeleniumLibrary")
11190 (commit (string-append "v" version))))
11191 (file-name (git-file-name name version))
11192 (sha256
11193 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
11194 (build-system pyproject-build-system)
11195 (arguments
11196 (list
11197 #:test-flags
11198 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
11199 "-k" (string-join
11200 (list "not test_create_firefox_with_options"
11201 "test_create_headless_firefox_with_options"
11202 "test_create_driver_firefox")
11203 " and not "))))
11204 (native-inputs
11205 (list python-approvaltests
11206 python-pytest
11207 python-pytest-mockito
11208 python-setuptools))
11209 (propagated-inputs
11210 (list python-click
11211 python-robotframework
11212 python-robotframework-pythonlibcore
11213 python-selenium))
11214 (home-page "https://github.com/robotframework/SeleniumLibrary")
11215 (synopsis "Web testing library for Robot Framework")
11216 (description "SeleniumLibrary is a web testing library for Robot Framework
11217that utilizes the Selenium tool internally.")
11218 (license license:asl2.0)))
11219
11220(define-public python-robotframework-seleniumscreenshots
11221 (package
11222 (name "python-robotframework-seleniumscreenshots")
11223 (version "0.9.5")
11224 (source
11225 (origin
11226 (method git-fetch)
11227 (uri (git-reference
11228 (url
11229 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11230 (commit version)))
11231 (file-name (git-file-name name version))
11232 (sha256
11233 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
11234 (build-system pyproject-build-system)
11235 (arguments
11236 ;; XXX: The tests require a relatively complicated setup configured in
11237 ;; their CI with Nix (!).
11238 `(#:tests? #f))
11239 (native-inputs (list python-setuptools))
11240 (propagated-inputs
11241 (list python-robotframework python-robotframework-seleniumlibrary))
11242 (home-page
11243 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11244 (synopsis
11245 "Robot Framework library for annotating and cropping screenshots")
11246 (description
11247 "The SeleniumScreenshots library for Robot Framework provides keywords
11248for annotating and cropping screenshots taken with SeleniumLibrary. It is
11249useful for scripting automatically updated screenshots for documentation or
11250for visual regression testing purposes.")
11251 (license license:bsd-3)))
11252
11253(define-public python-rstr
11254 (package
11255 (name "python-rstr")
11256 (version "3.2.2")
11257 (source
11258 (origin
11259 (method git-fetch)
11260 (uri (git-reference
11261 (url "https://github.com/leapfrogonline/rstr")
11262 (commit version)))
11263 (file-name (git-file-name name version))
11264 (sha256
11265 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
11266 (build-system pyproject-build-system)
11267 (native-inputs (list python-pytest
11268 python-setuptools
11269 python-setuptools-scm
11270 python-wheel))
11271 (home-page "https://github.com/leapfrogonline/rstr")
11272 (synopsis "Generate random strings in Python")
11273 (description "This package provides a python module for generating
11274random strings of various types. It could be useful for fuzz testing,
11275generating dummy data, or other applications. It has no dependencies
11276outside the standard library.")
11277 (license license:bsd-3)))
11278
11279(define-public python-scp
11280 (package
11281 (name "python-scp")
11282 (version "0.15.0")
11283 (source
11284 (origin
11285 (method git-fetch)
11286 (uri (git-reference
11287 (url "https://github.com/jbardin/scp.py")
11288 (commit (string-append "v" version))))
11289 (file-name (git-file-name name version))
11290 (sha256
11291 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
11292 (build-system pyproject-build-system)
11293 (arguments (list #:tests? #f)) ;tests require an SSH server
11294 (native-inputs (list python-setuptools))
11295 (propagated-inputs (list python-paramiko))
11296 (home-page "https://github.com/jbardin/scp.py")
11297 (synopsis "SCP protocol module for Python and Paramiko")
11298 (description
11299 "The scp module extends the Paramiko library to send and receive files
11300via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
11301 (license license:gpl2+)))
11302
11303(define-public python-rst-linker
11304 (package
11305 (name "python-rst-linker")
11306 (version "2.6.0")
11307 (source
11308 (origin
11309 (method git-fetch)
11310 (uri (git-reference
11311 (url "https://github.com/jaraco/rst.linker")
11312 (commit (string-append "v" version))))
11313 (file-name (git-file-name name version))
11314 (sha256
11315 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
11316 (build-system pyproject-build-system)
11317 (propagated-inputs (list python-jaraco-context))
11318 (native-inputs
11319 (list python-path
11320 python-jaraco-vcs
11321 python-pytest
11322 python-pytest-subprocess
11323 python-setuptools-scm
11324 python-setuptools))
11325 (home-page "https://github.com/jaraco/rst.linker")
11326 (synopsis "Sphinx plugin to add links and timestamps")
11327 (description
11328 "rst.linker automatically replaces text by a reStructuredText external
11329reference or timestamps. It's primary purpose is to augment the changelog,
11330but it can be used for other documents, too.")
11331 (license license:expat)))
11332
11333(define-public python-feedgenerator
11334 (package
11335 (name "python-feedgenerator")
11336 (version "2.1.0")
11337 (source
11338 (origin
11339 (method url-fetch)
11340 (uri (pypi-uri "feedgenerator" version))
11341 (sha256
11342 (base32
11343 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
11344 (build-system pyproject-build-system)
11345 (native-inputs
11346 (list python-pytest python-setuptools python-wheel))
11347 (propagated-inputs
11348 (list python-pytz))
11349 (home-page "https://github.com/getpelican/feedgenerator")
11350 (synopsis
11351 "Standalone version of Django's Atom/RSS feed generator")
11352 (description
11353 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11354which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11355 (license license:bsd-3)))
11356
11357(define-public python-lsp-jsonrpc
11358 (package
11359 (name "python-lsp-jsonrpc")
11360 (version "1.1.2")
11361 (source
11362 (origin
11363 (method url-fetch)
11364 (uri (pypi-uri "python-lsp-jsonrpc" version))
11365 (sha256
11366 (base32
11367 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11368 (build-system pyproject-build-system)
11369 (native-inputs
11370 (list python-pyflakes
11371 python-pytest
11372 python-setuptools
11373 python-setuptools-scm
11374 python-wheel))
11375 (propagated-inputs
11376 (list python-ujson))
11377 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11378 (synopsis "JSON RPC 2.0 server library")
11379 (description
11380 "This package provides a JSON RPC 2.0 server library for Python.")
11381 (license license:expat)))
11382
11383(define-public python-pydantic
11384 (package
11385 (name "python-pydantic")
11386 (version "2.12.5")
11387 (source
11388 (origin
11389 (method git-fetch)
11390 (uri (git-reference
11391 (url "https://github.com/samuelcolvin/pydantic")
11392 (commit (string-append "v" version))))
11393 (file-name (git-file-name name version))
11394 (sha256
11395 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11396 (build-system pyproject-build-system)
11397 (arguments
11398 (list
11399 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11400 #:test-flags
11401 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11402 (native-inputs
11403 (list tzdata-for-tests
11404 python-dirty-equals-bootstrap
11405 python-faker
11406 python-hatch-fancy-pypi-readme
11407 python-hatchling
11408 python-jsonschema
11409 python-pytest
11410 python-pytest-benchmark
11411 python-pytest-examples
11412 python-pytest-mock
11413 python-pytest-run-parallel
11414 python-pytz))
11415 (propagated-inputs
11416 (list python-annotated-types
11417 python-pydantic-core ;it's hard == requirement, keep it in sync
11418 python-typing-extensions
11419 python-typing-inspection))
11420 (home-page "https://github.com/samuelcolvin/pydantic")
11421 (synopsis "Python data validation and settings management")
11422 (description
11423 "Pydantic enforces type hints at runtime, and provides user friendly
11424errors when data is invalid.")
11425 (license license:expat)))
11426
11427;; It may be removed after 2026-01-05.
11428(define-deprecated/public-alias python-pydantic-2 python-pydantic)
11429
11430(define-public python-pydantic-core
11431 (package
11432 (name "python-pydantic-core")
11433 (version "2.41.5")
11434 (source
11435 (origin
11436 (method url-fetch)
11437 (uri (pypi-uri "pydantic_core" version))
11438 (sha256
11439 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11440 (build-system pyproject-build-system)
11441 (arguments
11442 (list
11443 #:imported-modules `(,@%cargo-build-system-modules
11444 ,@%pyproject-build-system-modules)
11445 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11446 (guix build pyproject-build-system)
11447 (guix build utils))
11448 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11449 #:test-flags
11450 #~(list "--ignore=tests/benchmarks"
11451 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11452 ;; python-pydantic-core -> python-pydantic ->
11453 ;; python-inline-snapshot -> python-pydantic-core
11454 "--ignore=tests/test_docstrings.py"
11455 "--ignore=tests/test_hypothesis.py"
11456 "--ignore=tests/validators/test_allow_partial.py"
11457 "--ignore=tests/validators/test_frozenset.py"
11458 "--ignore=tests/validators/test_list.py"
11459 "--ignore=tests/validators/test_set.py")
11460 #:phases
11461 #~(modify-phases %standard-phases
11462 (add-after 'unpack 'prepare-cargo-build-system
11463 (lambda args
11464 (for-each (lambda (phase)
11465 (format #t "Running cargo phase: ~a~%" phase)
11466 (apply (assoc-ref cargo:%standard-phases phase)
11467 #:cargo-target #$(cargo-triplet)
11468 args))
11469 '(unpack-rust-crates
11470 configure
11471 check-for-pregenerated-files
11472 patch-cargo-checksums)))))))
11473 (native-inputs
11474 (append
11475 (list maturin
11476 python-dirty-equals-bootstrap
11477 python-pytest
11478 python-pytest-benchmark ;TODO: disable in pyproject.toml
11479 python-pytest-mock
11480 python-pytest-timeout
11481 python-typing-inspection
11482 python-tzdata
11483 rust
11484 `(,rust "cargo"))
11485 (or (and=> (%current-target-system)
11486 (compose list make-rust-sysroot))
11487 '())))
11488 (inputs
11489 (cargo-inputs 'python-pydantic-core))
11490 (propagated-inputs
11491 (list python-typing-extensions))
11492 (home-page "https://github.com/pydantic/pydantic-core")
11493 (synopsis "Core validation logic for pydantic")
11494 (description "This package provides the core functionality for pydantic
11495validation and serialization.")
11496 (license license:expat)))
11497
11498(define-public python-pydantic-cli
11499 (package
11500 (name "python-pydantic-cli")
11501 (version "9.1.0")
11502 (source
11503 (origin
11504 (method git-fetch) ;for tests
11505 (uri (git-reference
11506 (url "https://github.com/mpkocher/pydantic-cli")
11507 (commit (string-append "v" version))))
11508 (file-name (git-file-name name version))
11509 (sha256
11510 (base32
11511 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11512 (build-system pyproject-build-system)
11513 (propagated-inputs
11514 (list python-pydantic))
11515 (native-inputs
11516 (list python-hatchling python-pytest))
11517 (home-page "https://github.com/mpkocher/pydantic-cli")
11518 (synopsis "Turn Pydantic defined data models into CLI tools")
11519 (description
11520 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11521Interfaces} via data models provided in the JSON format.")
11522 (license license:expat)))
11523
11524(define-public python-pydantic-extra-types
11525 (package
11526 (name "python-pydantic-extra-types")
11527 (version "2.10.6")
11528 (source
11529 (origin
11530 (method git-fetch)
11531 (uri (git-reference
11532 (url "https://github.com/pydantic/pydantic-extra-types")
11533 (commit (string-append "v" version))))
11534 (file-name (git-file-name name version))
11535 (sha256
11536 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11537 (build-system pyproject-build-system)
11538 (arguments
11539 (list
11540 ;; tests: 13079 passed, 1 deselected
11541 #:test-flags
11542 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11543 #~(list "--ignore=tests/test_s3.py"
11544 "--deselect=tests/test_coordinate.py::test_json_schema"
11545 ;; XXX: The most of the tests fail, pendulum is optional package
11546 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11547 ;; requires Rust.
11548 "--ignore=tests/test_pendulum_dt.py"
11549 "--ignore=tests/test_json_schema.py")
11550 #:phases
11551 #~(modify-phases %standard-phases
11552 (add-before 'check 'pre-check
11553 (lambda* (#:key inputs #:allow-other-keys)
11554 (setenv "TZ" "UTC")
11555 (setenv "TZDIR" (search-input-directory inputs
11556 "share/zoneinfo")))))))
11557 (native-inputs
11558 (list python-pytest
11559 python-hatchling
11560 tzdata-for-tests))
11561 (propagated-inputs
11562 (list python-pydantic
11563 python-typing-extensions
11564 ;; [optional]
11565 python-cron-converter
11566 ;; python-pendulum
11567 python-phonenumbers
11568 python-pycountry
11569 python-pymongo
11570 python-pytz
11571 python-semver
11572 python-tzdata
11573 python-ulid))
11574 (home-page "https://github.com/pydantic/pydantic-extra-types")
11575 (synopsis "Extra Pydantic types")
11576 (description "This package provides sxtra types for Pydantic.")
11577 (license license:expat)))
11578
11579(define-public python-pydantic-settings
11580 (package
11581 (name "python-pydantic-settings")
11582 (version "2.12.0")
11583 (source
11584 (origin
11585 (method url-fetch)
11586 (uri (pypi-uri "pydantic_settings" version))
11587 (sha256
11588 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11589 (build-system pyproject-build-system)
11590 (arguments
11591 (list
11592 ;; tests: 399 passed, 27 skipped
11593 #:test-flags
11594 ;; XXX: Ignore tests requiring python-ruff.
11595 #~(list "--ignore=tests/test_docs.py")
11596 #:phases
11597 #~(modify-phases %standard-phases
11598 (add-before 'check 'set-home
11599 (lambda _
11600 ;; FileNotFoundError: [Errno 2] No such file or directory:
11601 ;; '/homeless-shelter/
11602 (setenv "HOME" "/tmp"))))))
11603 (native-inputs
11604 (list python-hatchling
11605 python-pytest
11606 python-pytest-examples
11607 python-pytest-mock))
11608 (propagated-inputs
11609 (list python-dotenv
11610 python-pydantic
11611 python-typing-inspection
11612 ;; [optional]
11613 python-pyyaml
11614 python-tomli))
11615 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
11616 (synopsis "Settings management using Pydantic")
11617 (description
11618 "Pydantic Settings provides optional Pydantic features for loading a
11619settings or config class from environment variables or secrets files.")
11620 (license license:expat)))
11621
11622(define-public python-pydoc-markdown
11623 (package
11624 (name "python-pydoc-markdown")
11625 (version "4.8.2")
11626 (source
11627 (origin
11628 (method url-fetch)
11629 (uri (pypi-uri "pydoc_markdown" version))
11630 (sha256
11631 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
11632 (build-system pyproject-build-system)
11633 (arguments
11634 (list
11635 #:tests? #false ;there are none
11636 #:phases
11637 '(modify-phases %standard-phases
11638 ;; This is probably not a good idea, but it wants a rather old
11639 ;; version of docstring-parser.
11640 (add-after 'unpack 'relax-requirements
11641 (lambda _
11642 (substitute* "pyproject.toml"
11643 (("docstring-parser = .*")
11644 "docstring-parser = \"^0\"\n")))))))
11645 (propagated-inputs (list python-click
11646 python-databind-core
11647 python-databind-json
11648 python-docspec
11649 python-docspec-python
11650 python-docstring-parser
11651 python-jinja2
11652 python-nr-util
11653 python-pyyaml
11654 python-requests
11655 python-tomli
11656 python-tomli-w
11657 python-watchdog
11658 python-yapf))
11659 (native-inputs (list python-poetry-core))
11660 (home-page "https://pypi.org/project/pydoc-markdown/")
11661 (synopsis "Create Python API documentation in Markdown format")
11662 (description "Pydoc-Markdown is a tool to create Python API documentation
11663in Markdown format. Instead of executing your Python code like so many other
11664documentation tools, it parses it using docspec instead.")
11665 (license license:expat)))
11666
11667;; XXX: The project is deprecated upstream, still in use by some packages,
11668;; consider to remove when nothing depends on it.
11669(define-public python-pydocstyle
11670 (package
11671 (name "python-pydocstyle")
11672 (version "6.3.0")
11673 (source
11674 (origin
11675 (method git-fetch) ;no tests in PyPI archive
11676 (uri (git-reference
11677 (url "https://github.com/PyCQA/pydocstyle")
11678 (commit version)))
11679 (file-name (git-file-name name version))
11680 (sha256
11681 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
11682 (patches (search-patches
11683 "python-pydocstyle-add-support-for-pep701.patch"))))
11684 (build-system pyproject-build-system)
11685 (arguments
11686 (list
11687 ;; It tries to install with pip.
11688 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
11689 #:phases
11690 #~(modify-phases %standard-phases
11691 (add-after 'unpack 'set-version
11692 (lambda _
11693 (substitute* "pyproject.toml"
11694 (("0.0.0-dev") #$version)))))))
11695 (native-inputs
11696 (list python-poetry-core
11697 python-pytest
11698 python-tomli))
11699 (propagated-inputs
11700 (list python-six
11701 python-snowballstemmer))
11702 (home-page "https://github.com/PyCQA/pydocstyle/")
11703 (synopsis "Python docstring style checker")
11704 (description
11705 "This package provides a style checker for the Python Language
11706Server (PLS).")
11707 (license license:expat)))
11708
11709(define-public python-lsp-server
11710 (package
11711 (name "python-lsp-server")
11712 (version "1.14.0")
11713 (source
11714 (origin
11715 (method git-fetch)
11716 (uri (git-reference
11717 (url "https://github.com/python-lsp/python-lsp-server")
11718 (commit (string-append "v" version))))
11719 (file-name (git-file-name name version))
11720 (sha256
11721 (base32 "1dyp49x844c4mja0qg01nilsbi09w7526izsk3pi5zpylmhmvbk2"))
11722 (patches
11723 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
11724 (build-system pyproject-build-system)
11725 (arguments
11726 (list
11727 #:test-flags
11728 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
11729 "-k"
11730 (string-append
11731 "not test_concurrent_ws_requests " ; flaky
11732 "and not test_pyqt_completion " ; avoid pyqt5
11733 "and not test_pandas_completion")) ; avoid pandas
11734 #:phases
11735 #~(modify-phases %standard-phases
11736 (add-before 'check 'set-HOME
11737 (lambda _ (setenv "HOME" "/tmp"))))))
11738 (propagated-inputs
11739 (list python-black
11740 python-docstring-to-markdown
11741 python-flake8
11742 python-jedi
11743 python-lsp-jsonrpc
11744 python-mccabe
11745 python-pluggy
11746 python-pycodestyle
11747 python-pydocstyle
11748 python-pyflakes
11749 python-pylint
11750 python-rope
11751 python-ujson
11752 python-whatthepatch
11753 python-yapf))
11754 (native-inputs
11755 (list python-flaky
11756 python-matplotlib
11757 python-pytest
11758 python-setuptools
11759 python-setuptools-scm
11760 python-websockets))
11761 (home-page "https://github.com/python-lsp/python-lsp-server")
11762 (synopsis "Python implementation of the Language Server Protocol")
11763 (description
11764 "The Python Language Server @command{pylsp} is an implementation of the
11765Python 3 language specification for the Language Server Protocol (LSP).
11766This tool is used in text editing environments to provide a complete
11767and integrated feature-set for programming Python effectively.")
11768 (license license:expat)))
11769
11770(define-public python-black
11771 (package
11772 (name "python-black")
11773 (version "26.3.1")
11774 (source
11775 (origin
11776 (method git-fetch)
11777 (uri (git-reference
11778 (url "https://github.com/psf/black")
11779 (commit version)))
11780 (file-name (git-file-name name version))
11781 (sha256
11782 (base32 "1m2vxwajavhpg34zkwyg4qyhf0lfsbphm9lvqkikal1lr1cymknz"))))
11783 (build-system pyproject-build-system)
11784 (arguments
11785 (list
11786 ;; tests: 232 passed, 3 skipped, 4 subtests
11787 #:test-flags
11788 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
11789 ;; Diffs are not equal.
11790 "--deselect=tests/test_format.py::test_simple_format")
11791 #:phases
11792 #~(modify-phases %standard-phases
11793 (add-after 'patch-source-shebangs 'use-absolute-file-names
11794 (lambda* (#:key inputs #:allow-other-keys)
11795 (substitute* (find-files "tests" "\\.py$")
11796 (("#!/usr/bin/env python3")
11797 (string-append
11798 "#!" (search-input-file inputs "/bin/python3")))))))))
11799 (propagated-inputs
11800 (list python-aiohttp
11801 python-click
11802 python-mypy-extensions
11803 python-packaging
11804 python-pathspec
11805 python-platformdirs
11806 python-pytokens))
11807 (native-inputs
11808 (list python-pytest
11809 python-pytest-xdist
11810 python-hatch-fancy-pypi-readme
11811 python-hatch-vcs
11812 python-hatchling))
11813 (home-page "https://github.com/psf/black")
11814 (synopsis "The uncompromising code formatter")
11815 (description "Black is the uncompromising Python code formatter.")
11816 (license license:expat)))
11817
11818(define-public python-black-macchiato
11819 (package
11820 (name "python-black-macchiato")
11821 (version "1.3.0")
11822 (source
11823 (origin
11824 (method git-fetch)
11825 (uri (git-reference
11826 (url "https://github.com/wbolster/black-macchiato")
11827 (commit version)))
11828 (file-name (git-file-name name version))
11829 (sha256
11830 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
11831 (build-system pyproject-build-system)
11832 (arguments
11833 (list
11834 #:phases
11835 #~(modify-phases %standard-phases
11836 (add-after 'unpack 'ignore-failing-tests
11837 (lambda _
11838 (substitute* "test_macchiato.py"
11839 (("\\(.*\\n'\\)," all)
11840 (string-append "# " all))))))))
11841 (native-inputs (list python-pytest python-setuptools))
11842 (propagated-inputs (list python-black))
11843 (home-page "https://github.com/wbolster/black-macchiato")
11844 (synopsis "Partial @code{python-black} formatting")
11845 (description
11846 "This package is built on top the @code{python-black} code formatter to
11847enable formatting of partial files.")
11848 (license license:bsd-3)))
11849
11850(define-public python-blinker
11851 (package
11852 (name "python-blinker")
11853 (version "1.9.0")
11854 (source
11855 (origin
11856 (method url-fetch)
11857 (uri (pypi-uri "blinker" version))
11858 (sha256
11859 (base32
11860 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
11861 (build-system pyproject-build-system)
11862 (native-inputs
11863 (list python-flit-core
11864 python-pytest
11865 python-pytest-asyncio))
11866 (home-page "https://pythonhosted.org/blinker/")
11867 (synopsis "Fast, simple object-to-object and broadcast signaling")
11868 (description
11869 "Blinker provides a fast dispatching system that allows any number of
11870interested parties to subscribe to events, or \"signals\".")
11871 (license license:expat)))
11872
11873(define-public pelican
11874 (package
11875 (name "pelican")
11876 (version "4.11.0")
11877 (source
11878 (origin
11879 (method url-fetch)
11880 (uri (pypi-uri "pelican" version))
11881 (sha256
11882 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
11883 (build-system pyproject-build-system)
11884 (arguments
11885 (list
11886 #:test-flags #~(list "-k" (string-append
11887 ;; These tests failed with AssertionError.
11888 "not test_typogrify_ignore_filters"
11889 " and not test_typogrify_ignore_tags"
11890 " and not test_error_on_warning"))))
11891 (native-inputs
11892 (list python-anyio
11893 python-beautifulsoup4
11894 python-lxml
11895 python-pdm-backend
11896 python-pytest
11897 python-smartypants
11898 python-typogrify))
11899 (inputs
11900 (list python-blinker
11901 python-dateutil
11902 ;; Ignoring `guix lint` warning as python-docutils is used to support
11903 ;; reStructuredText processing at runtime.
11904 python-docutils
11905 python-feedgenerator
11906 python-jinja2
11907 python-ordered-set
11908 python-pygments
11909 python-rich
11910 python-tzdata
11911 python-unidecode
11912 python-watchfiles))
11913 (home-page "https://blog.getpelican.com/")
11914 (synopsis "Python-based static site publishing system")
11915 (description
11916 "Pelican is a tool to generate a static blog from reStructuredText,
11917Markdown input files, and more. Pelican uses Jinja2 for templating
11918and is very extensible.")
11919 (license license:agpl3+)))
11920
11921(define-public python-cykhash
11922 (package
11923 (name "python-cykhash")
11924 (version "2.0.1")
11925 (source
11926 (origin
11927 (method url-fetch)
11928 (uri (pypi-uri "cykhash" version))
11929 (sha256
11930 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
11931 (build-system pyproject-build-system)
11932 (arguments
11933 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
11934 (native-inputs
11935 (list python-cython
11936 python-setuptools))
11937 (home-page "https://github.com/realead/cykhash")
11938 (synopsis "Khash-sets and maps")
11939 (description
11940 "This package is a Cython wrapper for khash-sets/maps. It brings
11941functionality of
11942@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
11943Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
11944world is lacking the concept of a (hash-)set. This shortcoming is fixed and
11945efficient (memory- and speedwise compared to pandas) @code{unique} and
11946@code{isin} are implemented. Python-set/dict have a big memory-footprint.
11947For some datatypes the overhead can be reduced by using khash by factor 4-8.")
11948 (license license:expat)))
11949
11950(define-public python-cython
11951 ;; TODO: Move to python-build.
11952 (package
11953 (name "python-cython")
11954 (version "3.1.7")
11955 (source
11956 (origin
11957 (method url-fetch)
11958 (uri (pypi-uri "cython" version))
11959 (sha256
11960 (base32 "0gaslzb3virk4v6yh5a7dp6ka1lm267v994g8r25lck1702vjy3g"))))
11961 (build-system pyproject-build-system)
11962 (arguments
11963 (list
11964 #:test-backend #~'custom
11965 #:test-flags
11966 #~(list "runtests.py"
11967 "-vv"
11968 "-j" (number->string (parallel-job-count))
11969 "-x" (string-join
11970 (list "annotate_html"
11971 "Debugger"
11972 ;; It introduces cycle.
11973 "numpy_test"
11974 ;; It fails with AssertionError: Failed doctest test
11975 ;; for complex_numbers_cpp.double_abs.
11976 "complex_numbers_cpp"
11977 ;; This test fails when running on 24 cores.
11978 "cpp_stl_conversion"
11979 #$@(if (target-32bit?)
11980 ;; XXX: On 32-bit architectures, running the
11981 ;; parallel tests fails on many-core systems.
11982 ;; See: <https://github.com/cython/cython/issues/2807>.
11983 '("run.parallel"
11984 ;; Test cpp_stl_any.cast_test fails.
11985 ;; See: <https://github.com/cython/cython/issues/5928>.
11986 "cpp_stl_any")
11987 '())
11988 #$@(if (system-hurd?)
11989 '("test_class_ref"
11990 "test_compiler_directives"
11991 "test_lang_version")
11992 '()))
11993 "|"))
11994 #:phases
11995 #~(modify-phases %standard-phases
11996 (add-before 'check 'pre-check
11997 (lambda* (#:key tests? test-flags #:allow-other-keys)
11998 ;; Disable compiler optimizations to greatly reduce the running
11999 ;; time of the test suite.
12000 (setenv "CFLAGS" "-O0")
12001 ;; Some tests require access to "$HOME/.cython".
12002 (setenv "HOME" "/tmp"))))))
12003 (native-inputs
12004 (list libxcrypt
12005 python-setuptools
12006 python-wheel))
12007 ;; we need the full python package and not just the python-wrapper
12008 ;; because we need libpython3.3m.so
12009 (inputs
12010 (list python))
12011 (home-page "https://cython.org/")
12012 (synopsis "C extensions for Python")
12013 (description "Cython is an optimising static compiler for both the Python
12014programming language and the extended Cython programming language. It makes
12015writing C extensions for Python as easy as Python itself.")
12016 (license license:asl2.0)))
12017
12018(define-public python-cython-0
12019 (package
12020 (inherit python-cython)
12021 ;; It's the latest version of 0.29. See
12022 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
12023 (version "0.29.37")
12024 (source
12025 (origin
12026 (method url-fetch)
12027 (uri (pypi-uri "Cython" version))
12028 (sha256
12029 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
12030 (arguments
12031 (list
12032 ;; XXX: Tests are broken with [email protected], but dependent packages
12033 ;; build, so keep it until unnecessary.
12034 #:tests? #f
12035 #:test-backend #~'custom
12036 #:test-flags
12037 #~(list "runtests.py"
12038 "-vv"
12039 "-j" (number->string (parallel-job-count))
12040 ;; XXX: On 32-bit architectures, running the parallel tests
12041 ;; fails on many-core systems, see
12042 ;; <https://github.com/cython/cython/issues/2807>.
12043 #$@(if (target-32bit?)
12044 #~("-x" "run.parallel")
12045 #~())
12046 #$@(if (system-hurd?)
12047 #~("-x" "test_class_ref"
12048 "-x" "test_compiler_directives"
12049 "-x" "test_lang_version")
12050 #~())
12051 ;; This test fails when running on 24 cores.
12052 "-x" "cpp_stl_conversion")
12053 #:phases
12054 #~(modify-phases %standard-phases
12055 (add-after 'unpack 'fix-pyximport-python-3.12
12056 (lambda _
12057 (let ((importlib-util-load-dynamic "\
12058import importlib.util
12059from importlib.machinery import ExtensionFileLoader
12060
12061def load_dynamic(name, path):
12062 loader = ExtensionFileLoader(name, path)
12063 spec = importlib.util.spec_from_file_location(name, loader=loader)
12064 module = importlib.util.module_from_spec(spec)
12065 spec.loader.exec_module(module)
12066 return module
12067"))
12068 (substitute* "pyximport/pyximport.py"
12069 (("^import imp")
12070 importlib-util-load-dynamic)
12071 (("imp\\.load_dynamic")
12072 "load_dynamic")))))
12073 (add-before 'check 'pre-check
12074 ;; some tests require access to "$HOME/.cython"
12075 (lambda _
12076 (setenv "HOME" "/tmp")
12077 ;; Disable compiler optimizations to greatly reduce the running
12078 ;; time of the test suite.
12079 (setenv "CFLAGS" "-O0"))))))))
12080
12081(define-public python-cython-next
12082 (package
12083 (inherit python-cython)
12084 (version "3.2.2")
12085 (source
12086 (origin
12087 (method url-fetch)
12088 (uri (pypi-uri "cython" version))
12089 (sha256
12090 (base32 "0d0n0yyicr7icd4f5kn1wwbjqyad6j4m640xlqlk3ixchgad7bf3"))))))
12091
12092;; NOTE: when upgrading numpy please make sure that python-numba,
12093;; python-pandas and python-scipy still build, as these three packages are
12094;; often used together.
12095(define-public python-numpy
12096 (package
12097 (name "python-numpy")
12098 (version "2.3.1")
12099 (source
12100 (origin
12101 (method url-fetch)
12102 (uri (string-append
12103 "https://github.com/numpy/numpy/releases/download/v"
12104 version "/numpy-" version ".tar.gz"))
12105 (sha256
12106 (base32 "0aqx8hsw54wfp7iv0h0ljlpsygvmrmi3rjic6rsa6v92lhhaxj8y"))))
12107 (build-system pyproject-build-system)
12108 (arguments
12109 (list
12110 ;; tests: 47513 passed, 1740 skipped, 33 xfailed, 5 xpassed, 341 warnings
12111 #:modules '((guix build utils)
12112 (guix build pyproject-build-system)
12113 (ice-9 format))
12114 #:test-flags
12115 #~(list "-m" "not slow"
12116 "--numprocesses" (number->string (min 8 (parallel-job-count)))
12117 ;; See: <https://github.com/numpy/numpy/issues/27531>,
12118 ;; <https://github.com/numpy/numpy/issues/17685>,
12119 ;; <https://github.com/numpy/numpy/issues/17635>.
12120 "-k" "not test_api_importable")
12121 #:phases
12122 #~(modify-phases %standard-phases
12123 (add-after 'unpack 'fix-executable-paths
12124 (lambda _
12125 (substitute* "numpy/distutils/exec_command.py"
12126 (("'/bin/sh'")
12127 (format #f "~s" (which "bash"))))
12128 (substitute* "numpy/meson.build"
12129 ;; Relay on python from the PATH instead of full reference
12130 ;; stored in built wheel.
12131 (("'py.full_path\\(\\)'") "'python'"))))
12132 ;; This isn't architecture specific.
12133 ;; TODO: Remove this conditional and apply for all builds.
12134 #$@(if (target-ppc64le?)
12135 #~((add-after 'unpack 'patch-bin-true
12136 (lambda* (#:key inputs #:allow-other-keys)
12137 (substitute* "numpy/_core/tests/test_cpu_features.py"
12138 (("/bin/true")
12139 (search-input-file inputs "bin/true"))))))
12140 #~())
12141 (add-before 'build 'parallelize-build
12142 (lambda _
12143 (setenv "OMP_NUM_THREAD"
12144 (number->string (parallel-job-count)))
12145 (setenv "NPY_NUM_BUILD_JOBS"
12146 (number->string (parallel-job-count)))))
12147 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12148 ;; when the gfortran header is used. Remove gfortran from
12149 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12150 ;; <https://issues.guix.gnu.org/73439#45>.
12151 (add-after 'set-paths 'hide-gfortran
12152 (lambda* (#:key inputs #:allow-other-keys)
12153 (let ((gfortran (assoc-ref inputs "gfortran")))
12154 (setenv "CPLUS_INCLUDE_PATH"
12155 (string-join
12156 (delete (string-append gfortran "/include/c++")
12157 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12158 ":")))))
12159 (add-before 'build 'configure-blas
12160 (lambda* (#:key inputs #:allow-other-keys)
12161 (call-with-output-file "site.cfg"
12162 (lambda (port)
12163 (format port
12164 "[openblas]
12165libraries = openblas
12166library_dirs = ~a/lib
12167include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
12168 (replace 'check
12169 (lambda* (#:key tests? test-flags #:allow-other-keys)
12170 (when tests?
12171 (with-directory-excursion #$output
12172 (apply invoke "pytest" test-flags)))))
12173 ;; The executables provided by this package ('f2py' and 'numpy-config')
12174 ;; only depend on Python. By customizing the wrap phase we can ensure
12175 ;; that we don't add all Python packages listed in native-inputs to
12176 ;; the closure. This significantly reduces the overall closure size.
12177 ;;
12178 ;; See also <https://bugs.gnu.org/25235>.
12179 (replace 'wrap
12180 (lambda* (#:key inputs outputs #:allow-other-keys)
12181 (for-each
12182 (lambda (program)
12183 (wrap-program program
12184 `("GUIX_PYTHONPATH" ":" suffix
12185 ,(list (site-packages inputs outputs)))))
12186 (find-files (in-vicinity #$output "/bin"))))))))
12187 (native-inputs
12188 (list gfortran
12189 python-hypothesis
12190 python-meson
12191 python-pytest
12192 python-pytest-xdist
12193 python-setuptools
12194 python-typing-extensions))
12195 (home-page "https://numpy.org")
12196 (synopsis "Fundamental package for scientific computing with Python")
12197 (description "NumPy is the fundamental package for scientific computing
12198with Python. It contains among other things: a powerful N-dimensional array
12199object, sophisticated (broadcasting) functions, tools for integrating C/C++
12200and Fortran code, useful linear algebra, Fourier transform, and random number
12201capabilities.")
12202 (properties
12203 '((upstream-name . "numpy")))
12204 (license license:bsd-3)))
12205
12206(define-public python-numpy-1
12207 (package
12208 (inherit python-numpy)
12209 (name "python-numpy")
12210 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
12211 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
12212 ;; in upstream Meson.
12213 ;;
12214 ;; See:
12215 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
12216 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
12217 ;; - file <doc/source/building/understanding_meson.rst>
12218 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
12219 (source
12220 (origin
12221 (method url-fetch)
12222 (uri (string-append
12223 "https://github.com/numpy/numpy/releases/download/v"
12224 version "/numpy-" version ".tar.gz"))
12225 (sha256
12226 (base32
12227 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
12228 (patches (search-patches "python-numpy-gcc-14.patch"))))
12229 (arguments
12230 (list
12231 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
12232 #:modules '((guix build utils)
12233 (guix build pyproject-build-system)
12234 (ice-9 format))
12235 #:phases
12236 #~(modify-phases %standard-phases
12237 (add-after 'unpack 'delete-test-files
12238 (lambda _
12239 ;; These tests depend on older setuptools, see:
12240 ;; <https://github.com/numpy/numpy/issues/27531>.
12241 ;;
12242 ;; E ModuleNotFoundError: No module named
12243 ;; 'distutils.msvccompiler'
12244 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
12245 (delete-file "numpy/distutils/tests/test_system_info.py")))
12246 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12247 ;; when the gfortran header is used. Remove gfortran from
12248 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12249 ;; <https://issues.guix.gnu.org/73439#45>.
12250 (add-after 'set-paths 'hide-gfortran
12251 (lambda* (#:key inputs #:allow-other-keys)
12252 (let ((gfortran (assoc-ref inputs "gfortran")))
12253 (setenv "CPLUS_INCLUDE_PATH"
12254 (string-join
12255 (delete (string-append gfortran "/include/c++")
12256 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12257 ":")))))
12258 (add-before 'build 'relax-gcc-14-strictness
12259 (lambda _
12260 (setenv "CFLAGS"
12261 "-g -O2 -Wno-error=implicit-function-declaration")))
12262 (add-before 'build 'parallelize-build
12263 (lambda _
12264 (setenv "NPY_NUM_BUILD_JOBS"
12265 (number->string (parallel-job-count)))))
12266 (add-before 'build 'configure-blas
12267 (lambda* (#:key inputs #:allow-other-keys)
12268 (call-with-output-file "site.cfg"
12269 (lambda (port)
12270 (format port
12271 "\
12272[openblas]
12273libraries = openblas
12274library_dirs = ~a/lib
12275include_dirs = ~:*~a/include~%"
12276 (dirname (dirname
12277 (search-input-file
12278 inputs "include/openblas_config.h"))))))))
12279 (add-before 'build 'fix-executable-paths
12280 (lambda* (#:key inputs #:allow-other-keys)
12281 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
12282 ;; instead of /bin/sh.
12283 (substitute* "numpy/distutils/exec_command.py"
12284 (("'/bin/sh'")
12285 (format #f "~s" (search-input-file inputs "bin/bash"))))
12286 ;; Don't try to call '/bin/true' specifically.
12287 (substitute* "numpy/core/tests/test_cpu_features.py"
12288 (("/bin/true") (search-input-file inputs "bin/true")))))
12289 (replace 'check
12290 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
12291 (when tests?
12292 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
12293 "-j" (number->string (parallel-job-count))
12294 ;; Contrary to scipy, the runtests.py script of numpy
12295 ;; does *not* automatically provide -n when -j is used
12296 ;; (see: https://github.com/numpy/numpy/issues/21359).
12297 "--" "-n" (number->string (parallel-job-count))
12298 ;; Disable Pytest Warnings, they are resolved in the
12299 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
12300 ;; applied to fixtures have no effect,
12301 ;; DeprecationWarning.
12302 "-p" "no:warnings"
12303 "-k" (string-append
12304 ;; These tests may fail on 32-bit systems (see:
12305 ;; https://github.com/numpy/numpy/issues/18387).
12306 "not test_float_remainder_overflow "
12307 "and not test_pareto "
12308 ;; The 'test_rint_big_int' test fails on older
12309 ;; x86_64 CPUs such as the Core 2 Duo (see:
12310 ;; https://github.com/numpy/numpy/issues/22170).
12311 "and not test_rint_big_int "
12312 ;; They fail to detect compiler.
12313 "and not test_compile1 "
12314 "and not test_compile2 "
12315 ;; Due to disabled warnings
12316 "and not test_getattr_warning "
12317 "and not test_integer_signs "
12318 "and not test_implicit_cast_float_to_int_fails "
12319 "and not test_integer_signs "
12320 ;; The huge_array test is too large for 32-bit (see:
12321 ;; https://bugs.gentoo.org/843599 and
12322 ;; https://bugs.gentoo.org/846548).
12323 ;; TestKind.test_all is a Fortran type failure
12324 ;; that may be toolchain or environment related.
12325 #$@(if (or (target-x86?) (target-arm32?))
12326 `(" and not test_identityless_reduction_huge_array"
12327 " and not (TestKind and test_all)")
12328 '())
12329 ;; This test fails with a Fortran failure (16
12330 ;; expected but got -1), due to the fact that it
12331 ;; requires a 64-bit system.
12332 #$@(if (or (target-x86-32?) (target-arm32?))
12333 `(" and not test_int")
12334 '())
12335 ;; These tests fail when building from aarch64-linux.
12336 #$@(if (target-arm32?)
12337 `(" and not test_features"
12338 " and not test_unary_spurious_fpexception")
12339 '())
12340 ;; These tests seem to fail on machines without
12341 ;; an FPU is still under investigation upstream.
12342 ;; https://github.com/numpy/numpy/issues/20635
12343 #$@(if (target-riscv64?)
12344 `(" and not test_fp_noncontiguous")
12345 '())
12346 ;; They also fail with gcc-14
12347 " and not test_float"
12348 " and not test_fpclass"
12349
12350 ;; These tests fail with gcc-14
12351 " and not test_context_locality"
12352 " and not test_cosh"
12353 " and not test_default_policy_singleton"
12354 " and not test_exp_exceptions"
12355 " and not test_half_fpe"
12356 " and not test_owner_is_base"
12357 " and not test_policy_propagation"
12358 " and not test_set_policy"
12359 " and not test_sinh"
12360 " and not test_square_values"
12361 " and not test_sum"
12362 " and not test_switch_owner"
12363 " and not test_thread_locality"
12364
12365 ;; These tests depend on older setuptools, see:
12366 ;; <https://github.com/numpy/numpy/issues/27531>.
12367 " and not test_api_importable"
12368 " and not test_all_modules_are_expected_2")))))
12369 ;; See comment for custom python-numpy wrap phase above.
12370 (replace 'wrap
12371 (lambda* (#:key inputs outputs #:allow-other-keys)
12372 (for-each
12373 (lambda (program)
12374 (wrap-program program
12375 `("GUIX_PYTHONPATH" ":" suffix
12376 ,(list (site-packages inputs outputs)))))
12377 (find-files (in-vicinity #$output "/bin"))))))))
12378 (native-inputs
12379 (list python-hypothesis
12380 python-meson
12381 python-pytest
12382 python-pytest-xdist
12383 python-setuptools
12384 python-typing-extensions
12385 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12386 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12387 ;; <https://github.com/numpy/numpy/issues/24318>.
12388 gcc ;fevn.h c[++] include must precede fortran's
12389 gfortran))
12390 (inputs (list bash openblas))))
12391
12392(define-deprecated/public-alias python-numpy-2 python-numpy)
12393
12394(define-public python-numpysane
12395 (package
12396 (name "python-numpysane")
12397 (version "0.42")
12398 (source
12399 (origin
12400 (method git-fetch)
12401 (uri (git-reference
12402 (url "https://github.com/dkogan/numpysane.git")
12403 (commit (string-append "v" version))))
12404 (file-name (git-file-name name version))
12405 (sha256
12406 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
12407 (build-system pyproject-build-system)
12408 (arguments
12409 (list
12410 #:phases
12411 #~(modify-phases %standard-phases
12412 (add-after 'unpack 'patch
12413 (lambda* (#:key inputs outputs #:allow-other-keys)
12414 (let* ((numpy (assoc-ref inputs "python-numpy"))
12415 (site (site-packages inputs `(("out" . ,numpy)))))
12416 (substitute* "Makefile.common.header"
12417 ;; numpy 2.0 has this--but we don't use numpy 2.0.
12418 (("pkg-config --cflags-only-I numpy")
12419 (format #f "echo -I~a/numpy/core/include" site))))))
12420 (replace 'check
12421 (lambda _
12422 (setenv "CC"
12423 #$(cc-for-target))
12424 (invoke "make" "check"))))))
12425 (propagated-inputs (list python-numpy-1))
12426 (native-inputs (list perl pkg-config python-setuptools))
12427 (home-page "https://github.com/dkogan/numpysane")
12428 (synopsis "More-reasonable core functionality for numpy")
12429 (description
12430 "This package provides more-reasonable core functionality for numpy.
12431
12432A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12433
12434numpysane has:
12435@itemize
12436@item easier broadcasting
12437@item nicer array manipulation
12438@item array concatenation
12439@item manipulation of dimensions
12440@item broadcast-aware inner product
12441@item broadcast-aware outer product
12442@item broadcast-aware 2-norm
12443@item broadcast-aware matrix multiplication
12444@end itemize
12445")
12446 (license license:lgpl2.0+)))
12447
12448(define-public python-numpy-documentation
12449 (package
12450 (inherit python-numpy)
12451 (name "python-numpy-documentation")
12452 (arguments
12453 (list
12454 #:tests? #f ;we're only generating the documentation
12455 #:phases
12456 #~(modify-phases %standard-phases
12457 (add-after 'unpack 'avoid-external-deps
12458 (lambda _
12459 ;; XXX: Avoid search-button to avoid sphinx error
12460 ;; TemplateNotFound('search-button.html')
12461 (substitute* "doc/source/conf.py"
12462 (("\"search-button\",") ""))
12463 ;; XXX: Avoid theme-switcher to avoid sphinx error
12464 ;; TemplateNotFound('theme-switcher.html')
12465 (substitute* "doc/source/conf.py"
12466 (("\"theme-switcher\",") ""))
12467 ;; XXX: Avoid version-switcher because it depends on the value
12468 ;; of external https://numpy.org/doc/_static/versions.json
12469 (substitute* "doc/source/conf.py"
12470 (("\"version-switcher\",") ""))))
12471 (add-before 'build 'add-gnu-freefont-to-texmf
12472 (lambda _
12473 ;; XXX: The Sphinx-generated tex output specifies the GNU
12474 ;; FreeFont font to be searched via its extension, which uses
12475 ;; kpathsea instead of fontconfig and fail (see:
12476 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12477 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12478 ;; GUIX_TEXMF.
12479 (mkdir-p "texmf-dist/fonts/opentype/public")
12480 (symlink (string-append
12481 #$(this-package-native-input "font-gnu-freefont")
12482 "/share/fonts/opentype")
12483 (string-append
12484 (getcwd) "/"
12485 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12486 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12487 (getcwd) "/texmf-dist"))))
12488 (replace 'build
12489 (lambda _
12490 (chdir "doc")
12491 (let ((sphinxopts (string-append
12492 "SPHINXOPTS=-j"
12493 (number->string (parallel-job-count)))))
12494 ;; Do not treat warnings as errors.
12495 (substitute* "Makefile"
12496 ((" -WT ") " -T "))
12497 (setenv "HOME" "/tmp")
12498 ;; Build the PDF documentation.
12499 (invoke "make" "latex-build" sphinxopts)
12500 ;; FIXME: PDF build fails
12501 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12502 ;; Build the HTML documentation
12503 (invoke "make" "html" sphinxopts)
12504 ;; Build the Info documentation. The issues worked around
12505 ;; below can be tracked at
12506 ;; https://github.com/numpy/numpy/issues/12278.
12507 (substitute* "source/conf.py"
12508 ;; The root document should be "index", not "contents".
12509 (("\"contents\"") "'index'")
12510 ;; Disable Sphinx extensions that produce broken Texinfo.
12511 ((".*'numpydoc'.*") "")
12512 ((".*'sphinx.ext.autodoc'.*") "")
12513 ((".*'sphinx.ext.autosummary'.*") ""))
12514 (invoke "make" "info" sphinxopts))))
12515 (replace 'install
12516 (lambda _
12517 (let* ((data (string-append #$output "/share"))
12518 (doc (string-append data "/doc/numpy"))
12519 (html (string-append doc "/html"))
12520 (info (string-append data "/info")))
12521 ;; Install the HTML documentation.
12522 (mkdir-p html)
12523 (copy-recursively "build/html" html)
12524 ;; Install the PDF reference and user manuals.
12525 ;; FIXME:
12526 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12527 ;; (install-file "build/latex/numpy-user.pdf" doc)
12528 ;; Install the info manual.
12529 (install-file "build/texinfo/numpy.info" info)
12530 (symlink (string-append html "/_images")
12531 (string-append info "/numpy-figures"))))))))
12532 (native-inputs
12533 (list font-gnu-freefont
12534 perl
12535 python-breathe
12536 python-ipython
12537 python-jupyterlite-sphinx
12538 python-matplotlib
12539 python-numpy
12540 python-numpydoc
12541 python-pandas
12542 python-pydata-sphinx-theme
12543 python-scipy ;used by matplotlib
12544 python-setuptools
12545 python-sphinx
12546 python-sphinx-copybutton
12547 python-sphinx-design
12548 texinfo
12549 (texlive-local-tree
12550 (list texlive-cbfonts
12551 texlive-cm-super
12552 texlive-cmap
12553 texlive-expdlist
12554 texlive-fandol
12555 texlive-greek-fontenc
12556 texlive-latexmk
12557 texlive-polyglossia
12558 texlive-xetex
12559 texlive-xindy))))
12560 (inputs '())
12561 (propagated-inputs '())
12562 (synopsis "Documentation for the @code{python-numpy} package")
12563 (description "This package provides the complete NumPy documentation in
12564the Texinfo, and HTML formats.")))
12565
12566(define-public python-numpy-stl
12567 (package
12568 (name "python-numpy-stl")
12569 (version "3.2.0")
12570 (source
12571 (origin
12572 (method url-fetch)
12573 (uri (pypi-uri "numpy_stl" version))
12574 (sha256
12575 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12576 (build-system pyproject-build-system)
12577 (native-inputs
12578 (list python-cython
12579 python-pytest
12580 python-setuptools
12581 python-wheel))
12582 (propagated-inputs
12583 (list python-numpy
12584 python-utils))
12585 (home-page "https://github.com/WoLpH/numpy-stl/")
12586 (synopsis "Read, write and modify binary/ASCII STL files library")
12587 (description
12588 "Library to make reading, writing and modifying both binary and ascii STL
12589files, file format native to the stereolithography CAD software created by 3D
12590Systems, easy.")
12591 (license license:bsd-3)))
12592
12593(define-public python-npx
12594 (package
12595 (name "python-npx")
12596 (version "0.1.6")
12597 (source
12598 (origin
12599 (method git-fetch) ; no source archive in PyPI
12600 (uri (git-reference
12601 (url "https://github.com/sigma-py/npx")
12602 (commit (string-append "v" version))))
12603 (file-name (git-file-name name version))
12604 (sha256
12605 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
12606 (build-system pyproject-build-system)
12607 (native-inputs
12608 (list python-networkx
12609 python-pytest
12610 python-setuptools
12611 python-wheel))
12612 (propagated-inputs
12613 (list python-numpy))
12614 (home-page "https://github.com/nschloe/npx")
12615 (synopsis "Extensions for NumPy")
12616 (description "NumPy is a large library used everywhere in scientific
12617computing. That's why breaking backwards-compatibility comes at a
12618significant cost and is almost always avoided, even if the API of some
12619methods is arguably lacking. This package provides drop-in wrappers
12620\"fixing\" those.")
12621 (license license:bsd-3)))
12622
12623(define-public python-munch
12624 (package
12625 (name "python-munch")
12626 (version "4.0.0")
12627 (source
12628 (origin
12629 (method url-fetch)
12630 (uri (pypi-uri "munch" version))
12631 (sha256
12632 (base32
12633 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
12634 (build-system pyproject-build-system)
12635 (native-inputs
12636 (list python-astroid
12637 python-pytest
12638 python-setuptools
12639 python-wheel))
12640 (home-page "https://github.com/Infinidat/munch")
12641 (synopsis "Dot-accessible dictionary")
12642 (description "Munch is a dot-accessible dictionary similar to JavaScript
12643objects.")
12644 (license license:expat)))
12645
12646(define-public python-colormath2
12647 (package
12648 (name "python-colormath2")
12649 (version "3.0.3")
12650 (source
12651 (origin
12652 (method git-fetch)
12653 (uri (git-reference
12654 (url "https://github.com/bkmgit/python-colormath2")
12655 (commit version)))
12656 (file-name (git-file-name name version))
12657 (sha256
12658 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
12659 (build-system pyproject-build-system)
12660 (propagated-inputs (list python-networkx python-numpy))
12661 (native-inputs (list python-nose2 python-setuptools))
12662 (home-page "https://github.com/bkmgit/python-colormath2")
12663 (synopsis "Color math and conversion library")
12664 (description
12665 "This is a Python library for color math and conversions.")
12666 (license license:bsd-3)))
12667
12668(define-public python-pyspnego
12669 (package
12670 (name "python-pyspnego")
12671 (version "0.8.0")
12672 (source (origin
12673 (method url-fetch)
12674 (uri (pypi-uri "pyspnego" version))
12675 (sha256
12676 (base32
12677 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
12678 (build-system pyproject-build-system)
12679 (native-inputs
12680 (list python-pytest python-pytest-mock python-setuptools python-wheel))
12681 (propagated-inputs
12682 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
12683 (home-page "https://github.com/jborean93/pyspnego")
12684 (synopsis "Python SPNEGO library")
12685 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
12686Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
12687parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
12688readable format.")
12689 (license license:expat)))
12690
12691(define-public python-pygit2
12692 (package
12693 (name "python-pygit2")
12694 (version "1.18.2")
12695 (source
12696 (origin
12697 (method url-fetch)
12698 (uri (pypi-uri "pygit2" version))
12699 (sha256
12700 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
12701 (build-system pyproject-build-system)
12702 (propagated-inputs (list python-cffi libgit2))
12703 (native-inputs (list python-pytest python-setuptools python-wheel))
12704 (home-page "https://github.com/libgit2/pygit2")
12705 (synopsis "Python bindings for libgit2")
12706 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
12707 ;; GPL2.0 only, with linking exception.
12708 (license license:gpl2)))
12709
12710(define-public python-patiencediff
12711 (package
12712 (name "python-patiencediff")
12713 (version "0.2.15")
12714 (source
12715 (origin
12716 (method url-fetch)
12717 (uri (pypi-uri "patiencediff" version))
12718 (sha256
12719 (base32
12720 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
12721 (build-system pyproject-build-system)
12722 (arguments
12723 (list
12724 #:phases #~(modify-phases %standard-phases
12725 ;; Fails because bin/patiencediff expects two files to diff
12726 (delete 'sanity-check))))
12727 (native-inputs (list python-pytest python-setuptools python-wheel))
12728 (home-page "https://www.breezy-vcs.org/")
12729 (synopsis "Python implementation of the patiencediff algorithm")
12730 (description
12731 "This package contains a Python implementation of the @code{patiencediff}
12732algorithm. Patiencediff provides a good balance of performance, nice output for
12733humans, and implementation simplicity.")
12734 (license license:gpl2+)))
12735
12736(define-public python-merge3
12737 (package
12738 (name "python-merge3")
12739 (version "0.0.16")
12740 (source
12741 (origin
12742 (method git-fetch)
12743 (uri (git-reference
12744 (url "https://github.com/breezy-team/merge3")
12745 (commit (string-append "v" version))))
12746 (file-name (git-file-name name version))
12747 (sha256
12748 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
12749 (build-system pyproject-build-system)
12750 (arguments (list #:test-backend #~'unittest))
12751 (native-inputs (list python-setuptools))
12752 (home-page "https://github.com/breezy-team/merge3")
12753 (synopsis "Python implementation of 3-way merge")
12754 (description "This Python library implements 3-way merge for text.")
12755 (license license:gpl2+)))
12756
12757(define-public python-fancycompleter
12758 (package
12759 (name "python-fancycompleter")
12760 (version "0.9.1")
12761 (source
12762 (origin
12763 (method git-fetch)
12764 (uri (git-reference
12765 (url "https://github.com/pdbpp/fancycompleter")
12766 (commit version)))
12767 (file-name (git-file-name name version))
12768 (sha256
12769 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
12770 (build-system pyproject-build-system)
12771 (arguments
12772 (list
12773 #:phases
12774 #~(modify-phases %standard-phases
12775 (add-after 'unpack 'fix-setup.py
12776 (lambda _
12777 (substitute* "setup.py"
12778 ((".*setupmeta.*")
12779 "")
12780 (("versioning=.*")
12781 (string-append "version='" #$version "',"))
12782 ((".*pyrepl.*") ; broken on Python 3
12783 "")))))))
12784 (native-inputs (list python-pytest python-setuptools))
12785 (home-page "https://github.com/pdbpp/fancycompleter")
12786 (synopsis "TAB completion library for Python")
12787 (description
12788 "@code{fancycompleter} is a module that adds TAB completion to the
12789interactive prompt. It is an extension of the @code{rlcompleter} module from
12790the standard Python library.")
12791 (license license:bsd-3)))
12792
12793(define-public python-ipdb
12794 (package
12795 (name "python-ipdb")
12796 (version "0.13.13")
12797 (source
12798 (origin
12799 (method git-fetch)
12800 (uri (git-reference
12801 (url "https://github.com/gotcha/ipdb")
12802 (commit version)))
12803 (file-name (git-file-name name version))
12804 (sha256
12805 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
12806 (build-system pyproject-build-system)
12807 (arguments (list #:test-backend #~'unittest))
12808 (native-inputs (list python-setuptools))
12809 (propagated-inputs (list python-ipython python-toml python-decorator))
12810 (home-page "https://github.com/gotcha/ipdb")
12811 (synopsis "IPython-enhanced Python debugger (pdb)")
12812 (description
12813 "@code{ipdb} exports functions to access the IPython debugger, which
12814features tab completion, syntax highlighting, better tracebacks and better
12815introspection than Python's standard @command{pdb} debugger, with which it
12816shares the same interface.")
12817 (license license:bsd-3)))
12818
12819(define-public python-ipfsspec
12820 (package
12821 (name "python-ipfsspec")
12822 (version "0.4.0")
12823 (source
12824 (origin
12825 (method url-fetch)
12826 (uri (pypi-uri "ipfsspec" version))
12827 (sha256
12828 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
12829 (build-system pyproject-build-system)
12830 (arguments
12831 (list
12832 #:test-flags
12833 '(list "-m not local_gw"
12834 ;; Require local gateway
12835 "--ignore=test/test_gateway.py"
12836 ;; Require internet
12837 "--ignore=test/test_async.py"
12838 "--ignore=test/test_ipfs.py")))
12839 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
12840 (native-inputs
12841 (list python-pytest
12842 python-pytest-asyncio
12843 python-setuptools
12844 python-wheel))
12845 (home-page "https://github.com/fsspec/ipfsspec")
12846 (synopsis "Read-only implementation of fsspec for IPFS")
12847 (description "This package provides a read-only implementation of
12848@code{fsspec} for IPFS.")
12849 (license license:expat)))
12850
12851(define-public python-pdftotext
12852 (package
12853 (name "python-pdftotext")
12854 (version "3.0.0")
12855 (source
12856 (origin
12857 (method url-fetch)
12858 (uri (pypi-uri "pdftotext" version))
12859 (sha256
12860 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
12861 (build-system pyproject-build-system)
12862 (native-inputs (list python-pytest python-setuptools python-wheel))
12863 (inputs (list poppler))
12864 (home-page "https://github.com/jalan/pdftotext")
12865 (synopsis "Simple PDF text extraction")
12866 (description "Pdftotext is a Python library of PDF text extraction.")
12867 (license license:expat)))
12868
12869(define-public python-pluginbase
12870 (package
12871 (name "python-pluginbase")
12872 (version "1.0.1")
12873 (source
12874 (origin
12875 (method git-fetch)
12876 (uri (git-reference
12877 (url "https://github.com/mitsuhiko/pluginbase")
12878 (commit (string-append "v" version))))
12879 (file-name (git-file-name name version))
12880 (sha256
12881 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
12882 (build-system pyproject-build-system)
12883 (arguments
12884 (list
12885 #:phases
12886 #~(modify-phases %standard-phases
12887 (replace 'check
12888 (lambda* (#:key tests? #:allow-other-keys)
12889 (when tests?
12890 (invoke "make" "test")))))))
12891 (native-inputs (list python-pytest python-setuptools))
12892 (home-page "https://github.com/mitsuhiko/pluginbase")
12893 (synopsis "Simple but flexible plugin system for Python")
12894 (description
12895 "PluginBase is a library useful in the development of flexible plugin
12896systems in Python.")
12897 (license license:bsd-3)))
12898
12899(define-public python-node-semver
12900 (package
12901 (name "python-node-semver")
12902 (version "0.8.1")
12903 (source
12904 (origin
12905 (method git-fetch)
12906 (uri (git-reference
12907 (url "https://github.com/podhmo/python-node-semver")
12908 (commit version)))
12909 (file-name (git-file-name name version))
12910 (sha256
12911 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
12912 (build-system pyproject-build-system)
12913 (native-inputs (list python-pytest python-setuptools))
12914 (home-page "https://github.com/podhmo/python-node-semver")
12915 (synopsis "Python port of node-semver")
12916 (description
12917 "This module provides a Python version of node-semver, a semantic version
12918parser for Node.js.")
12919 (license license:expat)))
12920
12921(define-public python-norns
12922 (package
12923 (name "python-norns")
12924 (version "0.1.6")
12925 (source
12926 (origin
12927 (method git-fetch)
12928 (uri (git-reference
12929 (url "https://github.com/simonvh/norns")
12930 (commit version)))
12931 (file-name (git-file-name name version))
12932 (sha256
12933 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
12934 (patches
12935 (search-patches "python-norns-nose.patch"))))
12936 (build-system pyproject-build-system)
12937 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
12938 (native-inputs (list python-setuptools))
12939 (home-page "https://github.com/simonvh/norns")
12940 (synopsis "Simple YAML-based config module")
12941 (description "This package provides a simple YAML-based config module.")
12942 (license license:expat)))
12943
12944(define-public python-patch-ng
12945 (package
12946 (name "python-patch-ng")
12947 (version "1.18.1")
12948 (source
12949 (origin
12950 (method git-fetch)
12951 (uri (git-reference
12952 (url "https://github.com/conan-io/python-patch-ng")
12953 (commit version)))
12954 (file-name (git-file-name name version))
12955 (sha256
12956 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
12957 (build-system pyproject-build-system)
12958 (arguments
12959 (list
12960 #:test-backend #~'custom
12961 #:test-flags #~(list "tests/run_tests.py" "-v")))
12962 (native-inputs (list python-pytest python-setuptools))
12963 (home-page "https://github.com/conan-io/python-patch-ng")
12964 (synopsis "Python library to parse and apply unified diffs")
12965 (description
12966 "Patch NG (New Generation) is a command and Python library to parse and
12967apply unified diffs. It has features such as:
12968@itemize
12969@item automatic correction of common patch formatting corruption
12970@item patch format detection (SVN, Hg, Git)
12971@item nice diffstat histogram.
12972@end itemize")
12973 (license license:expat)))
12974
12975(define-public python-numpydoc
12976 (package
12977 (name "python-numpydoc")
12978 (version "1.10.0")
12979 (source
12980 (origin
12981 (method url-fetch)
12982 (uri (pypi-uri "numpydoc" version))
12983 (sha256
12984 (base32
12985 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
12986 (build-system pyproject-build-system)
12987 (arguments
12988 (list
12989 #:test-flags
12990 '(list "numpydoc/tests"
12991 "-k" (string-append
12992 ;; TODO: unclear why these fail.
12993 "not test_MyClass and not test_my_function "
12994 ;; This test compares installed vs source absolute file
12995 ;; names.
12996 "and not test_source_file_name_with_properties"))))
12997 (propagated-inputs (list python-sphinx python-tomli))
12998 (native-inputs
12999 (list python-matplotlib python-pytest python-setuptools))
13000 (home-page "https://pypi.org/project/numpydoc/")
13001 (synopsis "Numpy's Sphinx extensions")
13002 (description "Sphinx extension to support docstrings in Numpy format.")
13003 (license license:bsd-2)))
13004
13005(define-public python-numexpr
13006 (package
13007 (name "python-numexpr")
13008 (version "2.14.1")
13009 (source
13010 (origin
13011 (method url-fetch)
13012 (uri (pypi-uri "numexpr" version))
13013 (sha256
13014 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
13015 (build-system pyproject-build-system)
13016 (arguments
13017 (list
13018 ;; tests: 6039 passed, 8 warnings
13019 #:phases
13020 #~(modify-phases %standard-phases
13021 (replace 'check
13022 (lambda* (#:key tests? test-flags #:allow-other-keys)
13023 (when tests?
13024 (with-directory-excursion #$output
13025 (apply invoke "pytest" "-vv" test-flags))))))))
13026 (native-inputs
13027 (list python-pytest
13028 python-setuptools))
13029 (propagated-inputs
13030 (list python-numpy))
13031 (home-page "https://github.com/pydata/numexpr")
13032 (synopsis "Fast numerical expression evaluator for NumPy")
13033 (description
13034 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
13035expressions that operate on arrays are accelerated and use less memory than
13036doing the same calculation in Python. In addition, its multi-threaded
13037capabilities can make use of all your cores, which may accelerate
13038computations, most specially if they are not memory-bounded (e.g. those using
13039transcendental functions).")
13040 (license license:expat)))
13041
13042(define-public python-cycler
13043 (package
13044 (name "python-cycler")
13045 (version "0.12.1")
13046 (source
13047 (origin
13048 (method git-fetch) ;no tests in PyPI archive
13049 (uri (git-reference
13050 (url "https://github.com/matplotlib/cycler")
13051 (commit (string-append "v" version))))
13052 (file-name (git-file-name name version))
13053 (sha256
13054 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
13055 (build-system pyproject-build-system)
13056 (native-inputs
13057 (list python-pytest
13058 python-setuptools))
13059 (home-page "https://matplotlib.org/cycler/")
13060 (synopsis "Composable keyword argument iterator")
13061 (description
13062 "When using @code{matplotlib} and plotting more than one line, it is
13063common to want to be able to want to be able to cycle over one or more artist
13064styles; but the plotting logic can quickly become involved.
13065To address this and enable easy cycling over arbitrary @code{kwargs}, the
13066@code{Cycler} class was developed.")
13067 (license license:bsd-3)))
13068
13069(define-public python-colorspacious
13070 (package
13071 (name "python-colorspacious")
13072 (version "1.1.2")
13073 (source
13074 (origin
13075 (method git-fetch)
13076 (uri (git-reference
13077 (url "https://github.com/njsmith/colorspacious")
13078 (commit (string-append "v" version))))
13079 (file-name (git-file-name name version))
13080 (sha256
13081 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
13082 (build-system pyproject-build-system)
13083 (arguments (list #:tests? #f)) ; No tests.
13084 (propagated-inputs (list python-numpy))
13085 (native-inputs (list python-pytest python-setuptools))
13086 (home-page "https://github.com/njsmith/colorspacious")
13087 (synopsis "Python library for colorspace conversions")
13088 (description
13089 "@code{colorspacious} is a Python library that lets you convert between
13090colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
13091 (license license:expat)))
13092
13093(define-public python-propcache
13094 (package
13095 (name "python-propcache")
13096 (version "0.2.1")
13097 (source
13098 (origin
13099 (method url-fetch)
13100 (uri (pypi-uri "propcache" version))
13101 (sha256
13102 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
13103 (build-system pyproject-build-system)
13104 (arguments
13105 (list
13106 #:test-flags
13107 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13108 "--ignore=tests/test_benchmarks.py")
13109 #:phases
13110 '(modify-phases %standard-phases
13111 (add-after 'unpack 'patch-build-system
13112 (lambda _
13113 ;; XXX: I don't know how to tell it to build the extensions in
13114 ;; place.
13115 (substitute* "packaging/pep517_backend/_backend.py"
13116 (("build_inplace=False") "build_inplace=True")))))))
13117 (native-inputs
13118 (list python-cython
13119 python-expandvars
13120 python-pytest
13121 python-pytest-xdist
13122 python-setuptools
13123 python-tomli))
13124 (home-page "https://github.com/aio-libs/propcache")
13125 (synopsis "Accelerated property cache")
13126 (description "The module provides a fast implementation of cached
13127properties for Python 3.9+.")
13128 (license license:asl2.0)))
13129
13130(define-public python-proto-matcher
13131 (package
13132 (name "python-proto-matcher")
13133 (version "0.0.3")
13134 (source
13135 (origin
13136 (method git-fetch)
13137 (uri (git-reference
13138 (url "https://github.com/dayfine/proto-matcher")
13139 (commit version)))
13140 (file-name (git-file-name name version))
13141 (sha256
13142 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
13143 (build-system pyproject-build-system)
13144 (native-inputs (list python-pytest python-setuptools))
13145 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
13146 (propagated-inputs (list python-protobuf python-pyhamcrest))
13147 (home-page "https://github.com/dayfine/proto-matcher")
13148 (synopsis "PyHamcrest test matchers for protocol buffers")
13149 (description
13150 "This package provides the following PyHamcrest test matchers, that
13151enable matching a protocol buffer message:
13152@table @code
13153@item equals_proto
13154Test the argument equals the given protobuf message.
13155@item approximately
13156Test the argument equals the given protobuf message, while comparing any float
13157field using approximation.
13158@item ignoring_field_paths
13159Test the argument equals the given protobuf message, while ignoring those
13160fields specified in the field paths.
13161@item ignoring_repeated_field_ordering
13162Test the argument equals the given protobuf message, ignoring the ordering of
13163any repeated field.
13164@item partially
13165Test the argument partially equals the given protobuf message, i.e. if a field
13166is in the argument but not in the expected message, it's ignored in the
13167comparison.
13168@end table")
13169 (license license:asl2.0)))
13170
13171(define-public python-matplotlib
13172 (package
13173 (name "python-matplotlib")
13174 (version "3.10.8")
13175 (source
13176 (origin
13177 (method git-fetch)
13178 (uri (git-reference
13179 (url "https://github.com/matplotlib/matplotlib")
13180 (commit (string-append "v" version))))
13181 (file-name (git-file-name name version))
13182 (sha256
13183 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
13184 (build-system pyproject-build-system)
13185 (arguments
13186 (list
13187 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
13188 #:configure-flags
13189 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
13190 "-Dsystem-freetype=true"
13191 "-Dsystem-qhull=true"))
13192 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
13193 #:test-flags
13194 #~(list "-m" "not network"
13195 "-n" (number->string (parallel-job-count))
13196 ;; Run the installed tests, which is what we want since not
13197 ;; everything gets built in the source directory.
13198 "--pyargs" "matplotlib"
13199 "-k"
13200 (string-join
13201 (list
13202 ;; XXX: Disable all image comparison tests because we're using
13203 ;; a newer version of FreeType than matplotlib expects. This
13204 ;; leads to minor differences throughout the tests.
13205 "not image_comparison"
13206 "check_figures_equal"
13207 "png" ;disables many problematic image tests
13208 "test_figure_legend_outside"
13209 "test_ft2font_get_kerning"
13210 "test_normal_axes"
13211 "test_get_tightbbox_polar"
13212 ;; The invisible line ordering test fails due to a too short
13213 ;; timeout (see:
13214 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
13215 "test_invisible_Line_rendering"
13216 ;; The determinism check test is not deterministic (see:
13217 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
13218 "test_determinism_check")
13219 " and not "))
13220 #:phases
13221 #~(modify-phases %standard-phases
13222 (add-after 'unpack 'patch-commands
13223 (lambda _
13224 (substitute* "lib/matplotlib/tests/test_animation.py"
13225 (("/bin/sh") (which "sh")))))
13226 (add-after 'unpack 'patch-dlopen
13227 (lambda* (#:key inputs #:allow-other-keys)
13228 (substitute* "src/_c_internal_utils.cpp"
13229 (("libX11.so.6")
13230 (search-input-file inputs "lib/libX11.so.6")))))
13231 (add-before 'build 'configure-environment
13232 (lambda* (#:key inputs #:allow-other-keys)
13233 ;; Fix rounding errors when using the x87 FPU.
13234 (when (string-prefix? "i686" #$(%current-system))
13235 (setenv "CFLAGS" "-ffloat-store"))))
13236 (add-before 'check 'chdir
13237 (lambda _
13238 ;; Step out of the source directory to avoid interference.
13239 (chdir "/tmp"))))))
13240 (propagated-inputs
13241 (list python-contourpy
13242 python-cycler
13243 python-dateutil
13244 python-fonttools-minimal
13245 python-importlib-resources
13246 python-kiwisolver
13247 python-numpy
13248 python-packaging
13249 python-pillow
13250 python-pyparsing
13251 `(,python "tk")))
13252 (inputs
13253 (list cairo
13254 freetype
13255 glib
13256 libpng
13257 qhull
13258 tcl
13259 tk))
13260 (native-inputs
13261 (list pkg-config
13262 python-meson
13263 pybind11-2
13264 python-pytest
13265 python-pytest-timeout
13266 python-pytest-xdist
13267 python-setuptools
13268 python-setuptools-scm))
13269 (home-page "https://matplotlib.org/")
13270 (synopsis "2D plotting library for Python")
13271 (description
13272 "Matplotlib is a Python 2D plotting library which produces publication
13273quality figures in a variety of hardcopy formats and interactive environments
13274across platforms. Matplotlib can be used in Python scripts, the python and
13275ipython shell, web application servers, and six graphical user interface
13276toolkits.")
13277 (license license:psfl)))
13278
13279(define-public python-matplotlib-documentation
13280 (package
13281 (inherit python-matplotlib)
13282 (name "python-matplotlib-documentation")
13283 (arguments
13284 (list
13285 #:tests? #f ;we're only generating documentation
13286 #:phases
13287 #~(modify-phases %standard-phases
13288 (add-after 'unpack 'avoid-external-deps
13289 (lambda _
13290 ;; XXX: Avoid theme-switcher to avoid sphinx error
13291 ;; TemplateNotFound('theme-switcher.html')
13292 ;; XXX: Avoid version-switcher because it depends on an
13293 ;; external file, and we pack only one version anyway.
13294 (substitute* "doc/conf.py"
13295 (("\
13296\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
13297 "\"navbar_end\": ["))))
13298 (replace 'build
13299 (lambda _
13300 (setenv "HOME" "/tmp")
13301 (chdir "doc")
13302 (invoke "make" "html" "info"
13303 ;; Don't abort on warnings; build in parallel.
13304 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
13305 (replace 'install
13306 (lambda _
13307 (let* ((data (string-append #$output "/share"))
13308 (doc (string-append data "/doc/matplotlib"))
13309 (info (string-append data "/info"))
13310 (html (string-append doc "/html")))
13311 (mkdir-p html)
13312 (copy-recursively "build/html" html)
13313 (install-file "build/texinfo/matplotlib.info" info)
13314 ;; The "matplotlib-figures" directory contains are a subset of
13315 ;; the images produced for the html target; simply create a
13316 ;; symlink to it, saving about 11 MiB.
13317 (symlink (string-append html "/_images")
13318 (string-append info "/matplotlib-figures"))))))))
13319 ;; Move all propagated inputs to inputs. *-documentation packages are
13320 ;; expected to be installed as standalone leaf packages, and not as
13321 ;; libraries with propagated inputs.
13322 (propagated-inputs '())
13323 (inputs (append
13324 (package-inputs python-matplotlib)
13325 (package-propagated-inputs python-matplotlib)))
13326 (native-inputs
13327 (list ffmpeg ;for matplotlib animation support
13328 graphviz
13329 inkscape/pinned
13330 python-colorspacious
13331 python-ipython
13332 python-ipykernel
13333 python-ipywidgets
13334 python-matplotlib
13335 python-mpl-sphinx-theme
13336 python-numpydoc
13337 python-pyyaml
13338 python-scipy
13339 python-setuptools
13340 ;; XXX: investigate how to build using a newer version of sphinx.
13341 python-sphinx-6
13342 python-sphinx-copybutton
13343 python-sphinx-design
13344 python-sphinx-gallery
13345 python-sphinx-tags
13346 python-sphinxcontrib-svg2pdfconverter
13347 python-sphinxcontrib-video
13348 texinfo
13349 texlive-dvipng-bin
13350 (texlive-local-tree
13351 (list texlive-amsfonts
13352 texlive-amsmath
13353 texlive-babel
13354 texlive-cm-super
13355 texlive-etoolbox
13356 texlive-expdlist
13357 texlive-fontspec
13358 texlive-times
13359 texlive-type1cm
13360 texlive-underscore
13361 texlive-unicode-math))))
13362 (synopsis "Documentation for the @code{python-matplotlib} package")))
13363
13364(define-public python-matplotlib-inline
13365 (package
13366 (name "python-matplotlib-inline")
13367 (version "0.1.7")
13368 (source
13369 (origin
13370 (method url-fetch)
13371 (uri (pypi-uri "matplotlib_inline" version))
13372 (sha256
13373 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13374 (build-system pyproject-build-system)
13375 (arguments
13376 (list
13377 ;; Tests disabled because of a circular dependency with IPython.
13378 #:tests? #f
13379 #:phases
13380 #~(modify-phases %standard-phases
13381 ;; Disabled because of a circular dependency with IPython.
13382 (delete 'sanity-check))))
13383 (native-inputs
13384 (list python-setuptools))
13385 (propagated-inputs
13386 (list python-matplotlib
13387 python-traitlets))
13388 (home-page "https://github.com/ipython/matplotlib-inline")
13389 (synopsis "Inline Matplotlib backend for Jupyter")
13390 (description
13391 "This package provides a Matplotlib inline back-end for IPython and
13392Jupyter.")
13393 (license license:bsd-3)))
13394
13395(define-public python-matplotlib-venn
13396 (package
13397 (name "python-matplotlib-venn")
13398 (version "1.1.2")
13399 (source
13400 (origin
13401 (method url-fetch)
13402 (uri (pypi-uri "matplotlib-venn" version))
13403 (sha256
13404 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13405 (build-system pyproject-build-system)
13406 (native-inputs (list python-pytest
13407 python-setuptools
13408 python-shapely
13409 python-wheel))
13410 (propagated-inputs
13411 (list python-matplotlib python-numpy python-scipy))
13412 (home-page "https://github.com/konstantint/matplotlib-venn")
13413 (synopsis "Plot area-proportional Venn diagrams")
13414 (description
13415 "This package provides tools for plotting area-proportional two- and
13416three-way Venn diagrams in @code{matplotlib}.")
13417 (license license:expat)))
13418
13419(define-public python-matplotx
13420 (package
13421 (name "python-matplotx")
13422 (version "0.3.10")
13423 (source
13424 (origin
13425 (method git-fetch)
13426 (uri (git-reference
13427 (url "https://github.com/nschloe/matplotx")
13428 (commit (string-append "v" version))))
13429 (file-name (git-file-name name version))
13430 (sha256
13431 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13432 (build-system pyproject-build-system)
13433 (arguments
13434 (list
13435 #:test-flags
13436 ;; This test fails with ValueError: not enough values to unpack.
13437 #~(list "--deselect" "tests/test_spy.py::test_cli"
13438 ;; XXX: unknown failure
13439 "--deselect" "tests/test_spy.py::test_png")))
13440 (propagated-inputs
13441 (list python-matplotlib
13442 python-numpy
13443 ;; optional dependencies
13444 python-networkx
13445 python-pypng
13446 python-scipy))
13447 (native-inputs (list python-imageio
13448 python-meshzoo
13449 python-pytest
13450 python-scikit-fem
13451 python-setuptools
13452 python-wheel))
13453 (home-page "https://github.com/nschloe/matplotx")
13454 (synopsis "Minimal matplotlib styles")
13455 (description
13456 "This package includes some extensions for Matplotlib to create
13457clean plots with a minimalistic style.")
13458 (license license:expat)))
13459
13460(define-public python-cplot
13461 (package
13462 (name "python-cplot")
13463 (version "0.9.3")
13464 (source
13465 (origin
13466 (method git-fetch) ;for tests
13467 (uri (git-reference
13468 (url "https://github.com/nschloe/cplot")
13469 (commit (string-append "v" version))))
13470 (file-name (git-file-name name version))
13471 (sha256
13472 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13473 (build-system pyproject-build-system)
13474 (native-inputs
13475 (list python-pytest
13476 python-setuptools
13477 python-wheel))
13478 (propagated-inputs
13479 (list python-matplotlib
13480 python-matplotx
13481 python-npx
13482 python-numpy))
13483 (home-page "https://github.com/nschloe/cplot")
13484 (synopsis "Plot complex-valued functions")
13485 (description "@code{cplot} is a Python library for plotting
13486complex-valued functions.")
13487 (license license:gpl3+)))
13488
13489(define-public python-cppheaderparser
13490 (package
13491 (name "python-cppheaderparser")
13492 (version "2.7.4")
13493 (source
13494 (origin
13495 (method url-fetch)
13496 (uri (pypi-uri "CppHeaderParser" version))
13497 (sha256
13498 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13499 (build-system pyproject-build-system)
13500 (arguments
13501 (list
13502 #:tests? #f)) ; no tests
13503 (propagated-inputs (list python-ply))
13504 (native-inputs (list python-setuptools python-wheel))
13505 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13506 (synopsis
13507 "Parse C++ header files and generate a data structure representing the class")
13508 (description
13509 "CppHeaderParser is a pure python module that will parse C++ header files
13510and generate a data structure representing the class.")
13511 (license license:bsd-3)))
13512
13513(define-public python-cppy
13514 (package
13515 (name "python-cppy")
13516 (version "1.3.1")
13517 (source
13518 (origin
13519 (method url-fetch)
13520 (uri (pypi-uri "cppy" version))
13521 (sha256
13522 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
13523 (build-system pyproject-build-system)
13524 (native-inputs
13525 (list python-pytest
13526 python-setuptools
13527 python-setuptools-scm
13528 python-wheel))
13529 (home-page "https://github.com/nucleic/cppy")
13530 (synopsis "C++ header library for Python extension modules")
13531 (description "This package is a small C++ header library which makes it
13532easier to write Python extension modules. The primary feature is a
13533@code{PyObject} smart pointer which automatically handles reference counting
13534and provides convenience methods for performing common object operations.")
13535 (license license:bsd-3)))
13536
13537(define-public python-perfplot
13538 (package
13539 (name "python-perfplot")
13540 (version "0.10.2")
13541 (source (origin
13542 (method url-fetch)
13543 (uri (pypi-uri "perfplot" version))
13544 (sha256
13545 (base32
13546 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
13547 (build-system pyproject-build-system)
13548 (propagated-inputs (list python-matplotlib
13549 python-matplotx
13550 python-numpy-1
13551 python-rich))
13552 (native-inputs (list python-flit-core
13553 python-pytest))
13554 (home-page "https://github.com/nschloe/perfplot")
13555 (synopsis "Performance plots for Python code snippets")
13556 (description "@code{perfplot} extends Python's timeit by testing
13557snippets with input parameters (e.g., the size of an array) and plotting
13558the results.")
13559 (license license:gpl3+)))
13560
13561(define-public python-persist-queue
13562 (package
13563 (name "python-persist-queue")
13564 (version "1.1.0")
13565 (source
13566 (origin
13567 (method git-fetch)
13568 (uri (git-reference
13569 (url "https://github.com/peter-wangxu/persist-queue")
13570 (commit (string-append "v" version))))
13571 (file-name (git-file-name name version))
13572 (sha256
13573 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
13574 (build-system pyproject-build-system)
13575 (native-inputs
13576 (list python-pytest
13577 python-pytest-asyncio
13578 python-setuptools))
13579 (propagated-inputs
13580 (list python-aiofiles
13581 python-aiosqlite
13582 python-cbor2
13583 python-dbutils
13584 python-msgpack))
13585 (home-page "https://github.com/peter-wangxu/persist-queue")
13586 (synopsis "Thread-safe disk based persistent queue in Python")
13587 (description
13588 "This package provides a thread-safe disk (file and sqlite) based
13589persistent queue in Python.")
13590 (license license:bsd-3)))
13591
13592(define-public python-pycodestyle
13593 (package
13594 (name "python-pycodestyle")
13595 (version "2.12.1")
13596 (source
13597 (origin
13598 (method url-fetch)
13599 (uri (pypi-uri "pycodestyle" version))
13600 (sha256
13601 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
13602 (build-system pyproject-build-system)
13603 (arguments
13604 (list
13605 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
13606 #:phases
13607 #~(modify-phases %standard-phases
13608 ;; Taken from Tox config
13609 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
13610 (replace 'check
13611 (lambda* (#:key tests? test-flags #:allow-other-keys)
13612 (when tests?
13613 (apply invoke "python" "-v" test-flags)))))))
13614 (native-inputs
13615 (list python-setuptools
13616 python-wheel))
13617 (home-page "https://pycodestyle.readthedocs.io/")
13618 (synopsis "Python style guide checker")
13619 (description "@code{pycodestyle} (formerly pep8) is a tool to check
13620Python code against some of the style conventions in
13621@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
13622 (license license:expat)))
13623
13624(define-public python-pycollada
13625 (package
13626 (name "python-pycollada")
13627 (version "0.9.2")
13628 (source
13629 (origin
13630 (method git-fetch)
13631 (uri (git-reference
13632 (url "https://github.com/pycollada/pycollada")
13633 (commit (string-append "v" version))))
13634 (file-name (git-file-name name version))
13635 (sha256
13636 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
13637 (build-system pyproject-build-system)
13638 (native-inputs
13639 (list python-pytest
13640 python-setuptools))
13641 (propagated-inputs
13642 (list python-numpy
13643 python-dateutil))
13644 (home-page "https://pycollada.readthedocs.io")
13645 (synopsis "Reading and writing collada documents library")
13646 (description
13647 "This package implements a functionality for creating, editing and
13648loading @url{https://www.khronos.org/collada/,COLLADA},which is a
13649COLLAborative Design Activity for establishing an interchange file format for
13650interactive 3D applications.
13651
13652The library allows you to load a COLLADA file and interact with it as a python
13653object. In addition, it supports creating a collada python object from
13654scratch, as well as in-place editing.")
13655 (license license:bsd-3)))
13656
13657(define-public python-pyct
13658 (package
13659 (name "python-pyct")
13660 (version "0.5.0")
13661 (source
13662 (origin
13663 (method url-fetch)
13664 (uri (pypi-uri "pyct" version))
13665 (sha256
13666 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
13667 (build-system pyproject-build-system)
13668 (arguments
13669 (list
13670 #:test-flags
13671 ;; These tests want to download example data from the internet.
13672 '(list "-k" (string-append
13673 "not test_examples_with_use_test_data"
13674 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
13675 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
13676 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
13677 (propagated-inputs (list python-param python-pyyaml))
13678 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
13679 (home-page "https://github.com/holoviz-dev/pyct")
13680 (synopsis "Common packaging tasks")
13681 (description
13682 "This Python package provides utilities to run common packaging tasks,
13683e.g. copy examples, fetch data, etc.")
13684 (license license:bsd-3)))
13685
13686(define-public python-multidict
13687 (package
13688 (name "python-multidict")
13689 (version "6.7.0")
13690 (source
13691 (origin
13692 (method git-fetch)
13693 (uri (git-reference
13694 (url "https://github.com/aio-libs/multidict/")
13695 (commit (string-append "v" version))))
13696 (file-name (git-file-name name version))
13697 (sha256
13698 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
13699 (build-system pyproject-build-system)
13700 (arguments
13701 (list
13702 ;; tests: 1395 passed
13703 #:test-flags
13704 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13705 "--ignore-glob=tests/test_*_benchmarks.py")))
13706 (native-inputs
13707 (list python-objgraph
13708 python-psutil
13709 python-pytest
13710 python-setuptools))
13711 (home-page "https://github.com/aio-libs/multidict/")
13712 (synopsis "Multidict implementation")
13713 (description
13714 "Multidict is dict-like collection of key-value pairs where key might be
13715occurred more than once in the container.")
13716 (license license:asl2.0)))
13717
13718(define-public python-orderedmultidict
13719 (package
13720 (name "python-orderedmultidict")
13721 (version "1.0.1")
13722 (source
13723 (origin
13724 (method url-fetch)
13725 (uri (pypi-uri "orderedmultidict" version))
13726 (sha256
13727 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
13728 (build-system pyproject-build-system)
13729 (propagated-inputs
13730 (list python-six))
13731 (native-inputs
13732 (list python-pytest
13733 python-setuptools))
13734 (home-page "https://github.com/gruns/orderedmultidict")
13735 (synopsis "Python Ordered Multivalue Dictionary - omdict")
13736 (description "This package contains a library for ordered multivalue
13737dictionaries. A multivalue dictionary is a dictionary that can store
13738multiple values for the same key. An ordered multivalue dictionary is a
13739multivalue dictionary that retains the order of insertions and deletions.")
13740 (license license:unlicense)))
13741
13742(define-public python-autopage
13743 (package
13744 (name "python-autopage")
13745 (version "0.5.1")
13746 (source (origin
13747 (method url-fetch)
13748 (uri (pypi-uri "autopage" version))
13749 (sha256
13750 (base32
13751 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
13752 (build-system pyproject-build-system)
13753 (arguments
13754 (list
13755 #:phases
13756 #~(modify-phases %standard-phases
13757 (add-before 'check 'disable-e2e-tests
13758 (lambda _
13759 ;; These tests rely on KeyboardInterrupts which do not
13760 ;; work in the build container.
13761 (delete-file "autopage/tests/test_end_to_end.py"))))))
13762 (native-inputs
13763 (list python-pypa-build
13764 python-setuptools
13765 python-wheel
13766 ;; For tests.
13767 python-fixtures
13768 python-pytest
13769 python-testtools))
13770 (home-page "https://github.com/zaneb/autopage")
13771 (synopsis "Automatic paging for console output")
13772 (description
13773 "Autopage is a Python library to automatically display terminal output
13774from a program in a @dfn{pager} such as @command{less}.")
13775 (license license:asl2.0)))
13776
13777(define-public python-dirty-equals
13778 (package
13779 (name "python-dirty-equals")
13780 (version "0.11.0")
13781 (source
13782 (origin
13783 (method git-fetch)
13784 (uri (git-reference
13785 (url "https://github.com/samuelcolvin/dirty-equals")
13786 (commit (string-append "v" version))))
13787 (file-name (git-file-name name version))
13788 (sha256
13789 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
13790 (build-system pyproject-build-system)
13791 ;; tests: 551 passed, 60 skipped
13792 (native-inputs
13793 (list python-hatchling
13794 python-pydantic
13795 python-pytest
13796 python-pytest-examples
13797 tzdata-for-tests))
13798 (home-page "https://dirty-equals.helpmanual.io/")
13799 (synopsis "Do dirty (but useful) things with equals")
13800 (description
13801 "@code{dirty-equals} is a Python library that (mis)uses the
13802@code{__eq__} method to make code (generally unit tests) more declarative
13803and therefore easier to read and write.")
13804 (license license:expat)))
13805
13806(define-public python-dirty-equals-bootstrap
13807 (hidden-package
13808 (package
13809 (inherit python-dirty-equals)
13810 (name "python-dirty-equals-bootstrap")
13811 (arguments
13812 (list #:tests? #f))
13813 (native-inputs
13814 (list python-hatchling)))))
13815
13816(define-public python-distutils-extra
13817 (package
13818 (name "python-distutils-extra")
13819 (version "2.38")
13820 (source
13821 (origin
13822 (method url-fetch)
13823 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
13824 version "/+download/python-distutils-extra-"
13825 version ".tar.gz"))
13826 (sha256
13827 (base32
13828 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
13829 (build-system pyproject-build-system)
13830 (arguments
13831 (list #:tests? #f)) ;tests are outdated and broken
13832 (native-inputs (list python-setuptools python-wheel))
13833 (home-page "https://launchpad.net/python-distutils-extra/")
13834 (synopsis "Enhancements to Python's distutils")
13835 (description
13836 "The python-distutils-extra module enables you to easily integrate
13837gettext support, themed icons, and scrollkeeper-based documentation into
13838Python's distutils.")
13839 (license license:gpl2)))
13840
13841(define-public python-olefile
13842 (package
13843 (name "python-olefile")
13844 (version "0.47")
13845 (source
13846 (origin
13847 (method git-fetch)
13848 (uri (git-reference
13849 (url "https://github.com/decalage2/olefile")
13850 (commit (string-append "v" version))))
13851 (file-name (git-file-name name version))
13852 (sha256
13853 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
13854 (build-system pyproject-build-system)
13855 (native-inputs
13856 (list python-pytest
13857 python-setuptools))
13858 (home-page "https://www.decalage.info/python/olefileio")
13859 (synopsis "Read and write Microsoft OLE2 files")
13860 (description
13861 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
13862Storage or Compound Document, Microsoft Office). It is an improved version of
13863the OleFileIO module from PIL, the Python Image Library.")
13864 (license license:bsd-3)))
13865
13866(define-public python-property-cached
13867 (package
13868 (name "python-property-cached")
13869 (version "1.6.4")
13870 (source
13871 (origin
13872 (method url-fetch)
13873 (uri (pypi-uri "property-cached" version ".zip"))
13874 (sha256
13875 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
13876 (patches
13877 (search-patches "python-property-cached-asyncio-3_11.patch"))))
13878 (build-system pyproject-build-system)
13879 (arguments
13880 (list
13881 ;; AssertionError.
13882 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
13883 (native-inputs (list python-freezegun python-pytest unzip
13884 python-setuptools python-wheel))
13885 (home-page "https://github.com/althonos/property-cached/")
13886 (synopsis "Decorator for caching properties in classes")
13887 (description "This package provides a decorator for caching properties in
13888classes. It is forked from @code{cached-property}.")
13889 (license license:bsd-3)))
13890
13891(define-public python-pdf2image
13892 (package
13893 (name "python-pdf2image")
13894 (version "1.17.0")
13895 (source
13896 (origin
13897 (method git-fetch)
13898 (uri (git-reference
13899 (url "https://github.com/Belval/pdf2image")
13900 (commit (string-append "v" version))))
13901 (file-name (git-file-name name version))
13902 (sha256
13903 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
13904 (build-system pyproject-build-system)
13905 (arguments
13906 (list
13907 ;; The following excluded tests assume hardcoded binary paths to
13908 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
13909 #:test-flags
13910 #~(list "--exclude=^test_use_poppler_path$"
13911 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
13912 (propagated-inputs (list python-pillow))
13913 (inputs (list poppler))
13914 (native-inputs (list python-pynose which python-setuptools))
13915 (home-page "https://github.com/Belval/pdf2image")
13916 (synopsis
13917 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
13918 (description
13919 "This package provides a Python API wrapping the @command{pdftoppm} and
13920@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
13921Python list with elements of type @code{PIL.Image} (from the
13922@code{python-pillow} library).")
13923 (license license:expat)))
13924
13925(define-public python-pikepdf
13926 (package
13927 (name "python-pikepdf")
13928 (version "8.15.1")
13929 (source
13930 (origin
13931 (method git-fetch)
13932 (uri (git-reference
13933 (url "https://github.com/pikepdf/pikepdf")
13934 (commit (string-append "v" version))))
13935 (file-name (git-file-name name version))
13936 (sha256
13937 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
13938 (build-system pyproject-build-system)
13939 (native-inputs
13940 (list pybind11-2
13941 python-attrs
13942 python-hypothesis
13943 python-setuptools-scm
13944 python-psutil
13945 python-pytest
13946 python-pytest-timeout
13947 python-pytest-xdist
13948 python-dateutil
13949 python-xmp-toolkit
13950 python-tomli
13951 python-setuptools))
13952 (inputs
13953 (list qpdf))
13954 (propagated-inputs
13955 (list python-deprecated python-lxml python-packaging python-pillow))
13956 (home-page "https://github.com/pikepdf/pikepdf")
13957 (synopsis "Read and write PDFs with Python")
13958 (description
13959 "pikepdf is a Python library for reading and writing PDF files.")
13960 (license license:mpl2.0)))
13961
13962(define-public python-pillow
13963 (package
13964 (name "python-pillow")
13965 (version "12.1.1")
13966 (source
13967 (origin
13968 (method git-fetch)
13969 (uri (git-reference
13970 (url "https://github.com/python-pillow/Pillow")
13971 (commit version)))
13972 (file-name (git-file-name name version))
13973 (sha256
13974 (base32 "1g374rklljx0941j6d1gib9pgcq3scmqw9psqaj2c7m8pilqsn9n"))))
13975 (build-system pyproject-build-system)
13976 (arguments
13977 (list
13978 #:phases
13979 #~(modify-phases %standard-phases
13980 (add-after 'unpack 'patch-ldconfig
13981 (lambda _
13982 (substitute* "setup.py"
13983 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
13984 (replace 'check
13985 (lambda* (#:key tests? #:allow-other-keys)
13986 (when tests?
13987 (setenv "HOME" (getcwd))
13988 (invoke "python" "selftest.py" "--installed")
13989 (invoke "python" "-m" "pytest" "-vv")))))))
13990 (native-inputs (list pybind11
13991 python-defusedxml
13992 python-markdown2
13993 python-olefile
13994 python-pytest
13995 python-setuptools
13996 python-trove-classifiers))
13997 (inputs (list freetype
13998 lcms
13999 libjpeg-turbo
14000 libtiff
14001 libwebp
14002 openjpeg
14003 zlib))
14004 (home-page "https://python-pillow.github.io/")
14005 (synopsis "Fork of the Python Imaging Library")
14006 (description
14007 "The Python Imaging Library adds image processing capabilities to your
14008Python interpreter. This library provides extensive file format support, an
14009efficient internal representation, and fairly powerful image processing
14010capabilities. The core image library is designed for fast access to data
14011stored in a few basic pixel formats. It should provide a solid foundation for
14012a general image processing tool.")
14013 (properties `((cpe-name . "pillow")))
14014 (license (license:x11-style
14015 "https://github.com/python-pillow/Pillow/blob/12.1.1/LICENSE"
14016 "MIT-CMU License"))))
14017
14018(define-public python-pillow-avif-plugin
14019 (package
14020 (name "python-pillow-avif-plugin")
14021 (version "1.5.5")
14022 (source
14023 (origin
14024 (method git-fetch)
14025 (uri (git-reference
14026 (url "https://github.com/fdintino/pillow-avif-plugin/")
14027 (commit (string-append "v" version))))
14028 (file-name (git-file-name name version))
14029 (sha256
14030 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
14031 (build-system pyproject-build-system)
14032 (propagated-inputs (list python-requests))
14033 (native-inputs (list python-packaging
14034 python-pillow
14035 python-pytest
14036 python-setuptools))
14037 (inputs (list libavif))
14038 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
14039 (synopsis "Pillow plugin that adds avif support via libavif")
14040 (description
14041 "This package provides a pillow plugin that adds avif support via
14042libavif.")
14043 (license license:expat)))
14044
14045(define-public python-pillow-heif
14046 (package
14047 (name "python-pillow-heif")
14048 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
14049 ;; commit is taken from the master branch.
14050 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
14051 (revision . "0")))
14052 (version (git-version "1.3.0"
14053 (assoc-ref properties 'revision)
14054 (assoc-ref properties 'commit)))
14055 (source
14056 (origin
14057 (method git-fetch)
14058 (uri (git-reference
14059 (url "https://github.com/bigcat88/pillow_heif")
14060 (commit (assoc-ref properties 'commit))))
14061 (file-name (git-file-name name version))
14062 (sha256
14063 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
14064 (build-system pyproject-build-system)
14065 (inputs (list libheif))
14066 (propagated-inputs (list python-pillow))
14067 (native-inputs (list opencv ; for opencv-python
14068 python-defusedxml
14069 python-numpy
14070 python-packaging
14071 python-pympler
14072 python-pytest
14073 python-setuptools))
14074 (home-page "https://github.com/bigcat88/pillow_heif")
14075 (synopsis "Python interface for libheif library")
14076 (description "This package provides Python bindings for the libheif library
14077and a plugin for Pillow.")
14078 (license license:bsd-3)))
14079
14080(define-public python-pillow-jxl-plugin
14081 (package
14082 (name "python-pillow-jxl-plugin")
14083 (version "1.3.7")
14084 (source
14085 (origin
14086 (method git-fetch)
14087 (uri (git-reference
14088 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14089 (commit (string-append "v" version))))
14090 (file-name (git-file-name name version))
14091 (sha256
14092 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
14093 (build-system pyproject-build-system)
14094 (arguments
14095 (list
14096 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
14097 ;; in Guix.
14098 #:tests? #f
14099 #:imported-modules `(,@%cargo-build-system-modules
14100 ,@%pyproject-build-system-modules)
14101 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
14102 (guix build pyproject-build-system)
14103 (guix build utils))
14104 #:phases
14105 #~(modify-phases %standard-phases
14106 (add-after 'unpack 'prepare-cargo-build-system
14107 (lambda args
14108 (for-each (lambda (phase)
14109 (format #t "Running cargo phase: ~a~%" phase)
14110 (apply (assoc-ref cargo:%standard-phases phase)
14111 #:cargo-target #$(cargo-triplet)
14112 args))
14113 '(unpack-rust-crates
14114 configure
14115 check-for-pregenerated-files
14116 patch-cargo-checksums))))
14117 (add-after 'unpack 'patch-pyproject
14118 (lambda _
14119 ;; maturin failed to parse pyproject.toml.
14120 (substitute* "pyproject.toml"
14121 (("^license-files = .*") "")))))))
14122 (propagated-inputs (list python-brotli
14123 python-packaging
14124 python-pillow))
14125 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
14126 (native-inputs (list maturin
14127 python-numpy
14128 python-pytest
14129 rust
14130 `(,rust "cargo")))
14131 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
14132 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14133 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
14134 (description "This package provides pillow plugin for JPEG-XL, using Rust
14135for bindings.")
14136 (license license:gpl3+)))
14137
14138(define-public python-jxlpy
14139 (package
14140 (name "python-jxlpy")
14141 (version "0.9.5")
14142 (source
14143 (origin
14144 (method git-fetch)
14145 (uri (git-reference
14146 (url "https://github.com/olokelo/jxlpy")
14147 (commit version)))
14148 (file-name (git-file-name name version))
14149 (sha256
14150 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
14151 (build-system pyproject-build-system)
14152 (arguments (list #:tests? #f)) ; no tests, just examples
14153 (inputs (list libjxl))
14154 (propagated-inputs (list python-cython))
14155 (native-inputs (list python-cython python-setuptools))
14156 (home-page "https://github.com/olokelo/jxlpy")
14157 (synopsis "JPEG XL integration in Python")
14158 (description "This package provides Cython-based Python bindings for
14159libjxl, as well as a pillow plugin.")
14160 (license license:expat)))
14161
14162(define-public python-pixelmatch
14163 (package
14164 (name "python-pixelmatch")
14165 (version "0.3.0")
14166 (source
14167 (origin
14168 (method git-fetch)
14169 (uri (git-reference
14170 (url "https://github.com/whtsky/pixelmatch-py")
14171 (commit (string-append "v" version))))
14172 (file-name (git-file-name name version))
14173 (sha256
14174 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
14175 (build-system pyproject-build-system)
14176 (arguments
14177 ;; XXX: PIL.UnidentifiedImageError despite images being present.
14178 (list #:tests? #f))
14179 (native-inputs
14180 (list python-poetry-core
14181 python-pillow
14182 python-pytest
14183 python-pytest-benchmark))
14184 (home-page "https://github.com/whtsky/pixelmatch-py")
14185 (synopsis "Pixel-level image comparison library")
14186 (description
14187 "This package provides a pixel-level image comparison library for Python,
14188originally created to compare screenshots in tests. Its features include
14189accurate anti-aliased pixels detection and perceptual color difference
14190metrics.")
14191 (license license:isc)))
14192
14193(define-public python-imagecodecs
14194 (package
14195 (name "python-imagecodecs")
14196 (version "2025.8.2")
14197 (source
14198 (origin
14199 (method url-fetch)
14200 (uri (pypi-uri "imagecodecs" version))
14201 (sha256
14202 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
14203 (modules '((guix build utils)))
14204 (snippet #~(for-each delete-file
14205 ;; Delete pre-generated Cython files.
14206 (find-files "imagecodecs" "_.*\\.c$")))))
14207 (build-system pyproject-build-system)
14208 (arguments
14209 (list
14210 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
14211 #:test-flags
14212 ;; Some of those tests are flaky.
14213 #~(list "-k" "not test_cms_identity_transforms")
14214 #:phases
14215 #~(modify-phases %standard-phases
14216 (add-after 'unpack 'create-configuration
14217 (lambda _
14218 ;; By default everything is enabled. We can selectively disable
14219 ;; extensions (and thus dependencies) by deleting them from the
14220 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
14221 (call-with-output-file "imagecodecs_distributor_setup.py"
14222 (lambda (port)
14223 (format port "\
14224def customize_build(EXTENSIONS, OPTIONS):
14225~{ del EXTENSIONS[~s]~%~}~%"
14226 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
14227 ;; Those rely on unpackaged inputs.
14228 "aec" "avif" "bitshuffle" "brunsli" "deflate"
14229 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
14230 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
14231 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
14232 "zlibng" "zopfli"))))))
14233 (add-after 'unpack 'fix-sanity-check
14234 (lambda _
14235 ;; XXX: Don't exit twice. The generated script already does that.
14236 (substitute* "imagecodecs/__main__.py"
14237 (("sys\\.exit\\(main\\(\\)\\)")
14238 ""))))
14239 (add-before 'check 'configure-tests
14240 (lambda _
14241 (setenv "HOME" (getcwd)))))))
14242 (inputs
14243 (list brotli
14244 c-blosc
14245 c-blosc2
14246 giflib
14247 lcms
14248 libheif
14249 libjpeg-turbo
14250 libpng
14251 libtiff
14252 libwebp
14253 lz4
14254 lzfse
14255 snappy
14256 xz
14257 zlib
14258 `(,zstd "lib")))
14259 (propagated-inputs
14260 (list python-numpy python-matplotlib python-tifffile))
14261 (native-inputs
14262 (list python-cython python-pytest python-setuptools))
14263 (home-page "https://www.lfd.uci.edu/~gohlke/")
14264 (synopsis "Image transformation, compression, and decompression codecs")
14265 (description
14266 "Imagecodecs is a Python library that provides block-oriented, in-memory
14267buffer transformation, compression, and decompression functions for use in the
14268tifffile, czifile, and other scientific image input/output modules.")
14269 (license license:bsd-3)))
14270
14271(define-public python-property-manager
14272 (package
14273 (name "python-property-manager")
14274 (version "3.0")
14275 (source
14276 (origin
14277 (method git-fetch)
14278 (uri (git-reference
14279 (url "https://github.com/xolox/python-property-manager")
14280 (commit version)))
14281 (file-name (git-file-name name version))
14282 (sha256
14283 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
14284 (build-system pyproject-build-system)
14285 (native-inputs (list python-pytest python-setuptools))
14286 (propagated-inputs
14287 (list python-verboselogs
14288 python-humanfriendly
14289 python-coloredlogs))
14290 (home-page "https://github.com/xolox/python-property-manager")
14291 (synopsis "Useful property variants for Python programming")
14292 (description
14293 "The @code{property-manager} package defines several custom property
14294variants for Python programming including required properties,writable
14295properties, cached properties, etc.")
14296 (license license:expat)))
14297
14298(define-public python-executing
14299 (package
14300 (name "python-executing")
14301 (version "2.2.0")
14302 (source
14303 (origin
14304 (method url-fetch)
14305 (uri (pypi-uri "executing" version))
14306 (sha256
14307 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
14308 (build-system pyproject-build-system)
14309 (arguments
14310 (list
14311 #:test-flags
14312 ;; Test needs IPython
14313 #~(list "-k" "not test_two_statement_lookups")
14314 #:phases
14315 #~(modify-phases %standard-phases
14316 (add-after 'unpack 'fix-tests
14317 (lambda _
14318 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
14319 (substitute* "pyproject.toml"
14320 (("ignore_missing_imports = true.*")
14321 "ignore_missing_imports = true
14322
14323[tool.pytest.ini_options]
14324python_functions = \"test_\"\n")))))))
14325 (native-inputs
14326 (list python-asttokens
14327 python-littleutils
14328 python-pytest
14329 python-rich
14330 python-setuptools
14331 python-setuptools-scm
14332 python-wheel))
14333 (home-page "https://github.com/alexmojaki/executing")
14334 (synopsis "Get information about what a Python frame is currently doing")
14335 (description "This package lets you get information about what a frame is
14336currently doing, particularly the AST node being executed.")
14337 (license license:expat)))
14338
14339(define-public python-executor
14340 (package
14341 (name "python-executor")
14342 (version "23.2")
14343 (source
14344 (origin
14345 (method git-fetch)
14346 (uri (git-reference
14347 (url "https://github.com/xolox/python-executor")
14348 (commit version)))
14349 (file-name (git-file-name name version))
14350 (sha256
14351 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14352 (build-system pyproject-build-system)
14353 (arguments
14354 (list #:tests? #f)) ;TODO: tests require root/sudo
14355 (native-inputs (list python-mock python-pytest python-setuptools))
14356 (propagated-inputs
14357 (list python-six
14358 python-property-manager
14359 python-fasteners
14360 python-virtualenv))
14361 (home-page "https://github.com/xolox/python-executor")
14362 (synopsis "Programmer friendly subprocess wrapper")
14363 (description
14364 "The @code{executor} package is a simple wrapper for Python’s subprocess
14365module that makes it very easy to handle subprocesses on UNIX systems with
14366proper escaping of arguments and error checking currently doing, particularly
14367the AST node being executed.")
14368 (license license:expat)))
14369
14370(define-public python-roifile
14371 (package
14372 (name "python-roifile")
14373 (version "2025.5.10")
14374 (source
14375 (origin
14376 (method url-fetch)
14377 (uri (pypi-uri "roifile" version))
14378 (sha256
14379 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14380 (build-system pyproject-build-system)
14381 (arguments (list #:tests? #f)) ; There are none.
14382 (native-inputs (list python-setuptools))
14383 (propagated-inputs (list python-numpy))
14384 (home-page "https://www.lfd.uci.edu/~gohlke/")
14385 (synopsis "Read and write ImageJ ROI format")
14386 (description "Roifile is a Python library to read, write, create, and plot
14387ImageJ ROIs, an undocumented and ImageJ application specific format to store
14388regions of interest, geometric shapes, paths, text, etc for image overlays.")
14389 (license license:bsd-3)))
14390
14391(define-public python-lfdfiles
14392 (package
14393 (name "python-lfdfiles")
14394 (version "2026.4.30")
14395 (source
14396 (origin
14397 (method url-fetch)
14398 (uri (pypi-uri "lfdfiles" version))
14399 (sha256
14400 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14401 (modules '((guix build utils)))
14402 (snippet
14403 ;; Delete pre-generated Cython files.
14404 #~(begin
14405 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14406 (delete-file "lfdfiles/conftest.py")))))
14407 (build-system pyproject-build-system)
14408 (arguments
14409 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14410 (list #:tests? #f))
14411 (native-inputs (list python-setuptools))
14412 (propagated-inputs (list python-click python-numpy python-tifffile))
14413 (home-page "https://www.lfd.uci.edu/~gohlke/")
14414 (synopsis "Work with LFD data files")
14415 (description
14416 "Lfdfiles is a Python library and console script for reading, writing,
14417converting, and viewing many of the proprietary file formats used to store
14418experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14419 (license license:bsd-3)))
14420
14421;; ~8Mo of test files.
14422(define python-av-testdata
14423 (file-union
14424 "python-av-testdata"
14425 (cons*
14426 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14427 `(,(string-append "pyav-curated/" file)
14428 ,(origin
14429 (method url-fetch)
14430 (uri (string-append "https://pyav.org/datasets/" file))
14431 (sha256
14432 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14433 (map
14434 (match-lambda
14435 ((file . hash)
14436 (list (string-append "fate-suite/" file)
14437 (origin
14438 (method url-fetch)
14439 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14440 (sha256 (base32 hash))))))
14441 '(("aac/latm_stereo_to_51.ts" .
14442 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14443 ("h264/extradata-reload-multi-stsd.mov" .
14444 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14445 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14446 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14447 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14448 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14449 ("h264/interlaced_crop.mp4" .
14450 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14451 ("hap/HAPQA_NoSnappy_127x1.mov" .
14452 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14453 ("mkv/codec_delay_opus.mkv" .
14454 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14455 ("mov/displaymatrix.mov" .
14456 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14457 ("mov/mov-1elist-ends-last-bframe.mov" .
14458 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14459 ("mov/white_zombie_scrunch-part.mov" .
14460 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14461 ("mpeg2/mpeg2_field_encoding.ts" .
14462 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14463 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14464 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14465 ("mxf/track_01_v02.mxf" .
14466 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14467 ("png1/55c99e750a5fd6_50314226.png" .
14468 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14469 ("qtrle/aletrek-rle.mov" .
14470 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14471 ("sub/MovText_capability_tester.mp4" .
14472 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14473 ("sub/vobsub.sub" .
14474 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14475
14476(define-public python-av
14477 (package
14478 (name "python-av")
14479 (version "16.0.1")
14480 (source
14481 (origin
14482 (method url-fetch)
14483 (uri (pypi-uri "av" version))
14484 (sha256
14485 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14486 (build-system pyproject-build-system)
14487 (arguments
14488 (list
14489 ;; Upstream is not great in responding to open issues or change requests.
14490 ;; See:
14491 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14492 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14493 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14494 #:test-flags
14495 ;; Writing to custom IO requires network access.
14496 #~(list "-k" "not test_writing_to_custom_io_dash")
14497 #:phases
14498 #~(modify-phases %standard-phases
14499 (add-before 'check 'pre-check
14500 (lambda _
14501 ;; This would otherwise interfere with finding the installed
14502 ;; av when running tests.
14503 (delete-file-recursively "av")
14504 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14505 (substitute* "tests/common.py"
14506 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14507 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14508 (native-inputs
14509 (list pkg-config
14510 python-cython
14511 python-numpy
14512 python-pillow
14513 python-pytest
14514 python-setuptools))
14515 (inputs (list ffmpeg))
14516 (home-page "https://github.com/PyAV-Org/PyAV")
14517 (synopsis "Pythonic bindings for FFmpeg's libraries")
14518 (description
14519 "PyAV is a Python library that allows for direct and precise manipulation
14520of media through containers, streams, packets, codecs, and frames. It provides
14521access to the powerful FFmpeg libraries while managing the complex details as
14522much as possible.
14523PyAV also facilitates data transformation and integration with
14524other packages such as Numpy and Pillow. However, working with media is a
14525challenging task and PyAV cannot abstract it away or make all the best decisions
14526for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14527be necessary. Nonetheless, PyAV is an essential tool when working with media
14528that requires its specific capabilities.")
14529 (license license:bsd-3)))
14530
14531(define-public python-ffmpeg-python
14532 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
14533 (package
14534 (name "python-ffmpeg-python")
14535 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
14536 (revision . "0")))
14537 (version (git-version "0.2.0"
14538 (assoc-ref properties 'revision)
14539 (assoc-ref properties 'commit)))
14540 (source
14541 (origin
14542 (method git-fetch)
14543 (uri (git-reference
14544 (url "https://github.com/kkroening/ffmpeg-python.git")
14545 (commit (assoc-ref properties 'commit))))
14546 (file-name (git-file-name name version))
14547 (sha256
14548 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
14549 (build-system pyproject-build-system)
14550 (arguments
14551 (list
14552 #:test-flags
14553 #~(list "-k" "not test_pipe and not test__probe")
14554 #:phases
14555 #~(modify-phases %standard-phases
14556 (add-after 'unpack 'hardcode-ffmpeg
14557 (lambda* (#:key inputs #:allow-other-keys)
14558 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
14559 (substitute* "ffmpeg/_run.py"
14560 (("cmd='ffmpeg'")
14561 (string-append "cmd='" ffmpeg "'")))
14562 (substitute* "ffmpeg/tests/test_ffmpeg.py"
14563 (("out_file.compile\\(\\) == \\['ffmpeg'")
14564 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
14565 (inputs (list ffmpeg))
14566 (propagated-inputs (list python-future))
14567 (native-inputs (list python-future
14568 python-numpy
14569 python-pytest
14570 python-pytest-mock
14571 python-setuptools))
14572 (home-page "https://github.com/kkroening/ffmpeg-python")
14573 (synopsis "Python bindings for FFmpeg with complex filtering support")
14574 (description
14575 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
14576Python terms, taking care of running ffmpeg with the correct command-line
14577arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
14578 (license license:asl2.0)))
14579
14580(define-public python-imageio-ffmpeg
14581 (package
14582 (name "python-imageio-ffmpeg")
14583 (version "0.6.0")
14584 (source
14585 (origin
14586 (method url-fetch)
14587 (uri (pypi-uri "imageio_ffmpeg" version))
14588 (sha256
14589 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
14590 (build-system pyproject-build-system)
14591 (arguments
14592 (list
14593 #:tests? #f ;XXX: tests require network access to get FFmpeg data
14594 #:phases
14595 #~(modify-phases %standard-phases
14596 (add-after 'unpack 'hardcode-ffmpeg
14597 (lambda* (#:key inputs #:allow-other-keys)
14598 (substitute* "imageio_ffmpeg/_utils.py"
14599 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
14600 (string-append "(" all " or \""
14601 (search-input-file inputs "bin/ffmpeg")
14602 "\")"))))))))
14603 (native-inputs
14604 (list python-setuptools
14605 python-wheel))
14606 (inputs
14607 (list ffmpeg))
14608 (home-page "https://github.com/imageio/imageio-ffmpeg")
14609 (synopsis "FFMPEG wrapper for Python")
14610 (description
14611 "This package provides an FFMPEG wrapper for working with video files.
14612It implements generator functions for reading and writing data to and from
14613FFMPEG, reliably terminating the process when done.")
14614 (license license:bsd-2)))
14615
14616(define-public python-imageio
14617 (package
14618 (name "python-imageio")
14619 (version "2.36.1")
14620 (source
14621 (origin
14622 (method url-fetch)
14623 (uri (pypi-uri "imageio" version))
14624 (sha256
14625 (base32
14626 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
14627 (build-system pyproject-build-system)
14628 (arguments
14629 (list
14630 #:test-flags #~(list "-m" "not needs_internet"
14631 ;; This attempts to load libGL.so (provided by mesa)
14632 ;; at the Python store path (sys.base_prefix?).
14633 "-k" "not test_findlib2"
14634 "--ignore" "tests/test_freeimage.py")
14635 #:phases
14636 #~(modify-phases %standard-phases
14637 (add-after 'unpack 'fix-source
14638 (lambda* (#:key inputs #:allow-other-keys)
14639 (substitute* "imageio/core/util.py"
14640 (("\"/var/tmp\"")
14641 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
14642 (propagated-inputs
14643 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
14644 (native-inputs
14645 (list python-fsspec
14646 python-pytest
14647 python-setuptools))
14648 (home-page "https://imageio.github.io/")
14649 (synopsis "Library for reading and writing a wide range of image data")
14650 (description
14651 "Imageio is a Python library that provides an easy interface to read and
14652write a wide range of image data, including animated images, video, volumetric
14653data, and scientific formats.")
14654 (license license:bsd-2)))
14655
14656(define-public python-pyudorandom
14657 ;; Releases are not tagged in Git:
14658 ;; https://github.com/mewwts/pyudorandom/issues/3
14659 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
14660 (revision "0"))
14661 (package
14662 (name "python-pyudorandom")
14663 (version (git-version "1.0.0" revision commit))
14664 (source
14665 (origin
14666 (method git-fetch)
14667 (uri (git-reference
14668 (url "https://github.com/mewwts/pyudorandom")
14669 (commit commit)))
14670 (file-name (git-file-name name version))
14671 (sha256
14672 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
14673 (build-system pyproject-build-system)
14674 (arguments (list #:test-backend #~'unittest))
14675 (native-inputs (list python-setuptools))
14676 (home-page "https://github.com/mewwts/pyudorandom")
14677 (synopsis "Generate pseudorandom numbers by using algebra")
14678 (description
14679 "The @code{pyudorandom} module lets you iterate over a list
14680in a non-succsessive, yet deterministic way based on integer modulo.
14681It comes in handy when you want to mix up the items, but don't need
14682any guarantees of randomness. It might be slow on small data,
14683but shall be significantly faster than @code{random.shuffle}
14684for longer lists.")
14685 (license license:expat))))
14686
14687(define-public python-pyvips
14688 (package
14689 (name "python-pyvips")
14690 (version "3.1.1")
14691 (source
14692 (origin
14693 (method git-fetch) ; PyPI does not include test helpers
14694 (uri (git-reference
14695 (url "https://github.com/libvips/pyvips")
14696 (commit (string-append "v" version))))
14697 (file-name (git-file-name name version))
14698 (sha256
14699 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
14700 (build-system pyproject-build-system)
14701 (native-inputs
14702 (list pkg-config
14703 python-pytest
14704 python-setuptools
14705 python-wheel))
14706 (inputs
14707 (list glib vips))
14708 (propagated-inputs
14709 (list python-cffi python-pkgconfig))
14710 (home-page "https://github.com/libvips/pyvips")
14711 (synopsis "Python bindings for VIPS")
14712 (description "The @code{pyvips} package provides Python bindings for VIPS,
14713a multithreaded image-processing system with low memory needs.")
14714 (license license:expat)))
14715
14716;; WARNING: This package is a dependency of mesa.
14717;; There are no users in python-xyz for this package, consider to adopt closer
14718;; to Mesa.
14719(define-public python-pycparser
14720 (package
14721 (name "python-pycparser")
14722 (version "2.22")
14723 (source
14724 (origin
14725 (method url-fetch)
14726 (uri (pypi-uri "pycparser" version))
14727 (sha256
14728 (base32
14729 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
14730 (outputs '("out" "doc"))
14731 (build-system pyproject-build-system)
14732 (arguments
14733 (list
14734 #:test-backend #~'unittest
14735 #:phases
14736 #~(modify-phases %standard-phases
14737 (add-after 'install 'install-doc
14738 (lambda _
14739 (let* ((data (string-append #$output:doc "/share"))
14740 (doc (string-append data "/doc/" #$name "-" #$version))
14741 (examples (string-append doc "/examples")))
14742 (mkdir-p examples)
14743 (for-each (lambda (file)
14744 (copy-file (string-append "." file)
14745 (string-append doc file)))
14746 '("/README.rst" "/CHANGES" "/LICENSE"))
14747 (copy-recursively "examples" examples)))))))
14748 (native-inputs
14749 (list python-setuptools))
14750 (home-page "https://github.com/eliben/pycparser")
14751 (synopsis "C parser in Python")
14752 (description
14753 "Pycparser is a complete parser of the C language, written in pure Python
14754using the PLY parsing library. It parses C code into an AST and can serve as
14755a front-end for C compilers or analysis tools.")
14756 (license license:bsd-3)))
14757
14758(define-public python-pywavelets
14759 (package
14760 (name "python-pywavelets")
14761 (version "1.8.0")
14762 (home-page "https://github.com/PyWavelets/pywt")
14763 (source (origin
14764 (method url-fetch)
14765 (uri (pypi-uri "pywavelets" version))
14766 (sha256
14767 (base32
14768 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
14769 (build-system pyproject-build-system)
14770 (arguments
14771 (list
14772 #:test-flags '(list "--pyargs" "pywt")
14773 #:phases
14774 #~(modify-phases %standard-phases
14775 ;; The compiled libraries are only in the output at this point,
14776 ;; but they are needed to run tests.
14777 ;; FIXME: This should be handled by the pyargs pytest argument,
14778 ;; but is not for some reason.
14779 (add-before 'check 'pre-check
14780 (lambda _ (chdir #$output))))))
14781 (native-inputs
14782 (list meson
14783 ninja
14784 pkg-config
14785 python-cython
14786 python-meson
14787 python-numpy
14788 python-pytest))
14789 (propagated-inputs
14790 (list python-numpy python-scipy))
14791 (synopsis "Wavelet transforms in Python")
14792 (description
14793 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
14794mathematical basis functions that are localized in both time and frequency.
14795Wavelet transforms are time-frequency transforms employing wavelets. They are
14796similar to Fourier transforms, the difference being that Fourier transforms are
14797localized only in frequency instead of in time and frequency.")
14798 (license license:expat)))
14799
14800(define-public python-pywal
14801 (package
14802 (name "python-pywal")
14803 (version "3.3.0")
14804 (source
14805 (origin
14806 (method git-fetch)
14807 (uri (git-reference
14808 (url "https://github.com/dylanaraps/pywal")
14809 (commit version)))
14810 (file-name (git-file-name name version))
14811 (sha256
14812 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
14813 (build-system pyproject-build-system)
14814 (arguments
14815 `(#:phases
14816 (modify-phases %standard-phases
14817 (add-before 'check 'fix-home-directory
14818 (lambda _
14819 ;; Tests fail with "Permission denied: '/homeless-shelter'".
14820 (setenv "HOME" "/tmp"))))))
14821 (native-inputs
14822 (list python-pytest
14823 python-setuptools))
14824 (inputs
14825 (list imagemagick))
14826 (home-page "https://github.com/dylanaraps/pywal")
14827 (synopsis "Color palette generator and applicator")
14828 (description
14829 "Pywal is a tool that generates a color palette from the dominant colors
14830in an image. It then applies the colors system-wide and on-the-fly in all of
14831your favourite programs.")
14832 (license license:expat)))
14833
14834(define-public python-pywal16
14835 (package
14836 (name "python-pywal16")
14837 (version "3.8.10")
14838 (source
14839 (origin
14840 (method url-fetch)
14841 (uri (pypi-uri "pywal16" version))
14842 (sha256
14843 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
14844 (build-system pyproject-build-system)
14845 (arguments
14846 (list
14847 #:phases
14848 '(modify-phases %standard-phases
14849 (add-before 'check 'set-HOME
14850 (lambda _ (setenv "HOME" "/tmp"))))))
14851 (native-inputs
14852 (list imagemagick
14853 python-pytest
14854 python-setuptools))
14855 (home-page "https://github.com/eylles/pywal16")
14856 (synopsis "16 colors fork of pywal")
14857 (description
14858 "Pywal16 is a tool that generates a color palette from the dominant
14859colors in an image. It then applies the colors system-wide and on-the-fly in
14860all of your favorite programs.")
14861 (license license:expat)))
14862
14863(define-public python-click-didyoumean
14864 (package
14865 (name "python-click-didyoumean")
14866 (version "0.3.1")
14867 (source
14868 (origin
14869 (method git-fetch) ;no tests in PyPI archive
14870 (uri (git-reference
14871 (url "https://github.com/click-contrib/click-didyoumean")
14872 (commit (string-append "v" version))))
14873 (file-name (git-file-name name version))
14874 (sha256
14875 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
14876 (build-system pyproject-build-system)
14877 (native-inputs
14878 (list python-poetry-core python-pytest))
14879 (propagated-inputs
14880 (list python-click))
14881 (home-page "https://github.com/timofurrer/click-didyoumean")
14882 (synopsis "Git-like did-you-mean feature in Click")
14883 (description
14884 "This plugin enables git-like did-you-mean feature in Click.")
14885 (license license:expat)))
14886
14887(define-public python-pywinrm
14888 (package
14889 (name "python-pywinrm")
14890 (version "0.5.0")
14891 (source
14892 (origin
14893 (method git-fetch)
14894 (uri (git-reference
14895 (url "https://github.com/diyan/pywinrm/")
14896 (commit (string-append "v" version))))
14897 (file-name (git-file-name name version))
14898 (sha256
14899 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
14900 (build-system pyproject-build-system)
14901 (propagated-inputs
14902 (list python-requests python-requests-ntlm python-xmltodict))
14903 (native-inputs
14904 (list python-mock python-pytest python-setuptools))
14905 (home-page "https://github.com/diyan/pywinrm/")
14906 (synopsis "Python library for Windows Remote Management (WinRM)")
14907 (description
14908 "pywinrm is a Python client for the Windows Remote Management (WinRM)
14909service. It allows you to invoke commands on target Windows machines from
14910any machine that can run Python.")
14911 (license license:expat)))
14912
14913(define-public python-manimpango
14914 (package
14915 (name "python-manimpango")
14916 (version "0.5.0")
14917 (source
14918 (origin
14919 (method git-fetch) ; no tests data in PyPi package
14920 (uri (git-reference
14921 (url "https://github.com/ManimCommunity/ManimPango")
14922 (commit (string-append "v" version))))
14923 (file-name (git-file-name name version))
14924 (sha256
14925 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
14926 (build-system pyproject-build-system)
14927 (arguments
14928 (list
14929 #:phases
14930 #~(modify-phases %standard-phases
14931 (add-before 'check 'build-extensions
14932 (lambda _
14933 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
14934 (native-inputs
14935 (list pkg-config
14936 python-cython
14937 python-pytest
14938 python-setuptools
14939 python-wheel))
14940 (inputs
14941 (list pango))
14942 (home-page "https://manimpango.manim.community/")
14943 (synopsis "Bindings for Pango for using with Manim")
14944 (description
14945 "Python bindings for ManimPango which is a C binding for Pango,
14946using Cython.
14947
14948ManimPango is internally used in Manim to render (non-LaTeX) text.")
14949 (license license:expat)))
14950
14951(define-public python-cairocffi
14952 (package
14953 (name "python-cairocffi")
14954 (version "1.7.1")
14955 (source
14956 (origin
14957 ;; The PyPI archive does not include the documentation, so use Git.
14958 (method git-fetch)
14959 (uri (git-reference
14960 (url "https://github.com/Kozea/cairocffi")
14961 (commit (string-append "v" version))))
14962 (file-name (git-file-name name version))
14963 (sha256
14964 (base32
14965 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
14966 (build-system pyproject-build-system)
14967 (outputs '("out" "doc"))
14968 (inputs
14969 (list glib gtk+ gdk-pixbuf cairo))
14970 (native-inputs
14971 (list python-flit-core
14972 python-numpy
14973 python-pikepdf
14974 python-pytest
14975 python-sphinx
14976 python-sphinx-rtd-theme))
14977 (propagated-inputs
14978 (list python-xcffib)) ; used at run time
14979 (arguments
14980 (list
14981 #:phases
14982 #~(modify-phases %standard-phases
14983 (add-after 'unpack 'patch-paths
14984 (lambda* (#:key inputs #:allow-other-keys)
14985 (substitute* "cairocffi/__init__.py"
14986 ;; Hack the dynamic library loading mechanism.
14987 (("find_library\\(library_name\\)")
14988 "\"found\"")
14989 (("filenames = \\(library_filename,\\) \\+ filenames")
14990 "pass")
14991 (("libcairo.so.2")
14992 (search-input-file inputs "/lib/libcairo.so.2")))
14993 (substitute* "cairocffi/pixbuf.py"
14994 (("libgdk_pixbuf-2.0.so.0")
14995 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
14996 (("libgobject-2.0.so.0")
14997 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
14998 (("libglib-2.0.so.0")
14999 (search-input-file inputs "/lib/libglib-2.0.so.0"))
15000 (("libgdk-3.so.0")
15001 (search-input-file inputs "/lib/libgdk-3.so.0")))))
15002 (add-after 'install 'install-doc
15003 (lambda* (#:key inputs #:allow-other-keys)
15004 (let* ((data (string-append #$output:doc "/share"))
15005 (doc (string-append data "/doc/" #$name "-" #$version))
15006 (html (string-append doc "/html")))
15007 (setenv "LD_LIBRARY_PATH"
15008 (string-append (assoc-ref inputs "cairo") "/lib" ":"
15009 (assoc-ref inputs "gdk-pixbuf") "/lib"))
15010 (setenv "LANG" "en_US.UTF-8")
15011 (mkdir-p html)
15012 (for-each (lambda (file)
15013 (copy-file (string-append "." file)
15014 (string-append doc file)))
15015 '("/README.rst" "/NEWS.rst"))
15016 (system* "python" "setup.py" "build_sphinx")
15017 (copy-recursively "docs/_build/html" html)))))))
15018 (home-page "https://github.com/Kozea/cairocffi")
15019 (synopsis "Python bindings and object-oriented API for Cairo")
15020 (description
15021 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
15022Python bindings and object-oriented API for cairo. Cairo is a 2D vector
15023graphics library with support for multiple backends including image buffers,
15024PNG, PostScript, PDF, and SVG file output.")
15025 (license license:bsd-3)))
15026
15027(define-public python-decorator
15028 (package
15029 (name "python-decorator")
15030 (version "5.2.1")
15031 (source
15032 (origin
15033 (method url-fetch)
15034 (uri (pypi-uri "decorator" version))
15035 (sha256
15036 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
15037 (build-system pyproject-build-system)
15038 (arguments
15039 (list #:test-backend #~'custom
15040 #:test-flags #~(list "tests/test.py")))
15041 (native-inputs
15042 (list python-setuptools))
15043 (home-page "https://pypi.org/project/decorator/")
15044 (synopsis "Python module to simplify usage of decorators")
15045 (description
15046 "The aim of the decorator module is to simplify the usage of decorators
15047for the average programmer, and to popularize decorators usage giving examples
15048of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
15049etc. The core of this module is a decorator factory.")
15050 (license license:expat)))
15051
15052(define-public python-drmaa
15053 (package
15054 (name "python-drmaa")
15055 (version "0.7.7")
15056 (source
15057 (origin
15058 (method url-fetch)
15059 (uri (pypi-uri "drmaa" version))
15060 (sha256
15061 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
15062 (build-system pyproject-build-system)
15063 ;; The test suite requires libdrmaa which is provided by the cluster
15064 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
15065 ;; should be set to the path of the libdrmaa library.
15066 (arguments
15067 (list
15068 #:tests? #f
15069 #:phases
15070 #~(modify-phases %standard-phases
15071 ;; Loading the library fails because DRMAA_LIBRARY_PATH
15072 ;; is not configured.
15073 (delete 'sanity-check))))
15074 (native-inputs (list python-setuptools))
15075 (home-page "https://pypi.org/project/drmaa/")
15076 (synopsis "Python bindings for the DRMAA library")
15077 (description
15078 "A Python package for Distributed Resource Management (DRM) job
15079submission and control. This package is an implementation of the DRMAA 1.0
15080Python language binding specification.")
15081 (license license:bsd-3)))
15082
15083(define-public python-grako
15084 (package
15085 (name "python-grako")
15086 (version "3.99.9")
15087 (source
15088 (origin
15089 (method url-fetch)
15090 (uri (pypi-uri "grako" version ".zip"))
15091 (sha256
15092 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
15093 (snippet
15094 #~(begin (use-modules (guix build utils))
15095 (substitute* "grako/grammars.py"
15096 (("from collections import defaultdict, Mapping")
15097 (string-append "from collections import defaultdict\n"
15098 "from collections.abc import Mapping")))
15099 (substitute* '("grako/util.py"
15100 "grako/walkers.py")
15101 (("collections\\.Mapping") "collections.abc.Mapping"))))))
15102 (build-system pyproject-build-system)
15103 ;; XXX: Test file 'grako.ebnf' is missing from archive.
15104 (arguments (list #:tests? #f))
15105 (native-inputs (list unzip python-pytest python-setuptools))
15106 (home-page "https://pypi.org/project/grako")
15107 (synopsis "EBNF parser generator")
15108 (description
15109 "Grako takes a grammar in a variation of EBNF as input, and outputs a
15110memoizing PEG/Packrat parser in Python.")
15111 (license license:bsd-3)))
15112
15113(define-public python-grandalf
15114 (package
15115 (name "python-grandalf")
15116 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
15117 (version "0.8")
15118 (source
15119 (origin
15120 (method git-fetch)
15121 (uri (git-reference
15122 (url "https://github.com/bdcht/grandalf")
15123 (commit (string-append "v" version))))
15124 (file-name (git-file-name name version))
15125 (sha256
15126 (base32
15127 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
15128 (build-system pyproject-build-system)
15129 (arguments
15130 (list
15131 #:phases
15132 #~(modify-phases %standard-phases
15133 (add-before 'build 'patch-requirements
15134 (lambda _
15135 (substitute* "setup.py"
15136 (("install_requires=\\['pyparsing'],") "")))))))
15137 (native-inputs
15138 (list python-setuptools python-pytest))
15139 (propagated-inputs
15140 (list python-numpy python-ply))
15141 (home-page "https://github.com/bdcht/grandalf")
15142 (synopsis "Graph and drawing algorithms framework")
15143 (description
15144 "Grandalf is a Python package made for experimentations with graphs
15145drawing algorithms. It is written in pure Python, and currently implements
15146two layouts: the Sugiyama hierarchical layout and the force-driven or energy
15147minimization approach. While not as fast or featured as graphviz or other
15148libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
15149than thousands of nodes, while keeping the source code simple enough to tweak
15150and hack any part of it for experimental purpose. With a total of about 1500
15151lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
15152in less than 600 lines. The energy minimization approach is comprised of only
15153250 lines!
15154
15155Grandalf does only 2 not-so-simple things:
15156@itemize
15157@item computing the nodes (x,y) coordinates (based on provided nodes
15158dimensions, and a chosen layout)
15159@item routing the edges with lines or nurbs
15160@end itemize
15161
15162It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
15163will help you find where to draw things like nodes and edges, but it’s up to
15164you to actually draw things with your favorite toolkit.")
15165 ;; The user can choose either license.
15166 (license (list license:gpl2 license:epl1.0))))
15167
15168(define-public python-gridmap
15169 ;; XXX: Project is unmaintained since 2020-08-24, see:
15170 ;; <https://github.com/pygridtools/gridmap/issues/99>.
15171 (package
15172 (name "python-gridmap")
15173 (version "0.15.0")
15174 (source
15175 (origin
15176 (method git-fetch)
15177 (uri (git-reference
15178 (url "https://github.com/pygridtools/gridmap")
15179 (commit (string-append "v" version))))
15180 (file-name (git-file-name name version))
15181 (sha256
15182 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
15183 (build-system pyproject-build-system)
15184 (arguments
15185 (list #:tests? #f ;XXX: freezes or timeout
15186 #:test-backend #~'nose))
15187 (native-inputs
15188 (list ;; python-pynose
15189 python-setuptools))
15190 (propagated-inputs
15191 (list python-cherrypy
15192 python-cloudpickle
15193 python-psutil
15194 python-drmaa
15195 python-pyzmq))
15196 (home-page "https://github.com/pygridtools/gridmap")
15197 (synopsis "Create jobs on a cluster directly from Python")
15198 (description
15199 "Gridmap is a Python package to allow you to easily create jobs on the
15200cluster directly from Python. You can directly map Python functions onto the
15201cluster without needing to write any wrapper code yourself.")
15202 (license license:gpl3+)))
15203
15204(define-public python-honcho
15205 (package
15206 (name "python-honcho")
15207 (version "2.0.0")
15208 (source
15209 (origin
15210 (method git-fetch)
15211 (uri (git-reference
15212 (url "https://github.com/nickstenning/honcho")
15213 (commit (string-append "v" version))))
15214 (file-name (git-file-name name version))
15215 (sha256
15216 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
15217 (build-system pyproject-build-system)
15218 (arguments
15219 ;; Tests below fail with the error
15220 ;; ValueError: The 'honcho.export.xxx' package was not installed
15221 ;; in a way that PackageLoader understands.
15222 ;; Probably safe because it's testing for different init systems.
15223 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
15224 "--ignore" "tests/test_export_runit.py"
15225 "--ignore" "tests/test_export_supervisord.py"
15226 "--ignore" "tests/test_export_systemd.py"
15227 "--ignore" "tests/test_export_upstart.py")))
15228 (native-inputs
15229 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
15230 (propagated-inputs
15231 (list python-colorama))
15232 (home-page "https://github.com/nickstenning/honcho")
15233 (synopsis "Manage Procfile-based applications")
15234 (description
15235 "A Procfile is a file which describes how to run an application
15236consisting of several processes. honcho starts all listed processes.
15237The output of all running processes is collected by honcho and
15238displayed.")
15239 (license license:expat)))
15240
15241(define-public python-hsluv
15242 (package
15243 (name "python-hsluv")
15244 (version "5.0.4")
15245 (source
15246 (origin
15247 (method url-fetch)
15248 (uri (pypi-uri "hsluv" version))
15249 (sha256
15250 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
15251 (build-system pyproject-build-system)
15252 (native-inputs
15253 (list python-pytest python-setuptools))
15254 (home-page "https://www.hsluv.org")
15255 (synopsis "Human-friendly HSL colour space implemented in Python")
15256 (description
15257 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
15258@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
15259component that allows you to span all the available chroma as a neat
15260percentage.")
15261 (license license:expat)))
15262
15263(define-public python-pebble
15264 (package
15265 (name "python-pebble")
15266 (version "5.1.3")
15267 (source
15268 (origin
15269 (method git-fetch)
15270 (uri (git-reference
15271 (url "https://github.com/noxdafox/pebble")
15272 (commit version)))
15273 (file-name (git-file-name name version))
15274 (sha256
15275 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
15276 (build-system pyproject-build-system)
15277 (native-inputs (list python-pytest python-setuptools))
15278 (home-page "https://github.com/noxdafox/pebble")
15279 (synopsis "Threading and multiprocessing for Python")
15280 (description
15281 "Pebble aims to help manage threads and processes in an easier way. It
15282wraps Python's standard library threading and multiprocessing objects.")
15283 (license license:lgpl3+)))
15284
15285(define-public python-pexpect
15286 (package
15287 (name "python-pexpect")
15288 (version "4.9.0")
15289 (source
15290 (origin
15291 (method url-fetch)
15292 (uri (pypi-uri "pexpect" version))
15293 (sha256
15294 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
15295 (build-system pyproject-build-system)
15296 (arguments
15297 (list
15298 #:test-flags
15299 #~(list "-k" (string-join
15300 (list
15301 ;; Disable failing test, see
15302 ;; <https://github.com/pexpect/pexpect/issues/568>.
15303 "not test_bash"
15304 ;; Fails with attempt to find OpenSSL.
15305 "test_large_stdout_stream"
15306 ;; Tests fail while trying to find
15307 ;; tmp-pexpect-xxxxxxxxxxxx directories.
15308 "test_run_uses_env"
15309 "test_run_uses_env_path"
15310 "test_run_uses_env_path_over_path"
15311 "test_spawn_uses_env"
15312 ;; Fails with assertion error: assert 0 == 500
15313 "test_before_across_chunks"
15314 ;; Bash is enough for tests.
15315 "test_zsh")
15316 " and not "))
15317 #:phases
15318 #~(modify-phases %standard-phases
15319 (add-before 'check 'prepare-tests
15320 (lambda _
15321 (substitute* (find-files "tests")
15322 (("/bin/bash") (which "bash"))
15323 (("/bin/echo") (which "echo"))
15324 (("/bin/ls") (which "ls"))
15325 (("/bin/which") (which "which"))
15326 ;; Many tests try to use the /bin directory which is not
15327 ;; present in the build environment. Use one that's non-empty
15328 ;; and unlikely to change.
15329 (("/bin'") "/dev'")))))))
15330 (native-inputs
15331 (list bash ;full Bash for 'test_replwrap.py'
15332 man-db
15333 python-pytest
15334 python-setuptools
15335 python-wheel
15336 which))
15337 (propagated-inputs
15338 (list python-ptyprocess))
15339 (home-page "https://pexpect.readthedocs.org/")
15340 (synopsis "Controlling interactive console applications")
15341 (description
15342 "Pexpect is a pure Python module for spawning child applications;
15343controlling them; and responding to expected patterns in their output. Pexpect
15344works like Don Libes’ Expect. Pexpect allows your script to spawn a child
15345application and control it as if a human were typing commands.")
15346 (license license:isc)))
15347
15348(define-public python-sexpdata
15349 (package
15350 (name "python-sexpdata")
15351 (version "1.0.2")
15352 (source
15353 (origin
15354 (method url-fetch)
15355 (uri (pypi-uri "sexpdata" version))
15356 (sha256
15357 (base32
15358 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15359 (build-system pyproject-build-system)
15360 (arguments
15361 (list #:tests? #f)) ; no tests
15362 (native-inputs (list python-setuptools python-wheel))
15363 (home-page "https://github.com/jd-boyd/sexpdata")
15364 (synopsis "S-expression parser for Python")
15365 (description
15366 "Sexpdata is an S-expression parser/serializer. It has load and dump
15367functions like pickle, json or PyYAML module.")
15368 (license license:bsd-3)))
15369
15370(define-public python-pathable
15371 (package
15372 (name "python-pathable")
15373 (version "0.4.3")
15374 (source
15375 (origin
15376 (method url-fetch)
15377 (uri (pypi-uri "pathable" version))
15378 (sha256
15379 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15380 (build-system pyproject-build-system)
15381 (arguments (list #:tests? #false)) ;there are none
15382 (native-inputs (list python-poetry-core))
15383 (home-page "https://github.com/p1c2u/pathable")
15384 (synopsis "Object-oriented paths")
15385 (description "With this package you can traverse resources like paths and
15386access resources on demand with separate accessor layer.")
15387 (license license:asl2.0)))
15388
15389(define-public python-importlib-resources
15390 (package
15391 (name "python-importlib-resources")
15392 (version "6.5.2")
15393 (source (origin
15394 (method url-fetch)
15395 (uri (pypi-uri "importlib_resources" version))
15396 (sha256
15397 (base32
15398 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15399 (build-system pyproject-build-system)
15400 (native-inputs
15401 (list python-jaraco-test
15402 python-jaraco-collections
15403 python-pytest
15404 python-setuptools
15405 python-setuptools-scm
15406 python-zipp))
15407 (home-page "https://importlib-resources.readthedocs.io/")
15408 (synopsis "Read resources from Python packages")
15409 (description
15410 "@code{importlib_resources} is a backport of Python 3's standard library
15411@code{importlib.resources} module for Python 2.7, and Python 3.")
15412 (license license:asl2.0)))
15413
15414(define-public python-importlib-metadata
15415 (package
15416 (name "python-importlib-metadata")
15417 (version "8.7.0")
15418 (source
15419 (origin
15420 (method url-fetch)
15421 (uri (pypi-uri "importlib_metadata" version))
15422 (sha256
15423 (base32
15424 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15425 (build-system pyproject-build-system)
15426 (arguments
15427 (list #:test-flags #~(list "tests")))
15428 (native-inputs
15429 (list python-jaraco-test
15430 python-packaging-bootstrap
15431 python-pyfakefs
15432 python-pytest-bootstrap
15433 python-setuptools
15434 python-setuptools-scm))
15435 (propagated-inputs
15436 (list python-zipp))
15437 (home-page "https://importlib-metadata.readthedocs.io/")
15438 (synopsis "Read metadata from Python packages")
15439 (description
15440 "@code{importlib_metadata} is a library which provides an API for
15441accessing an installed Python package's metadata, such as its entry points or
15442its top-level name. This functionality intends to replace most uses of
15443@code{pkg_resources} entry point API and metadata API. Along with
15444@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15445need to use the older and less efficient @code{pkg_resources} package.")
15446 (license license:asl2.0)))
15447
15448(define-public python-importlib-metadata-argparse-version
15449 (package
15450 (name "python-importlib-metadata-argparse-version")
15451 (version "2.0.1")
15452 (home-page
15453 "https://github.com/mondeja/importlib-metadata-argparse-version")
15454 (source
15455 (origin
15456 (method git-fetch)
15457 (uri (git-reference
15458 (url home-page)
15459 (commit (string-append "v" version))))
15460 (file-name (git-file-name name version))
15461 (sha256
15462 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15463 (build-system pyproject-build-system)
15464 (native-inputs (list python-pytest python-hatchling))
15465 (synopsis "Get Python package version more efficiently")
15466 (description
15467 "This package provides an @code{argparse} action to define CLI version
15468with a delayed call to @code{importlib.metadata}, avoiding to load this module
15469when not needed.")
15470 (license license:bsd-3)))
15471
15472(define-public python-importmagic
15473 (package
15474 (name "python-importmagic")
15475 (version "0.1.7")
15476 (source
15477 (origin
15478 (method git-fetch)
15479 (uri (git-reference
15480 (url "https://github.com/alecthomas/importmagic")
15481 (commit version)))
15482 (file-name (git-file-name name version))
15483 (sha256
15484 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15485 (build-system pyproject-build-system)
15486 (native-inputs (list python-pytest python-setuptools))
15487 (home-page "https://github.com/alecthomas/importmagic")
15488 (synopsis "Library for adding, removing and managing Python imports")
15489 (description
15490 "Importmagic is a Python library for automatically managing imports by
15491finding unresolved symbols in Python code and their corresponding imports.")
15492 (license license:bsd-3)))
15493
15494(define-public python-inotify-simple
15495 (package
15496 (name "python-inotify-simple")
15497 (version "1.3.5")
15498 (source
15499 (origin
15500 (method git-fetch)
15501 (uri (git-reference
15502 (url "https://github.com/chrisjbillington/inotify_simple")
15503 (commit version)))
15504 (file-name (git-file-name name version))
15505 (sha256
15506 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15507 (build-system pyproject-build-system)
15508 (arguments
15509 (list
15510 #:test-backend #~'custom
15511 #:test-flags #~(list "example.py")))
15512 (native-inputs (list python-setuptools))
15513 (home-page "https://github.com/chrisjbillington/inotify_simple")
15514 (synopsis "Simple wrapper around inotify library")
15515 (description
15516 "@code{inotify-simple} is a simple wrapper around inotify library.")
15517 (license license:bsd-3)))
15518
15519(define-public python-interface-meta
15520 (package
15521 (name "python-interface-meta")
15522 (version "1.3.0")
15523 (source
15524 (origin
15525 (method url-fetch)
15526 (uri (pypi-uri "interface_meta" version))
15527 (sha256
15528 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
15529 (build-system pyproject-build-system)
15530 (native-inputs (list python-poetry-core python-pytest))
15531 (home-page "https://github.com/matthewwardrop/interface_meta")
15532 (synopsis
15533 "API for enforced method signatures and consistent documentation")
15534 (description
15535 "This package provides a convenient way to expose an extensible API with
15536enforced method signatures and consistent documentation.")
15537 (license license:expat)))
15538
15539(define-public python-jaraco-itertools
15540 (package
15541 (name "python-jaraco-itertools")
15542 (version "6.4.3")
15543 (source
15544 (origin
15545 (method git-fetch)
15546 (uri (git-reference
15547 (url "https://github.com/jaraco/jaraco.itertools")
15548 (commit (string-append "v" version))))
15549 (file-name (git-file-name name version))
15550 (sha256
15551 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
15552 (build-system pyproject-build-system)
15553 (arguments
15554 (list #:tests? #f)) ;no tests
15555 (native-inputs
15556 (list python-setuptools
15557 python-setuptools-scm))
15558 (propagated-inputs
15559 (list python-inflect
15560 python-more-itertools))
15561 (home-page "https://github.com/jaraco/jaraco.itertools")
15562 (synopsis "Tools for working with iterables")
15563 (description
15564 "This package provides an utility collection based on no longer
15565maintained @code{jaraco.util}.")
15566 (license license:expat)))
15567
15568(define-public python-jaraco-logging
15569 (package
15570 (name "python-jaraco-logging")
15571 (version "3.4.0")
15572 (source
15573 (origin
15574 (method git-fetch)
15575 (uri (git-reference
15576 (url "https://github.com/jaraco/jaraco.logging")
15577 (commit (string-append "v" version))))
15578 (file-name (git-file-name name version))
15579 (sha256
15580 (base32 "0c13wxbmk0rl1jd0fxp3p7qpsps8lj6p2wlkny2ng5z4qn21ahhi"))))
15581 (build-system pyproject-build-system)
15582 (native-inputs
15583 (list python-pytest
15584 python-setuptools
15585 python-setuptools-scm))
15586 (propagated-inputs
15587 (list python-tempora))
15588 (home-page "https://github.com/jaraco/jaraco.logging")
15589 (synopsis "Support for Python's logging facility")
15590 (description
15591 "This package allows soliciting log-level info from command-line
15592parameters.")
15593 (license license:expat)))
15594
15595(define-public python-jaraco-packaging
15596 (package
15597 (name "python-jaraco-packaging")
15598 (version "9.4.0") ;the latest version compatible with [email protected]
15599 (source
15600 (origin
15601 (method url-fetch)
15602 (uri (pypi-uri "jaraco.packaging" version))
15603 (sha256
15604 (base32
15605 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
15606 (build-system pyproject-build-system)
15607 (arguments
15608 (list #:tests? #f)) ;no tests in PyPI archive
15609 (native-inputs
15610 (list python-setuptools
15611 python-setuptools-scm))
15612 (propagated-inputs
15613 (list python-pypa-build
15614 python-virtualenv
15615 python-domdf-python-tools
15616 python-jaraco-context
15617 python-sphinx))
15618 (home-page "https://github.com/jaraco/jaraco.packaging")
15619 (synopsis "Tools to supplement packaging Python releases")
15620 (description
15621 "This package provides various tools to supplement packaging Python
15622releases.")
15623 (license license:expat)))
15624
15625(define-public python-jaraco-vcs
15626 (package
15627 (name "python-jaraco-vcs")
15628 (version "2.4.1")
15629 (source
15630 (origin
15631 (method git-fetch)
15632 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
15633 (commit (string-append "v" version))))
15634 (file-name (git-file-name name version))
15635 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
15636 (build-system pyproject-build-system)
15637 (arguments
15638 (list
15639 #:test-flags
15640 ;; Ignore doctests.
15641 #~(list "--ignore-glob=jaraco/vcs/*.py")))
15642 (propagated-inputs (list python-jaraco-classes
15643 python-jaraco-path
15644 python-jaraco-versioning
15645 python-more-itertools
15646 python-packaging
15647 python-dateutil
15648 python-tempora))
15649 (native-inputs (list python-pygments
15650 python-pytest
15651 python-pytest-home
15652 python-setuptools
15653 python-setuptools-scm))
15654 (home-page "https://github.com/jaraco/jaraco.vcs")
15655 (synopsis "Utilities for working with VCS repositories")
15656 (description
15657 "This package provides facilities for working with VCS repositories in
15658Python.")
15659 (license license:expat)))
15660
15661(define-public python-jaraco-versioning
15662 (package
15663 (name "python-jaraco-versioning")
15664 (version "1.1.0")
15665 (source
15666 (origin
15667 (method git-fetch)
15668 (uri (git-reference
15669 (url "https://github.com/jaraco/jaraco.versioning")
15670 (commit (string-append "v" version))))
15671 (file-name (git-file-name name version))
15672 (sha256
15673 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
15674 (build-system pyproject-build-system)
15675 (propagated-inputs (list python-packaging))
15676 (native-inputs
15677 (list python-pytest python-setuptools python-setuptools-scm))
15678 (home-page "https://github.com/jaraco/jaraco.versioning")
15679 (synopsis "Version manipulation utils")
15680 (description
15681 "This package builds upon @code{python-packaging} to provide more
15682sophisticated version manipulation.")
15683 (license license:expat)))
15684
15685(define-public python-pypytools
15686 (package
15687 (name "python-pypytools")
15688 (version "0.6.2")
15689 (source
15690 (origin
15691 (method git-fetch)
15692 (uri (git-reference
15693 (url "https://github.com/antocuni/pypytools/")
15694 (commit version)))
15695 (file-name (git-file-name name version))
15696 (sha256
15697 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
15698 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
15699 (build-system pyproject-build-system)
15700 (arguments
15701 (list
15702 ;; These tests are using deprecated py.code module.
15703 #:test-flags
15704 #~(list
15705 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
15706 "--deselect=pypytools/testing/test_codegen.py::test_def_"
15707 "--deselect=pypytools/testing/test_codegen.py::test_compile"
15708 "--ignore=pypytools/testing/test_unroll.py"
15709 ;; clone_func returns an object of the wrong type.
15710 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
15711 (native-inputs
15712 (list python-freezegun
15713 python-numpy
15714 python-pytest
15715 python-setuptools))
15716 (propagated-inputs (list python-py))
15717 (home-page "https://github.com/antocuni/pypytools/")
15718 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
15719 (description
15720 "This package provides a collection of useful tools to use PyPy-specific
15721features, with CPython fallbacks.")
15722 (license license:x11)))
15723
15724(define-public python-simplegeneric
15725 (package
15726 (name "python-simplegeneric")
15727 (version "0.8.1")
15728 (source
15729 (origin
15730 (method url-fetch)
15731 (uri (pypi-uri "simplegeneric" version ".zip"))
15732 (sha256
15733 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
15734 (build-system pyproject-build-system)
15735 (arguments
15736 (list
15737 #:test-backend #~'custom
15738 #:test-flags #~(list "-m" "simplegeneric")))
15739 (native-inputs
15740 (list unzip python-setuptools))
15741 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
15742 (synopsis "Python module for simple generic functions")
15743 (description
15744 "The simplegeneric module lets you define simple single-dispatch generic
15745functions, akin to Python’s built-in generic functions like @code{len()},
15746@code{iter()} and so on. However, instead of using specially-named methods,
15747these generic functions use simple lookup tables, akin to those used by
15748e.g. @code{pickle.dump()} and other generic functions found in the Python
15749standard library.")
15750 (license license:zpl2.1)))
15751
15752(define-public python-ipython-genutils
15753 ;; TODO: This package is retired, check if can be removed, see description.
15754 (package
15755 (name "python-ipython-genutils")
15756 (version "0.1.0")
15757 (source
15758 (origin
15759 (method url-fetch)
15760 (uri (pypi-uri "ipython_genutils" version))
15761 (sha256
15762 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
15763 (build-system pyproject-build-system)
15764 (arguments `(#:tests? #f)) ; no tests
15765 (native-inputs
15766 (list python-setuptools))
15767 (home-page "https://ipython.org")
15768 (synopsis "Vestigial utilities from IPython")
15769 (description
15770 "This package provides retired utilities from IPython. No packages
15771outside IPython/Jupyter should depend on it.
15772
15773This package shouldn't exist. It contains some common utilities shared by
15774Jupyter and IPython projects during The Big Split. As soon as possible, those
15775packages will remove their dependency on this, and this package will go
15776away.")
15777 (license license:bsd-3)))
15778
15779;;; Variant used to break a cycle with python-ipykernel.
15780(define-public python-ipyparallel-bootstrap
15781 (hidden-package
15782 (package
15783 (name "python-ipyparallel-bootstrap")
15784 (version "9.0.1")
15785 (source
15786 (origin
15787 (method url-fetch)
15788 (uri (pypi-uri "ipyparallel" version))
15789 (sha256
15790 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
15791 (build-system pyproject-build-system)
15792 (arguments
15793 (list
15794 #:tests? #f
15795 #:phases #~(modify-phases %standard-phases
15796 ;; The python-ipykernel is normally propagated but is
15797 ;; removed from this package to break the cycle.
15798 (delete 'sanity-check))))
15799 (native-inputs
15800 (list python-hatchling))
15801 (propagated-inputs
15802 (list python-dateutil
15803 python-decorator
15804 python-entrypoints
15805 python-ipython
15806 ;; python-ipykernel is omitted here to break a cycle.
15807 python-jupyter-client-bootstrap
15808 python-psutil
15809 python-pyzmq
15810 python-tornado
15811 python-tqdm
15812 python-traitlets))
15813 (home-page "https://ipython.org/")
15814 (synopsis "Interactive Parallel Computing with IPython")
15815 (description
15816 "@code{ipyparallel} is a Python package and collection of CLI scripts
15817for controlling clusters for Jupyter. @code{ipyparallel} contains the
15818following CLI scripts:
15819@enumerate
15820@item ipcluster - start/stop a cluster
15821@item ipcontroller - start a scheduler
15822@item ipengine - start an engine
15823@end enumerate")
15824 (license license:bsd-3))))
15825
15826(define-public python-ipyparallel
15827 (package
15828 (inherit python-ipyparallel-bootstrap)
15829 (name "python-ipyparallel")
15830 (arguments
15831 (list
15832 #:test-flags
15833 ;; Disable warning because DeprecationWarnings make tests fail.
15834 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
15835 (native-inputs
15836 (modify-inputs native-inputs
15837 (append python-ipython
15838 python-pytest
15839 python-pytest-asyncio
15840 python-pytest-tornado
15841 python-testpath)))
15842 (propagated-inputs
15843 (modify-inputs propagated-inputs
15844 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
15845 (append python-ipykernel)))
15846 (properties (alist-delete 'hidden? (package-properties
15847 python-ipyparallel-bootstrap)))))
15848
15849;; TODO: Package python-jupysql which is the maintained fork of this one.
15850(define-public python-ipython-sql
15851 (package
15852 (name "python-ipython-sql")
15853 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
15854 (revision . "0")))
15855 (version (git-version "0.5.0"
15856 (assoc-ref properties 'revision)
15857 (assoc-ref properties 'commit)))
15858 (source
15859 (origin
15860 (method git-fetch)
15861 (uri (git-reference
15862 (url "https://github.com/catherinedevlin/ipython-sql")
15863 (commit (assoc-ref properties 'commit))))
15864 (file-name (git-file-name name version))
15865 (sha256
15866 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
15867 (build-system pyproject-build-system)
15868 (arguments
15869 (list #:tests? #f ;Fail because of prettytable.
15870 #:phases
15871 #~(modify-phases %standard-phases
15872 (replace 'check
15873 (lambda* (#:key tests? #:allow-other-keys)
15874 (setenv "HOME" (getcwd))
15875 (if tests?
15876 (invoke "ipython" "-c"
15877 "import pytest; pytest.main(['.'])")
15878 (format #t "test suite not run.~%")))))))
15879 (native-inputs (list python-pytest python-setuptools))
15880 (propagated-inputs
15881 (list python-ipython
15882 python-ipython-genutils
15883 python-prettytable
15884 python-sqlalchemy-2
15885 python-sqlparse))
15886 (home-page "https://github.com/catherinedevlin/ipython-sql")
15887 (synopsis "RDBMS access via IPython")
15888 (description "This library connects to a database, using SQLAlchemy URL
15889connect strings, then issue SQL commands within IPython or IPython Notebook.")
15890 (license license:expat)))
15891
15892(define-public python-optree
15893 (package
15894 (name "python-optree")
15895 (version "0.14.0")
15896 (source
15897 (origin
15898 (method git-fetch)
15899 (uri (git-reference
15900 (url "https://github.com/metaopt/optree")
15901 (commit (string-append "v" version))))
15902 (file-name (git-file-name name version))
15903 (sha256
15904 (base32
15905 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
15906 (build-system pyproject-build-system)
15907 (arguments
15908 (list
15909 #:test-flags
15910 ;; These tests fails due to a circular import
15911 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
15912 " and not test_import_no_warnings"))))
15913 (propagated-inputs (list python-typing-extensions))
15914 (native-inputs
15915 (list python-pytest
15916 python-setuptools
15917 python-wheel
15918 cmake-minimal
15919 pybind11-2))
15920 (home-page "https://github.com/metaopt/optree")
15921 (synopsis "Optimized PyTree Utilities")
15922 (description "This package contains operations on PyTrees (a tree made of
15923container data structures in Python).")
15924 (license license:asl2.0)))
15925
15926(define-public python-backcall
15927 (package
15928 (name "python-backcall")
15929 (version "0.2.0")
15930 (source
15931 (origin
15932 (method git-fetch)
15933 (uri (git-reference
15934 (url "https://github.com/takluyver/backcall/")
15935 (commit version)))
15936 (file-name (git-file-name name version))
15937 (sha256
15938 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
15939 (build-system pyproject-build-system)
15940 (native-inputs (list python-flit-core python-pytest))
15941 (home-page "https://github.com/takluyver/backcall/")
15942 (synopsis "Specifications for callback functions passed in to an API")
15943 (description
15944 "If your code lets other people supply callback functions, it's important
15945to specify the function signature you expect, and check that functions support
15946that. Adding extra parameters later would break other peoples code unless
15947you're careful. The @code{backcall} package provides a way of specifying the
15948callback signature using a prototype function.")
15949 (license license:bsd-3)))
15950
15951(define-public python-pubmed-parser
15952 (package
15953 (name "python-pubmed-parser")
15954 (version "0.5.1")
15955 (source (origin
15956 (method git-fetch)
15957 (uri (git-reference
15958 (url "https://github.com/titipata/pubmed_parser")
15959 (commit version)))
15960 (file-name (git-file-name name version))
15961 (sha256
15962 (base32
15963 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
15964 (build-system pyproject-build-system)
15965 (arguments (list #:tests? #f)) ;; Tests require internet
15966 (native-inputs
15967 (list python-setuptools))
15968 (propagated-inputs
15969 (list python-lxml
15970 python-numpy
15971 python-requests
15972 python-six ;hard dependency
15973 python-unidecode))
15974 (home-page "https://titipata.github.io/pubmed_parser/")
15975 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
15976 (description
15977 "This package provides a Python parser for Pubmed Open-Access Subset and
15978MEDLINE XML repository.")
15979 (license license:expat)))
15980
15981(define-public python-pure-eval
15982 (package
15983 (name "python-pure-eval")
15984 (version "0.2.3")
15985 (source
15986 (origin
15987 (method url-fetch)
15988 (uri (pypi-uri "pure_eval" version))
15989 (sha256
15990 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
15991 (build-system pyproject-build-system)
15992 (native-inputs
15993 (list python-pytest
15994 python-setuptools
15995 python-setuptools-scm
15996 python-wheel))
15997 (home-page "https://github.com/alexmojaki/pure_eval")
15998 (synopsis "Python library to evaluate abstract syntax tree nodes")
15999 (description "The @code{pure_eval} Python library can safely evaluate
16000abstract syntax tree (AST) nodes without side effects.")
16001 (license license:expat)))
16002
16003(define-public python-puremagic
16004 (package
16005 (name "python-puremagic")
16006 (version "1.28")
16007 (source
16008 (origin
16009 (method git-fetch) ;no tests in PyPI archive
16010 (uri (git-reference
16011 (url "https://github.com/cdgriffith/puremagic")
16012 (commit version)))
16013 (file-name (git-file-name name version))
16014 (sha256
16015 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
16016 (build-system pyproject-build-system)
16017 (native-inputs
16018 (list python-pytest python-setuptools python-wheel))
16019 (home-page "https://github.com/cdgriffith/puremagic")
16020 (synopsis "Pure Python implementation of magic file detection")
16021 (description
16022 "This package implements a functionality that will identify a file based
16023off it's magic numbers.")
16024 (license license:expat)))
16025
16026(define-public python-ast-decompiler
16027 (package
16028 (name "python-ast-decompiler")
16029 (version "0.7.0")
16030 (source
16031 (origin
16032 (method url-fetch)
16033 (uri (pypi-uri "ast_decompiler" version))
16034 (sha256
16035 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
16036 ;; We need to manually create an __init__.py file under the tests/
16037 ;; directory, since it is not included in the distributed
16038 ;; version. (See:
16039 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
16040 (modules '((guix build utils)))
16041 (snippet '(call-with-output-file "tests/__init__.py"
16042 (const #t)))))
16043 (build-system pyproject-build-system)
16044 (native-inputs (list python-flit-core python-pytest))
16045 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
16046 (synopsis
16047 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
16048 (description
16049 "This library provides functionality to decompile @acronym{AST, Abstract
16050Syntax Tree} objects, as generated by the standard library @code{ast} module,
16051to Python code.")
16052 (license license:asl2.0)))
16053
16054(define-public python-asttokens
16055 (package
16056 (name "python-asttokens")
16057 (version "3.0.0")
16058 (source
16059 (origin
16060 (method url-fetch)
16061 (uri (pypi-uri "asttokens" version))
16062 (sha256
16063 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
16064 (build-system pyproject-build-system)
16065 (native-inputs
16066 (list python-astroid
16067 python-pytest
16068 python-setuptools
16069 python-setuptools-scm
16070 python-wheel))
16071 (home-page "https://github.com/gristlabs/asttokens")
16072 (synopsis "Python library to annotate abstract syntax trees")
16073 (description "The @code{asttokens} module annotates Python abstract syntax
16074trees (ASTs) with the positions of tokens and text in the source code that
16075generated them. It makes it possible for tools that work with logical AST
16076nodes to find the particular text that resulted in those nodes, for example
16077for automated refactoring or highlighting.")
16078 (license license:asl2.0)))
16079
16080(define-public python-littleutils
16081 (package
16082 (name "python-littleutils")
16083 (version "0.2.4")
16084 (source
16085 (origin
16086 (method url-fetch)
16087 (uri (pypi-uri "littleutils" version))
16088 (sha256
16089 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
16090 (build-system pyproject-build-system)
16091 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
16092 (native-inputs
16093 (list python-setuptools
16094 python-setuptools-scm
16095 python-wheel))
16096 (home-page "https://github.com/alexmojaki/littleutils")
16097 (synopsis "Python utility function collection")
16098 (description "@code{littleutils} is a small collection of Python utility
16099functions, useful in the context of writing unit tests among other uses.")
16100 (license license:expat)))
16101
16102(define-public python-ipython
16103 (package
16104 (name "python-ipython")
16105 (version "9.8.0")
16106 (source
16107 (origin
16108 (method git-fetch)
16109 (uri (git-reference
16110 (url "https://github.com/ipython/ipython")
16111 (commit version)))
16112 (file-name (git-file-name name version))
16113 (sha256
16114 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
16115 (build-system pyproject-build-system)
16116 (arguments
16117 (list
16118 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
16119 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
16120 #:test-backend #~'custom
16121 ;; XXX: It's a workaround to fix the error with module import
16122 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
16123 ;; <https://codeberg.org/guix/guix/issues/2108>.
16124 #:test-flags
16125 #~(list "-m" "pytest" "-vv"
16126 "-k" (string-join
16127 ;; These need git.
16128 (list "not test_json_getsysinfo"
16129 "IPython.utils.sysinfo.sys_info"
16130 ;; Failed: DID NOT RAISE
16131 "test_timeit_raise_on_interrupt"
16132 "test_script_raise_on_interrupt"
16133 "test_time_raise_on_interrupt")
16134 " and not "))
16135 #:phases
16136 #~(modify-phases %standard-phases
16137 (add-before 'check 'pre-check
16138 (lambda _
16139 (setenv "HOME" "/tmp"))))))
16140 (propagated-inputs
16141 (list python-decorator
16142 python-ipython-pygments-lexers
16143 python-jedi
16144 python-matplotlib-inline
16145 python-pexpect
16146 python-prompt-toolkit
16147 python-pygments
16148 python-stack-data
16149 python-traitlets
16150 python-typing-extensions))
16151 (native-inputs
16152 (list python-pytest
16153 python-pytest-asyncio
16154 python-setuptools
16155 python-testpath
16156 ;; [extra]
16157 ;; python-curio ;deprecated
16158 ;; python-ipykernel ;cycles
16159 ;; python-jupyter-ai ;not packaged
16160 python-matplotlib
16161 ;; python-nbclient ;cycles
16162 python-nbformat
16163 python-numpy
16164 python-pandas
16165 python-trio))
16166 (home-page "https://ipython.org")
16167 (synopsis "IPython is a tool for interactive computing in Python")
16168 (description
16169 "IPython provides a rich architecture for interactive computing with:
16170Powerful interactive shells, a browser-based notebook, support for interactive
16171data visualization, embeddable interpreters and tools for parallel
16172computing.")
16173 (properties '((cpe-name . "ipython")))
16174 (license license:bsd-3)))
16175
16176(define-public python-ipython-documentation
16177 (package
16178 (inherit python-ipython)
16179 (name "python-ipython-documentation")
16180 (version (package-version python-ipython))
16181 (arguments
16182 (list
16183 #:phases
16184 #~(modify-phases %standard-phases
16185 (add-after 'unpack 'set-pythonpath
16186 (lambda _
16187 ;; Ensure this fixed (via the
16188 ;; "python-ipython-documentation-chars.patch" patch) copy of
16189 ;; IPython gets used.
16190 (setenv "PYTHONPATH" (string-append (getcwd)))))
16191 (delete 'build)
16192 (delete 'check)
16193 (replace 'install
16194 (lambda* (#:key outputs #:allow-other-keys)
16195 (let* ((data (string-append #$output "/share"))
16196 (doc (string-append data "/doc/" #$name "-" #$version))
16197 (html (string-append doc "/html"))
16198 (info (string-append data "/info")))
16199 (invoke "make" "-C" "docs" "info" "html"
16200 (string-append "SPHINXOPTS=-j"
16201 (number->string (parallel-job-count))))
16202 (install-file "COPYING.rst" doc)
16203 (copy-recursively "examples" (string-append doc "/examples"))
16204 ;; Install HTML documentation.
16205 (copy-recursively "docs/build/html" html)
16206 ;; Likewise for the info manual.
16207 (install-file "docs/build/texinfo/ipython.info" info)
16208 (symlink (string-append html "/_images")
16209 (string-append info "/ipython-figures"))))))))
16210 (native-inputs
16211 (list graphviz
16212 python-docrepr
16213 python-ipykernel
16214 python-sphinx
16215 python-sphinx-rtd-theme
16216 python-sphinx-toml
16217 texinfo))))
16218
16219;; A bare minimal package, mainly to use in tests and reduce closure
16220;; size. Tests are left out in the main package to slim down native-inputs.
16221(define-public python-ipython-minimal
16222 (package/inherit python-ipython
16223 (name "python-ipython-minimal")
16224 (arguments
16225 (list #:tests? #f))
16226 (native-inputs
16227 (list python-setuptools))))
16228
16229(define-public python-ipython-pygments-lexers
16230 (package
16231 (name "python-ipython-pygments-lexers")
16232 (version "1.1.1")
16233 (source
16234 (origin
16235 (method git-fetch)
16236 (uri (git-reference
16237 (url "https://github.com/ipython/ipython-pygments-lexers/")
16238 (commit version)))
16239 (file-name (git-file-name name version))
16240 (sha256
16241 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
16242 (build-system pyproject-build-system)
16243 (propagated-inputs (list python-pygments))
16244 (native-inputs (list python-flit-core python-pytest))
16245 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
16246 (synopsis "Plugin for IPython code sessions")
16247 (description
16248 "This package defines a variety of Pygments lexers for highlighting IPython
16249code.")
16250 (license license:bsd-3)))
16251
16252(define-public python-pydbus
16253 (package
16254 (name "python-pydbus")
16255 (version "0.6.0")
16256 (source
16257 (origin
16258 (method url-fetch)
16259 (uri (pypi-uri "pydbus" version))
16260 (sha256
16261 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
16262 (build-system pyproject-build-system)
16263 (arguments
16264 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
16265 #:phases
16266 #~(modify-phases %standard-phases
16267 (add-after 'unpack 'fix-comparability-with-pygobject
16268 (lambda _
16269 (substitute* "pydbus/_inspect3.py"
16270 (("getargspec")
16271 "getfullargspec")))))))
16272 (native-inputs
16273 (list python-setuptools
16274 python-wheel))
16275 (propagated-inputs
16276 (list python-pygobject))
16277 (home-page "https://github.com/LEW21/pydbus")
16278 (synopsis "Pythonic D-Bus library")
16279 (description
16280 "Pydbus provides a pythonic interface to the D-Bus message bus system.
16281Pydbus can be used to access remote objects and also for object publication.
16282It is based on PyGI, the Python GObject Introspection bindings, which is the
16283recommended way to use GLib from Python.")
16284 (license license:lgpl2.1+)))
16285
16286(define-public python-dbus-1.2
16287 (package
16288 (name "python-dbus")
16289 (version "1.2.18")
16290 (source
16291 (origin
16292 (method url-fetch)
16293 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
16294 "dbus-python-" version ".tar.gz"))
16295 (sha256
16296 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
16297 (build-system gnu-build-system)
16298 (native-inputs
16299 (list pkg-config
16300 python-setuptools))
16301 (inputs
16302 `(("python" ,python-wrapper)
16303 ("dbus-glib" ,dbus-glib)))
16304 (synopsis "Python bindings for D-bus")
16305 (description "python-dbus provides bindings for libdbus, the reference
16306implementation of D-Bus.")
16307 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
16308 (license license:expat)))
16309
16310(define-public python-dasbus
16311 (package
16312 (name "python-dasbus")
16313 (version "1.7")
16314 (source
16315 (origin
16316 (method git-fetch)
16317 (uri (git-reference
16318 (url "https://github.com/dasbus-project/dasbus")
16319 (commit (string-append "v" version))))
16320 (file-name (git-file-name name version))
16321 (sha256
16322 (base32 "1dii0skg7pqi4jhy1dkshqmn49i5ngq92sw7w7j4sxd3g8pjhj46"))))
16323 (build-system pyproject-build-system)
16324 (arguments
16325 (list
16326 #:phases
16327 #~(modify-phases %standard-phases
16328 (replace 'check
16329 (lambda* (#:key tests? (test-flags '()) #:allow-other-keys)
16330 (when tests?
16331 (apply invoke "dbus-launch" "pytest" "-vv" test-flags)))))))
16332 (native-inputs
16333 (list dbus
16334 python-hatchling
16335 python-pytest
16336 python-setuptools))
16337 (propagated-inputs
16338 (list python-pygobject))
16339 (home-page "https://dasbus.readthedocs.io/")
16340 (synopsis "DBus library in Python")
16341 (description
16342 "This DBus library is written in Python, based on GLib and inspired by
16343@code{pydbus}.")
16344 (license license:lgpl2.1+)))
16345
16346(define-public python-notify2
16347 (package
16348 (name "python-notify2")
16349 (version "0.3.1")
16350 (source
16351 (origin
16352 (method url-fetch)
16353 (uri (pypi-uri "notify2" version))
16354 (sha256
16355 (base32
16356 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
16357 (build-system pyproject-build-system)
16358 (arguments (list #:tests? #f)) ; tests depend on system state
16359 (native-inputs (list python-setuptools))
16360 (propagated-inputs (list python-dbus))
16361 (home-page "https://bitbucket.org/takluyver/pynotify2")
16362 (synopsis "Python interface to D-Bus notifications")
16363 (description
16364 "Pynotify2 provides a Python interface for sending D-Bus notifications.
16365It is a reimplementation of pynotify in pure Python, and an alternative to
16366the GObject Introspection bindings to libnotify for non-GTK applications.")
16367 (license (list license:bsd-2
16368 license:lgpl2.1+))))
16369
16370;; beautifulsoup4 has a totally different namespace than 3.x,
16371;; and pypi seems to put it under its own name, so I guess we should too
16372(define-public python-beautifulsoup4
16373 (package
16374 (name "python-beautifulsoup4")
16375 (version "4.14.3")
16376 (source
16377 (origin
16378 (method url-fetch)
16379 (uri (pypi-uri "beautifulsoup4" version))
16380 (sha256
16381 (base32
16382 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
16383 (build-system pyproject-build-system)
16384 (native-inputs
16385 (list python-hatchling
16386 python-pytest))
16387 (propagated-inputs
16388 (list python-soupsieve
16389 python-typing-extensions
16390 ;; [optional]
16391 python-cchardet
16392 python-chardet
16393 python-charset-normalizer
16394 python-html5lib
16395 python-lxml))
16396 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
16397 (synopsis "Python screen-scraping library")
16398 (description
16399 "Beautiful Soup is a Python library designed for rapidly setting up
16400screen-scraping projects. It offers Pythonic idioms for navigating,
16401searching, and modifying a parse tree, providing a toolkit for
16402dissecting a document and extracting what you need. It automatically
16403converts incoming documents to Unicode and outgoing documents to UTF-8.")
16404 (license license:expat)))
16405
16406(define-public python-beautifulsoup4-bootstrap
16407 (hidden-package
16408 (package/inherit python-beautifulsoup4
16409 (arguments
16410 (list #:tests? #f))
16411 (native-inputs
16412 (list python-hatchling))
16413 (propagated-inputs '()))))
16414
16415
16416(define-public python-netifaces
16417 (package
16418 (name "python-netifaces")
16419 (version "0.11.0")
16420 (source
16421 (origin
16422 (method url-fetch)
16423 (uri (pypi-uri "netifaces" version))
16424 (sha256
16425 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16426 (build-system pyproject-build-system)
16427 (arguments
16428 (list
16429 #:test-backend #~'custom
16430 #:test-flags #~(list "test.py")))
16431 (native-inputs (list python-setuptools))
16432 (home-page "https://github.com/al45tair/netifaces")
16433 (synopsis "Python module for portable network interface information")
16434 (description
16435 "Netifaces is a Python module providing information on network
16436interfaces in an easy and portable manner.")
16437 (license license:expat)))
16438
16439(define-public python-networkx
16440 (package
16441 (name "python-networkx")
16442 (version "3.4.2")
16443 (source
16444 (origin
16445 (method url-fetch)
16446 (uri (pypi-uri "networkx" version))
16447 (sha256
16448 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16449 (build-system pyproject-build-system)
16450 (arguments
16451 (list
16452 #:test-flags
16453 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16454 (native-inputs
16455 (list python-pytest
16456 python-pytest-xdist
16457 python-setuptools
16458 python-wheel))
16459 (propagated-inputs
16460 (list python-decorator))
16461 (home-page "https://networkx.github.io/")
16462 (synopsis "Python module for creating and manipulating graphs and networks")
16463 (description
16464 "NetworkX is a Python package for the creation, manipulation, and study
16465of the structure, dynamics, and functions of complex networks.")
16466 (license license:bsd-3)))
16467
16468(define-public python-datrie
16469 (package
16470 (name "python-datrie")
16471 (version "0.8.3")
16472 (source
16473 (origin
16474 (method git-fetch)
16475 (uri (git-reference
16476 (url "https://github.com/kmike/datrie")
16477 (commit version)))
16478 (file-name (git-file-name name version))
16479 (sha256
16480 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16481 (build-system pyproject-build-system)
16482 (arguments
16483 (list
16484 #:phases
16485 #~(modify-phases %standard-phases
16486 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16487 (lambda* (#:key inputs #:allow-other-keys)
16488 (let* ((headers (search-input-directory inputs
16489 "include/datrie"))
16490 (base (dirname (dirname headers))))
16491 (symlink headers "libdatrie/datrie")
16492 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16493 (add-before 'build 'relax-gcc-14-strictness
16494 (lambda _
16495 (setenv "CFLAGS"
16496 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16497 (native-inputs
16498 (list python-cython python-hypothesis python-pytest python-setuptools))
16499 (inputs (list libdatrie))
16500 (home-page "https://github.com/kmike/datrie")
16501 (synopsis "Fast, efficiently stored trie for Python")
16502 (description
16503 "This package provides a fast, efficiently stored trie implementation for
16504Python.")
16505 (license license:lgpl2.1+)))
16506
16507(define-public python-amply
16508 (package
16509 (name "python-amply")
16510 (version "0.1.6")
16511 (source
16512 (origin
16513 (method url-fetch)
16514 (uri (pypi-uri "amply" version))
16515 (sha256
16516 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16517 (build-system pyproject-build-system)
16518 (native-inputs
16519 (list python-pytest
16520 python-setuptools
16521 python-setuptools-scm
16522 python-wheel))
16523 (propagated-inputs
16524 (list python-docutils
16525 python-pyparsing))
16526 (home-page "https://github.com/willu47/amply")
16527 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16528 (description
16529 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16530structures.")
16531 (license license:epl1.0)))
16532
16533(define-public python-pulp
16534 ;; When updating, check snakemake@N builds still fine, see:
16535 ;; <https://codeberg.org/guix/guix/issues/4782>.
16536 (package
16537 (name "python-pulp")
16538 (version "2.4")
16539 (source
16540 (origin
16541 (method url-fetch)
16542 (uri (pypi-uri "PuLP" version))
16543 (sha256
16544 (base32
16545 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
16546 (build-system pyproject-build-system)
16547 (arguments
16548 ;; TODO: They need a special setup, see:
16549 ;; <https://codeberg.org/guix/guix/pulls/4908>.
16550 (list #:tests? #f))
16551 (native-inputs
16552 (list python-setuptools))
16553 (propagated-inputs
16554 (list python-amply))
16555 (home-page "https://github.com/coin-or/pulp")
16556 (synopsis "Linear Programming modeler")
16557 (description
16558 "PuLP is a Linear Programming modeler written in Python. PuLP can
16559generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
16560solve linear problems.")
16561 (license license:expat)))
16562
16563(define-public python-py-partiql-parser
16564 (package
16565 (name "python-py-partiql-parser")
16566 (version "0.6.3")
16567 (source
16568 (origin
16569 (method git-fetch)
16570 (uri (git-reference
16571 (url "https://github.com/getmoto/py-partiql-parser")
16572 (commit version)))
16573 (file-name (git-file-name name version))
16574 (sha256
16575 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
16576 (build-system pyproject-build-system)
16577 (native-inputs
16578 (list python-hatchling
16579 python-pytest))
16580 (home-page "https://pypi.org/project/py-partiql-parser/")
16581 (synopsis "Pure Python PartiQL Parser")
16582 (description
16583 "This package provides a tokenizer/parser/executor for the PartiQL
16584language, in Python.")
16585 (license license:expat)))
16586
16587(define-public python-py-tes
16588 (package
16589 (name "python-py-tes")
16590 (version "0.4.2")
16591 (source
16592 (origin
16593 (method git-fetch)
16594 (uri (git-reference
16595 (url "https://github.com/ohsu-comp-bio/py-tes")
16596 (commit version)))
16597 (file-name (git-file-name name version))
16598 (sha256
16599 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
16600 (build-system pyproject-build-system)
16601 (native-inputs
16602 (list python-pytest python-requests-mock python-setuptools))
16603 (propagated-inputs
16604 (list python-attrs python-dateutil python-future python-requests))
16605 (home-page "https://github.com/ohsu-comp-bio/py-tes")
16606 (synopsis "Library for communicating with the GA4GH Task Execution API")
16607 (description "This package provides a library for communicating with the
16608GA4GH Task Execution API.")
16609 (license license:expat)))
16610
16611(define-public python-altgraph
16612 (package
16613 (name "python-altgraph")
16614 (version "0.17.4")
16615 (source
16616 (origin
16617 (method url-fetch)
16618 (uri (pypi-uri "altgraph" version))
16619 (sha256
16620 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
16621 (build-system pyproject-build-system)
16622 (native-inputs (list python-pytest python-setuptools python-wheel))
16623 (home-page "https://altgraph.readthedocs.io")
16624 (synopsis "Python graph network package")
16625 (description
16626"This package provides tools for constructing graphs, BFS and DFS
16627traversals, topological sort, shortest paths, and more with graphviz
16628output.")
16629 (license license:expat)))
16630
16631(define-public python-pyqrcode
16632 (package
16633 (name "python-pyqrcode")
16634 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
16635 (revision . "0")))
16636 (version (git-version "1.2.1"
16637 (assoc-ref properties 'revision)
16638 (assoc-ref properties 'commit)))
16639 (source
16640 (origin
16641 (method git-fetch)
16642 (uri (git-reference
16643 (url "https://github.com/mnooner256/pyqrcode")
16644 (commit (assoc-ref properties 'commit))))
16645 (file-name (git-file-name name version))
16646 (sha256
16647 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
16648 (build-system pyproject-build-system)
16649 (arguments (list #:test-backend #~'nose))
16650 (native-inputs (list python-pynose python-pypng python-setuptools))
16651 (home-page "https://github.com/mnooner256/pyqrcode")
16652 (synopsis "QR code generator")
16653 (description
16654 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
16655PNG and terminal output.")
16656 (license license:bsd-3)))
16657
16658(define-public python-seaborn
16659 (package
16660 (name "python-seaborn")
16661 (version "0.13.2")
16662 (source (origin
16663 (method url-fetch)
16664 (uri (pypi-uri "seaborn" version))
16665 (sha256
16666 (base32
16667 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
16668 (build-system pyproject-build-system)
16669 (arguments
16670 (list
16671 ;; tests: 2354 passed, 16 skipped, 6 xfailed, 224 warnings
16672 #:test-flags
16673 #~(list "--numprocesses" (number->string (parallel-job-count))
16674 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
16675 ;; KeyError: 'labelleft'
16676 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
16677 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
16678 ;; AttributeError: module 'numpy' has no attribute
16679 ;; 'VisibleDeprecationWarning'
16680 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
16681 (native-inputs
16682 (list python-flit-core
16683 python-pytest-8
16684 python-pytest-xdist))
16685 (propagated-inputs
16686 (list python-matplotlib
16687 python-numpy
16688 python-pandas
16689 python-scipy
16690 python-statsmodels))
16691 (home-page "https://seaborn.pydata.org/")
16692 (synopsis "Statistical data visualization")
16693 (description
16694 "Seaborn is a library for making attractive and informative statistical
16695graphics in Python. It is built on top of matplotlib and tightly integrated
16696with the PyData stack, including support for numpy and pandas data structures
16697and statistical routines from scipy and statsmodels.")
16698 (license license:bsd-3)))
16699
16700(define-public python-session-info
16701 (package
16702 (name "python-session-info")
16703 (version "1.0.0")
16704 (source
16705 (origin
16706 (method git-fetch)
16707 (uri (git-reference
16708 (url "https://gitlab.com/joelostblom/session_info")
16709 (commit version)))
16710 (file-name (git-file-name name version))
16711 (sha256
16712 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
16713 (build-system pyproject-build-system)
16714 (arguments (list #:tests? #f)) ; No tests.
16715 (native-inputs (list python-setuptools))
16716 (propagated-inputs (list python-stdlib-list))
16717 (home-page "https://gitlab.com/joelostblom/session_info")
16718 (synopsis "Output version information for modules currently loaded")
16719 (description
16720 "This package outputs version information for modules loaded in the current
16721session, Python, and the OS.")
16722 (license license:bsd-3)))
16723
16724(define-public python-mpmath
16725 (package
16726 (name "python-mpmath")
16727 (version "1.3.0")
16728 (source
16729 (origin
16730 (method git-fetch)
16731 (uri (git-reference
16732 (url "https://github.com/fredrik-johansson/mpmath")
16733 (commit version)))
16734 (file-name (git-file-name name version))
16735 (sha256
16736 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
16737 (build-system pyproject-build-system)
16738 (native-inputs
16739 (list python-pytest
16740 python-setuptools
16741 python-setuptools-scm))
16742 (home-page "https://mpmath.org")
16743 (synopsis "Arbitrary-precision floating-point arithmetic in python")
16744 (description
16745 "@code{mpmath} can be used as an arbitrary-precision substitute for
16746Python's float/complex types and math/cmath modules, but also does much
16747more advanced mathematics.")
16748 (license license:bsd-3)))
16749
16750(define-public python-bigfloat
16751 (package
16752 (name "python-bigfloat")
16753 (version "0.4.0")
16754 (source
16755 (origin
16756 (method url-fetch)
16757 (uri (pypi-uri "bigfloat" version))
16758 (sha256
16759 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
16760 (snippet '(delete-file "mpfr.c"))))
16761 (build-system pyproject-build-system)
16762 (arguments
16763 (list
16764 #:test-flags
16765 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
16766 ;; but I don't know what to do about it.
16767 '(list "-k" "not test_hash")
16768 #:phases
16769 '(modify-phases %standard-phases
16770 (add-before 'build 'cythonize
16771 (lambda _ (invoke "cython" "mpfr.pyx"))))))
16772 (inputs (list mpfr))
16773 (native-inputs
16774 (list python-cython python-pytest python-setuptools python-wheel))
16775 (propagated-inputs
16776 (list python-six))
16777 (home-page "https://github.com/mdickinson/bigfloat")
16778 (synopsis "Arbitrary precision floating-point arithmetic for Python")
16779 (description
16780 "This package provides a Python interface to the MPFR library for
16781multiprecision arithmetic.")
16782 (license license:lgpl3+)))
16783
16784(define-public python-plac
16785 (package
16786 (name "python-plac")
16787 (version "1.4.3")
16788 (source
16789 (origin
16790 (method git-fetch)
16791 (uri (git-reference
16792 (url "https://github.com/ialbert/plac")
16793 (commit (string-append "v" version))))
16794 (file-name (git-file-name name version))
16795 (sha256
16796 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
16797 (build-system pyproject-build-system)
16798 (arguments
16799 (list
16800 #:phases
16801 #~(modify-phases %standard-phases
16802 (add-after 'unpack 'fix-tkinter
16803 (lambda _
16804 (substitute* "plac_tk.py"
16805 (("from Tkinter import Tk")
16806 "from tkinter import Tk")
16807 (("from ScrolledText import ScrolledText")
16808 "from tkinter.scrolledtext import ScrolledText")))))))
16809 (native-inputs
16810 (list (list python "tk") python-pytest python-setuptools))
16811 (home-page "https://github.com/ialbert/plac")
16812 (synopsis "Command line arguments parser")
16813 (description
16814 "This package can generate command line parameters from function
16815signatures.")
16816 (license license:bsd-3)))
16817
16818(define-public python-q
16819 (package
16820 (name "python-q")
16821 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
16822 (revision . "0")))
16823 (version (git-version "2.7"
16824 (assoc-ref properties 'revision)
16825 (assoc-ref properties 'commit)))
16826 (source
16827 (origin
16828 (method git-fetch)
16829 (uri (git-reference
16830 (url "https://github.com/zestyping/q")
16831 (commit (assoc-ref properties 'commit))))
16832 (file-name (git-file-name name version))
16833 (sha256
16834 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
16835 (build-system pyproject-build-system)
16836 (arguments
16837 (list
16838 ;; Deduced from the makefile.
16839 #:test-backend #~'custom
16840 #:test-flags #~(list "test/test_basic.py")
16841 #:phases
16842 #~(modify-phases %standard-phases
16843 (add-before 'check 'configure-tests
16844 (lambda* (#:key tests? #:allow-other-keys)
16845 (when tests?
16846 (setenv "TMPDIR" "/tmp")))))))
16847 (native-inputs (list python-setuptools))
16848 (home-page "https://github.com/zestyping/q")
16849 (synopsis "Quick-and-dirty debugging output for tired programmers")
16850 (description
16851 "q is a Python module for \"print\" style of debugging Python code. It
16852provides convenient short API for print out of values, tracebacks, and
16853falling into the Python interpreter.")
16854 (license license:asl2.0)))
16855
16856(define-public python-qnorm
16857 (package
16858 (name "python-qnorm")
16859 (version "0.9.0")
16860 (source
16861 (origin
16862 (method git-fetch)
16863 (uri (git-reference
16864 (url "https://github.com/Maarten-vd-Sande/qnorm")
16865 (commit (string-append "v" version))))
16866 (file-name (git-file-name name version))
16867 (sha256
16868 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
16869 (build-system pyproject-build-system)
16870 (propagated-inputs
16871 (list python-numba python-numpy python-pandas
16872 ;; XXX: pandas optional dependencies.
16873 python-tables python-pyarrow python-fastparquet))
16874 (native-inputs (list python-setuptools))
16875 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
16876 (synopsis "Quantile normalization")
16877 (description
16878 "This tool implements quantile normalization. It properly resolves rank
16879ties, which is important when ties happen frequently, such as when working
16880with discrete numbers (integers) in count tables. This implementation should
16881be relatively fast, and can use multiple cores to sort the columns and
16882tie-resolvement is accelerated by numba.")
16883 (license license:expat)))
16884
16885(define-public python-quantlaw
16886 (package
16887 (name "python-quantlaw")
16888 (version "0.0.7")
16889 (source
16890 (origin
16891 (method git-fetch)
16892 (uri (git-reference
16893 (url "https://github.com/Quantlaw/quantlaw")
16894 (commit (string-append "v" version))))
16895 (file-name (git-file-name name version))
16896 (sha256
16897 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
16898 (build-system pyproject-build-system)
16899 (arguments
16900 (list
16901 #:test-flags
16902 #~(list "-k"
16903 ;; test expects network access
16904 "not test_load_statue_names")))
16905 (native-inputs (list python-pytest python-setuptools))
16906 (propagated-inputs (list python-beautifulsoup4 python-networkx
16907 python-pandas python-regex python-requests))
16908 (home-page "https://quantlaw.readthedocs.io/")
16909 (synopsis "Coding utilities for quantitative legal studies")
16910 (description
16911 "This package provides coding utilities for quantitative legal studies.")
16912 (license license:bsd-3)))
16913
16914(define-public python-singledispatch
16915 (package
16916 (name "python-singledispatch")
16917 (version "4.0.0")
16918 (source
16919 (origin
16920 (method url-fetch)
16921 (uri (pypi-uri "singledispatch" version))
16922 (sha256
16923 (base32
16924 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
16925 (build-system pyproject-build-system)
16926 (native-inputs
16927 (list python-pytest
16928 python-setuptools
16929 python-six ; required for conversion, not at run-time
16930 python-wheel))
16931 (home-page
16932 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
16933 (synopsis "Backport of singledispatch feature from Python 3.4")
16934 (description
16935 "This library brings functools.singledispatch from Python 3.4 to Python
169362.6-3.3.")
16937 (license license:expat)))
16938
16939(define-public python-pyzmq
16940 (package
16941 (name "python-pyzmq")
16942 (version "27.1.0")
16943 (source
16944 (origin
16945 (method git-fetch)
16946 (uri (git-reference
16947 (url "https://github.com/zeromq/pyzmq")
16948 (commit (string-append "v" version))))
16949 (file-name (git-file-name name version))
16950 (sha256
16951 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
16952 (build-system pyproject-build-system)
16953 (arguments
16954 (list
16955 #:test-flags
16956 '(list "-m" "not flaky")
16957 #:phases
16958 #~(modify-phases %standard-phases
16959 (add-before 'build 'configure
16960 (lambda _
16961 ;; Our zeromq package is built with '--enable-drafts'; also
16962 ;; enable draft support for pyzmq so the draft test passes.
16963 (setenv "ZMQ_DRAFT_API" "1")
16964 ;; Make sure to prevent building bundled libzmq.
16965 (setenv "PYZMQ_NO_BUNDLE" "1")))
16966 (add-before 'check 'delete-source
16967 ;; To prevent loading it and skip build extensions one more times.
16968 (lambda _
16969 (delete-file-recursively "zmq"))))))
16970 (native-inputs
16971 (list cmake-minimal
16972 ;; python-cffi ; for PyPy
16973 python-cython
16974 python-packaging
16975 python-pytest
16976 python-pytest-asyncio
16977 python-scikit-build-core
16978 python-tornado))
16979 (inputs
16980 (list libsodium
16981 zeromq))
16982 (home-page "https://github.com/zeromq/pyzmq")
16983 (synopsis "Python bindings for 0MQ")
16984 (description
16985 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
16986 (license license:bsd-4)))
16987
16988(define-public python-immutabledict
16989 (package
16990 (name "python-immutabledict")
16991 (version "4.2.0")
16992 (source
16993 (origin
16994 (method url-fetch)
16995 (uri (pypi-uri "immutabledict" version))
16996 (sha256
16997 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
16998 (build-system pyproject-build-system)
16999 (native-inputs
17000 (list python-poetry-core python-pytest))
17001 (home-page "https://github.com/corenting/immutabledict")
17002 (synopsis "Immutable wrapper around dictionaries")
17003 (description
17004 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
17005It implements the complete mapping interface and can be used as a drop-in
17006replacement for dictionaries where immutability is desired.")
17007 (license license:expat)))
17008
17009(define-public python-emoji
17010 (package
17011 (name "python-emoji")
17012 (version "2.12.1")
17013 (source
17014 (origin
17015 (method url-fetch)
17016 (uri (pypi-uri "emoji" version))
17017 (sha256
17018 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
17019 (build-system pyproject-build-system)
17020 (propagated-inputs (list python-typing-extensions))
17021 (native-inputs
17022 (list python-pytest
17023 python-setuptools
17024 python-wheel))
17025 (home-page "https://github.com/carpedm20/emoji/")
17026 (synopsis "Emoji terminal output for Python")
17027 (description
17028 "This package provides Emoji terminal output for Python. The
17029entire set of Emoji codes as defined by the Unicode Consortium is supported in
17030addition to a bunch of aliases.")
17031 (license license:bsd-3)))
17032
17033;; TODO: Remove this package when upgrading python-gh-md-to-html to the
17034;; latest version. The latest gh-md-to-html does not build successfully from
17035;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
17036;; version 1.21.2 from failing.
17037;; https://issues.guix.gnu.org/72102
17038;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
17039(define-public python-emoji-for-gh-md-to-html
17040 (package
17041 (inherit python-emoji)
17042 (version "1.6.1")
17043 (source
17044 (origin
17045 (method url-fetch)
17046 (uri (pypi-uri "emoji" version))
17047 (sha256
17048 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
17049
17050(define-public python-sarge
17051 (package
17052 (name "python-sarge")
17053 (version "0.1.7.post1") ;post release only to correct errors in metadata
17054 (source
17055 (origin
17056 (method git-fetch)
17057 (uri (git-reference
17058 (url "https://github.com/vsajip/sarge")
17059 (commit version)))
17060 (file-name (git-file-name name version))
17061 (sha256
17062 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
17063 (build-system pyproject-build-system)
17064 (native-inputs (list python-pytest python-setuptools))
17065 (home-page "https://docs.red-dove.com/sarge/")
17066 (synopsis "Subprocess wrapper with command pipeline functionality")
17067 (description "@code{sarge} is a wrapper for subprocess which provides
17068command pipeline functionality.")
17069 (license license:bsd-3)))
17070
17071(define-public python-sentry-sdk
17072 ;; TODO: Move to (gnu packages python-web).
17073 (package
17074 (name "python-sentry-sdk")
17075 (version "2.59.0")
17076 (source
17077 (origin
17078 (method git-fetch)
17079 (uri (git-reference
17080 (url "https://github.com/getsentry/sentry-python")
17081 (commit version)))
17082 (file-name (git-file-name name version))
17083 (sha256
17084 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
17085 (build-system pyproject-build-system)
17086 (arguments
17087 (list
17088 ;; tests: 2119 passed, 128 skipped, 224 warnings
17089 #:test-flags
17090 #~(list "--durations=10"
17091 "--numprocesses" (number->string (parallel-job-count))
17092 ;; The whole test suite is quite shaky, may fail unpredictably
17093 ;; and depends on many additional inputs to enable all
17094 ;; integration tests.
17095 "-k" (string-join
17096 (list "not test_aggregates"
17097 "test_aggregates_deprecated"
17098 (string-append "test_aggregates_explicitly_disabled"
17099 "_session_tracking_request_mode")
17100 (string-append "test_aggregates_explicitly_disabled"
17101 "_session_tracking_request"
17102 "_mode_deprecated")
17103 "test_auto_session_tracking_with_aggregates[False]"
17104 "test_auto_session_tracking_with_aggregates[True]"
17105 "test_basic"
17106 "test_default_attributes"
17107 "test_default_release"
17108 (string-append "test_ensure_integration_enabled"
17109 "_no_original_function_enabled")
17110 "test_logger_with_all_attributes"
17111 "test_merging"
17112 (string-append "test_session_mode_defaults_to"
17113 "_request_mode_in_wsgi_handler"))
17114 " and not "))
17115 #:phases
17116 #~(modify-phases %standard-phases
17117 (add-after 'unpack 'fix-pytest-config
17118 (lambda _
17119 ;; Tests run in debug mode which generats a lot of noise.
17120 (delete-file "tox.ini")
17121 (substitute* "pyproject.toml"
17122 (("addopts =.*") "")))))))
17123 (native-inputs
17124 (list nss-certs-for-test
17125 python-brotli
17126 python-jsonschema
17127 python-mock
17128 python-pysocks
17129 python-pytest
17130 python-pytest-aiohttp
17131 python-pytest-asyncio
17132 python-pytest-localserver
17133 python-pytest-timeout
17134 python-pytest-xdist
17135 python-responses
17136 python-setuptools
17137 python-socksio))
17138 (propagated-inputs
17139 (list python-certifi
17140 python-urllib3
17141 ;; [optional]
17142 ;; python-unleashclient
17143 python-aiohttp
17144 ;; python-anthropic
17145 ;; python-apache-beam
17146 ;; python-arq
17147 python-asttokens
17148 ;; python-asyncpg
17149 ;; python-blinker
17150 ;; python-bottle
17151 ;; python-celery
17152 ;; python-celery-redbeat
17153 ;; python-chalice
17154 ;; python-clickhouse-driver
17155 ;; python-django
17156 python-executing
17157 ;; python-falcon
17158 ;; python-fastapi
17159 ;; python-flask
17160 ;; python-google-genai
17161 ;; python-grpcio
17162 python-httpcore
17163 ;; python-httpx
17164 ;; python-huey
17165 ;; python-huggingface-hub
17166 ;; python-langchain
17167 ;; python-langgraph
17168 ;; python-launchdarkly-server-sdk
17169 ;; python-litellm
17170 ;; python-litestar
17171 ;; python-loguru
17172 ;; python-markupsafe
17173 ;; python-mcp
17174 ;; python-openai
17175 ;; python-openfeature-sdk
17176 ;; python-opentelemetry-distro
17177 ;; python-protobuf
17178 ;; python-pure-eval
17179 ;; python-pydantic-ai
17180 ;; python-pymongo
17181 ;; python-pyspark
17182 ;; python-quart
17183 ;; python-rq
17184 ;; python-sanic
17185 ;; python-sqlalchemy
17186 ;; python-starlette
17187 ;; python-starlite
17188 ;; python-statsig
17189 ;; python-tiktoken
17190 #;python-tornado))
17191 (home-page "https://github.com/getsentry/sentry-python")
17192 (synopsis "Python SDK for Sentry")
17193 (description "This package provides a Python SDK for the Sentry
17194application monitoring and error tracking software.")
17195 (license license:bsd-2)))
17196
17197;; A bare minimal package, mainly to use in tests and reduce closure
17198;; size. Tests are left out in the main package to slim down native-inputs.
17199(define-public python-sentry-sdk-minimal
17200 (package/inherit python-sentry-sdk
17201 (name "python-sentry-sdk-minimal")
17202 (arguments
17203 (list #:tests? #f))
17204 (native-inputs
17205 (list python-setuptools))
17206 (propagated-inputs
17207 (list python-certifi
17208 python-urllib3))))
17209
17210(define-public python-pep440
17211 (package
17212 (name "python-pep440")
17213 (version "0.1.2")
17214 (source
17215 (origin
17216 (method url-fetch)
17217 (uri (pypi-uri "pep440" version))
17218 (sha256
17219 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
17220 (build-system pyproject-build-system)
17221 (arguments
17222 ;; This checks for "pep440" in the output, but we actually print
17223 ;; ".pep440-real" due to wrapping.
17224 (list #:test-flags '(list "-k" "not test_cli_help")))
17225 (propagated-inputs (list python-check-manifest python-mypy python-pytest
17226 python-pytest-console-scripts python-pytest-cov))
17227 (native-inputs (list python-flit-core))
17228 (home-page "https://pypi.org/project/pep440/")
17229 (synopsis "Utils to check whether versions number match PEP 440")
17230 (description
17231 "This package provides a simple package with utils to check whether
17232versions number match PEP 440.")
17233 (license license:expat)))
17234
17235(define-public python-pyproject-metadata
17236 (package
17237 (name "python-pyproject-metadata")
17238 (version "0.10.0")
17239 (source
17240 (origin
17241 (method git-fetch)
17242 (uri (git-reference
17243 (url "https://github.com/FFY00/python-pyproject-metadata")
17244 (commit version)))
17245 (file-name (git-file-name name version))
17246 (sha256
17247 (base32 "1vz2dx46ag42bqp81frd92pfnryfdry6112g6z5inrywqs8vymkw"))))
17248 (build-system pyproject-build-system)
17249 (arguments
17250 (list
17251 #:test-flags
17252 ;; Two tests fail because the error message slightly changed, so the
17253 ;; tests' regular expressions no longer match.
17254 '(list "--ignore=tests/test_standard_metadata.py")))
17255 (propagated-inputs (list python-packaging))
17256 (native-inputs
17257 (list python-flit-core python-pytest python-tomli))
17258 (home-page "https://github.com/FFY00/python-pyproject-metadata")
17259 (synopsis "Dataclass for PEP 621 metadata")
17260 (description "This project does not implement the parsing of
17261@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
17262data structure representing PEP 621 metadata (already parsed), it will
17263validate this input and generate a PEP 643-compliant metadata
17264file (e.g. @file{PKG-INFO}).")
17265 (license license:expat)))
17266
17267(define-public python-meson
17268 (package
17269 (name "python-meson")
17270 (version "0.19.0")
17271 (source
17272 (origin
17273 (method git-fetch)
17274 (uri (git-reference
17275 (url "https://github.com/mesonbuild/meson-python")
17276 (commit version)))
17277 (file-name (git-file-name name version))
17278 (sha256
17279 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
17280 (build-system pyproject-build-system)
17281 ;; tests: 124 passed, 16 skipped
17282 (native-inputs
17283 (list git-minimal/pinned
17284 patchelf
17285 python-pytest
17286 python-pytest-mock))
17287 (propagated-inputs
17288 (list meson
17289 ninja
17290 python-cython
17291 python-packaging
17292 python-pyproject-metadata))
17293 (home-page "https://github.com/mesonbuild/meson-python")
17294 (synopsis "Meson Python build backend (PEP 517)")
17295 (description "This package provides a PEP 517 build backend that makes
17296use of the Meson build system.")
17297 (license license:expat)))
17298
17299;; XXX: Deprecated on <2026-01-26>.
17300(define-deprecated/public-alias python-meson-python python-meson)
17301;;; Deprecated on 2026-03-02.
17302(define-deprecated-package meson-python python-meson)
17303
17304(define-public python-mfusepy
17305 (package
17306 (name "python-mfusepy")
17307 (version "3.1.1")
17308 (source
17309 (origin
17310 (method git-fetch)
17311 (uri (git-reference
17312 (url "https://github.com/mxmlnkn/mfusepy")
17313 (commit (string-append "v" version))))
17314 (file-name (git-file-name name version))
17315 (sha256
17316 (base32 "04vsmmh1zpy8cxxrj9dqiqajisn95skg3wqr8dgqck25780v3c4k"))))
17317 (build-system pyproject-build-system)
17318 (native-inputs (list python-setuptools))
17319 (inputs (list fuse))
17320 (arguments
17321 (list
17322 #:tests? #f ; Tests require fuse kernel module
17323 #:phases
17324 #~(modify-phases %standard-phases
17325 (add-after 'unpack 'embed-libfuse
17326 (lambda* (#:key inputs #:allow-other-keys)
17327 (substitute* "mfusepy.py"
17328 (("^(_libfuse_path = )os\\.environ\\.get.+$" _ pre)
17329 (format #f "~a\"~a\"\n"
17330 pre (search-input-file inputs "/lib/libfuse3.so")))))))))
17331 (home-page "https://github.com/mxmlnkn/mfusepy")
17332 (synopsis "Ctypes bindings for the high-level API in libfuse 2 and 3")
17333 (description "Ctypes bindings for the high-level API in libfuse 2 and 3.")
17334 (license license:isc)))
17335
17336(define-public python-mccabe
17337 (package
17338 (name "python-mccabe")
17339 (version "0.7.0")
17340 (source
17341 (origin
17342 (method url-fetch)
17343 (uri (pypi-uri "mccabe" version))
17344 (sha256
17345 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
17346 (build-system pyproject-build-system)
17347 (arguments
17348 (list
17349 ;; Test fixtures are not released yet, see
17350 ;; <https://github.com/PyCQA/mccabe/issues/93>
17351 #:tests? #f))
17352 (native-inputs
17353 (list python-toml
17354 python-setuptools
17355 python-wheel))
17356 (home-page "https://github.com/PyCQA/mccabe")
17357 (synopsis "McCabe checker, plugin for flake8")
17358 (description
17359 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
17360complexity of Python source code.")
17361 (license license:expat)))
17362
17363(define-public python-autoflake8
17364 (package
17365 (name "python-autoflake8")
17366 (version "0.4.0")
17367 (source (origin
17368 (method git-fetch) ;for tests
17369 (uri (git-reference
17370 (url "https://github.com/fsouza/autoflake8")
17371 (commit (string-append "v" version))))
17372 (file-name (git-file-name name version))
17373 (sha256
17374 (base32
17375 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
17376 (build-system pyproject-build-system)
17377 (native-inputs
17378 (list python-aiofiles
17379 python-poetry-core
17380 python-pytest
17381 python-pytest-xdist))
17382 (propagated-inputs (list python-pyflakes))
17383 (home-page "https://github.com/fsouza/autoflake8")
17384 (synopsis "Automatically fix issues reported by flake8")
17385 (description "Tool to automatically fix some issues reported by
17386@command{flake8}.")
17387 (license license:expat)))
17388
17389(define-public python-flake8
17390 (package
17391 (name "python-flake8")
17392 (version "7.1.1")
17393 (source
17394 (origin
17395 (method git-fetch) ; no tests data in PyPi package
17396 (uri (git-reference
17397 (url "https://github.com/pycqa/flake8")
17398 (commit version)))
17399 (file-name (git-file-name name version))
17400 (sha256
17401 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
17402 (build-system pyproject-build-system)
17403 (native-inputs
17404 (list python-pytest
17405 python-setuptools
17406 python-wheel))
17407 (propagated-inputs
17408 (list python-mccabe
17409 python-pycodestyle
17410 python-pyflakes))
17411 (home-page "https://flake8.pycqa.org/en/latest/")
17412 (synopsis "The modular source code checker: pep8, pyflakes and co")
17413 (description
17414 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
17415 (license license:expat)))
17416
17417(define-public python-flake8-blind-except
17418 (package
17419 (name "python-flake8-blind-except")
17420 (version "0.2.1")
17421 (source
17422 (origin
17423 (method git-fetch)
17424 (uri (git-reference
17425 (url "https://github.com/elijahandrews/flake8-blind-except")
17426 (commit (string-append "v" version))))
17427 (file-name (git-file-name name version))
17428 (sha256
17429 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
17430 (build-system pyproject-build-system)
17431 (arguments (list #:tests? #f)) ;no tests
17432 (native-inputs (list python-setuptools))
17433 (propagated-inputs (list python-pycodestyle))
17434 (home-page "https://github.com/elijahandrews/flake8-blind-except")
17435 (synopsis "Check for blind @code{except:} statements")
17436 (description
17437 "This package provides a flake8 extension that checks for blind
17438@code{except:} statements.")
17439 (license license:expat)))
17440
17441(define-public python-flake8-bugbear
17442 (package
17443 (name "python-flake8-bugbear")
17444 (version "24.10.31")
17445 (source
17446 (origin
17447 (method url-fetch)
17448 (uri (pypi-uri "flake8_bugbear" version))
17449 (sha256
17450 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17451 (build-system pyproject-build-system)
17452 (native-inputs
17453 (list python-hypothesmith
17454 python-pytest
17455 python-setuptools
17456 python-wheel))
17457 (propagated-inputs
17458 (list python-attrs
17459 python-flake8))
17460 (home-page "https://github.com/PyCQA/flake8-bugbear")
17461 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17462 (description
17463 "This package contains a plugin for Flake8 finding likely bugs and design
17464problems in your program. It contains warnings that don't belong in pyflakes
17465and pycodestyle.")
17466 (license license:expat)))
17467
17468(define-public python-flake8-continuation
17469 (package
17470 (name "python-flake8-continuation")
17471 (version "1.0.5")
17472 (source
17473 (origin
17474 (method git-fetch)
17475 (uri (git-reference
17476 (url "https://github.com/planetlabs/flake8-continuation")
17477 (commit version)))
17478 (file-name (git-file-name name version))
17479 (sha256
17480 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17481 (build-system pyproject-build-system)
17482 (arguments
17483 (list
17484 #:phases
17485 #~(modify-phases %standard-phases
17486 (add-after 'unpack 'remove-python-six-dependency
17487 (lambda _
17488 (substitute* "flake8_continuation.py"
17489 (("import six|six\\.moves\\.")
17490 ""))
17491 (substitute* "setup.py"
17492 ((", \"six\"")
17493 "")))))))
17494 (native-inputs (list python-pytest python-setuptools))
17495 (propagated-inputs (list python-flake8 python-pycodestyle))
17496 (home-page "https://github.com/planetlabs/flake8-continuation")
17497 (synopsis "Flake8 Line Continuation Plugin")
17498 (description
17499 "A Flake8 plugin that checks for the line continuation style to be in the
17500preferred method according to PEP-8, specifically:
17501@quotation
17502The preferred way of wrapping long lines is by using Python's implied line
17503continuation inside parentheses, brackets and braces. Long lines can be
17504broken over multiple lines by wrapping expressions in parentheses. These
17505should be used in preference to using a backslash for line continuation.
17506@end quotation")
17507 (license license:asl2.0)))
17508
17509(define-public python-flake8-debugger
17510 (package
17511 (name "python-flake8-debugger")
17512 (version "4.1.2")
17513 (source
17514 (origin
17515 (method git-fetch)
17516 (uri (git-reference
17517 (url "https://github.com/jbkahn/flake8-debugger")
17518 (commit version)))
17519 (file-name (git-file-name name version))
17520 (sha256
17521 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
17522 (build-system pyproject-build-system)
17523 (native-inputs (list python-poetry-core python-pytest python-setuptools))
17524 (propagated-inputs (list python-flake8 python-pycodestyle))
17525 (home-page "https://github.com/jbkahn/flake8-debugger")
17526 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
17527 (description
17528 "This package provides a Flake8 plugin that checks for @code{ipdb} and
17529@code{pdb} imports and set traces, as well as @code{from
17530IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
17531@code{InteractiveShellEmbed()()}.")
17532 (license license:expat)))
17533
17534(define-public python-flake8-implicit-str-concat
17535 (package
17536 (name "python-flake8-implicit-str-concat")
17537 (version "0.5.0")
17538 (source
17539 (origin
17540 (method url-fetch)
17541 (uri (pypi-uri "flake8_implicit_str_concat" version))
17542 (sha256
17543 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
17544 (build-system pyproject-build-system)
17545 (arguments
17546 (list
17547 #:tests? #f)) ; no tests in PiPY or git checkout
17548 (native-inputs
17549 (list python-hatchling))
17550 (propagated-inputs
17551 (list python-attrs
17552 python-more-itertools))
17553 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
17554 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
17555 (description
17556 "This is a plugin for the Python code checking tool Flake8 to encourage
17557correct string literal concatenation.
17558
17559It looks for style problems like implicitly concatenated string literals on
17560the same line (which can be introduced by the code formatting tool Black), or
17561unnecessary plus operators for explicit string literal concatenation.")
17562 (license license:expat)))
17563
17564(define-public python-flake8-print
17565 (package
17566 (name "python-flake8-print")
17567 (version "5.0.0")
17568 (source
17569 (origin
17570 (method url-fetch)
17571 (uri (pypi-uri "flake8-print" version))
17572 (sha256
17573 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
17574 (build-system pyproject-build-system)
17575 (arguments
17576 (list
17577 #:tests? #f)) ; no tests in PiPY or git checkout
17578 (native-inputs
17579 (list python-poetry-core))
17580 (propagated-inputs
17581 (list python-flake8
17582 python-pycodestyle))
17583 (home-page "https://github.com/jbkahn/flake8-print")
17584 (synopsis "Print statement checker plugin for Flake8")
17585 (description
17586 "This plugin for Flake8 checks for @code{print} statements in Python
17587files.")
17588 (license license:expat)))
17589
17590(define-public python-flake8-pyi
17591 (package
17592 (name "python-flake8-pyi")
17593 (version "24.9.0")
17594 (source
17595 (origin
17596 (method url-fetch)
17597 (uri (pypi-uri "flake8_pyi" version))
17598 (sha256
17599 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
17600 (build-system pyproject-build-system)
17601 (arguments
17602 (list
17603 #:phases
17604 #~(modify-phases %standard-phases
17605 (add-after 'unpack 'fix-pytest-config
17606 (lambda _
17607 ;; Prevent full threads utilization.
17608 (substitute* "pyproject.toml"
17609 (("-nauto") "")))))))
17610 (native-inputs
17611 (list python-hatchling
17612 python-pytest))
17613 (propagated-inputs
17614 (list python-attrs
17615 python-flake8
17616 python-pyflakes))
17617 (home-page "https://github.com/ambv/flake8-pyi")
17618 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
17619 (description
17620 "This package contains a plugin that provides specializations for type
17621hinting stub files, especially interesting for linting typeshed. It adds the
17622@file{.pyi} extension to the default value of the @code{--filename}
17623command-line argument to Flake8. This means stubs are linted by default with
17624this plugin enabled, without needing to explicitly list every file. It
17625modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
17626expressions after the entire file has been read. This enables support for
17627first-class forward references that stub files use.")
17628 (license license:expat)))
17629
17630(define-public python-flake8-quotes
17631 (package
17632 (name "python-flake8-quotes")
17633 (version "3.4.0")
17634 (source
17635 (origin
17636 (method url-fetch)
17637 (uri (pypi-uri "flake8-quotes" version))
17638 (sha256
17639 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
17640 (build-system pyproject-build-system)
17641 (native-inputs
17642 (list python-pytest
17643 python-setuptools
17644 python-wheel))
17645 (propagated-inputs
17646 (list python-flake8))
17647 (home-page "https://github.com/zheller/flake8-quotes/")
17648 (synopsis "Flake8 lint for quotes")
17649 (description "This package provides a Flake8 lint for quotes.")
17650 (license license:expat)))
17651
17652(define-public python-flake8-todo
17653 (package
17654 (name "python-flake8-todo")
17655 (version "0.7")
17656 (source
17657 (origin
17658 (method git-fetch)
17659 (uri (git-reference
17660 (url "https://github.com/schlamar/flake8-todo")
17661 (commit (string-append "v" version))))
17662 (file-name (git-file-name name version))
17663 (sha256
17664 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
17665 (build-system pyproject-build-system)
17666 (arguments (list #:tests? #f)) ; No tests.
17667 (native-inputs (list python-setuptools))
17668 (propagated-inputs (list python-pycodestyle))
17669 (home-page "https://github.com/schlamar/flake8-todo")
17670 (synopsis "TODO notes checker, plugin for flake8")
17671 (description
17672 "This package provides the @code{flake8-todo} Python module, a
17673TODO notes checker plugin for flake8.")
17674 (license license:expat)))
17675
17676(define-public python-flake8-isort
17677 (package
17678 (name "python-flake8-isort")
17679 (version "7.0.0")
17680 (source
17681 (origin
17682 (method git-fetch)
17683 (uri (git-reference
17684 (url "https://github.com/gforcada/flake8-isort")
17685 (commit version)))
17686 (file-name (git-file-name name version))
17687 (sha256
17688 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
17689 (build-system pyproject-build-system)
17690 (arguments (list #:test-backend #~'custom
17691 #:test-flags #~(list "run_tests.py")))
17692 (native-inputs (list python-hatchling python-pytest))
17693 (propagated-inputs (list python-flake8 python-isort))
17694 (home-page "https://github.com/gforcada/flake8-isort")
17695 (synopsis "Flake8 plugin integrating isort")
17696 (description
17697 "This package provides a flake8 plugin that integrates isort,
17698extending flake8 so that it can warn about badly sorted Python import
17699directives.")
17700 (license license:gpl2+)))
17701
17702(define-public python-autoflake
17703 (package
17704 (name "python-autoflake")
17705 (version "2.3.1")
17706 (source
17707 (origin
17708 (method url-fetch)
17709 (uri (pypi-uri "autoflake" version))
17710 (sha256
17711 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
17712 (build-system pyproject-build-system)
17713 (arguments
17714 (list
17715 #:phases
17716 #~(modify-phases %standard-phases
17717 (replace 'check
17718 (lambda _
17719 (invoke "python" "test_autoflake.py"))))))
17720 (native-inputs
17721 (list python-hatchling))
17722 (propagated-inputs
17723 (list python-pyflakes))
17724 (home-page "https://github.com/myint/autoflake")
17725 (synopsis "Removes unused imports and unused variables")
17726 (description
17727 "@code{autoflake} removes unused imports and unused variables from Python
17728code as reported by @code{pyflakes}.
17729
17730By default, it only removes unused imports for modules that are part of the
17731standard library. Removal of unused variables is also disabled by default.
17732It also removes useless @code{pass} statements.")
17733 (license license:expat)))
17734
17735(define-public python-mistune
17736 (package
17737 (name "python-mistune")
17738 (version "3.1.3")
17739 (source
17740 (origin
17741 (method url-fetch)
17742 (uri (pypi-uri "mistune" version))
17743 (sha256
17744 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
17745 (build-system pyproject-build-system)
17746 (native-inputs
17747 (list python-pytest
17748 python-setuptools
17749 python-wheel))
17750 (home-page "https://github.com/lepture/mistune")
17751 (synopsis "Markdown parser in pure Python")
17752 (description "This package provides a fast markdown parser in pure
17753Python.")
17754 (license license:bsd-3)))
17755
17756(define-public python-markdown
17757 (package
17758 (name "python-markdown")
17759 (version "3.10")
17760 (source
17761 (origin
17762 (method url-fetch)
17763 (uri (pypi-uri "markdown" version))
17764 (sha256
17765 (base32
17766 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
17767 (build-system pyproject-build-system)
17768 (native-inputs
17769 (list python-pyyaml
17770 python-setuptools))
17771 (home-page "https://python-markdown.github.io/")
17772 (synopsis "Python implementation of Markdown")
17773 (description
17774 "This package provides a Python implementation of John Gruber's
17775Markdown. The library features international input, various Markdown
17776extensions, and several HTML output formats. A command line wrapper
17777markdown_py is also provided to convert Markdown files to HTML.")
17778 (license license:bsd-3)))
17779
17780(define-public python-markdown2
17781 (package
17782 (name "python-markdown2")
17783 (version "2.5.3")
17784 (source
17785 (origin
17786 (method git-fetch) ; no tests data in PyPi package
17787 (uri (git-reference
17788 (url "https://github.com/trentm/python-markdown2")
17789 (commit version)))
17790 (file-name (git-file-name name version))
17791 (sha256
17792 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
17793 (build-system pyproject-build-system)
17794 (arguments
17795 (list
17796 #:test-backend #~'custom
17797 #:test-flags #~(list "test.py" "--" "-knownfailure")
17798 #:phases
17799 #~(modify-phases %standard-phases
17800 (add-before 'check 'pre-check
17801 (lambda _
17802 (chdir "test"))))))
17803 (native-inputs
17804 (list ;; python-pygments ;optional, tests fail when added
17805 ;; python-wavedrom ;optional, not packaged
17806 ;; python-latex2mathml ;optional, not packaged
17807 python-setuptools))
17808 (home-page "https://github.com/trentm/python-markdown2")
17809 (synopsis "Fast and complete Python implementation of Markdown")
17810 (description
17811 "This package provides a fast and complete Python implementation of
17812Markdown. It was written to closely match the behaviour of the original
17813Perl-implemented Markdown.pl. It also comes with a number of
17814extensions (called @code{extras}) for things like syntax coloring, tables,
17815header-ids.")
17816 (license license:expat)))
17817
17818(define-public python-mdx-include
17819 (package
17820 (name "python-mdx-include")
17821 (version "1.4.2")
17822 (source
17823 (origin
17824 (method git-fetch)
17825 (uri (git-reference
17826 (url "https://github.com/neurobin/mdx_include")
17827 (commit (string-append "v" version))))
17828 (file-name (git-file-name name version))
17829 (sha256
17830 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
17831 (build-system pyproject-build-system)
17832 (arguments
17833 (list
17834 #:test-backend #~'unittest
17835 #:phases
17836 (let* ((django-hello-url "\
17837https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1783873951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
17839 (django-hello
17840 (origin
17841 (method url-fetch)
17842 (uri django-hello-url)
17843 (sha256 (base32 "\
1784413bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
17845 #~(modify-phases %standard-phases
17846 (add-before 'check 'disable-test-requiring-network
17847 (lambda _
17848 (substitute* "mdx_include/test/test.py"
17849 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
17850 (string-append pre "__off__test_" post "("))
17851 (((string-join (string-split #$django-hello-url #\.) "\\."))
17852 #+django-hello))))))))
17853 (native-inputs (list python-setuptools))
17854 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
17855 (home-page "https://github.com/neurobin/mdx_include")
17856 (synopsis "Python Markdown extension to include local or remote files")
17857 (description "Include extension for Python Markdown. It lets you include
17858local or remote (downloadable) files into your markdown at arbitrary
17859positions.
17860
17861This project is motivated by markdown-include and provides the same
17862functionalities with some extras.")
17863 (license license:bsd-3)))
17864
17865(define-public python-ptyprocess
17866 (package
17867 (name "python-ptyprocess")
17868 (version "0.7.0")
17869 (source
17870 (origin
17871 (method url-fetch)
17872 (uri (pypi-uri "ptyprocess" version))
17873 (sha256
17874 (base32
17875 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
17876 (build-system pyproject-build-system)
17877 (native-inputs
17878 (list python-flit-core
17879 python-pytest))
17880 (home-page "https://github.com/pexpect/ptyprocess")
17881 (synopsis "Run a subprocess in a pseudo terminal")
17882 (description
17883 "This package provides a Python library used to launch a subprocess in a
17884pseudo terminal (pty), and interact with both the process and its pty.")
17885 (license license:isc)))
17886
17887(define-public python-configshell-fb
17888 (package
17889 (name "python-configshell-fb")
17890 (version "1.1.30")
17891 (source
17892 (origin
17893 (method url-fetch)
17894 (uri (pypi-uri "configshell-fb" version))
17895 ;; XXX: Snippet below is required because on v1.1.30 the source code
17896 ;; has configshell_fb as softlink to configshell and guix
17897 ;; pyproject-build-system doesn't work with symlinks very well.
17898 ;;
17899 ;; This package is only used in spdk for now and it's crucial to keep
17900 ;; it locked on version and keep the snipped for spdk to build
17901 ;; successfully.
17902 (snippet #~(begin
17903 (use-modules (guix build utils))
17904 (delete-file "setup.py")
17905 (delete-file-recursively "configshell_fb")
17906 (rename-file "configshell" "configshell_fb")))
17907 (sha256
17908 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
17909 (build-system pyproject-build-system)
17910 (arguments
17911 (list #:tests? #f)) ;; this package has no tests
17912 (native-inputs
17913 (list python-setuptools
17914 python-six
17915 python-wheel))
17916 (propagated-inputs
17917 (list python-pyparsing))
17918 (home-page "https://github.com/open-iscsi/configshell-fb")
17919 (synopsis "Framework to implement simple but nice CLIs")
17920 (description
17921 "This package provides a framework to implement simple but nice CLIs.")
17922 (license license:asl2.0)))
17923
17924(define-public python-configupdater
17925 (package
17926 (name "python-configupdater")
17927 (version "3.2")
17928 (source
17929 (origin
17930 (method git-fetch)
17931 (uri (git-reference
17932 (url "https://github.com/pyscaffold/configupdater")
17933 (commit (string-append "v" version))))
17934 (file-name (git-file-name name version))
17935 (sha256
17936 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
17937 (build-system pyproject-build-system)
17938 (native-inputs
17939 (list python-pytest python-setuptools python-setuptools-scm))
17940 (home-page "https://github.com/pyscaffold/configupdater")
17941 (synopsis "Parser like ConfigParser but for updating configuration files")
17942 (description
17943 "ConfigUpdater is a Python library for updating INI configuration files
17944while preserving the original file's formatting, structure, and comments.
17945Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
17946targeted changes--keeping comments, section ordering, key-value pair
17947ordering, and original casing intact.")
17948 (license license:expat)))
17949
17950(define-public python-crccheck
17951 (package
17952 (name "python-crccheck")
17953 (version "1.3.0")
17954 (source
17955 (origin
17956 (method git-fetch) ; no tests in PyPI
17957 (uri (git-reference
17958 (url "https://github.com/MartinScharrer/crccheck")
17959 (commit (string-append "v" version))))
17960 (file-name (git-file-name name version))
17961 (sha256
17962 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
17963 (build-system pyproject-build-system)
17964 (native-inputs (list python-pytest python-setuptools python-wheel))
17965 (home-page "https://github.com/MartinScharrer/crccheck")
17966 (synopsis "Calculation library for CRCs and checksums")
17967 (description "@code{crccheck} is a calculation library for CRCs and
17968checksums. It implement more than a hundred checksum routines.")
17969 (license license:gpl3+)))
17970
17971(define-public python-crashtest
17972 (package
17973 (name "python-crashtest")
17974 (version "0.4.1")
17975 (source
17976 (origin
17977 (method git-fetch)
17978 (uri (git-reference
17979 (url "https://github.com/sdispater/crashtest")
17980 (commit version)))
17981 (file-name (git-file-name name version))
17982 (sha256
17983 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
17984 (build-system pyproject-build-system)
17985 (native-inputs (list python-poetry-core python-pytest))
17986 (home-page "https://github.com/sdispater/crashtest")
17987 (synopsis "Manage Python errors with ease")
17988 (description
17989 "Python library that makes exceptions handling and inspection easier.")
17990 (license license:expat)))
17991
17992(define-public python-pysendfile
17993 (package
17994 (name "python-pysendfile")
17995 (version "2.0.1")
17996 (source
17997 (origin
17998 (method git-fetch)
17999 (uri (git-reference
18000 (url "https://github.com/giampaolo/pysendfile")
18001 (commit (string-append "release-" version))))
18002 (file-name (git-file-name name version))
18003 (sha256
18004 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
18005 (build-system pyproject-build-system)
18006 (arguments
18007 (list
18008 #:phases
18009 #~(modify-phases %standard-phases
18010 (replace 'check
18011 (lambda* (#:key tests? #:allow-other-keys)
18012 (when tests?
18013 (setenv "HOME" "/tmp")
18014 (invoke "make" "test")))))))
18015 (native-inputs (list python-pytest python-setuptools))
18016 (propagated-inputs (list python-pyasynchat))
18017 (home-page "https://github.com/giampaolo/pysendfile")
18018 (synopsis "Python interface to sendfile(2)")
18019 (description "The @code{pysendfile} Python library provides an interface to
18020the @code{sendfile(2)} system call.")
18021 (license license:expat)))
18022
18023(define-public python-pyftpdlib
18024 (package
18025 (name "python-pyftpdlib")
18026 (version "1.5.10")
18027 (source
18028 (origin
18029 (method url-fetch)
18030 (uri (pypi-uri "pyftpdlib" version))
18031 (sha256
18032 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
18033 (build-system pyproject-build-system)
18034 ;; Using Pytest instead of the Makefile causes the command line tests to
18035 ;; fail on unknown Pytest arguments.
18036 (arguments
18037 (list
18038 #:test-flags
18039 #~(list "-k" "not TestCommandLineParser"
18040 #$@(if (target-aarch64?)
18041 ;; TimeoutError: timed out
18042 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
18043 "::TestTimeouts::test_idle_data_timeout2"))
18044 '()))))
18045 (native-inputs
18046 (list python-psutil
18047 python-pytest
18048 python-setuptools
18049 python-wheel))
18050 (propagated-inputs
18051 (list python-pyopenssl
18052 python-pysendfile))
18053 (home-page "https://github.com/giampaolo/pyftpdlib/")
18054 (synopsis "Asynchronous and scalable Python FTP server library")
18055 (description "The Python FTP server library provides a high-level
18056interface to write efficient, scalable and asynchronous FTP servers with
18057Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
18058RFC-959} FTP server implementation available for Python, and has the following
18059traits:
18060@itemize
18061@item
18062It is lightweight, fast and scalable.
18063@item
18064It uses the @code{sendfile(2)} system call for uploads.
18065@item
18066It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
18067asynchronously.
18068@item
18069It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
18070IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
18071RFC-2640}) and MLSD/MLST commands (RFC-3659).
18072@item
18073It has a flexible system of @samp{authorizers} able to manage both
18074@samp{virtual} and @samp{real} users.
18075@end itemize")
18076 (license license:expat)))
18077
18078(define-public python-fonttools
18079 (package
18080 (name "python-fonttools")
18081 (version "4.59.2")
18082 (source
18083 (origin
18084 (method url-fetch)
18085 (uri (pypi-uri "fonttools" version ".tar.gz"))
18086 (sha256
18087 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
18088 (build-system pyproject-build-system)
18089 (arguments
18090 (list
18091 #:tests? (not (%current-target-system))
18092 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
18093 ;; 3 subtests passed
18094 #:test-flags
18095 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
18096 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
18097 (string-join ls "::")))
18098 ;; XXX: Some test data is not included in PyPI archive,
18099 ;; remove when switched to git-fetch.
18100 '(("cffLib/cffLib_test.py" "CffLibTest"
18101 "test_reading_supplement_encoding")
18102 ("tfmLib/tfmLib_test.py"
18103 "test_read_boundary_char")
18104 ("tfmLib/tfmLib_test.py"
18105 "test_read_fontdimens_vanilla")
18106 ("tfmLib/tfmLib_test.py"
18107 "test_read_fontdimens_mathex")
18108 ("tfmLib/tfmLib_test.py"
18109 "test_read_fontdimens_mathsy")
18110 ("voltLib/volttofea_test.py" "ToFeaTest"
18111 "test_cli_vtp")
18112 ("voltLib/volttofea_test.py" "ToFeaTest"
18113 "test_group_order"))))))
18114 (native-inputs
18115 (list python-pytest
18116 python-setuptools))
18117 ;; All of them are listed as extras_require.
18118 (propagated-inputs
18119 (list python-brotli
18120 python-lxml
18121 python-unicodedata2
18122 python-zopfli))
18123 (home-page "https://github.com/fonttools/fonttools")
18124 (synopsis "Tools to manipulate font files")
18125 (description
18126 "FontTools/TTX is a library to manipulate font files from Python. It
18127supports reading and writing of TrueType/OpenType fonts, reading and writing
18128of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
18129also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
18130from an XML-based format.")
18131 (license license:expat)))
18132
18133;;; Tests are left out in the main package to avoid cycles.
18134;; XXX: When updating, solve comment in python-cu2qu.
18135(define-public python-fonttools-minimal
18136 (hidden-package
18137 (package
18138 (inherit python-fonttools)
18139 (name "python-fonttools-minimal")
18140 (arguments '(#:tests? #f))
18141 (native-inputs
18142 (list python-setuptools))
18143 (propagated-inputs '()))))
18144
18145(define-public python-ly
18146 (package
18147 (name "python-ly")
18148 (version "0.9.9")
18149 (source
18150 (origin
18151 (method git-fetch)
18152 (uri (git-reference
18153 (url "https://github.com/frescobaldi/python-ly")
18154 (commit (string-append "v" version))))
18155 (file-name (git-file-name name version))
18156 (sha256
18157 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
18158 (build-system pyproject-build-system)
18159 (arguments
18160 (list
18161 #:phases
18162 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
18163 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
18164 #~(modify-phases %standard-phases
18165 (add-after 'unpack 'inject-data
18166 (lambda _
18167 (substitute* "tests/musicxml.xsd"
18168 (((string-join (string-split #$namespace-url #\.) "\\."))
18169 #$(origin
18170 (method url-fetch)
18171 (uri namespace-url)
18172 (sha256 (base32 "\
181731j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
18174 (((string-join (string-split #$xlink-url #\.) "\\."))
18175 #$(origin
18176 (method url-fetch)
18177 (uri xlink-url)
18178 (sha256 (base32 "\
181790jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
18180 (native-inputs (list python-hatchling python-lxml python-pytest))
18181 (synopsis "Tool and library for manipulating LilyPond files")
18182 (description
18183 "This package provides a Python library to parse, manipulate or create
18184documents in LilyPond format. A command line program ly is also provided that
18185can be used to do various manipulations with LilyPond files.")
18186 (home-page "https://pypi.org/project/python-ly/")
18187 (license license:gpl2+)))
18188
18189(define-public python-appdirs
18190 (package
18191 (name "python-appdirs")
18192 (version "1.4.4")
18193 (source
18194 (origin
18195 (method url-fetch)
18196 (uri (pypi-uri "appdirs" version))
18197 (sha256
18198 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
18199 (build-system pyproject-build-system)
18200 (arguments (list #:test-backend #~'unittest))
18201 (native-inputs (list python-setuptools))
18202 (home-page "https://github.com/ActiveState/appdirs")
18203 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
18204 (description
18205 "This module provides a portable way of finding out where user data
18206should be stored on various operating systems.")
18207 (license license:expat)))
18208
18209(define-public python-gorilla
18210 (package
18211 (name "python-gorilla")
18212 (version "0.5.0")
18213 (source
18214 (origin
18215 (method git-fetch)
18216 (uri (git-reference
18217 (url "https://github.com/christophercrouzet/gorilla")
18218 (commit (string-append "v" version))))
18219 (file-name (git-file-name name version))
18220 (sha256
18221 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
18222 (build-system pyproject-build-system)
18223 (arguments (list #:test-backend #~'unittest))
18224 (native-inputs (list python-setuptools))
18225 (home-page "https://github.com/christophercrouzet/gorilla")
18226 (synopsis "Convenient monkey patching with Python")
18227 (description
18228 "Gorilla is a Python library that provides a convenient approach to
18229monkey patching. Monkey patching is the process of modifying module and
18230class attributes at runtime with the purpose of replacing or extending
18231third-party code.")
18232 (license license:expat)))
18233
18234(define-public python-llfuse
18235 (package
18236 (name "python-llfuse")
18237 (version "1.5.1")
18238 (source
18239 (origin
18240 (method git-fetch)
18241 (uri (git-reference
18242 (url "https://github.com/python-llfuse/python-llfuse")
18243 (commit (string-append "release-" version))))
18244 (file-name (git-file-name name version))
18245 (sha256
18246 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
18247 (build-system pyproject-build-system)
18248 (arguments
18249 (list
18250 #:test-flags
18251 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
18252 #:phases
18253 #~(modify-phases %standard-phases
18254 (add-before 'build 'build-cython
18255 (lambda _
18256 (invoke "python" "setup.py" "build_cython"))))))
18257 (inputs (list fuse-2 attr))
18258 (native-inputs
18259 (list pkg-config python-cython python-pytest python-setuptools))
18260 (synopsis "Python bindings for FUSE")
18261 (description
18262 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
18263 (home-page "https://github.com/python-llfuse/python-llfuse")
18264 (license license:lgpl2.0+)))
18265
18266(define-public python-msgpack
18267 (package
18268 (name "python-msgpack")
18269 (version "1.1.2")
18270 (source
18271 (origin
18272 (method url-fetch)
18273 (uri (pypi-uri "msgpack" version))
18274 (sha256
18275 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
18276 (build-system pyproject-build-system)
18277 (native-inputs
18278 (list python-pytest
18279 python-setuptools))
18280 (home-page "https://msgpack.org/")
18281 (synopsis "MessagePack (de)serializer")
18282 (description "MessagePack is a fast, compact binary serialization format,
18283suitable for similar data to JSON. This package provides CPython bindings for
18284reading and writing MessagePack data.")
18285 (license license:asl2.0)))
18286
18287(define-public python-openstep-plist
18288 (package
18289 (name "python-openstep-plist")
18290 (version "0.5.2")
18291 (source
18292 (origin
18293 (method git-fetch)
18294 (uri (git-reference
18295 (url "https://github.com/fonttools/openstep-plist")
18296 (commit (string-append "v" version))))
18297 (file-name (git-file-name name version))
18298 (sha256
18299 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
18300 (build-system pyproject-build-system)
18301 (native-inputs
18302 (list python-cython
18303 python-pytest
18304 python-setuptools-scm
18305 python-setuptools))
18306 (home-page "https://github.com/fonttools/openstep-plist")
18307 (synopsis "OpenStep plist parser and writer")
18308 (description
18309 "This package provides a parser for the \"old style\" OpenStep property
18310list format (also known as ASCII plist), written in Cython.")
18311 (license license:expat)))
18312
18313(define-public python-resolvelib
18314 (package
18315 (name "python-resolvelib")
18316 (version "1.1.0")
18317 (source
18318 (origin
18319 ;; Tests are missing from the PyPI release.
18320 (method git-fetch)
18321 (uri (git-reference
18322 (url "https://github.com/sarugaku/resolvelib")
18323 (commit version)))
18324 (file-name (git-file-name name version))
18325 (sha256
18326 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
18327 (build-system pyproject-build-system)
18328 (native-inputs
18329 (list python-packaging
18330 python-pytest
18331 python-setuptools
18332 python-wheel))
18333 (home-page "https://github.com/sarugaku/resolvelib")
18334 (synopsis "Abstract dependencies resolver")
18335 (description
18336 "The ResolveLib library provides a @code{Resolver} class that includes
18337dependency resolution logic.")
18338 (license license:isc)))
18339
18340;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
18341;; 2022. It is now read-only.
18342(define-public python-commonmark
18343 (package
18344 (name "python-commonmark")
18345 (version "0.9.1")
18346 (source
18347 (origin
18348 (method url-fetch)
18349 (uri (pypi-uri "commonmark" version))
18350 (sha256
18351 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
18352 (build-system pyproject-build-system)
18353 (native-inputs
18354 (list python-setuptools))
18355 (home-page "https://github.com/readthedocs/commonmark.py")
18356 (synopsis "Python parser for the CommonMark Markdown spec")
18357 (description
18358 "This module is a pure Python port of jgm's @code{commonmark.js}, a
18359Markdown parser and renderer for the CommonMark specification, using only
18360native modules.")
18361 (license license:bsd-3)))
18362
18363(define-public python-immutables
18364 (package
18365 (name "python-immutables")
18366 (version "0.21")
18367 (source
18368 (origin
18369 (method git-fetch)
18370 (uri (git-reference
18371 (url "https://github.com/MagicStack/immutables")
18372 (commit (string-append "v" version))))
18373 (file-name (git-file-name name version))
18374 (sha256
18375 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
18376 (build-system pyproject-build-system)
18377 (arguments
18378 (list #:phases #~(modify-phases %standard-phases
18379 (add-after 'unpack 'remove-mypy-dependency
18380 (lambda _
18381 (delete-file "tests/test_mypy.py")
18382 (delete-file "tests/conftest.py"))))))
18383 (native-inputs
18384 (list python-pytest python-setuptools python-wheel))
18385 (home-page "https://github.com/MagicStack/immutables")
18386 (synopsis "High-performance immutable mapping type for Python")
18387 (description
18388 "An immutable mapping type for Python. The underlying datastructure is a
18389Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
18390functional languages.")
18391 (license license:asl2.0)))
18392
18393(define-public python-prettytable
18394 (package
18395 (name "python-prettytable")
18396 (version "3.12.0")
18397 (source
18398 (origin
18399 (method url-fetch)
18400 (uri (pypi-uri "prettytable" version))
18401 (sha256
18402 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
18403 (build-system pyproject-build-system)
18404 (native-inputs
18405 (list python-hatchling
18406 python-hatch-vcs
18407 python-pytest
18408 python-pytest-lazy-fixtures
18409 python-setuptools-scm))
18410 (propagated-inputs
18411 (list python-wcwidth))
18412 (home-page "https://github.com/jazzband/prettytable")
18413 (synopsis "Display tabular data in an ASCII table format")
18414 (description
18415 "A library designed to represent tabular data in visually appealing ASCII
18416tables. PrettyTable allows for selection of which columns are to be printed,
18417independent alignment of columns (left or right justified or centred) and
18418printing of sub-tables by specifying a row range.")
18419 (license license:bsd-3)))
18420
18421(define-public python-rtf-tokenize
18422 (package
18423 (name "python-rtf-tokenize")
18424 (version "1.0.1")
18425 (source (origin
18426 (method url-fetch)
18427 (uri (pypi-uri "rtf_tokenize" version))
18428 (sha256
18429 (base32
18430 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
18431 (build-system pyproject-build-system)
18432 (native-inputs (list python-pytest python-setuptools python-wheel))
18433 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
18434 (synopsis "Simple RTF tokenizer")
18435 (description "This package is a simple RTF tokenizer.")
18436 (license license:gpl2+)))
18437
18438(define-public python-sniffio
18439 (package
18440 (name "python-sniffio")
18441 (version "1.3.1")
18442 (source
18443 (origin
18444 (method url-fetch)
18445 (uri (pypi-uri "sniffio" version))
18446 (sha256
18447 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18448 (build-system pyproject-build-system)
18449 (arguments
18450 (list
18451 #:test-flags
18452 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18453 (native-inputs
18454 (list python-pytest python-setuptools))
18455 (home-page "https://github.com/python-trio/sniffio")
18456 (synopsis "Detect which async library a program is running under")
18457 (description
18458 "This package detects which async library a program is running under. It
18459supports multiple async I/O packages, like Trio, and asyncio.")
18460 ;; Either license applies.
18461 (license (list license:expat license:asl2.0))))
18462
18463(define-public python-snuggs
18464 (package
18465 (name "python-snuggs")
18466 (version "1.4.7")
18467 (source (origin
18468 (method url-fetch)
18469 (uri (pypi-uri "snuggs" version))
18470 (sha256
18471 (base32
18472 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18473 (build-system pyproject-build-system)
18474 (propagated-inputs (list python-numpy python-pyparsing))
18475 (native-inputs (list python-hypothesis python-pytest python-setuptools
18476 python-wheel))
18477 (home-page "https://github.com/mapbox/snuggs")
18478 (synopsis "Snuggs are S-expressions for Numpy")
18479 (description "Snuggs are S-expressions for Numpy.")
18480 (license license:expat)))
18481
18482(define-public python-geojson
18483 (package
18484 (name "python-geojson")
18485 (version "3.2.0")
18486 (source
18487 (origin
18488 (method url-fetch)
18489 (uri (pypi-uri "geojson" version))
18490 (sha256
18491 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18492 (build-system pyproject-build-system)
18493 (native-inputs (list python-pytest python-setuptools))
18494 (home-page "https://github.com/jazzband/geojson")
18495 (synopsis "Python bindings and utilities for GeoJSON")
18496 (description
18497 "This package provides Python bindings and utilities for
18498@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18499structures.")
18500 (license license:bsd-3)))
18501
18502;; pyowm only accepts a version less than version 3.
18503(define-public python-geojson-for-pyowm
18504 (package
18505 (inherit python-geojson)
18506 (version "2.5.0")
18507 (source
18508 (origin
18509 (method url-fetch)
18510 (uri (pypi-uri "geojson" version))
18511 (sha256
18512 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
18513 (arguments
18514 ;; https://github.com/jazzband/geojson/issues/175
18515 (list #:tests? #f))))
18516
18517(define-public python-gpxpy
18518 (package
18519 (name "python-gpxpy")
18520 (version "1.6.2")
18521 (source
18522 (origin
18523 (method url-fetch)
18524 (uri (pypi-uri "gpxpy" version))
18525 (sha256
18526 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
18527 (build-system pyproject-build-system)
18528 (arguments
18529 (list #:test-backend #~'unittest))
18530 (native-inputs
18531 (list python-setuptools))
18532 (home-page "https://github.com/tkrajina/gpxpy")
18533 (synopsis "Python GPX parser")
18534 (description "GPX file parser and GPS track manipulation library.")
18535 (license license:asl2.0)))
18536
18537(define-public python-get-version
18538 (package
18539 (name "python-get-version")
18540 (version "3.5.5")
18541 (source
18542 (origin
18543 (method url-fetch)
18544 (uri (pypi-uri "get_version" version))
18545 (sha256
18546 (base32
18547 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
18548 (build-system pyproject-build-system)
18549 (arguments
18550 ;; XXX: No tests in PyPI and building from GitHub fails because of the
18551 ;; lack of git metadata in the checkout.
18552 (list #:tests? #f))
18553 (native-inputs (list python-flit-core))
18554 (propagated-inputs (list python-dunamai))
18555 (home-page "https://github.com/flying-sheep/get_version")
18556 (synopsis "Version helper in the spirit of versioneer")
18557 (description
18558 "This package provides a version helper that lets you automatically use
18559the latest @code{vX.X.X} Git tag as the version in your Python package. It
18560also supports getting the version from Python source distributions or, once
18561your package is installed, via @code{pkg_resources} (part of
18562@code{setuptools}).")
18563 (license license:gpl3+)))
18564
18565(define-public python-filetype
18566 (package
18567 (name "python-filetype")
18568 (version "1.2.0")
18569 (source
18570 (origin
18571 (method url-fetch)
18572 (uri (pypi-uri "filetype" version))
18573 (sha256
18574 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
18575 (build-system pyproject-build-system)
18576 (native-inputs (list python-pytest
18577 python-pytest-benchmark
18578 python-setuptools
18579 python-wheel))
18580 (home-page "https://github.com/h2non/filetype.py")
18581 (synopsis "Infer file type and MIME type of any file/buffer")
18582 (description "@code{filetype} is a small and dependency free Python
18583package to infer file type and MIME type checking the magic numbers
18584signature of a file or buffer.")
18585 (license license:expat)))
18586
18587(define-public python-cachelib
18588 (package
18589 (name "python-cachelib")
18590 (version "0.13.0")
18591 (source
18592 (origin
18593 (method url-fetch)
18594 (uri (pypi-uri "cachelib" version))
18595 (sha256
18596 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
18597 (build-system pyproject-build-system)
18598 (arguments
18599 ;; These tests use a remote connection.
18600 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
18601 "--ignore" "tests/test_mongodb_cache.py")))
18602 (native-inputs
18603 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
18604 (home-page "https://github.com/pallets-eco/cachelib")
18605 (synopsis "Collection of cache libraries")
18606 (description "Cachelib is a library extracted from @code{werkzeug} which
18607provides a collection of cache libraries in the same API interface.")
18608 (license license:bsd-3)))
18609
18610(define-public python-pylru
18611 (package
18612 (name "python-pylru")
18613 (version "1.2.0")
18614 (source
18615 (origin
18616 (method git-fetch)
18617 (uri (git-reference
18618 (url "https://github.com/jlhutch/pylru")
18619 (commit (string-append "v" version))))
18620 (file-name (git-file-name name version))
18621 (sha256
18622 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
18623 (build-system pyproject-build-system)
18624 (arguments
18625 (list
18626 #:test-backend #~'custom
18627 #:test-flags #~(list "test.py")))
18628 (native-inputs (list python-pytest python-setuptools))
18629 (home-page "https://github.com/jlhutch/pylru")
18630 (synopsis "Least recently used (LRU) cache implementation")
18631 (description
18632 "Pylru implements a true LRU cache along with several support classes.
18633Pylru provides a cache class with a simple dict interface. It also provides
18634classes to wrap any object that has a dict interface with a cache. Both
18635write-through and write-back semantics are supported. Pylru also provides
18636classes to wrap functions in a similar way, including a function decorator.")
18637 (license license:gpl2+)))
18638
18639(define-public python-legacy-api-wrap
18640 (package
18641 (name "python-legacy-api-wrap")
18642 (version "1.5")
18643 (source
18644 (origin
18645 (method url-fetch)
18646 (uri (pypi-uri "legacy_api_wrap" version))
18647 (sha256
18648 (base32
18649 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
18650 (build-system pyproject-build-system)
18651 (native-inputs
18652 (list python-hatch-docstring-description
18653 python-hatch-vcs
18654 python-hatchling
18655 python-pytest
18656 python-typer))
18657 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
18658 (synopsis "Legacy API wrapper")
18659 (description "This module defines a decorator to wrap legacy APIs. The
18660primary use case is APIs defined before keyword-only parameters existed.")
18661 (license license:gpl3+)))
18662
18663(define-public python-langdetect
18664 (package
18665 (name "python-langdetect")
18666 (version "1.0.9")
18667 (source
18668 (origin
18669 (method url-fetch)
18670 (uri (pypi-uri "langdetect" version))
18671 (sha256
18672 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
18673 (build-system pyproject-build-system)
18674 (native-inputs
18675 (list python-pytest
18676 python-setuptools))
18677 (propagated-inputs
18678 (list python-six))
18679 (home-page "https://github.com/Mimino666/langdetect")
18680 (synopsis "Language detection library")
18681 (description
18682 "This library is a port of Nakatani Shuyo's language-detection library
18683(version from 03/03/2014) to Python.")
18684 (license license:expat)))
18685
18686(define-public python-pyasn1
18687 (package
18688 (name "python-pyasn1")
18689 (version "0.6.1")
18690 (source
18691 (origin
18692 (method url-fetch)
18693 (uri (pypi-uri "pyasn1" version))
18694 (sha256
18695 (base32
18696 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
18697 (build-system pyproject-build-system)
18698 (arguments
18699 (list #:test-backend #~'unittest
18700 #:test-flags #~(list "discover" "tests")))
18701 (native-inputs
18702 (list python-setuptools))
18703 (home-page "https://github.com/pyasn1/pyasn1")
18704 (synopsis "ASN.1 types and codecs")
18705 (description
18706 "This is an implementation of ASN.1 types and codecs in Python. It is
18707suitable for a wide range of protocols based on the ASN.1 specification.")
18708 (license license:bsd-2)))
18709
18710(define-public python-pyasn1-modules
18711 (package
18712 (name "python-pyasn1-modules")
18713 (version "0.4.2")
18714 (source
18715 (origin
18716 (method url-fetch)
18717 (uri (pypi-uri "pyasn1_modules" version))
18718 (sha256
18719 (base32
18720 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
18721 (build-system pyproject-build-system)
18722 (arguments
18723 (list #:test-backend #~'unittest
18724 #:test-flags #~(list "discover" "tests")))
18725 (native-inputs
18726 (list python-setuptools))
18727 (propagated-inputs
18728 (list python-pyasn1))
18729 (home-page "https://github.com/pyasn1/pyasn1-modules")
18730 (synopsis "ASN.1 codec implementations")
18731 (description
18732 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
18733implementations of ASN.1-based codecs and protocols.")
18734 (license license:bsd-3)))
18735
18736(define-public python-asn1tools
18737 (package
18738 (name "python-asn1tools")
18739 (version "0.167.0")
18740 (source
18741 (origin
18742 (method url-fetch)
18743 (uri (pypi-uri "asn1tools" version))
18744 (sha256
18745 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
18746 (build-system pyproject-build-system)
18747 (arguments
18748 (list
18749 #:test-flags
18750 #~(list "-k" (string-join
18751 ;; Tests fail with error: IndexError: string index out of
18752 ;; range. It may be some incompatibility with pyparsing,
18753 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
18754 (list "not test_c_source"
18755 "test_command_line_generate_c_source_oer"
18756 "test_command_line_generate_c_source_uper"
18757 "test_command_line_generate_rust_source_uper"
18758 "test_missing_parameterized_value"
18759 "test_c_source"
18760 "test_parse_parameterization")
18761 " and not "))))
18762 (native-inputs
18763 (list python-pytest
18764 python-setuptools
18765 python-wheel))
18766 (propagated-inputs
18767 (list python-bitstruct
18768 python-diskcache
18769 python-prompt-toolkit
18770 python-pyparsing))
18771 (home-page "https://github.com/eerimoq/asn1tools")
18772 (synopsis "ASN.1 parsing, encoding and decoding")
18773 (description "This package provides ASN.1 parsing, encoding and decoding
18774for Python, including constraints checking. It supports several
18775codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
18776for OER and UPER.")
18777 (license license:expat)))
18778
18779(define-public python-idna
18780 (package
18781 (name "python-idna")
18782 (version "3.10")
18783 (source
18784 (origin
18785 (method url-fetch)
18786 (uri (pypi-uri "idna" version))
18787 (sha256
18788 (base32
18789 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
18790 (build-system pyproject-build-system)
18791 (native-inputs
18792 (list python-flit-core))
18793 (home-page "https://github.com/kjd/idna")
18794 (synopsis "Internationalized domain names in applications")
18795 (description
18796 "This is a library to support the Internationalised Domain Names in
18797Applications (IDNA) protocol as specified in RFC 5891. This version of the
18798protocol is often referred to as “IDNA2008” and can produce different results
18799from the earlier standard from 2003. The library is also intended to act as a
18800suitable drop-in replacement for the “encodings.idna” module that comes with
18801the Python standard library but currently only supports the older 2003
18802specification.")
18803 (license license:bsd-4)))
18804
18805(define-public python-libsass
18806 (package
18807 (name "python-libsass")
18808 (version "0.23.0")
18809 (source
18810 (origin
18811 ;; PyPI tarball is missing some test files.
18812 (method git-fetch)
18813 (uri (git-reference
18814 (url "https://github.com/sass/libsass-python")
18815 (commit version)))
18816 (file-name (git-file-name name version))
18817 (sha256
18818 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
18819 (build-system pyproject-build-system)
18820 (arguments
18821 '(#:phases
18822 (modify-phases %standard-phases
18823 ;; Use Guix package of libsass instead of compiling from a checkout.
18824 (add-before 'build 'set-libsass
18825 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
18826 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
18827 ;; https://github.com/sass/libsass-python/issues/440. It passed with
18828 ;; [email protected] which requires rebuild the world (1200+ packages),
18829 ;; remove when v3.6.5 is available.
18830 (add-before 'check 'silent-failing-tests
18831 (lambda _
18832 (substitute* "sasstests.py"
18833 (("def test_build_one")
18834 "def __off_test_build_one")
18835 (("def test_stack_trace_formatting")
18836 "def __off_test_stack_trace_formatting"))))
18837 (replace 'check
18838 (lambda* (#:key tests? #:allow-other-keys)
18839 (when tests?
18840 (invoke "pytest" "sasstests.py"))))
18841 (add-after 'install 'delete-test
18842 (lambda* (#:key inputs outputs #:allow-other-keys)
18843 ;; Delete sasstests.py because it attempts to open a file
18844 ;; that is not installed when loaded, which breaks the sanity
18845 ;; check.
18846 (delete-file (string-append
18847 (assoc-ref outputs "out")
18848 "/lib/python"
18849 (python-version
18850 (dirname (dirname
18851 (search-input-file inputs "bin/python"))))
18852 "/site-packages/sasstests.py")))))))
18853 (native-inputs
18854 (list python-pytest python-setuptools python-werkzeug python-wheel))
18855 (inputs
18856 (list libsass))
18857 (home-page "https://sass.github.io/libsass-python/")
18858 (synopsis "Straightforward binding of libsass for Python")
18859 (description
18860 "This package provides a simple Python extension module @code{sass} which
18861is binding LibSass.")
18862 (license license:expat)))
18863
18864;; It may be removed after 2026-01-24.
18865(define-deprecated/public-alias python-path-bootstrap python-path)
18866
18867(define-public python-pip-run
18868 (package
18869 (name "python-pip-run")
18870 (version "8.8.0")
18871 (source
18872 (origin
18873 (method git-fetch)
18874 (uri (git-reference
18875 (url "https://github.com/jaraco/pip-run")
18876 (commit (string-append "v" version))))
18877 (file-name (git-file-name name version))
18878 (sha256
18879 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
18880 (build-system pyproject-build-system)
18881 (arguments
18882 (list
18883 #:tests? (not (%current-target-system))
18884 #:test-flags
18885 #~(list "-k" (string-append
18886 ;; Do not test the myproject.toml build as it tries
18887 ;; to pull dependencies from the internet.
18888 "not project "
18889 ;; These tests attempt to install dependencies from
18890 ;; the network and fail.
18891 "and not test_pkg_imported "
18892 "and not test_pkg_loaded_from_alternate_index "
18893 "and not test_pkg_loaded_from_url "))))
18894 (native-inputs
18895 (list python-nbformat
18896 python-pygments
18897 python-pytest
18898 python-setuptools
18899 python-setuptools-scm))
18900 (propagated-inputs
18901 (list python-autocommand
18902 python-packaging
18903 python-path
18904 python-pip))
18905 (home-page "https://github.com/jaraco/pip-run")
18906 (synopsis "Dynamic dependency loader for Python")
18907 (description "The @command{pip-run} command provides on-demand temporary
18908package installation for a single interpreter run. It replaces this series of
18909commands:
18910@example
18911$ virtualenv --python pythonX.X --system-site-packages /tmp/env
18912$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
18913$ /tmp/env/bin/python ...
18914$ rm -rf /tmp/env
18915@end example")
18916 (license license:expat)))
18917
18918;; It may be removed after 2026-01-24.
18919(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
18920
18921(define-public python-libarchive-c
18922 (package
18923 (name "python-libarchive-c")
18924 (version "5.2")
18925 (source (origin
18926 (method url-fetch)
18927 (uri (pypi-uri "libarchive_c" version))
18928 (sha256
18929 (base32
18930 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
18931 (build-system pyproject-build-system)
18932 (arguments
18933 (list
18934 #:phases
18935 #~(modify-phases %standard-phases
18936 (add-before 'build 'reference-libarchive
18937 (lambda* (#:key inputs #:allow-other-keys)
18938 ;; Retain the absolute file name of libarchive.so.
18939 (substitute* "libarchive/ffi.py"
18940 (("find_library\\('archive'\\)")
18941 (string-append
18942 "'"
18943 (search-input-file inputs "/lib/libarchive.so")
18944 "'"))))))))
18945 (native-inputs
18946 (list python-setuptools python-wheel python-pytest))
18947 (inputs
18948 (list libarchive))
18949 (home-page "https://github.com/Changaco/python-libarchive-c")
18950 (synopsis "Python interface to libarchive")
18951 (description
18952 "This package provides Python bindings to libarchive, a C library to
18953access possibly compressed archives in many different formats. It uses
18954Python's @code{ctypes} foreign function interface (FFI).")
18955 (license license:lgpl2.0+)))
18956
18957(define-public python-file
18958 (package/inherit file
18959 (name "python-file")
18960 (build-system pyproject-build-system)
18961 (arguments
18962 (list
18963 #:tests? #f ;no tests
18964 #:phases
18965 #~(modify-phases %standard-phases
18966 (add-before 'build 'change-directory
18967 (lambda _
18968 (chdir "python")))
18969 (add-before 'build 'set-library-file-name
18970 (lambda* (#:key inputs #:allow-other-keys)
18971 (substitute* "magic.py"
18972 (("find_library\\('magic'\\)")
18973 (format #f "~s" (search-input-file inputs
18974 "lib/libmagic.so")))))))))
18975 (inputs (list file))
18976 (native-inputs (cons* python-setuptools
18977 (if (%current-target-system)
18978 (list this-package)
18979 '())))
18980 (synopsis "Python bindings to the libmagic file type guesser")
18981 (description "This package provides Python bindings to the libmagic file
18982type guesser.
18983
18984Note that this module and the @code{python-magic} module both provide a
18985@file{magic.py} file; these two modules, which are different and were
18986developed separately, both serve the same purpose: provide Python bindings for
18987libmagic.")))
18988
18989(define-public python-pydemumble
18990 (package
18991 (name "python-pydemumble")
18992 (version "0.0.1")
18993 (source
18994 (origin
18995 (method git-fetch)
18996 (uri (git-reference
18997 (url "https://github.com/angr/pydemumble")
18998 (commit (string-append "v" version))))
18999 (file-name (git-file-name name version))
19000 (sha256
19001 (base32 "1hg5ywdsfyynn9hlr0xkafsv8i53b0s332f29ll13kk01630y0jp"))
19002 (patches (search-patches "python-pydemumble-system-nanobind.patch"))))
19003 (build-system pyproject-build-system)
19004 (arguments
19005 (list
19006 #:test-flags
19007 #~(list "discover" "-s" "tests")
19008 #:phases
19009 #~(modify-phases %standard-phases
19010 (add-after 'unpack 'set-demumble-source
19011 (lambda* _
19012 ;; demumble is only a binary and not intended to be used as
19013 ;; a library. Therefore, python-pydemumble creates it's own
19014 ;; bindings for demumble, which are autogenerated from C code.
19015 (substitute* "CMakeLists.txt"
19016 (("src/demumble")
19017 #+(package-source demumble))))))))
19018 (native-inputs (list python-nanobind python-scikit-build-core))
19019 (home-page "https://github.com/angr/pydemumble")
19020 (synopsis "Python library for demangling symbol names")
19021 (description
19022 "This package provides a Python wrapper library for @code{demumble}, which
19023is a tool to demangle C++, Rust, and Swift symbol names.")
19024 (license license:bsd-2)))
19025
19026(define-public python-pydevd
19027 (package
19028 (name "python-pydevd")
19029 (version "3.2.3")
19030 (source
19031 (origin
19032 (method git-fetch)
19033 (uri (git-reference
19034 (url "https://github.com/fabioz/PyDev.Debugger")
19035 (commit (string-append
19036 "pydev_debugger_"
19037 (string-join (string-split version #\.) "_")))))
19038 (modules '((guix build utils)))
19039 (snippet '(begin
19040 ;; Delete pre-built binaries.
19041 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
19042 ;; This source is generated via Cython.
19043 (delete-file "_pydevd_bundle/pydevd_cython.c")))
19044 (file-name (git-file-name name version))
19045 (sha256
19046 (base32
19047 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
19048 (build-system pyproject-build-system)
19049 (arguments
19050 (list
19051 #:test-flags
19052 #~(list "-n" (number->string (parallel-job-count))
19053 "-m" "not flaky"
19054 "-k"
19055 (string-join
19056 (list
19057 ;; The two "break_01" tests have been failing on
19058 ;; Python 3.10:
19059 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
19060 "not test_set_pydevd_break_01 "
19061 ;; the GUI event loop requires an X server.
19062 "test_gui_event_loop_custom"
19063 ;; This test validates that 'pydevd' is not in the
19064 ;; exception message, but it is due to being part
19065 ;; of the build file name present in the message.
19066 "test_evaluate_exception_trace"
19067 ;; This test fail with TimeoutError, no message on stderr.
19068 "test_soft_terminate"
19069 "test_debugger_case_deadlock_interrupt_thread"
19070 ;; subprocess.CalledProcessError
19071 ;; Python 3.11/3.12 specific issue:
19072 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
19073 "test_find_main_thread_id")
19074 " and not "))
19075 #:phases
19076 #~(modify-phases %standard-phases
19077 (add-after 'unpack 'fix-tests
19078 (lambda _
19079 (substitute* "tests_python/test_convert_utilities.py"
19080 ;; Add missing trailing '/'.
19081 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
19082 (string-append all "/")))))
19083 (add-after 'unpack 'patch-command-paths
19084 (lambda* (#:key inputs #:allow-other-keys)
19085 (substitute* "_pydevd_bundle/pydevd_api.py"
19086 (("'kill'")
19087 (format #f "~s" (search-input-file inputs "bin/kill")))
19088 (("'pgrep'")
19089 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
19090 (add-after 'unpack 'generate-sources
19091 (lambda _
19092 (setenv "PYTHONPATH" (getcwd))
19093 (invoke "python" "build_tools/build.py")))
19094 (add-after 'unpack 'adjust-attach-binary-name
19095 (lambda _
19096 (substitute*
19097 '("pydevd_tracing.py"
19098 "pydevd_attach_to_process/add_code_to_python_process.py")
19099 (("def get_(target|python_helper_lib)_filename.*" all)
19100 (format #f "~a return ~s~%" all
19101 (string-append #$output "/lib/attach.so"))))))
19102 (add-after 'unpack 'patch-gdb
19103 (lambda* (#:key inputs #:allow-other-keys)
19104 (substitute*
19105 "pydevd_attach_to_process/add_code_to_python_process.py"
19106 (("'gdb',")
19107 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
19108 (add-after 'build 'build-attach-linux-binary
19109 (lambda _
19110 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
19111 "-fPIC" "-nostartfiles"
19112 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
19113 (add-before 'check 'pre-check
19114 (lambda* (#:key tests? #:allow-other-keys)
19115 (when tests?
19116 (setenv "PYDEVD_USE_CYTHON" "YES"))))
19117 (add-after 'install 'install-attach-binary
19118 (lambda _
19119 (install-file "attach.so"
19120 (string-append #$output "/lib"))))
19121 ;; Some modules aren't designed to be loadable by themselves, such
19122 ;; as 'pydev_app_engine_debug_startup' and fail.
19123 (delete 'sanity-check))))
19124 (native-inputs
19125 (list python-cython
19126 python-numpy
19127 python-psutil
19128 python-pytest
19129 python-pytest-xdist
19130 python-setuptools
19131 python-trio
19132 python-untangle
19133 python-wheel))
19134 (inputs (list coreutils gdb/pinned procps))
19135 (home-page "https://github.com/fabioz/PyDev.Debugger/")
19136 (synopsis "Python debugger")
19137 (description "PyDev.Debugger is a capable Python debugger used in PyDev
19138and other @acronym{IDEs, Integrated Development Environments}.")
19139 (license license:epl1.0)))
19140
19141(define-public python-debugpy
19142 (package
19143 (name "python-debugpy")
19144 (version "1.8.17")
19145 (source
19146 (origin
19147 (method git-fetch)
19148 (uri (git-reference ;no tests in PyPI archive
19149 (url "https://github.com/microsoft/debugpy")
19150 (commit (string-append "v" version))))
19151 (file-name (git-file-name name version))
19152 (modules '((guix build utils)))
19153 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
19154 ;; attach binary.
19155 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
19156 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
19157 (sha256
19158 (base32
19159 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
19160 (build-system pyproject-build-system)
19161 (arguments
19162 (list
19163 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
19164 #:phases
19165 #~(modify-phases %standard-phases
19166 (add-after 'unpack 'patch-sh-in-tests
19167 (lambda _
19168 (substitute* "tests/debugpy/test_run.py"
19169 (("#!/bin/sh")
19170 (string-append "#!" (which "sh"))))))
19171 (add-before 'build 'configure
19172 (lambda _
19173 ;; This adjusts the behavior of debugpy to load pydevd from
19174 ;; Python site packages.
19175 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
19176 (native-inputs
19177 (list python-setuptools
19178 python-versioneer))
19179 (propagated-inputs
19180 (list python-pydevd))
19181 (home-page "https://aka.ms/debugpy")
19182 (synopsis "Debug Adapter Protocol Python implementation")
19183 (description "An implementation of the Debug Adapter Protocol for
19184Python.")
19185 (license license:expat)))
19186
19187(define-public python-debian
19188 (package
19189 (name "python-debian")
19190 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
19191 (version "0.1.49")
19192 (source
19193 (origin
19194 ;; Use git-fetch, as pypi doesn't include test suite.
19195 (method git-fetch)
19196 (uri (git-reference
19197 (url home-page)
19198 (commit version)))
19199 (file-name (git-file-name name version))
19200 (sha256
19201 (base32
19202 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
19203 (modules '((guix build utils)))
19204 (snippet
19205 #~(begin
19206 ;; python-apt, apt and dpkg are not yet available in guix,
19207 ;; and these tests heavily depend on them.
19208 (for-each delete-file
19209 '("lib/debian/tests/test_deb822.py"
19210 "lib/debian/tests/test_debfile.py"))
19211
19212 ;; for reproducible builds, otherwise python-debian
19213 ;; generates a _version.py including the date
19214 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
19215 (substitute* "lib/debian/_version.py"
19216 (("__CHANGELOG_VERSION__") #$version))))))
19217 (build-system pyproject-build-system)
19218 (native-inputs
19219 (list python-pytest python-setuptools))
19220 (propagated-inputs
19221 (list python-six python-chardet))
19222 (synopsis "Debian package related modules")
19223 (description
19224 "This package provides Python modules that abstract many formats of
19225Debian-related files, such as:
19226@itemize
19227@item Debtags information;
19228@item @file{debian/changelog} files;
19229@item packages files, pdiffs;
19230@item control files of single or multiple RFC822-style paragraphs---e.g.
19231 @file{debian/control}, @file{.changes}, @file{.dsc};
19232@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
19233 contained files and meta-information.
19234@end itemize")
19235 ;; Modules are either GPLv2+ or GPLv3+.
19236 (license license:gpl3+)))
19237
19238(define-public python-json-spec
19239 (package
19240 (name "python-json-spec")
19241 (version "0.12.0")
19242 (source
19243 (origin
19244 (method git-fetch) ;no tests in PyPI archive
19245 (uri (git-reference
19246 (url "https://github.com/johnnoone/json-spec")
19247 (commit version)))
19248 (file-name (git-file-name name version))
19249 (sha256
19250 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
19251 (build-system pyproject-build-system)
19252 (native-inputs
19253 (list python-pytest
19254 python-poetry-core))
19255 (propagated-inputs
19256 (list python-termcolor)) ;for the CLI
19257 (home-page "https://json-spec.readthedocs.io/")
19258 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
19259 (description
19260 "This Python library implements several JSON specs, like JSON Schema,
19261JSON Reference and JSON Pointer.")
19262 (license license:bsd-3)))
19263
19264(define-public python-fastbencode
19265 (package
19266 (name "python-fastbencode")
19267 (version "0.3.9")
19268 (source
19269 (origin
19270 (method git-fetch)
19271 (uri (git-reference
19272 (url "https://github.com/breezy-team/fastbencode")
19273 (commit (string-append "v" version))))
19274 (file-name (git-file-name name version))
19275 (sha256
19276 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
19277 (build-system pyproject-build-system)
19278 (arguments
19279 (list
19280 #:test-backend #~'unittest
19281 #:test-flags #~(list "tests.test_suite")
19282 #:imported-modules (append %cargo-build-system-modules
19283 %pyproject-build-system-modules)
19284 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
19285 (guix build pyproject-build-system)
19286 (guix build utils))
19287 #:phases
19288 #~(modify-phases %standard-phases
19289 (add-after 'unpack 'prepare-cargo-build-system
19290 (lambda args
19291 (for-each
19292 (lambda (phase)
19293 (format #t "Running cargo phase: ~a~%" phase)
19294 (apply (assoc-ref cargo:%standard-phases phase)
19295 #:cargo-target #$(cargo-triplet)
19296 args))
19297 '(unpack-rust-crates
19298 configure
19299 check-for-pregenerated-files
19300 patch-cargo-checksums)))))))
19301 (inputs (cargo-inputs 'fastbencode))
19302 (native-inputs
19303 (append
19304 (list python-setuptools-rust
19305 rust
19306 `(,rust "cargo"))
19307 (or (and=> (%current-target-system)
19308 (compose list make-rust-sysroot))
19309 '())))
19310 (home-page "https://github.com/breezy-team/fastbencode")
19311 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
19312 (description
19313 "The fastbencode Python package implements the bencode serialization
19314format for storing and transmitting loosely structured data, originally used
19315by BitTorrent.
19316
19317The format can encode four different types of values: byte strings, integers,
19318lists, and dictionaries (associative arrays). It's simple and unaffected by
19319endianness,
19320
19321This package includes both a pure-Python version and an optional C extension
19322based on Cython. Both provide the same functionality, but the C version has
19323significantly better performance.")
19324 (license (list license:expat ; _bencode_py.py
19325 license:gpl2+)))) ; __init__.py
19326
19327(define-public python-fastjsonschema
19328 (package
19329 (name "python-fastjsonschema")
19330 (version "2.21.1")
19331 (source
19332 (origin
19333 (method git-fetch) ; no tests in PyPI release
19334 (uri (git-reference
19335 (url "https://github.com/horejsek/python-fastjsonschema")
19336 (commit (string-append "v" version))))
19337 (file-name (git-file-name name version))
19338 (sha256
19339 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
19340 (build-system pyproject-build-system)
19341 (arguments
19342 (list
19343 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
19344 (native-inputs
19345 (list python-json-spec
19346 python-jsonschema
19347 python-pytest
19348 python-pytest-benchmark
19349 python-setuptools))
19350 (home-page "https://github.com/horejsek/python-fastjsonschema")
19351 (synopsis "Fast Python implementation of JSON schema")
19352 (description
19353 "This library implements validation of JSON documents by JSON schema for
19354drafts 04, 06 and 07.")
19355 (license license:bsd-3)))
19356
19357(define-public python-nbformat
19358 (package
19359 (name "python-nbformat")
19360 (version "5.10.4")
19361 ;; The PyPi release tarball lacks some test cases and test data.
19362 (source (origin
19363 (method git-fetch)
19364 (uri (git-reference
19365 (url "https://github.com/jupyter/nbformat")
19366 (commit (string-append "v" version))))
19367 (sha256
19368 (base32
19369 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
19370 (file-name (git-file-name name version))))
19371 (build-system pyproject-build-system)
19372 (arguments
19373 (list
19374 #:phases
19375 #~(modify-phases %standard-phases
19376 ;; We don't want to use hatch-nodejs just to get a version string.
19377 (add-after 'unpack 'patch-pyproject
19378 (lambda _
19379 (substitute* "pyproject.toml"
19380 ((", \"hatch-nodejs-version\"") "")
19381 (("dynamic = \\[\"version\"\\]")
19382 (string-append "version = \"" #$version "\""))))))))
19383 (propagated-inputs
19384 (list python-fastjsonschema python-jsonschema python-jupyter-core
19385 python-traitlets))
19386 (native-inputs
19387 (list python-hatchling
19388 python-pep440
19389 python-pytest
19390 python-testpath))
19391 (home-page "https://jupyter.org")
19392 (synopsis "Jupyter Notebook format")
19393 (description "This package provides the reference implementation of the
19394Jupyter Notebook format and Python APIs for working with notebooks.")
19395 (license license:bsd-3)))
19396
19397(define-public python-nb-clean
19398 (package
19399 (name "python-nb-clean")
19400 (version "4.0.1")
19401 (source
19402 (origin
19403 (method git-fetch) ; no tests in PyPI
19404 (uri (git-reference
19405 (url "https://github.com/srstevenson/nb-clean")
19406 (commit version)))
19407 (file-name (git-file-name name version))
19408 (sha256
19409 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
19410 (build-system pyproject-build-system)
19411 (native-inputs (list python-poetry-core
19412 python-pytest
19413 python-pytest-mock))
19414 (propagated-inputs (list python-nbformat))
19415 (home-page "https://github.com/srstevenson/nb-clean")
19416 (synopsis "Clean Jupyter notebooks for versioning")
19417 (description "This package cleans Jupyter notebooks of cell execution
19418counts, metadata, outputs, and empty cells, preparing them for committing to
19419version control. It provides a Git filter to automatically clean notebooks
19420before they're staged, and can also be used with other version control
19421systems, as a command line tool, and as a Python library.")
19422 (license license:isc)))
19423
19424(define-public python-entrypoints
19425 (package
19426 (name "python-entrypoints")
19427 (version "0.4")
19428 (source
19429 (origin
19430 (method url-fetch)
19431 (uri (pypi-uri "entrypoints" version))
19432 (sha256
19433 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
19434 (build-system pyproject-build-system)
19435 (native-inputs
19436 (list python-flit-core
19437 python-pytest))
19438 (home-page "https://github.com/takluyver/entrypoints")
19439 (synopsis "Discover and load entry points from installed Python packages")
19440 (description "Entry points are a way for Python packages to advertise
19441objects with some common interface. The most common examples are
19442@code{console_scripts} entry points, which define shell commands by
19443identifying a Python function to run. The @code{entrypoints} module contains
19444functions to find and load entry points.")
19445 (license license:expat)))
19446
19447(define-public python-epc
19448 (package
19449 (name "python-epc")
19450 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
19451 (revision . "0")))
19452 (version (git-version "0.0.5"
19453 (assoc-ref properties 'revision)
19454 (assoc-ref properties 'commit)))
19455 (source
19456 (origin
19457 (method git-fetch)
19458 (uri (git-reference
19459 (url "https://github.com/tkf/python-epc")
19460 (commit (assoc-ref properties 'commit))))
19461 (file-name (git-file-name name version))
19462 (sha256
19463 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
19464 (build-system pyproject-build-system)
19465 (arguments (list #:test-backend #~'nose))
19466 (propagated-inputs (list python-sexpdata))
19467 (native-inputs (list python-pynose python-setuptools))
19468 (home-page "https://github.com/tkf/python-epc")
19469 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
19470 (description
19471 "Python-EPC can call elisp functions from Python and Python functions
19472from elisp.")
19473 (license license:gpl3)))
19474
19475(define-public python-forex-python
19476 (package
19477 (name "python-forex-python")
19478 (version "1.5")
19479 (source
19480 (origin
19481 (method git-fetch)
19482 (uri (git-reference
19483 (url "https://github.com/MicroPyramid/forex-python")
19484 (commit version)))
19485 (file-name (git-file-name name version))
19486 (sha256
19487 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19488 (build-system pyproject-build-system)
19489 (arguments (list #:tests? #f)) ; Tests require online data.
19490 (native-inputs (list python-setuptools))
19491 (propagated-inputs (list python-requests python-simplejson))
19492 (home-page "https://github.com/MicroPyramid/forex-python")
19493 (synopsis "Foreign exchange rates and currency conversion")
19494 (description
19495 "@code{python-forex-python} can be used to manipulate foreign
19496exchange rates and to operate currency conversions.
19497
19498Features:
19499@itemize
19500@item List all currency rates.
19501@item BitCoin price for all currencies.
19502@item Converting amount to BitCoins.
19503@item Get historical rates for any day since 1999.
19504@item Conversion rate for one currency(ex; USD to INR).
19505@item Convert amount from one currency to other.('USD 10$' to INR).
19506@item Currency symbols.
19507@item Currency names.
19508@end itemize")
19509 (license license:expat)))
19510
19511(define-public python-simpleeval
19512 (package
19513 (name "python-simpleeval")
19514 (version "0.9.12")
19515 (source
19516 (origin
19517 (method git-fetch)
19518 (uri (git-reference
19519 (url "https://github.com/danthedeckie/simpleeval")
19520 (commit version)))
19521 (file-name (git-file-name name version))
19522 (sha256
19523 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
19524 (build-system pyproject-build-system)
19525 (native-inputs (list python-pytest python-setuptools))
19526 (home-page "https://github.com/danthedeckie/simpleeval")
19527 (synopsis "Simple, safe single expression evaluator library")
19528 (description
19529 "This package provides a quick single file library for easily adding
19530evaluatable expressions into python projects. Say you want to allow a user
19531to set an alarm volume, which could depend on the time of day, alarm level,
19532how many previous alarms had gone off, and if there is music playing at the
19533time.")
19534 (license license:expat)))
19535
19536(define-public python-haas
19537 ;; A recent revision is required to avoid obsoleted dependencies.
19538 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
19539 (revision "0"))
19540 (package
19541 (name "python-haas")
19542 (version (git-version "0.9.0" revision commit))
19543 (source
19544 (origin
19545 (method git-fetch)
19546 (uri (git-reference
19547 (url "https://github.com/scalative/haas")
19548 (commit commit)))
19549 (file-name (git-file-name name version))
19550 (sha256
19551 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
19552 (build-system pyproject-build-system)
19553 (propagated-inputs
19554 (list python-stevedore))
19555 (native-inputs
19556 (list python-coverage
19557 python-pytest
19558 python-setuptools
19559 python-testfixtures))
19560 (home-page "https://github.com/scalative/haas")
19561 (synopsis "Extensible Python test runner")
19562 (description "Haas is a python test runner that is backward-compatible
19563with Python's built-in unittest test-cases, but supports more advanced
19564features, such as project-specific plugins.")
19565 (license license:bsd-3))))
19566
19567(define-public python-okonomiyaki
19568 (package
19569 (name "python-okonomiyaki")
19570 (version "3.0.0")
19571 (source
19572 (origin
19573 (method git-fetch)
19574 (uri (git-reference
19575 (url "https://github.com/enthought/okonomiyaki/")
19576 (commit version)))
19577 (file-name (git-file-name name version))
19578 (sha256
19579 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
19580 (build-system pyproject-build-system)
19581 (arguments
19582 (list
19583 #:phases
19584 #~(modify-phases %standard-phases
19585 ;; Unknown platform.
19586 (add-before 'check 'delete-fail-tests
19587 (lambda _
19588 (delete-file-recursively
19589 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
19590 (native-inputs
19591 (list python-distro
19592 python-haas
19593 python-jsonschema
19594 python-packaging
19595 python-parameterized
19596 python-pytest
19597 python-setuptools
19598 python-testfixtures
19599 python-zipfile2))
19600 (home-page "https://github.com/enthought/okonomiyaki/")
19601 (synopsis "Python library to deal with Enthought-specific metadata")
19602 (description
19603 "Okonomiyaki is a self-contained library aiming at consolidating
19604low-level code used in Enthought-specific egg and runtime archives.")
19605 (license license:bsd-3)))
19606
19607(define-public python-nbconvert
19608 (package
19609 (name "python-nbconvert")
19610 (version "7.17.0")
19611 (source
19612 (origin
19613 (method url-fetch)
19614 (uri (pypi-uri "nbconvert" version))
19615 (sha256
19616 (base32
19617 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
19618 (build-system pyproject-build-system)
19619 (arguments
19620 (list
19621 #:test-flags
19622 '(list "-k"
19623 (string-append
19624 ;; These tests require pyppeteer, not yet
19625 ;; available in Guix.
19626 "not test_webpdf_with_chromium"
19627 " and not test_webpdf.py"
19628 ;; These tests require ipywidgets, which would
19629 ;; introduce a dependency cycle.
19630 " and not test_execute_widgets_from_nbconvert"
19631 " and not test_execute_multiple_notebooks"
19632
19633 ;; This test calls nbconvert itself via "sys.executable -m
19634 ;; nbconvert". It's probably harmless.
19635 " and not test_default_config"))
19636 #:phases
19637 #~(modify-phases %standard-phases
19638 (add-after 'unpack 'fix-paths
19639 (lambda* (#:key inputs #:allow-other-keys)
19640 ;; Use pandoc binary from input.
19641 (substitute* "nbconvert/utils/pandoc.py"
19642 (("'pandoc'")
19643 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
19644 ;; Same for LaTeX.
19645 (substitute* "nbconvert/exporters/pdf.py"
19646 (("\"xelatex\"")
19647 (format #f "~s" (search-input-file inputs "bin/xelatex")))
19648 (("\"bibtex\"")
19649 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
19650 ;; Likewise for Inkscape.
19651 (substitute* "nbconvert/preprocessors/svg2pdf.py"
19652 (("inkscape_path = which\\(\"inkscape\")")
19653 (format #f "inkscape_path = ~s"
19654 (search-input-file inputs "bin/inkscape"))))))
19655 (add-after 'unpack 'ignore-deprecation-warnings
19656 (lambda _
19657 (substitute* "pyproject.toml"
19658 (("\"ignore:nbconvert.utils" m)
19659 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
19660 m)))))
19661 (add-before 'check 'pre-check
19662 (lambda _
19663 ;; Tests depend on templates installed to output.
19664 (setenv "JUPYTER_PATH"
19665 (string-append #$output "/share/jupyter:"
19666 (getenv "JUPYTER_PATH")))
19667 ;; jupyter-core demands this
19668 (setenv "JUPYTER_PLATFORM_DIRS" "1")
19669 ;; Tests need writable HOME and TEXMFVAR.
19670 (setenv "HOME" "/tmp")
19671 (setenv "TEXMFVAR" "/tmp"))))))
19672 (inputs
19673 (list inkscape/pinned pandoc))
19674 (native-inputs
19675 (list python-flaky
19676 python-hatchling
19677 python-ipykernel
19678 ;; Adding ipywidgets would create a cycle.
19679 ;;python-ipywidgets
19680 python-pytest
19681 (texlive-local-tree
19682 (list texlive-adjustbox
19683 texlive-booktabs
19684 texlive-caption
19685 texlive-enumitem
19686 texlive-eurosym
19687 texlive-fancyvrb
19688 texlive-float
19689 texlive-fontspec
19690 texlive-grffile
19691 texlive-jknapltx
19692 texlive-parskip
19693 texlive-pdfcol
19694 texlive-rsfs
19695 texlive-soul
19696 texlive-tcolorbox
19697 texlive-titling
19698 texlive-ulem
19699 texlive-unicode-math
19700 texlive-upquote
19701 texlive-xetex))))
19702 (propagated-inputs
19703 (list python-beautifulsoup4
19704 python-bleach
19705 python-defusedxml
19706 python-jinja2
19707 python-jupyter-core
19708 python-jupyterlab-pygments
19709 python-markupsafe
19710 python-mistune
19711 python-nbclient
19712 python-nbformat
19713 python-packaging
19714 python-pandocfilters
19715 python-pygments
19716 python-tinycss2
19717 python-traitlets
19718 ;; Required, even if [serve] is not used.
19719 python-tornado
19720 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
19721 texlive-adjustbox
19722 texlive-amsmath
19723 texlive-booktabs
19724 texlive-caption
19725 texlive-collection-basic
19726 texlive-enumitem
19727 texlive-environ
19728 texlive-etoolbox
19729 texlive-eurosym
19730 texlive-etoolbox
19731 texlive-fancyvrb
19732 texlive-float
19733 texlive-fontspec
19734 texlive-geometry
19735 texlive-grffile
19736 texlive-hyperref
19737 texlive-infwarerr
19738 texlive-jknapltx
19739 texlive-kvoptions
19740 texlive-lm
19741 texlive-lm-math
19742 texlive-mathpazo
19743 texlive-parskip
19744 texlive-pdfcol
19745 texlive-pgf
19746 texlive-rsfs
19747 texlive-soul
19748 texlive-stringenc
19749 texlive-tcolorbox
19750 texlive-titling
19751 texlive-tools
19752 texlive-trimspaces
19753 texlive-ucs
19754 texlive-ulem
19755 texlive-unicode-math
19756 texlive-upquote
19757 texlive-xcolor
19758 texlive-xetex
19759 texlive-zapfding))
19760 (home-page "https://jupyter.org")
19761 (synopsis "Converting Jupyter Notebooks")
19762 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
19763notebooks to various other formats via Jinja templates. It allows you to
19764convert an @code{.ipynb} notebook file into various static formats including:
19765
19766@enumerate
19767@item HTML
19768@item LaTeX
19769@item PDF
19770@item Reveal JS
19771@item Markdown (md)
19772@item ReStructured Text (rst)
19773@item executable script
19774@end enumerate\n")
19775 (license license:bsd-3)))
19776
19777(define-public python-ipywidgets
19778 (package
19779 (name "python-ipywidgets")
19780 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
19781 (version "8.1.4")
19782 (source
19783 (origin
19784 (method url-fetch)
19785 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
19786 (uri (pypi-uri "ipywidgets" version))
19787 (sha256
19788 (base32
19789 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
19790 (build-system pyproject-build-system)
19791 (native-inputs
19792 (list python-ipykernel
19793 python-jsonschema
19794 python-pytest
19795 python-pytz
19796 python-setuptools))
19797 (propagated-inputs
19798 (list python-comm
19799 python-ipython
19800 python-jupyterlab-widgets
19801 python-traitlets
19802 python-widgetsnbextension))
19803 (home-page "https://ipython.org")
19804 (synopsis "IPython HTML widgets for Jupyter")
19805 (description "Ipywidgets are interactive HTML widgets for Jupyter
19806notebooks and the IPython kernel. Notebooks come alive when interactive
19807widgets are used. Users gain control of their data and can visualize changes
19808in the data.")
19809 (license license:bsd-3)))
19810
19811(define-public python-jsbeautifier
19812 (package
19813 (name "python-jsbeautifier")
19814 (version "1.15.3")
19815 (home-page "https://github.com/beautify-web/js-beautify")
19816 (source
19817 (origin
19818 (method git-fetch)
19819 (uri (git-reference
19820 (url home-page)
19821 (commit (string-append "v" version))))
19822 (file-name (git-file-name name version))
19823 (sha256
19824 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
19825 (build-system pyproject-build-system)
19826 (arguments
19827 (list
19828 #:phases
19829 #~(modify-phases %standard-phases
19830 (add-after 'unpack 'chdir
19831 (lambda _
19832 (chdir "python")
19833 (rename-file "setup-js.py" "setup.py"))))))
19834 (propagated-inputs (list python-editorconfig python-six))
19835 (native-inputs (list python-pytest python-setuptools))
19836 (synopsis "JavaScript unobfuscator and beautifier")
19837 (description
19838 "This packages provides tooling to beautify, unpack or deobfuscate
19839JavaScript, leveraging popular online obfuscators.")
19840 (license license:expat)))
19841
19842(define-public python-chardet
19843 (package
19844 (name "python-chardet")
19845 (version "5.2.0")
19846 (source
19847 (origin
19848 (method url-fetch)
19849 (uri (pypi-uri "chardet" version))
19850 (sha256
19851 (base32
19852 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
19853 (native-inputs
19854 (list python-pytest python-setuptools python-wheel))
19855 (build-system pyproject-build-system)
19856 (arguments
19857 (list #:test-flags
19858 ;; Disable test that fails sporadically:
19859 ;; https://github.com/chardet/chardet/issues/256
19860 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
19861 #:phases
19862 #~(modify-phases %standard-phases
19863 ;; This package provides a 'chardetect' executable that only
19864 ;; depends on Python, so customize the wrap phase to avoid
19865 ;; adding pytest and friends in order to save size.
19866 ;; (See also <https://bugs.gnu.org/25235>.)
19867 (replace 'wrap
19868 (lambda* (#:key inputs outputs #:allow-other-keys)
19869 (let* ((sitedir (site-packages inputs outputs))
19870 (python (dirname (dirname
19871 (search-input-file
19872 inputs "bin/python"))))
19873 (python-sitedir
19874 (string-append python "/lib/python"
19875 (python-version python)
19876 "/site-packages")))
19877 (wrap-program (string-append #$output "/bin/chardetect")
19878 `("GUIX_PYTHONPATH" ":" suffix
19879 ,(list sitedir python-sitedir)))))))))
19880 (home-page "https://github.com/chardet/chardet")
19881 (synopsis "Universal encoding detector for Python 2 and 3")
19882 (description
19883 "This package provides @code{chardet}, a Python module that can
19884automatically detect a wide range of file encodings.")
19885 (license license:lgpl2.1+)))
19886
19887(define-public python-charset-normalizer
19888 (package
19889 (name "python-charset-normalizer")
19890 (version "3.4.2")
19891 (source
19892 (origin
19893 (method url-fetch)
19894 (uri (pypi-uri "charset_normalizer" version))
19895 (sha256
19896 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
19897 (build-system pyproject-build-system)
19898 (arguments
19899 (list
19900 #:phases
19901 #~(modify-phases %standard-phases
19902 ;; https://github.com/jawah/charset_normalizer/issues/625
19903 ;; https://github.com/jawah/charset_normalizer/pull/626
19904 (add-after 'unpack 'fix-scripts
19905 (lambda _
19906 (substitute* "pyproject.toml"
19907 (("charset_normalizer:cli.cli_detect")
19908 "charset_normalizer.cli:cli_detect")))))))
19909 (native-inputs
19910 (list python-pytest
19911 python-setuptools))
19912 (home-page "https://github.com/ousret/charset_normalizer")
19913 (synopsis "Universal Charset Detector, alternative to Chardet")
19914 (description "This library helps you read text from an unknown charset
19915encoding. Motivated by @code{chardet}, it tries to resolve the issue by
19916taking a new approach. All IANA character set names for which the Python core
19917library provides codecs are supported.")
19918 (license license:expat)))
19919
19920(define-public python-docopt
19921 (package
19922 (name "python-docopt")
19923 (version "0.6.2")
19924 (source
19925 (origin
19926 (method git-fetch)
19927 (uri (git-reference
19928 (url "https://github.com/docopt/docopt")
19929 (commit version)))
19930 (file-name (git-file-name name version))
19931 (sha256
19932 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
19933 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
19934 (build-system pyproject-build-system)
19935 ;; tests: 203 passed, 6 warnings
19936 (native-inputs
19937 (list python-pytest-8 python-setuptools))
19938 (home-page "http://docopt.org")
19939 (synopsis "Command-line interface description language for Python")
19940 (description
19941 "This library allows the user to define a command-line interface from a
19942program's help message rather than specifying it programmatically with
19943command-line parsers like @code{getopt} and @code{argparse}.")
19944 (license license:expat)))
19945
19946(define-public python-pythonanywhere
19947 (package
19948 (name "python-pythonanywhere")
19949 (version "0.19.0")
19950 (source
19951 (origin
19952 (method git-fetch)
19953 (uri (git-reference
19954 (url "https://github.com/pythonanywhere/helper_scripts")
19955 (commit (string-append "v" version))))
19956 (file-name (git-file-name name version))
19957 (sha256
19958 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
19959 (build-system pyproject-build-system)
19960 (arguments
19961 (list
19962 #:test-flags
19963 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
19964 "-k" (string-join
19965 ;; Network access is required to clone external
19966 ;; repositories.
19967 (list "not test_actually_creates_django_project_in_vir"
19968 "test_actually_downloads_repo"
19969 "test_actually_installing_a_real_package"
19970 "test_actually_works_against_example_repo"
19971 "test_autoconfigure_actually_works_against_example_repo"
19972 "test_exits_because_boolean_not_satisfied"
19973 "test_gets_version"
19974 "test_nuke_option_lets_you_run_twice"
19975 "test_nuke_option_lets_you_run_twice"
19976 "test_start_actually_creates_django_project_in_vir")
19977 " and not "))
19978 #:phases
19979 #~(modify-phases %standard-phases
19980 (add-after 'unpack 'relax-requirements
19981 (lambda _
19982 (substitute* "pyproject.toml"
19983 (("\"schema==.*\",")
19984 "\"schema\","))))
19985 (add-before 'check 'change-home
19986 (lambda _
19987 (setenv "HOME" "/tmp"))))))
19988 (native-inputs
19989 (list python-psutil
19990 python-pytest
19991 python-pytest-mock
19992 python-responses
19993 python-setuptools))
19994 (propagated-inputs
19995 (list python-dateutil
19996 python-docopt
19997 python-packaging
19998 python-pythonanywhere-core
19999 python-requests
20000 python-schema
20001 python-snakesay
20002 python-tabulate
20003 python-typer))
20004 (home-page "https://github.com/pythonanywhere/helper_scripts/")
20005 (synopsis "PythonAnywhere helper tools for users")
20006 (description
20007 "PythonAnywhere provides a command-line interface and an application
20008programming interface that allows managing files Web apps, scheduled
20009tasks and students. It includes single-command deployment for the Django Girls
20010tutorial.")
20011 (license license:expat)))
20012
20013(define-public python-pythonanywhere-core
20014 (package
20015 (name "python-pythonanywhere-core")
20016 (version "0.3.0")
20017 (source
20018 (origin
20019 (method git-fetch)
20020 (uri (git-reference
20021 (url "https://github.com/pythonanywhere/pythonanywhere-core")
20022 (commit (string-append "v" version))))
20023 (file-name (git-file-name name version))
20024 (sha256
20025 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
20026 (build-system pyproject-build-system)
20027 (arguments
20028 (list
20029 #:phases
20030 #~(modify-phases %standard-phases
20031 (add-before 'check 'pre-check
20032 (lambda _
20033 (setenv "HOME" "/tmp"))))))
20034 (native-inputs
20035 (list python-poetry-core
20036 python-pytest
20037 python-pytest-mock
20038 python-responses))
20039 (propagated-inputs
20040 (list python-dateutil
20041 python-requests
20042 python-snakesay
20043 python-typing-extensions))
20044 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
20045 (synopsis "API wrapper for PythonAnywhere services")
20046 (description
20047 "This package provides an API wrapper for programmatic management of
20048@code{PythonAnywhere} services.")
20049 (license license:expat)))
20050
20051(define-public python-dialog
20052 (package
20053 (name "python-dialog")
20054 (version "3.5.3")
20055 (source
20056 (origin
20057 (method url-fetch)
20058 (uri (pypi-uri "pythondialog" version))
20059 (sha256
20060 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
20061 (modules '((guix build utils)))
20062 (snippet #~(delete-file-recursively "doc"))))
20063 (build-system pyproject-build-system)
20064 (arguments
20065 (list
20066 ;; XXX: There are no tests, but some examples. However, they need to
20067 ;; be run on a terminal.
20068 #:tests? #f
20069 #:phases
20070 #~(modify-phases %standard-phases
20071 (add-after 'unpack 'patch-path
20072 (lambda* (#:key inputs #:allow-other-keys)
20073 (substitute* "dialog.py"
20074 (("_path_to_executable\\(dialog\\)")
20075 (format #f "os.path.realpath(~s)"
20076 (search-input-file inputs "bin/dialog")))))))))
20077 (native-inputs (list python-setuptools))
20078 (inputs (list dialog))
20079 (home-page "https://pythondialog.sourceforge.net/")
20080 (synopsis "Python interface to the UNIX dialog utility")
20081 (description
20082 "A Python wrapper for the dialog utility. Its purpose is to provide an
20083easy to use, pythonic and comprehensive Python interface to dialog. This
20084allows one to make simple text-mode user interfaces on Unix-like systems")
20085 (license license:lgpl2.1)))
20086
20087(define-deprecated-package python-pythondialog python-dialog)
20088
20089(define-public python-confection
20090 (package
20091 (name "python-confection")
20092 (version "1.3.3")
20093 (source
20094 (origin
20095 (method git-fetch)
20096 (uri (git-reference
20097 (url "https://github.com/explosion/confection")
20098 (commit (string-append "release-v" version))))
20099 (file-name (git-file-name name version))
20100 (sha256
20101 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
20102 (build-system pyproject-build-system)
20103 (arguments
20104 (list
20105 #:phases
20106 #~(modify-phases %standard-phases
20107 (add-before 'check 'patch-pythonpath
20108 (lambda _
20109 (setenv "PYTHONPATH"
20110 (string-append (getcwd) ":"
20111 (getenv "GUIX_PYTHONPATH"))))))))
20112 (propagated-inputs (list python-pydantic python-srsly))
20113 (native-inputs (list python-pytest python-setuptools))
20114 (home-page "https://github.com/explosion/confection")
20115 (synopsis "Config system for Python")
20116 (description
20117 "Confection is a lightweight library that offers a configuration system
20118letting you conveniently describe arbitrary trees of objects.")
20119 (license license:expat)))
20120
20121(define-public python-configobj
20122 (package
20123 (name "python-configobj")
20124 (version "5.0.9")
20125 (source
20126 (origin
20127 (method url-fetch)
20128 (uri (pypi-uri "configobj" version))
20129 (sha256
20130 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
20131 (build-system pyproject-build-system)
20132 (native-inputs
20133 (list python-pytest
20134 python-setuptools))
20135 (home-page "https://github.com/DiffSK/configobj")
20136 (synopsis "Config file reading, writing and validation")
20137 (description
20138 "ConfigObj is a simple but powerful config file reader and writer: an
20139 ini file round tripper. Its main feature is that it is very easy to use,
20140with a straightforward programmer’s interface and a simple syntax for config
20141files.")
20142 (license license:bsd-3)))
20143
20144(define-public python-omegaconf
20145 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
20146 (revision "1"))
20147 (package
20148 (name "python-omegaconf")
20149 (version (git-version "2.3.0" revision commit))
20150 (source
20151 (origin
20152 (method git-fetch)
20153 (uri (git-reference
20154 (url "https://github.com/omry/omegaconf")
20155 (commit commit)))
20156 (file-name (git-file-name name version))
20157 (modules '((guix build utils)))
20158 (snippet
20159 #~(begin
20160 (delete-file-recursively "build_helpers/bin")
20161 (substitute* "build_helpers/build_helpers.py"
20162 (("java") "antlr4")
20163 (("\"-jar\",") "")
20164 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
20165 (sha256
20166 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
20167 (build-system pyproject-build-system)
20168 (arguments
20169 (list
20170 #:test-flags
20171 ;; XXX: Those tests currently fail collection.
20172 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
20173 "--ignore=tests/test_basic_ops_list.py"
20174 "--ignore=tests/test_merge.py"
20175 "--ignore=tests/test_select.py")
20176 #:phases
20177 #~(modify-phases %standard-phases
20178 (add-after 'unpack 'loosen-requirements
20179 (lambda _
20180 (substitute* "requirements/base.txt"
20181 (("antlr4-python3-runtime==.*")
20182 "antlr4-python3-runtime >=4.9\n"))
20183 ;; Ignore deprecation warnings.
20184 (substitute* "pyproject.toml"
20185 (("-Werror") "")))))))
20186 (native-inputs
20187 (list icedtea
20188 antlr4
20189 python-pytest
20190 python-pytest-mock
20191 python-setuptools
20192 python-wheel))
20193 (propagated-inputs
20194 (list python-antlr4-runtime
20195 python-pydevd
20196 python-pyyaml))
20197 (home-page "https://github.com/omry/omegaconf")
20198 (synopsis "Flexible configuration system")
20199 (description
20200 "OmegaConf is a hierarchical configuration system and supports merging
20201configurations from multiple sources. It provides a consistent API regardless
20202of how the configuration was created.")
20203 (license license:bsd-3))))
20204
20205(define-public python-configargparse
20206 (package
20207 (name "python-configargparse")
20208 (version "1.7")
20209 (source (origin
20210 (method url-fetch)
20211 (uri (pypi-uri "ConfigArgParse" version))
20212 (sha256
20213 (base32
20214 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
20215 (build-system pyproject-build-system)
20216 (propagated-inputs
20217 (list python-pyyaml))
20218 (native-inputs
20219 (list python-mock python-pytest python-setuptools python-wheel))
20220 (synopsis "Replacement for argparse")
20221 (description "A drop-in replacement for argparse that allows options to also
20222be set via config files and/or environment variables.")
20223 (home-page "https://github.com/bw2/ConfigArgParse")
20224 (license license:expat)))
20225
20226(define-public python-connection-pool
20227 (package
20228 (name "python-connection-pool")
20229 (version "0.0.3")
20230 (source
20231 (origin
20232 (method git-fetch)
20233 (uri (git-reference
20234 (url "https://github.com/zhouyl/ConnectionPool")
20235 (commit version)))
20236 (file-name (git-file-name name version))
20237 (sha256
20238 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
20239 (build-system pyproject-build-system)
20240 (arguments (list #:tests? #f)) ; No tests.
20241 (native-inputs (list python-setuptools))
20242 (home-page "https://github.com/zhouyl/ConnectionPool")
20243 (synopsis "Thread-safe connection pool")
20244 (description
20245 "This package provides a library implementing a thread-safe connection
20246pool.")
20247 (license license:expat)))
20248
20249(define-public python-argparse-dataclass
20250 (package
20251 (name "python-argparse-dataclass")
20252 (version "2.0.0")
20253 (source
20254 (origin
20255 (method git-fetch) ;no tests in PyPI archive
20256 (uri (git-reference
20257 (url "https://github.com/mivade/argparse_dataclass")
20258 (commit version)))
20259 (file-name (git-file-name name version))
20260 (sha256
20261 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
20262 (build-system pyproject-build-system)
20263 (native-inputs (list python-pytest python-setuptools python-wheel))
20264 (home-page "https://github.com/mivade/argparse_dataclass")
20265 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
20266 (description
20267 "This package provides declarative command-line interfaces using argparse
20268and dataclasses.")
20269 (license license:expat)))
20270
20271(define-public python-argparse-manpage
20272 (package
20273 (name "python-argparse-manpage")
20274 (version "4.7")
20275 (source
20276 (origin
20277 (method url-fetch)
20278 (uri (pypi-uri "argparse_manpage" version))
20279 (sha256
20280 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
20281 (build-system pyproject-build-system)
20282 (arguments
20283 (list
20284 #:test-flags
20285 ;; Tests require PIP.
20286 #~(list "--ignore=tests/test_examples.py")))
20287 (native-inputs
20288 (list python-pytest
20289 python-setuptools))
20290 (home-page "https://github.com/praiskup/argparse-manpage")
20291 (synopsis "Build manual page from Python's ArgumentParser object")
20292 (description
20293 "This package provides tools to build manual pages from Python's
20294@code{ArgumentParser} object.")
20295 (license license:asl2.0)))
20296
20297(define-public python-atomicwrites
20298 (package
20299 (name "python-atomicwrites")
20300 (version "1.4.0")
20301 (source
20302 (origin
20303 (method git-fetch)
20304 (uri (git-reference
20305 (url "https://github.com/untitaker/python-atomicwrites")
20306 (commit version)))
20307 (file-name (git-file-name name version))
20308 (sha256
20309 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
20310 (build-system pyproject-build-system)
20311 (native-inputs (list python-pytest python-setuptools))
20312 (synopsis "Atomic file writes in Python")
20313 (description
20314 "Library for atomic file writes using platform dependent tools
20315for atomic file system operations.")
20316 (home-page "https://github.com/untitaker/python-atomicwrites")
20317 (license license:expat)))
20318
20319(define-public python-qstylizer
20320 (package
20321 (name "python-qstylizer")
20322 (version "0.2.4")
20323 (source
20324 (origin
20325 (method git-fetch)
20326 (uri (git-reference
20327 (url "https://github.com/blambright/qstylizer")
20328 (commit version)))
20329 (file-name (git-file-name name version))
20330 (sha256
20331 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
20332 (build-system pyproject-build-system)
20333 (native-inputs
20334 (list python-pbr
20335 python-pytest
20336 python-pytest-mock
20337 python-setuptools
20338 python-wheel))
20339 (propagated-inputs
20340 (list python-inflection
20341 python-tinycss2))
20342 (home-page "https://github.com/blambright/qstylizer")
20343 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
20344 (description "@code{qstylizer} is a Python package designed to help with
20345the construction of PyQt/PySide stylesheets.")
20346 (license license:expat)))
20347
20348(define-public python-click-threading
20349 (package
20350 (name "python-click-threading")
20351 (version "0.5.0")
20352 (source
20353 (origin
20354 (method git-fetch)
20355 (uri (git-reference
20356 (url "https://github.com/click-contrib/click-threading")
20357 (commit version)))
20358 (file-name (git-file-name name version))
20359 (sha256
20360 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
20361 (build-system pyproject-build-system)
20362 (native-inputs (list python-pytest python-setuptools))
20363 (propagated-inputs (list python-click))
20364 (synopsis "Utilities for multithreading in Click")
20365 (description
20366 "This package provides utilities for multithreading in Click
20367applications.")
20368 (home-page "https://github.com/click-contrib/click-threading")
20369 (license license:expat)))
20370
20371(define-public python-click-log
20372 (package
20373 (name "python-click-log")
20374 (version "0.3.2")
20375 (source
20376 (origin
20377 (method git-fetch)
20378 (uri (git-reference
20379 (url "https://github.com/click-contrib/click-log")
20380 (commit version)))
20381 (file-name (git-file-name name version))
20382 (sha256
20383 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
20384 (build-system pyproject-build-system)
20385 (native-inputs (list python-pytest python-setuptools))
20386 (propagated-inputs (list python-click))
20387 (synopsis "Logging for click applications")
20388 (description
20389 "This package provides a Python library for logging Click applications.")
20390 (home-page "https://github.com/click-contrib/click-log")
20391 (license license:expat)))
20392
20393(define-public python-click-default-group
20394 (package
20395 (name "python-click-default-group")
20396 (version "1.2.4")
20397 (source
20398 (origin
20399 (method git-fetch) ; no tests in PyPI release
20400 (uri (git-reference
20401 (url "https://github.com/click-contrib/click-default-group")
20402 (commit (string-append "v" version))))
20403 (file-name (git-file-name name version))
20404 (sha256
20405 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
20406 (build-system pyproject-build-system)
20407 (propagated-inputs
20408 (list python-click))
20409 (native-inputs
20410 (list python-flit-core python-pytest))
20411 (synopsis "Extends click.Group")
20412 (description "This package extends click.Group to invoke a command without
20413explicit subcommand name.")
20414 (home-page "https://github.com/click-contrib/click-default-group")
20415 (license license:bsd-3)))
20416
20417(define-public python-apipkg
20418 (package
20419 (name "python-apipkg")
20420 (version "3.0.2")
20421 (source
20422 (origin
20423 (method url-fetch)
20424 (uri (pypi-uri "apipkg" version))
20425 (sha256
20426 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
20427 (build-system pyproject-build-system)
20428 (arguments (list #:tests? #f)) ;no tests in PyPI archive
20429 (native-inputs
20430 (list python-hatch-vcs
20431 python-hatchling))
20432 (home-page "https://github.com/pytest-dev/apipkg")
20433 (synopsis "Namespace control and lazy-import mechanism")
20434 (description "With apipkg you can control the exported namespace of a Python
20435package and greatly reduce the number of imports for your users. It is a small
20436pure Python module that works on virtually all Python versions.")
20437 (license license:expat)))
20438
20439(define-public python-essentials
20440 (package
20441 (name "python-essentials")
20442 (version "1.1.8")
20443 (source
20444 (origin
20445 (method git-fetch)
20446 (uri (git-reference
20447 (url "https://github.com/Neoteroi/essentials")
20448 (commit (string-append "v" version))))
20449 (file-name (git-file-name name version))
20450 (sha256
20451 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
20452 (build-system pyproject-build-system)
20453 (native-inputs
20454 (list python-hatchling
20455 python-pydantic
20456 python-pytest-asyncio))
20457 (home-page "https://github.com/Neoteroi/essentials/wiki")
20458 (synopsis
20459 "Utility functions, exceptions, and classes for Python applications")
20460 (description
20461 "Essentials is a collection of functions, exceptions, and classes for Python
20462applications. Examples of utilities are exceptions for common scenarios,
20463friendly JSON encoder, decorators for retries and logging.")
20464 (license license:expat)))
20465
20466(define-public python-execnet
20467 (package
20468 (name "python-execnet")
20469 (version "2.1.2")
20470 (source
20471 (origin
20472 (method git-fetch)
20473 (uri (git-reference
20474 (url "https://github.com/pytest-dev/execnet")
20475 (commit (string-append "v" version))))
20476 (file-name (git-file-name name version))
20477 (sha256
20478 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20479 (build-system pyproject-build-system)
20480 (arguments
20481 (list
20482 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20483 #:phases
20484 #~(modify-phases %standard-phases
20485 (add-before 'check 'pre-check
20486 (lambda _
20487 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20488 ;; test in 'testing/test_gateway.py'.
20489 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20490 (native-inputs
20491 (list python-hatchling
20492 python-hatch-vcs
20493 python-pytest-bootstrap))
20494 (home-page "https://codespeak.net/execnet/")
20495 (synopsis "Rapid multi-Python deployment")
20496 (description
20497 "Execnet provides a share-nothing model with channel-send/receive communication
20498for distributing execution across many Python interpreters across version,
20499platform and network barriers. It has a minimal and fast API targeting the
20500following uses:
20501
20502@enumerate
20503@item distribute tasks to (many) local or remote CPUs
20504@item write and deploy hybrid multi-process applications
20505@item write scripts to administer multiple environments
20506@end enumerate")
20507 (license license:expat)))
20508
20509(define-public python-icalendar
20510 (package
20511 (name "python-icalendar")
20512 (version "6.3.2")
20513 (source
20514 (origin
20515 (method url-fetch) ;XXX: hatch-vcs fails with git-fetch
20516 (uri (pypi-uri "icalendar" version))
20517 (sha256
20518 (base32 "188hj57l5l1jjnrfxwkmsh8hsn5pwvv93m7p7b9misgbzk5hxhg0"))))
20519 (build-system pyproject-build-system)
20520 (arguments
20521 (list
20522 ;; tests: 8995 passed, 21 skipped, 2 deselected
20523 #:test-flags
20524 #~(list
20525 "-k"
20526 (string-append
20527 ;; See: <https://github.com/collective/icalendar/issues/812>.
20528 "not test_dateutil_timezone_is_matched_with_tzname[Arctic/Longyearbyen]"
20529 " and not test_docstring_of_python_file[icalendar.timezone.tzid]"))))
20530 (native-inputs
20531 (list python-hatch-vcs
20532 python-hatchling
20533 python-pytest
20534 python-pytz))
20535 (propagated-inputs
20536 (list python-dateutil
20537 python-tzdata))
20538 (home-page "https://github.com/collective/icalendar")
20539 (synopsis "Python library for parsing and generating iCalendar files")
20540 (description
20541 "@code{icalendar} is a Python library for parsing and generating
20542iCalendar files.")
20543 (license license:bsd-2)))
20544
20545(define-public python-args
20546 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
20547 (revision "0"))
20548 (package
20549 (name "python-args")
20550 (version (git-version "0.1.0" revision commit))
20551 (source
20552 (origin
20553 (method git-fetch)
20554 (uri (git-reference
20555 (url "https://github.com/kennethreitz-archive/args")
20556 (commit commit)))
20557 (file-name (git-file-name name version))
20558 (sha256
20559 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
20560 (build-system pyproject-build-system)
20561 (arguments
20562 (list
20563 #:tests? #f ; XXX: python-nose is deprecated.
20564 #:phases
20565 #~(modify-phases %standard-phases
20566 (add-after 'unpack 'patch-args.py
20567 (lambda _
20568 (substitute* "args.py"
20569 (("basestring")
20570 "str")))))))
20571 (native-inputs (list python-setuptools python-wheel))
20572 (home-page "https://github.com/kennethreitz-archive/args")
20573 (synopsis "Command-line argument parser")
20574 (description
20575 "This library provides a Python module to parse command-line arguments.")
20576 (license license:bsd-3))))
20577
20578(define-public python-clint
20579 (package
20580 (name "python-clint")
20581 (version "0.5.1")
20582 (source (origin
20583 (method url-fetch)
20584 (uri (pypi-uri "clint" version))
20585 (sha256
20586 (base32
20587 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
20588 (build-system pyproject-build-system)
20589 (native-inputs
20590 (list python-pytest python-setuptools python-wheel))
20591 (propagated-inputs
20592 (list python-args))
20593 (home-page "https://github.com/kennethreitz/clint")
20594 (synopsis "Command-line interface tools")
20595 (description
20596 "Clint is a Python module filled with a set of tools for developing
20597command-line applications, including tools for colored and indented
20598output, progress bar display, and pipes.")
20599 (license license:isc)))
20600
20601(define-public python-rply
20602 (package
20603 (name "python-rply")
20604 (version "0.7.8")
20605 (source
20606 (origin
20607 (method git-fetch)
20608 (uri (git-reference
20609 (url "https://github.com/alex/rply")
20610 (commit (string-append "v" version))))
20611 (file-name (git-file-name name version))
20612 (sha256
20613 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
20614 (build-system pyproject-build-system)
20615 (arguments
20616 (list
20617 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
20618 #:phases
20619 #~(modify-phases %standard-phases
20620 (add-before 'check 'fix-pytest-use
20621 (lambda _
20622 (substitute* (find-files "tests" "\\.py$")
20623 (("import py")
20624 "import pytest")
20625 (("py\\.test")
20626 "pytest"))
20627 (setenv "HOME" (getcwd)))))))
20628 (native-inputs (list python-pytest python-setuptools))
20629 (propagated-inputs (list python-appdirs))
20630 (home-page "https://github.com/alex/rply")
20631 (synopsis "Parser generator for Python")
20632 (description
20633 "This package provides a pure Python based parser generator, that also
20634works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
20635with a new public API, and RPython support.")
20636 (license license:bsd-3)))
20637
20638(define-public python-hy
20639 (package
20640 (name "python-hy")
20641 (version "1.3.0")
20642 (source
20643 (origin
20644 (method git-fetch)
20645 (uri (git-reference
20646 (url "https://github.com/hylang/hy")
20647 (commit version)))
20648 (file-name (git-file-name name version))
20649 (sha256
20650 (base32 "0sdv5amhl0p4f84bmw2iy85a7rrkjg969l2gcr6cfl03lb0nxj87"))))
20651 (build-system pyproject-build-system)
20652 (arguments
20653 (list
20654 ;; This test expects the hy executable to be called 'hy', but in Guix
20655 ;; it's .hy-real.
20656 #:test-flags #~(list "-k" "not test_sys_executable")))
20657 (native-inputs (list python-pytest python-setuptools))
20658 (propagated-inputs (list python-funcparserlib))
20659 (home-page "https://hylang.org/hy/doc")
20660 (synopsis "Lisp frontend to Python")
20661 (description
20662 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
20663its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
20664Python at your fingertips, in Lisp form.")
20665 (license license:expat)))
20666
20667(define-public python-hissp
20668 (package
20669 (name "python-hissp")
20670 (version "0.5.0")
20671 (source
20672 (origin
20673 (method git-fetch)
20674 (uri (git-reference
20675 (url "https://github.com/gilch/hissp")
20676 (commit (string-append "v" version))))
20677 (file-name (git-file-name name version))
20678 (sha256
20679 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
20680 (build-system pyproject-build-system)
20681 (arguments (list #:test-backend #~'unittest))
20682 (native-inputs (list python-hypothesis python-setuptools))
20683 (home-page "https://github.com/gilch/hissp")
20684 (synopsis "It's Python with a Lissp")
20685 (description
20686 "Hissp is a modular Lisp implementation that compiles to a functional
20687subset of Python—Syntactic macro metaprogramming with full access to the
20688Python ecosystem.")
20689 (license license:asl2.0)))
20690
20691(define-public python-promise
20692 (package
20693 (name "python-promise")
20694 (version "2.3.0")
20695 (source
20696 (origin
20697 (method git-fetch)
20698 (uri (git-reference
20699 (url "https://github.com/syrusakbary/promise")
20700 (commit (string-append "v" version))))
20701 (file-name (git-file-name name version))
20702 (sha256
20703 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
20704 (build-system pyproject-build-system)
20705 (arguments
20706 (list
20707 #:test-flags
20708 #~(list "--ignore=tests/test_benchmark.py"
20709 ;; Issues with pytest-asyncio
20710 "--ignore=tests/test_awaitable.py"
20711 "-k" (string-join
20712 (list "not test_issue_9_safe"
20713 ;; Stacktrace issues.
20714 "test_thrown_exceptions_have_stacktrace"
20715 "test_thrown_exceptions_preserve_stacktrace")
20716 " and not "))))
20717 (native-inputs
20718 (list python-mock
20719 python-pytest
20720 python-pytest-asyncio
20721 python-setuptools))
20722 (propagated-inputs (list python-six))
20723 (home-page "https://github.com/syrusakbary/promise")
20724 (synopsis "Promises/A+ implementation for Python")
20725 (description
20726 "This package provides an implementation of Promises in Python. It is a
20727super set of Promises/A+ designed to have readable, performant code and to
20728provide just the extensions that are absolutely necessary for using promises
20729in Python.")
20730 (license license:expat)))
20731
20732(define-public python-progress
20733 (package
20734 (name "python-progress")
20735 (version "1.6")
20736 (source
20737 (origin
20738 (method git-fetch)
20739 (uri (git-reference
20740 (url "https://github.com/verigak/progress/")
20741 (commit version)))
20742 (file-name (git-file-name name version))
20743 (sha256
20744 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
20745 (snippet #~(delete-file "demo.gif"))))
20746 (build-system pyproject-build-system)
20747 (arguments
20748 (list
20749 #:test-backend #~'custom
20750 #:test-flags #~(list "test_progress.py")))
20751 (native-inputs (list python-setuptools))
20752 (home-page "https://github.com/verigak/progress/")
20753 (synopsis "Progress reporting bars for Python")
20754 (description
20755 "This Python package provides progress reporting for visual of progress
20756of long running operations. There are multiple choices of progress bars and
20757spinners, with customizable options, such as width, fill character, and
20758suffix.")
20759 (license license:isc)))
20760
20761(define-public python-progressbar2
20762 (package
20763 (name "python-progressbar2")
20764 (version "4.5.0")
20765 (source
20766 (origin
20767 (method url-fetch)
20768 (uri (pypi-uri "progressbar2" version))
20769 (sha256
20770 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
20771 (build-system pyproject-build-system)
20772 (arguments
20773 (list
20774 #:test-flags #~(list "--pyargs" "progressbar" "tests")
20775 #:phases
20776 #~(modify-phases %standard-phases
20777 (add-after 'unpack 'fix-pytest-config
20778 (lambda _
20779 ;; Drop test coverage requirements.
20780 (substitute* "pytest.ini"
20781 ((".*-cov.*") "")))))))
20782 (native-inputs
20783 (list python-dill
20784 python-pytest
20785 python-freezegun
20786 python-setuptools
20787 python-setuptools-scm
20788 python-wheel))
20789 (propagated-inputs
20790 (list python-utils))
20791 (home-page "https://github.com/WoLpH/python-progressbar")
20792 (synopsis "Text progress bar library for Python")
20793 (description
20794 "This package provides a Python progressbar library to provide
20795visual (yet text based) progress to long running operations.")
20796 (license license:bsd-3)))
20797
20798(define-public python-progressbar33
20799 (package
20800 (name "python-progressbar33")
20801 (version "2.4")
20802 (source
20803 (origin
20804 (method git-fetch)
20805 (uri (git-reference
20806 (url "https://github.com/germangh/python-progressbar")
20807 (commit (string-append "v" version))))
20808 (file-name (git-file-name name version))
20809 (sha256
20810 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
20811 (build-system pyproject-build-system)
20812 (arguments
20813 (list
20814 #:test-backend #~'custom
20815 #:test-flags #~(list "examples.py")))
20816 (native-inputs (list python-setuptools))
20817 (home-page "https://github.com/germangh/python-progressbar")
20818 (synopsis "Text progress bar library for Python")
20819 (description
20820 "This package provides a text progress bar library for Python. This
20821version only differs from the original @code{progressbar} package in that it
20822uses relative package imports instead of absolute imports, which is necessary
20823for the module to work under Python 3.3.")
20824 ;; Either or both of these licenses may be selected.
20825 (license (list license:lgpl2.1+ license:bsd-3))))
20826
20827;; XXX: Not maintained since 2012.
20828(define-public python-monthdelta
20829 (package
20830 (name "python-monthdelta")
20831 (version "0.9.1")
20832 (source
20833 (origin
20834 (method url-fetch)
20835 (uri (pypi-uri "MonthDelta" version))
20836 (sha256
20837 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
20838 (build-system pyproject-build-system)
20839 (arguments
20840 (list #:tests? #f)) ; No tests.
20841 (native-inputs (list python-setuptools))
20842 (home-page "http://packages.python.org/MonthDelta")
20843 (synopsis "Date computations with months")
20844 (description
20845 "MonthDelta provides functionality to do date computations with months.")
20846 (license license:expat)))
20847
20848(define-public python-moto
20849 (package
20850 (name "python-moto")
20851 (version "5.1.20")
20852 (source (origin
20853 (method url-fetch)
20854 (uri (pypi-uri "moto" version))
20855 (sha256
20856 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
20857 (build-system pyproject-build-system)
20858 (arguments
20859 (list
20860 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
20861 #:test-flags
20862 #~(list "-m" "not network and not requires_docker"
20863 ;; Not all of the tests are thread save, see:
20864 ;; <https://github.com/getmoto/moto/issues/7786>.
20865 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
20866 "-k" (string-join
20867 ;; Network access is required.
20868 (list "not test_passthrough_calls_for_entire_service"
20869 "test_passthrough_calls_for_specific_url"
20870 "test_passthrough_calls_for_wildcard_urls"
20871 "test_put_record_batch_http_destination"
20872 "test_put_record_http_destination"
20873 "test_s3_server_post_cors_multiple_origins"
20874 "test_with_custom_request_header"
20875 ;; AttributeError: 'ImportError' object has no
20876 ;; attribute 'message'
20877 "test_batch_update"
20878 "test_batch_update__not_enough_parameters"
20879 "test_execute_transaction"
20880 "test_without_primary_key_in_where_clause")
20881 " and not ")
20882 "tests")
20883 #:phases
20884 #~(modify-phases %standard-phases
20885 (add-after 'unpack 'patch-hardcoded-executable-names
20886 (lambda* (#:key inputs #:allow-other-keys)
20887 (let ((bash-exec (search-input-file inputs "/bin/sh")))
20888 (substitute* "moto/batch/models.py"
20889 (("/bin/sh") bash-exec))
20890 (substitute* (find-files "tests" "\\.py$")
20891 (("#!/bin/bash") (string-append "#!" bash-exec))))))
20892 (add-before 'check 'pre-check
20893 (lambda _
20894 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
20895 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
20896 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
20897 (native-inputs
20898 (list python-flask
20899 python-flask-cors
20900 python-freezegun
20901 python-pycognito
20902 python-pyotp
20903 python-pytest
20904 python-setuptools))
20905 (inputs
20906 (list bash-minimal))
20907 (propagated-inputs
20908 (list python-antlr4-runtime
20909 python-aws-xray-sdk
20910 python-boto3
20911 python-botocore
20912 python-cfn-lint
20913 python-cryptography
20914 python-dateutil
20915 python-graphql-core
20916 python-jinja2
20917 python-joserfc
20918 python-jsonpath-ng
20919 python-multipart
20920 python-openapi-spec-validator
20921 python-py-partiql-parser
20922 python-pyparsing
20923 python-requests
20924 python-responses
20925 python-werkzeug
20926 python-xmltodict))
20927 (home-page "https://github.com/spulec/moto")
20928 (synopsis "Mock out the boto library")
20929 (description
20930 "@code{moto} is a library designed to easily mock out the
20931@code{boto} library.")
20932 (license license:asl2.0)))
20933
20934(define-public python-plumbum
20935 (package
20936 (name "python-plumbum")
20937 (version "1.7.0")
20938 (source
20939 (origin
20940 (method git-fetch)
20941 (uri (git-reference
20942 (url "https://github.com/tomerfiliba/plumbum")
20943 (commit (string-append "v" version))))
20944 (file-name (git-file-name name version))
20945 (sha256
20946 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
20947 (build-system pyproject-build-system)
20948 (arguments
20949 (list
20950 #:test-flags
20951 #~(list "--ignore=tests/test_remote.py"
20952 "--ignore=tests/test_putty.py"
20953 "--ignore=tests/test_sudo.py"
20954 "-k"
20955 (string-join (list "not test_home"
20956 "test_iter_lines_error"
20957 "test_quoting"
20958 "test_copy_move_delete")
20959 " and not "))))
20960 (native-inputs
20961 (list procps
20962 python-psutil
20963 python-pytest
20964 python-setuptools
20965 python-setuptools-scm
20966 python-wheel))
20967 (home-page "https://plumbum.readthedocs.io")
20968 (synopsis "Python shell combinators library")
20969 (description
20970 "Plumbum is a library of tools for replacing shell scripts with Python
20971code.")
20972 (license license:expat)))
20973
20974(define-public python-deprecation
20975 (package
20976 (name "python-deprecation")
20977 (version "2.1.0")
20978 (source
20979 (origin
20980 (method url-fetch)
20981 (uri (pypi-uri "deprecation" version))
20982 (sha256
20983 (base32
20984 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
20985 (build-system pyproject-build-system)
20986 (arguments
20987 (list
20988 #:test-backend #~'unittest
20989 #:phases
20990 #~(modify-phases %standard-phases
20991 (add-after 'unpack 'drop-unittest2
20992 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
20993 (lambda _
20994 (substitute* "tests/test_deprecation.py"
20995 (("import unittest2")
20996 "import unittest as unittest2")))))))
20997 (native-inputs
20998 (list python-setuptools))
20999 (propagated-inputs
21000 (list python-packaging))
21001 (home-page "https://deprecation.readthedocs.io/")
21002 (synopsis "Python library to handle automated deprecations")
21003 (description
21004 "This is a library that enables automated deprecations. It offers the
21005@code{deprecated()} decorator to wrap functions, providing proper warnings
21006both in documentation and via Python’s warnings system, as well as the
21007@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
21008that deprecated code is eventually removed.")
21009 (license license:asl2.0)))
21010
21011(define-public python-jmespath
21012 (package
21013 (name "python-jmespath")
21014 (version "1.0.1")
21015 (source
21016 (origin
21017 (method url-fetch)
21018 (uri (pypi-uri "jmespath" version))
21019 (sha256
21020 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
21021 (build-system pyproject-build-system)
21022 (native-inputs
21023 (list python-pytest
21024 python-setuptools))
21025 (home-page "https://github.com/jmespath/jmespath.py")
21026 (synopsis "JSON Matching Expressions")
21027 (description
21028 "JMESPath (pronounced “james path”) is a Python library that allows one
21029to declaratively specify how to extract elements from a JSON document.")
21030 (license license:expat)))
21031
21032(define-public python-asteval
21033 (package
21034 (name "python-asteval")
21035 (version "1.0.6")
21036 (source
21037 (origin
21038 (method url-fetch)
21039 (uri (pypi-uri "asteval" version))
21040 (sha256
21041 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
21042 (build-system pyproject-build-system)
21043 (native-inputs
21044 (list python-pytest python-setuptools python-setuptools-scm))
21045 (home-page "https://github.com/newville/asteval")
21046 (synopsis "Minimalistic evaluator of Python expressions")
21047 (description
21048 "This package provides a minimalistic evaluator of Python expression
21049using the @code{ast} module.")
21050 (license license:expat)))
21051
21052(define-public python-lmfit
21053 (package
21054 (name "python-lmfit")
21055 (version "1.3.4")
21056 (source
21057 (origin
21058 (method git-fetch)
21059 (uri (git-reference
21060 (url "https://github.com/lmfit/lmfit-py")
21061 (commit version)))
21062 (file-name (git-file-name name version))
21063 (sha256
21064 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
21065 (build-system pyproject-build-system)
21066 (native-inputs
21067 (list python-pytest
21068 python-setuptools
21069 python-setuptools-scm))
21070 (propagated-inputs
21071 (list python-asteval
21072 python-dill
21073 python-numpy
21074 python-scipy
21075 python-uncertainties))
21076 (home-page "https://lmfit.github.io/lmfit-py/")
21077 (synopsis "Least-Squares minimization with bounds and constraints")
21078 (description
21079 "Lmfit provides a high-level interface to non-linear optimization and
21080curve fitting problems for Python. It builds on and extends many of the
21081optimization methods of @code{scipy.optimize}. Initially inspired by (and
21082named for) extending the Levenberg-Marquardt method from
21083@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
21084enhancements to optimization and data fitting problems.")
21085 (license license:bsd-3)))
21086
21087(define-public python-bokeh
21088 (package
21089 (name "python-bokeh")
21090 (version "3.7.3")
21091 (source (origin
21092 (method url-fetch)
21093 (uri (pypi-uri "bokeh" version))
21094 (sha256
21095 (base32
21096 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
21097 (build-system pyproject-build-system)
21098 (arguments
21099 (list
21100 ;; FIXME: Most of the tests do not work, figure out how to enable some
21101 ;; portion.
21102 #:tests? #f
21103 #:test-flags
21104 '(list
21105 ;; These require selenium.
21106 "--ignore=tests/unit/bokeh/io/test_export.py"
21107 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
21108 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
21109
21110 ;; Doesn't find ManagedServerLoop fixture
21111 "--ignore=tests/unit/bokeh/test_client_server.py"
21112
21113 ;; This fails because of the Guix wrapper around pytest
21114 "--ignore=tests/unit/bokeh/io/test_util__io.py"
21115
21116 ;; Fixture ipython not found.
21117 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
21118 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
21119
21120 ;; pd fixture not found.
21121 "--ignore=tests/unit/bokeh/models/test_mappers.py"
21122 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
21123 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
21124 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
21125 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
21126 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
21127 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
21128 "--ignore=tests/unit/bokeh/core/property/test_container.py"
21129 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
21130 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
21131 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
21132
21133 ;; nx fixture not found.
21134 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
21135 "--ignore=tests/unit/bokeh/models/test_graphs.py"
21136 "--ignore=tests/unit/bokeh/io/test_showing.py"
21137 "--ignore=tests/unit/bokeh/document/test_events__document.py"
21138
21139 ;; These tests need external sample data
21140 "--ignore-glob=tests/unit/bokeh/sampledata/*"
21141
21142 ;; Attempts to install something via npm.
21143 "--ignore=tests/unit/bokeh/test_ext.py"
21144
21145 ;; More failures due to set up problems.
21146 "--ignore=tests/unit/bokeh/server/test_server__server.py"
21147 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
21148 "--ignore=tests/unit/bokeh/util/test_serialization.py"
21149 "--ignore=tests/unit/bokeh/util/test_hex.py"
21150 "--ignore=tests/unit/bokeh/models/test_sources.py"
21151 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
21152
21153 "-k"
21154 (string-append
21155 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
21156 ;; Did you mean: 'assert_called_once_with'?
21157 "not test_set_from_json"
21158
21159 ;; XXX: This one test transforms a gif of a red box. It transforms
21160 ;; it all right but the base64 doesn't look as expected, probably
21161 ;; because of a change in pillow.
21162 " and not test_transform_PIL"))
21163 #:phases
21164 #~(modify-phases %standard-phases
21165 (add-before 'build 'set-version
21166 (lambda _
21167 (substitute* "pyproject.toml"
21168 ((", \"setuptools-git-versioning\"") "")
21169 (("dynamic = \\[\"version\"\\]")
21170 (string-append "version = '" #$version "'"))))))))
21171 (propagated-inputs
21172 (list node-lts
21173 python-contourpy
21174 python-jinja2
21175 python-narwhals
21176 python-numpy
21177 python-packaging
21178 python-pandas
21179 python-pillow
21180 python-pyyaml
21181 python-tornado
21182 python-xyzservices))
21183 (native-inputs
21184 (list python-beautifulsoup4
21185 python-dateutil
21186 python-flaky
21187 python-mock
21188 python-nbconvert
21189 python-pandas
21190 python-pytest
21191 python-pytz
21192 python-requests
21193 python-setuptools
21194 python-wheel))
21195 (home-page "https://github.com/bokeh/bokeh")
21196 (synopsis "Interactive plots and applications in the browser from Python")
21197 (description
21198 "This package provides tools for interactive plots and applications in the
21199browser from Python.")
21200 (license license:bsd-3)))
21201
21202;; TODO: Move to python-web.
21203(define-public python-botocore
21204 ;; Note: When updating botocore, also make sure that boto3 and awscli
21205 ;; are compatible.
21206 (package
21207 (name "python-botocore")
21208 (version "1.42.5")
21209 (source
21210 (origin
21211 (method url-fetch)
21212 (uri (pypi-uri "botocore" version))
21213 (sha256
21214 (base32
21215 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
21216 (build-system pyproject-build-system)
21217 (arguments
21218 (list
21219 ;; tests: 4496 passed, 87 skipped
21220 #:test-flags
21221 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
21222 ;; The full test suite is huge, run some of it's portion.
21223 "--ignore=tests/integration"
21224 "--ignore=tests/functional")))
21225 (native-inputs
21226 (list python-jsonschema
21227 python-pytest
21228 python-pytest-xdist
21229 python-setuptools))
21230 (propagated-inputs
21231 (list python-dateutil
21232 python-jmespath
21233 python-urllib3))
21234 (home-page "https://github.com/boto/botocore")
21235 (synopsis "Low-level interface to AWS")
21236 (description
21237 "Botocore is a Python library that provides a low-level interface to the
21238Amazon Web Services (AWS) API.")
21239 (license license:asl2.0)))
21240
21241(define-public python-boto3
21242 (package
21243 (name "python-boto3")
21244 (version "1.42.5")
21245 (source
21246 (origin
21247 (method git-fetch)
21248 (uri (git-reference
21249 (url "https://github.com/boto/boto3")
21250 (commit version)))
21251 (file-name (git-file-name name version))
21252 (sha256
21253 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
21254 (build-system pyproject-build-system)
21255 (arguments
21256 (list
21257 ;; tests: 1435 passed, 22 skipped, 1 warning
21258 #:test-flags
21259 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
21260 ;; Integration tests are trying to connect to AWS.
21261 "--ignore=tests/integration")))
21262 (native-inputs
21263 (list python-mock
21264 python-pytest
21265 python-pytest-xdist
21266 python-setuptools))
21267 (propagated-inputs
21268 (list python-botocore
21269 python-jmespath
21270 python-s3transfer))
21271 (home-page "https://github.com/boto/boto3")
21272 (synopsis "AWS SDK for Python")
21273 (description
21274 "Boto3 is a Python library for writing programs that interact with
21275@acronym{AWS,Amazon Web Services}.")
21276 (license license:asl2.0)))
21277
21278(define-public python-pyfiglet
21279 (package
21280 (name "python-pyfiglet")
21281 (version "1.0.4")
21282 (source
21283 (origin
21284 (method git-fetch)
21285 (uri (git-reference
21286 (url "https://github.com/pwaller/pyfiglet")
21287 (commit (string-append "v" version))))
21288 (file-name (git-file-name name version))
21289 (sha256
21290 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
21291 (build-system pyproject-build-system)
21292 (arguments
21293 (list
21294 #:phases
21295 #~(modify-phases %standard-phases
21296 (add-after 'unpack 'fallback-on-default-build
21297 (lambda _
21298 ;; This pyproject has little value and fails because of the
21299 ;; :__legacy__ suffix. Removing it to rely on defaults.
21300 (delete-file "pyproject.toml"))))))
21301 (native-inputs (list python-pytest python-setuptools))
21302 (home-page "https://github.com/pwaller/pyfiglet")
21303 (synopsis "Draw ASCII art big letters in Python")
21304 (description
21305 "This module lets you draw large letter from ordinary characters in pure
21306 Python.")
21307 (license license:expat)))
21308
21309(define-public python-mako
21310 (package
21311 (name "python-mako")
21312 (version "1.3.10")
21313 (source
21314 (origin
21315 (method url-fetch)
21316 (uri (pypi-uri "mako" version))
21317 (sha256
21318 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
21319 (build-system pyproject-build-system)
21320 (native-inputs
21321 (list python-pytest
21322 python-setuptools
21323 python-wheel))
21324 (propagated-inputs
21325 (list python-markupsafe))
21326 (home-page "https://www.makotemplates.org/")
21327 (synopsis "Templating language for Python")
21328 (description "Mako is a templating language for Python that compiles
21329templates into Python modules.")
21330 (license license:expat)))
21331
21332(define-public python-cookiecutter
21333 (package
21334 (name "python-cookiecutter")
21335 (version "2.6.0")
21336 (source
21337 (origin
21338 (method url-fetch)
21339 (uri (pypi-uri "cookiecutter" version))
21340 (sha256
21341 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
21342 (build-system pyproject-build-system)
21343 (arguments
21344 (list
21345 #:phases #~(modify-phases %standard-phases
21346 (add-before 'check 'pre-check
21347 (lambda _
21348 ;; test_get_user_config.py requires a writable home
21349 ;; directory.
21350 (setenv "HOME"
21351 (getcwd))
21352 ;; test_hooks.py dynamically creates shell scripts
21353 ;; with a /bin/bash shebang. We have to patch these.
21354 (substitute* "tests/test_hooks.py"
21355 (("/bin/bash")
21356 (string-append #$(this-package-native-input
21357 "bash-minimal") "/bin/bash"))))))))
21358 (native-inputs (list bash-minimal
21359 git-minimal/pinned
21360 python-freezegun
21361 python-pytest
21362 python-pytest-mock
21363 python-setuptools
21364 python-wheel))
21365 (propagated-inputs (list python-arrow
21366 python-binaryornot
21367 python-click
21368 python-jinja2
21369 python-pyyaml
21370 python-requests
21371 python-rich
21372 python-slugify))
21373 (home-page "https://github.com/cookiecutter/cookiecutter")
21374 (synopsis
21375 "Command-line utility that creates projects from project templates")
21376 (description
21377 "This package provides a command-line utility that creates projects from
21378project templates, e.g. creating a Python package project from a Python package
21379project template.")
21380 (license license:bsd-3)))
21381
21382(define-public python-pyquery
21383 (package
21384 (name "python-pyquery")
21385 (version "2.0.1")
21386 (source
21387 (origin
21388 (method url-fetch)
21389 (uri (pypi-uri "pyquery" version))
21390 (sha256
21391 (base32
21392 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
21393 (build-system pyproject-build-system)
21394 (arguments
21395 (list
21396 #:test-flags
21397 #~(list #$@(map (lambda (test) (string-append
21398 "--deselect=tests/test_pyquery.py::"
21399 test))
21400 (list
21401 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
21402 "TestWebScrapping::test_post"
21403 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
21404 "TestWebScrapping::test_session"
21405 ;; Assertion is not equal.
21406 "TestManipulating::test_val_for_textarea"
21407 "TestHTMLParser::test_replaceWith"
21408 "TestHTMLParser::test_replaceWith_with_function"
21409 ;; Network access is required.
21410 "TestWebScrapping::test_get"
21411 "TestWebScrappingEncoding::test_get")))))
21412 (native-inputs
21413 (list python-pytest
21414 python-requests
21415 python-setuptools
21416 python-webob
21417 python-webtest
21418 python-wheel))
21419 (propagated-inputs
21420 (list python-cssselect python-lxml))
21421 (home-page "https://github.com/gawel/pyquery")
21422 (synopsis "Make jQuery-like queries on xml documents")
21423 (description "pyquery allows you to make jQuery queries on xml documents.
21424The API is as much as possible the similar to jQuery. pyquery uses lxml for
21425fast xml and html manipulation.")
21426 (license license:bsd-3)))
21427
21428(define-public python-amqp
21429 (package
21430 (name "python-amqp")
21431 (version "5.1.1")
21432 (source
21433 (origin
21434 (method url-fetch)
21435 (uri (pypi-uri "amqp" version))
21436 (sha256
21437 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
21438 (build-system pyproject-build-system)
21439 (arguments
21440 (list ; Integration tests require network connectivity.
21441 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
21442 (native-inputs (list python-pytest python-setuptools python-wheel))
21443 (propagated-inputs (list python-vine))
21444 (home-page "https://github.com/celery/py-amqp")
21445 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
21446 (description
21447 "This is a fork of amqplib which was originally written by Barry Pederson.
21448It is maintained by the Celery project, and used by kombu as a pure python
21449alternative when librabbitmq is not available.")
21450 (license license:lgpl2.1+)))
21451
21452(define-public python-benchmark-4dn
21453 (package
21454 (name "python-benchmark-4dn")
21455 (version "0.5.24")
21456 (source (origin
21457 (method url-fetch)
21458 (uri (pypi-uri "benchmark_4dn" version))
21459 (sha256
21460 (base32
21461 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
21462 (properties '(("upstream-name" . "benchmark_4dn")))
21463 (build-system pyproject-build-system)
21464 ;; There are none.
21465 (arguments (list #:tests? #false))
21466 (native-inputs
21467 (list python-poetry-core))
21468 (home-page "https://github.com/SooLee/Benchmark/")
21469 (synopsis "Benchmark functions for CWL workflows")
21470 (description
21471 "This package provides benchmark functions that return total space, memory,
21472CPUs required per given input size, and parameters for CWL workflows.")
21473 (license license:expat)))
21474
21475(define-public python-beniget
21476 (package
21477 (name "python-beniget")
21478 (version "0.4.2.post1")
21479 (source
21480 (origin
21481 (method url-fetch)
21482 (uri (pypi-uri "beniget" version))
21483 (sha256
21484 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
21485 (build-system pyproject-build-system)
21486 (native-inputs
21487 (list python-pytest
21488 python-setuptools))
21489 (propagated-inputs
21490 (list python-gast))
21491 (home-page "https://github.com/serge-sans-paille/beniget")
21492 (synopsis "Extract semantic information about static Python code")
21493 (description
21494 "Beniget is a collection of analyzers for Python @acronym{AST,
21495Abstract Syntax Tree}. It is a building block for writing a static analyzer
21496or compiler for Python.")
21497 (license license:bsd-3)))
21498
21499(define-public python-kombu
21500 (package
21501 (name "python-kombu")
21502 (version "5.6.2")
21503 (source
21504 (origin
21505 (method git-fetch)
21506 (uri (git-reference
21507 (url "https://github.com/celery/kombu")
21508 (commit (string-append "v" version))))
21509 (file-name (git-file-name name version))
21510 (sha256
21511 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21512 (build-system pyproject-build-system)
21513 (arguments
21514 (list
21515 ;; tests: 854 passed, 193 skipped
21516 #:test-flags
21517 #~(list
21518 ;; TODO: Package azure-identity (required for this file)
21519 "--ignore=t/unit/transport/test_azurestoragequeues.py"
21520 ;; XXX: Requires google-cloud-pubsub.
21521 "--ignore=t/unit/transport/test_gcpubsub.py"
21522 ;; XXX: Requires pyro, see:
21523 ;; <https://codeberg.org/guix/guix/issues/5857>
21524 "--ignore=t/unit/transport/test_pyro.py")
21525 #:phases
21526 #~(modify-phases %standard-phases
21527 (add-after 'unpack 'relax-requirements
21528 (lambda _
21529 (substitute* "requirements/default.txt"
21530 (("tzdata>=2025.2")
21531 "tzdata>=2025.1")))))))
21532 (native-inputs
21533 (list python-botocore
21534 python-pytest
21535 python-pytest-freezer
21536 python-pytest-sugar
21537 python-setuptools))
21538 (propagated-inputs
21539 (list python-amqp
21540 python-packaging
21541 python-tzdata
21542 python-vine))
21543 (home-page "https://kombu.readthedocs.io")
21544 (synopsis "Message passing library for Python")
21545 (description
21546 "The aim of Kombu is to make messaging in Python as easy as possible by
21547providing an idiomatic high-level interface for the AMQ protocol, and also
21548provide proven and tested solutions to common messaging problems. AMQP is the
21549Advanced Message Queuing Protocol, an open standard protocol for message
21550orientation, queuing, routing, reliability and security, for which the
21551RabbitMQ messaging server is the most popular implementation.")
21552 (license license:bsd-3)))
21553
21554(define-public python-billiard
21555 (package
21556 (name "python-billiard")
21557 (version "4.2.2")
21558 (source
21559 (origin
21560 (method git-fetch)
21561 (uri (git-reference
21562 (url "https://github.com/celery/billiard")
21563 (commit (string-append "v" version))))
21564 (file-name (git-file-name name version))
21565 (sha256
21566 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
21567 (build-system pyproject-build-system)
21568 (arguments
21569 (list
21570 #:phases
21571 #~(modify-phases %standard-phases
21572 (add-after 'unpack 'remove-win-files
21573 (lambda _
21574 (for-each delete-file-recursively
21575 '("billiard/popen_spawn_win32.py"
21576 "billiard/_win.py")))))))
21577 (native-inputs (list python-psutil python-pytest python-setuptools))
21578 (home-page "https://github.com/celery/billiard")
21579 (synopsis "Python multiprocessing fork with improvements and bugfixes")
21580 (description
21581 "Billiard is a fork of the Python 2.7 multiprocessing package. The
21582multiprocessing package itself is a renamed and updated version of R Oudkerk's
21583pyprocessing package. This standalone variant is intended to be compatible with
21584Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
21585 (license license:bsd-3)))
21586
21587(define-public python-celery
21588 (package
21589 (name "python-celery")
21590 (version "5.6.3")
21591 (source
21592 (origin
21593 (method url-fetch)
21594 (uri (pypi-uri "celery" version))
21595 (sha256
21596 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
21597 (build-system pyproject-build-system)
21598 (arguments
21599 (list
21600 ;; tests: 3364 passed, 38 skipped, 8 deselected, 3 xfailed, 63 warnings,
21601 ;; 28808 subtests passed
21602 #:test-flags
21603 ;; The MongoDB backend test appears to expect an older version of
21604 ;; MongoDB which provided its own bson module, fails with "
21605 ;; AttributeError: module 'bson' has no attribute 'encode'".
21606 #~(list "--ignore=t/unit/backends/test_mongodb.py"
21607 ;; XXX: Requires google-cloud-firestore
21608 "--ignore=t/unit/backends/test_gcs.py"
21609 "-k" (string-join
21610 (list ;; AssertionError.
21611 "not test_check_privileges_no_fchown"
21612 ;; These 3 tests error out on ci.guix.gnu.org with
21613 ;; OSError: [Errno 24] Too many open files
21614 "test_register_with_event_loop__no_on_tick_dupes"
21615 "test_with_autoscaler_file_descriptor_safety"
21616 "test_with_file_descriptor_safety"
21617 ;; XXX: Fails to compare local timezones.
21618 "test_use_local_timezone")
21619 " and not "))))
21620 (native-inputs
21621 (list python-azure-core
21622 python-dnspython
21623 python-flaky
21624 python-gevent
21625 python-google-cloud-storage
21626 python-iniconfig
21627 python-moto
21628 python-msgpack
21629 python-pymongo
21630 python-pytest
21631 python-pytest-celery
21632 python-pytest-click
21633 python-pytest-order
21634 python-pytest-subtests
21635 python-pytest-timeout
21636 python-redis
21637 python-setuptools))
21638 (propagated-inputs
21639 (list python-billiard
21640 python-click
21641 python-click-didyoumean
21642 python-click-plugins
21643 python-click-repl
21644 python-dateutil
21645 python-kombu
21646 python-tzlocal
21647 python-vine))
21648 (home-page "https://celeryproject.org")
21649 (synopsis "Distributed Task Queue")
21650 (description
21651 "Celery is an asynchronous task queue/job queue based on distributed
21652message passing. It is focused on real-time operation, but supports
21653scheduling as well. The execution units, called tasks, are executed
21654concurrently on a single or more worker servers using multiprocessing,
21655Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
21656synchronously (wait until ready).")
21657 (license license:bsd-3)))
21658
21659;; A bare minimal package, mainly to use in tests and reduce closure
21660;; size. Tests are left out in the main package to slim down native-inputs.
21661(define-public python-celery-minimal
21662 (package/inherit python-celery
21663 (name "python-celery-minimal")
21664 (arguments
21665 (list #:tests? #f))
21666 (native-inputs
21667 (list python-setuptools))))
21668
21669(define-public python-anyqt
21670 (package
21671 (name "python-anyqt")
21672 (version "0.2.1")
21673 (source
21674 (origin
21675 (method git-fetch)
21676 (uri (git-reference
21677 (url "https://github.com/ales-erjavec/anyqt")
21678 (commit version)))
21679 (file-name (git-file-name name version))
21680 (sha256
21681 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
21682 (build-system pyproject-build-system)
21683 (arguments
21684 (list
21685 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
21686 ;; TODO Add/configure the right Qt inputs.
21687 #:test-flags
21688 #~(list "--ignore-glob=tests/test_q*.py")
21689 #:phases
21690 #~(modify-phases %standard-phases
21691 (add-after 'unpack 'delete-files
21692 ;; Delete files related to other operating systems.
21693 (lambda _
21694 (delete-file "AnyQt/QtMacExtras.py")
21695 (delete-file "AnyQt/QtWinExtras.py"))))))
21696 (native-inputs
21697 (list python-pyqt-6
21698 python-pytest
21699 python-pytest-qt
21700 python-setuptools))
21701 (home-page "https://github.com/ales-erjavec/anyqt")
21702 (synopsis "PyQt compatibility layer")
21703 (description
21704 "This package provides a PyQt/PySide compatibility layer. More precisely,
21705it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
21706PySide, PySide2.")
21707 (license license:gpl3)))
21708
21709(define-public python-qasync
21710 (package
21711 (name "python-qasync")
21712 (version "0.28.0")
21713 (source
21714 (origin
21715 (method git-fetch)
21716 (uri (git-reference
21717 (url "https://github.com/CabbageDevelopment/qasync/")
21718 (commit (string-append "v" version))))
21719 (file-name (git-file-name name version))
21720 (sha256
21721 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
21722 (build-system pyproject-build-system)
21723 (arguments
21724 (list
21725 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
21726 #:phases
21727 #~(modify-phases %standard-phases
21728 (add-before 'check 'set-qpa
21729 (lambda _
21730 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
21731 (native-inputs
21732 (list python-poetry-core python-pytest))
21733 (propagated-inputs
21734 (list python-pyqt-6))
21735 (home-page "https://github.com/CabbageDevelopment/qasync")
21736 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
21737 (description
21738 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
21739by providing an implementation of the PEP 3156 event-loop.")
21740 (license license:bsd-2)))
21741
21742(define-public python-editor
21743 (package
21744 (name "python-editor")
21745 (version "1.0.4")
21746 (source
21747 (origin
21748 (method git-fetch)
21749 (uri (git-reference
21750 (url "https://github.com/fmoo/python-editor")
21751 (commit version)))
21752 (file-name (git-file-name name version))
21753 (sha256
21754 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
21755 (build-system pyproject-build-system)
21756 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
21757 (native-inputs (list python-setuptools))
21758 (home-page "https://github.com/fmoo/python-editor")
21759 (synopsis "Programmatically open an editor, capture the result")
21760 (description
21761 "This package provides the editor module for programmatically interfacing
21762with your system's $EDITOR.")
21763 (license license:asl2.0)))
21764
21765(define-public python-multiprocessing-logging
21766 (package
21767 (name "python-multiprocessing-logging")
21768 (version "0.3.4")
21769 (home-page "https://github.com/jruere/multiprocessing-logging")
21770 (source
21771 (origin
21772 (method git-fetch)
21773 (uri (git-reference
21774 (url home-page)
21775 (commit (string-append "v" version))))
21776 (file-name (git-file-name name version))
21777 (sha256
21778 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
21779 (build-system pyproject-build-system)
21780 (arguments (list #:test-backend #~'unittest))
21781 (native-inputs (list python-setuptools))
21782 (synopsis "Manage logs from multiple processes")
21783 (description
21784 "This Python module implements a multiprocessing-aware @code{Handler}
21785that, when set on the root @code{Logger}, will tunnel log records to the
21786main process so that they are handled correctly.")
21787 (license license:lgpl3+)))
21788
21789(define-public python-munkres
21790 (package
21791 (name "python-munkres")
21792 (version "1.1.4")
21793 (source
21794 (origin
21795 (method url-fetch)
21796 (uri (pypi-uri "munkres" version))
21797 (sha256
21798 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
21799 (build-system pyproject-build-system)
21800 (arguments
21801 (list
21802 ;; See https://github.com/bmc/munkres/issues/40
21803 #:test-flags
21804 (if (member (%current-system) %32bit-supported-systems)
21805 #~(list "-k" "not test_profit_float")
21806 #~(list))))
21807 (native-inputs (list python-pytest python-setuptools))
21808 (home-page "https://software.clapper.org/munkres/")
21809 (synopsis "Implementation of the Munkres algorithm")
21810 (description
21811 "The Munkres module provides an implementation of the Munkres algorithm
21812(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
21813for solving the Assignment Problem.")
21814 (license license:bsd-3)))
21815
21816(define-public python-codespell
21817 (package
21818 (name "python-codespell")
21819 (version "2.3.0")
21820 (source
21821 (origin
21822 (method url-fetch)
21823 (uri (pypi-uri "codespell" version))
21824 (sha256
21825 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
21826 (build-system pyproject-build-system)
21827 (native-inputs
21828 (list python-pygments
21829 python-pytest
21830 python-pytest-dependency
21831 python-setuptools
21832 python-setuptools-scm
21833 python-wheel))
21834 (propagated-inputs
21835 (list python-chardet))
21836 (home-page "https://github.com/codespell-project/codespell/")
21837 (synopsis "Spellchecker for code")
21838 (description
21839 "Codespell fixes common misspellings in text files. It's designed
21840primarily for checking misspelled words in source code, but it can be used
21841with other files as well. It does not check for word membership in a complete
21842dictionary, but instead looks for a set of common misspellings. Therefore it
21843should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
21844also means it shouldn't generate false-positives when you use a niche term it
21845doesn't know about.")
21846 (license
21847 (list
21848 ; for codespell and codespell_lib
21849 license:gpl2
21850 ; for dictionary*.txt
21851 license:cc-by-sa3.0))))
21852
21853(define-public python-jellyfish
21854 (package
21855 (name "python-jellyfish")
21856 (version "1.2.1")
21857 (source
21858 (origin
21859 (method git-fetch)
21860 (uri (git-reference
21861 (url "https://github.com/jamesturk/jellyfish")
21862 (commit (string-append "v" version))))
21863 (file-name (git-file-name name version))
21864 (sha256
21865 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
21866 (build-system pyproject-build-system)
21867 (arguments
21868 (list
21869 #:imported-modules (append %cargo-build-system-modules
21870 %pyproject-build-system-modules)
21871 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
21872 (guix build pyproject-build-system)
21873 (guix build utils))
21874 #:phases
21875 #~(modify-phases %standard-phases
21876 (add-after 'unpack 'prepare-cargo-build-system
21877 (lambda args
21878 (for-each
21879 (lambda (phase)
21880 (format #t "Running cargo phase: ~a~%" phase)
21881 (apply (assoc-ref cargo:%standard-phases phase)
21882 #:cargo-target #$(cargo-triplet)
21883 args))
21884 '(unpack-rust-crates
21885 configure
21886 check-for-pregenerated-files
21887 patch-cargo-checksums)))))))
21888 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
21889 (native-inputs
21890 (append
21891 (list python-pytest
21892 python-setuptools
21893 rust
21894 `(,rust "cargo"))
21895 (or (and=> (%current-target-system)
21896 (compose list make-rust-sysroot))
21897 '())))
21898 (home-page "https://www.jpt.sh/projects/jellyfish/")
21899 (synopsis "Approximate and phonetic matching of strings")
21900 (description "Jellyfish uses a variety of string comparison and phonetic
21901encoding algorithms to do fuzzy string matching.")
21902 (license license:bsd-2)))
21903
21904(define-public python-pdfminer-six
21905 (package
21906 (name "python-pdfminer-six")
21907 (version "20260107")
21908 ;; There are no tests in the PyPI tarball.
21909 (source
21910 (origin
21911 (method git-fetch)
21912 (uri (git-reference
21913 (url "https://github.com/pdfminer/pdfminer.six")
21914 (commit version)))
21915 (file-name (git-file-name name version))
21916 (sha256
21917 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
21918 (build-system pyproject-build-system)
21919 (arguments
21920 (list #:phases
21921 #~(modify-phases %standard-phases
21922 ;; Tests write to the source tree.
21923 (add-after 'unpack 'make-git-checkout-writable
21924 (lambda _
21925 (for-each make-file-writable (find-files ".")))))))
21926 (propagated-inputs
21927 (list python-charset-normalizer python-cryptography))
21928 (native-inputs
21929 (list python-pytest python-setuptools python-setuptools-scm))
21930 (home-page "https://github.com/pdfminer/pdfminer.six")
21931 (synopsis "PDF parser and analyzer")
21932 (description "@code{pdfminer.six} is a community maintained fork of
21933the original PDFMiner. It is a tool for extracting information from PDF
21934documents. It focuses on getting and analyzing text data. Pdfminer.six
21935extracts the text from a page directly from the sourcecode of the PDF. It
21936can also be used to get the exact location, font or color of the text.")
21937 (license license:expat)))
21938
21939(define-public python-rarfile
21940 (package
21941 (name "python-rarfile")
21942 (version "4.2")
21943 (source
21944 (origin
21945 (method git-fetch)
21946 (uri (git-reference
21947 (url "https://github.com/markokr/rarfile")
21948 (commit (string-append "v" version))))
21949 (file-name (git-file-name name version))
21950 (sha256
21951 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
21952 (build-system pyproject-build-system)
21953 (arguments
21954 (list
21955 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
21956 #:phases
21957 #~(modify-phases %standard-phases
21958 (add-after 'unpack 'patch
21959 (lambda* (#:key inputs #:allow-other-keys)
21960 (substitute* "rarfile.py"
21961 ;; Disable unrar and unar, which are unavailable on Guix.
21962 (("(unrar|unar)=True" all tool)
21963 (string-append tool "=False"))
21964 ;; Hardcode path to bsdtar
21965 (("\"bsdtar\"")
21966 (format #f "~s"
21967 (search-input-file inputs "bin/bsdtar")))))))))
21968 (native-inputs (list python-pytest python-setuptools))
21969 (inputs (list libarchive))
21970 (home-page "https://github.com/markokr/rarfile")
21971 (synopsis "RAR archive reader for Python")
21972 (description
21973 "This is Python module for RAR archive reading. The interface is made as
21974zipfile like as possible.")
21975 (license license:isc)))
21976
21977(define-public python-rassumfrassum
21978 (package
21979 (name "python-rassumfrassum")
21980 (version "0.3.3")
21981 (source
21982 (origin
21983 (method git-fetch)
21984 (uri (git-reference
21985 (url "https://github.com/joaotavora/rassumfrassum")
21986 (commit (string-append "v" version))))
21987 (file-name (git-file-name name version))
21988 (sha256
21989 (base32 "0iyqg7pnlca9i9a5n2v1pg8xy0chy297d1a934wqxvjzrv11wxyw"))))
21990 (build-system pyproject-build-system)
21991 (arguments
21992 (list
21993 #:phases
21994 #~(modify-phases %standard-phases
21995 (replace 'check
21996 (lambda* (#:key tests? #:allow-other-keys)
21997 (when tests?
21998 (invoke "test/run-all.sh")))))))
21999 (native-inputs (list python-setuptools))
22000 (home-page "https://github.com/joaotavora/rassumfrassum")
22001 (synopsis "Connect an LSP client to multiple LSP servers")
22002 (description
22003 "LSP/JSONRPC multiplexer for connecting one LSP client to multiple servers.")
22004 (license license:gpl3+)))
22005
22006(define-public python-slugid
22007 (package
22008 (name "python-slugid")
22009 (version "2.0.0")
22010 (source
22011 (origin
22012 (method git-fetch)
22013 (uri (git-reference
22014 (url "https://github.com/taskcluster/slugid.py")
22015 (commit (string-append "v" version))))
22016 (file-name (git-file-name name version))
22017 (sha256
22018 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
22019 (build-system pyproject-build-system)
22020 (arguments (list #:test-backend #~'nose))
22021 (native-inputs (list python-pynose python-setuptools))
22022 (home-page "http://taskcluster.github.io/slugid.py")
22023 (synopsis "Module for Base64 encoded UUID v4 slugs")
22024 (description
22025 "This package provides a module for generating v4 UUIDs and encoding them
22026into 22 character URL-safe base64 slug representation.")
22027 (license license:mpl2.0)))
22028
22029(define-public python-rich
22030 (package
22031 (name "python-rich")
22032 (version "14.3.3")
22033 (source
22034 (origin
22035 (method git-fetch)
22036 (uri (git-reference
22037 (url "https://github.com/willmcgugan/rich")
22038 (commit (string-append "v" version))))
22039 (file-name (git-file-name name version))
22040 (sha256
22041 (base32 "1g8mb51ffn3bw2dhmmimpyhwkn13xmphircc8bg2kvkmncxmbrza"))))
22042 (build-system pyproject-build-system)
22043 ;; tests: 952 passed, 25 skipped
22044 (native-inputs
22045 (list python-poetry-core
22046 python-pytest
22047 which))
22048 (propagated-inputs
22049 (list python-markdown-it-py
22050 python-pygments))
22051 (home-page "https://github.com/willmcgugan/rich")
22052 (synopsis "Render rich text and more to the terminal")
22053 (description
22054 "This is a Python package for rendering rich text, tables, progress bars,
22055syntax highlighting, markdown and more to the terminal.")
22056 (license license:expat)))
22057
22058(define-public python-rich-click
22059 (package
22060 (name "python-rich-click")
22061 (version "1.9.7")
22062 (source
22063 (origin
22064 (method git-fetch)
22065 (uri (git-reference
22066 (url "https://github.com/ewels/rich-click")
22067 (commit (string-append "v" version))))
22068 (file-name (git-file-name name version))
22069 (sha256
22070 (base32 "1bw3lsj49dln8q7407gv85y8lzdn9a3jcjl9acax6q6x9l73cgqx"))))
22071 (build-system pyproject-build-system)
22072 (native-inputs
22073 (list python-inline-snapshot
22074 python-pytest
22075 python-setuptools
22076 python-typer))
22077 (propagated-inputs
22078 (list python-click
22079 python-rich))
22080 (home-page "https://github.com/ewels/rich-click")
22081 (synopsis "Format click help output nicely with rich")
22082 (description "Click is a \"Python package for creating beautiful command
22083line interfaces\". Rich is a \"Python library for rich text and beautiful
22084formatting in the terminal\". The intention of rich-click is to provide
22085attractive help output from click, formatted with rich, with minimal
22086customization required.")
22087 (license license:expat)))
22088
22089(define-public python-magic
22090 (package
22091 (name "python-magic")
22092 (version "0.4.27")
22093 (home-page "https://github.com/ahupp/python-magic")
22094 (source
22095 (origin
22096 (method git-fetch)
22097 (uri (git-reference (url home-page) (commit version)))
22098 (file-name (git-file-name name version))
22099 (sha256
22100 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
22101 (build-system pyproject-build-system)
22102 (arguments
22103 (list
22104 #:test-backend #~'custom
22105 #:test-flags #~(list "test/libmagic_test.py")
22106 #:phases
22107 #~(modify-phases %standard-phases
22108 (add-after 'unpack 'fix-tests
22109 (lambda _
22110 ;; Adjust expected output for [email protected].
22111 (substitute* "test/libmagic_test.py"
22112 (("PDF document, version 1\\.2, 2 pages")
22113 "PDF document, version 1.2, 2 page(s)"))))
22114 ;; Replace a specific method call with a hard-coded path to the
22115 ;; necessary libmagic.so file in the store.
22116 (add-before 'build 'hard-code-path-to-libmagic
22117 (lambda* (#:key inputs #:allow-other-keys)
22118 (substitute* "magic/loader.py"
22119 (("find_library\\('magic'\\)")
22120 (format #f "~s"
22121 (search-input-file inputs "lib/libmagic.so")))))))))
22122 (native-inputs (list which python-setuptools))
22123 (inputs
22124 ;; python-magic needs to be able to find libmagic.so.
22125 (list file))
22126 (synopsis "File type identification using libmagic")
22127 (description
22128 "This module uses ctypes to access the libmagic file type identification
22129library. It makes use of the local magic database and supports both textual
22130and MIME-type output. Note that this module and the python-file module both
22131provide a \"magic.py\" file; these two modules, which are different and were
22132developed separately, both serve the same purpose: to provide Python bindings
22133for libmagic.")
22134 (license license:expat)))
22135
22136(define-public python-securetar
22137 (package
22138 (name "python-securetar")
22139 (version "2025.1.4")
22140 (source
22141 (origin
22142 (method git-fetch)
22143 (uri (git-reference
22144 (url "https://github.com/pvizeli/securetar")
22145 (commit version)))
22146 (file-name (git-file-name name version))
22147 (sha256
22148 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
22149 (build-system pyproject-build-system)
22150 (native-inputs (list python-setuptools python-wheel python-pytest))
22151 (propagated-inputs (list python-cryptography))
22152 (home-page "https://github.com/pvizeli/securetar")
22153 (synopsis "Python module to handle tarfile backups")
22154 (description
22155 "This library provides a streaming wrapper around python tarfile and allow
22156secure handling files and support encryption.")
22157 (license license:asl2.0)))
22158
22159(define-public python-pkgconfig
22160 (package
22161 (name "python-pkgconfig")
22162 (version "1.5.5")
22163 (source
22164 (origin
22165 (method url-fetch)
22166 (uri (pypi-uri "pkgconfig" version))
22167 (sha256
22168 (base32
22169 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
22170 (build-system pyproject-build-system)
22171 (arguments
22172 (list
22173 #:tests? #false ;there are none
22174 #:phases
22175 '(modify-phases %standard-phases
22176 (add-before 'build 'patch
22177 ;; Hard-code the path to pkg-config.
22178 (lambda _
22179 (substitute* "pkgconfig/pkgconfig.py"
22180 (("'pkg-config'")
22181 (string-append "'" (which "pkg-config") "'"))))))))
22182 (native-inputs (list python-poetry-core))
22183 (inputs (list pkg-config))
22184 (home-page "https://github.com/matze/pkgconfig")
22185 (synopsis "Python interface for pkg-config")
22186 (description "This module provides a Python interface to pkg-config. It
22187can be used to find all pkg-config packages, check if a package exists,
22188check if a package meets certain version requirements, query CFLAGS and
22189LDFLAGS and parse the output to build extensions with setup.py.")
22190 (license license:expat)))
22191
22192;; This package is unmaintained since 2014, but still used in `khmer'.
22193(define-public python-bz2file
22194 (package
22195 (name "python-bz2file")
22196 (version "0.98")
22197 (source
22198 (origin
22199 (method url-fetch)
22200 (uri (pypi-uri "bz2file" version))
22201 (sha256
22202 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
22203 (build-system pyproject-build-system)
22204 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
22205 (native-inputs (list python-setuptools))
22206 (home-page "https://github.com/nvawda/bz2file")
22207 (synopsis "Read and write bzip2-compressed files")
22208 (description
22209 "Bz2file is a Python library for reading and writing bzip2-compressed
22210files. It contains a drop-in replacement for the I/O interface in the
22211standard library's @code{bz2} module, including features from the latest
22212development version of CPython that are not available in older releases.")
22213 (license license:asl2.0)))
22214
22215(define-public python-future
22216 (package
22217 (name "python-future")
22218 (version "1.0.0")
22219 (source
22220 (origin
22221 (method url-fetch)
22222 (uri (pypi-uri "future" version))
22223 (sha256
22224 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
22225 (build-system pyproject-build-system)
22226 (arguments
22227 (list
22228 #:test-flags
22229 ;; Self tests failed.
22230 #~(list "--ignore=tests/test_future/test_futurize.py"
22231 "-k" (string-join
22232 ;; Self tests failed.
22233 (list "not test_division"
22234 "test_functions_unchanged"
22235 "test_mixed_annotations"
22236 "test_multiple_param_annotations"
22237 "test_print"
22238 "test_range_slice"
22239 ;; Network access is required.
22240 "test_ftp"
22241 "test_main"
22242 "test_moves_urllib_request_http"
22243 "test_urllib_request_http"
22244 ;; Tests failing on Python 3.12
22245 "test_converting_drive_letter"
22246 "test_converting_drive_letter"
22247 "test_converting_when_no_drive_letter"
22248 "test_converting_when_no_drive_letter"
22249 "test_converting_when_no_drive_letter"
22250 "test_converting_when_no_drive_letter"
22251 "test_isinstance_recursion_limit"
22252 "test_roundtrip_pathname2url"
22253 "test_roundtrip_pathname2url"
22254 "test_roundtrip_url2pathname"
22255 "test_roundtrip_url2pathname"
22256 "test_subclass_recursion_limit")
22257 " and not "))))
22258 (native-inputs
22259 (list python-pytest
22260 python-setuptools))
22261 (home-page "https://python-future.org")
22262 (synopsis "Single-source support for Python 3 and 2")
22263 (description
22264 "@code{python-future} is the missing compatibility layer between Python 2
22265and Python 3. It allows you to use a single, clean Python 3.x-compatible
22266codebase to support both Python 2 and Python 3 with minimal overhead.")
22267 (license license:expat)))
22268
22269(define-public python-cysignals
22270 (package
22271 (name "python-cysignals")
22272 (version "1.12.3")
22273 (source
22274 (origin
22275 (method url-fetch)
22276 (uri (pypi-uri "cysignals" version))
22277 (sha256
22278 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
22279 (build-system pyproject-build-system)
22280 (native-inputs (list python-meson
22281 python-cython
22282 python-pytest))
22283 (home-page "https://github.com/sagemath/cysignals")
22284 (synopsis "Handling of interrupts and signals for Cython")
22285 (description
22286 "The cysignals package provides mechanisms to handle interrupts (and
22287other signals and errors) in Cython code, using two related approaches,
22288for mixed Cython/Python code or external C libraries and pure Cython code,
22289respectively.")
22290 (license license:lgpl3+)))
22291
22292(define-public python-rope
22293 (package
22294 (name "python-rope")
22295 (version "1.13.0")
22296 (source
22297 (origin
22298 (method url-fetch)
22299 (uri (pypi-uri "rope" version))
22300 (sha256
22301 (base32
22302 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
22303 (build-system pyproject-build-system)
22304 (arguments
22305 (list
22306 #:test-flags
22307 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
22308 (propagated-inputs (list python-pytoolconfig))
22309 (native-inputs
22310 (list python-pytest python-pytest-timeout python-setuptools))
22311 (home-page "https://github.com/python-rope/rope")
22312 (synopsis "Refactoring library for Python")
22313 (description
22314 "Rope is a refactoring library for Python. It facilitates the renaming,
22315moving and extracting of attributes, functions, modules, fields and parameters
22316in Python source code. These refactorings can also be applied to occurrences
22317in strings and comments.")
22318 (license license:lgpl3+)))
22319
22320(define-public python-py3status
22321 (package
22322 (name "python-py3status")
22323 (version "3.62")
22324 (source
22325 (origin
22326 (method git-fetch)
22327 (uri (git-reference
22328 (url "https://github.com/ultrabug/py3status")
22329 (commit version)))
22330 (file-name (git-file-name name version))
22331 (sha256
22332 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
22333 (build-system pyproject-build-system)
22334 (arguments
22335 (list
22336 #:phases
22337 #~(modify-phases %standard-phases
22338 (add-before 'build 'hardcode-file-path
22339 (lambda* (#:key inputs #:allow-other-keys)
22340 (substitute* "py3status/parse_config.py"
22341 (("\\[\"file\", \"-b\"")
22342 (format #f "[~s, \"-b\""
22343 (search-input-file inputs "bin/file")))))))))
22344 (native-inputs (list python-hatchling python-pytest))
22345 (inputs (list file))
22346 (home-page "https://github.com/ultrabug/py3status")
22347 (synopsis "Extensible i3status wrapper written in Python")
22348 (description
22349 "py3status is an i3status wrapper which extends i3status functionality in
22350a modular way, allowing you to extend your panel with your own code,
22351responding to click events and updating clock every second.")
22352 (license license:bsd-3)))
22353
22354(define-public python-greenlet
22355 (package
22356 (name "python-greenlet")
22357 (version "3.1.1")
22358 (source
22359 (origin
22360 (method url-fetch)
22361 (uri (pypi-uri "greenlet" version))
22362 (sha256
22363 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
22364 (build-system pyproject-build-system)
22365 (arguments
22366 (list
22367 ;; AssertionError: 'Exception' not found in ''
22368 #:test-flags
22369 #~(list (string-join
22370 (list "--deselect=src/greenlet/tests/test_greenlet.py"
22371 "TestGreenlet"
22372 "test_dealloc_catches_GreenletExit_throws_other")
22373 "::"))
22374 #:phases
22375 #~(modify-phases %standard-phases
22376 (add-before 'check 'build-extensions
22377 (lambda _
22378 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
22379 (native-inputs
22380 (list python-objgraph
22381 python-pytest
22382 python-psutil
22383 python-setuptools
22384 python-wheel))
22385 (home-page "https://greenlet.readthedocs.io/")
22386 (synopsis "Lightweight in-process concurrent programming")
22387 (description
22388 "Greenlet package is a spin-off of Stackless, a version of CPython
22389that supports micro-threads called \"tasklets\". Tasklets run
22390pseudo-concurrently (typically in a single or a few OS-level threads) and
22391are synchronized with data exchanges on \"channels\".")
22392 (license (list license:psfl license:expat))))
22393
22394(define-public python-objgraph
22395 (package
22396 (name "python-objgraph")
22397 (version "3.6.2")
22398 (source
22399 (origin
22400 (method url-fetch)
22401 (uri (pypi-uri "objgraph" version))
22402 (sha256
22403 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
22404 (build-system pyproject-build-system)
22405 (arguments
22406 (list
22407 #:test-flags
22408 #~(list "tests.py"
22409 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
22410 ;; [], [], [], [], [], [], [], ...
22411 "-k" "not test_at_addrs")))
22412 (native-inputs
22413 (list graphviz
22414 python-pytest
22415 python-setuptools
22416 python-wheel))
22417 (propagated-inputs
22418 (list python-graphviz))
22419 (home-page "https://mg.pov.lt/objgraph/")
22420 (synopsis "Draw Python object reference graphs with graphviz")
22421 (description
22422 "This package provides tools to draw Python object reference graphs with
22423graphviz.")
22424 (license license:expat)))
22425
22426(define-public python-gevent
22427 (package
22428 (name "python-gevent")
22429 (version "24.11.1")
22430 (source (origin
22431 (method url-fetch)
22432 (uri (pypi-uri "gevent" version))
22433 (sha256
22434 (base32
22435 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
22436 (modules '((guix build utils)))
22437 (snippet
22438 '(begin
22439 ;; unbunding libev and c-ares
22440 (delete-file-recursively "deps")
22441 ;; Remove cythonized files.
22442 (with-directory-excursion "src/gevent"
22443 (for-each delete-file
22444 (append (list "resolver/cares.c"
22445 "queue.c"
22446 "local.c"
22447 "libev/corecext.h"
22448 "libev/corecext.c"
22449 "greenlet.c"
22450 "event.c"
22451 "_waiter.c"
22452 "_tracer.c"
22453 "_semaphore.c"
22454 "_imap.c"
22455 "_ident.c"
22456 "_hub_primitives.c"
22457 "_hub_local.c"
22458 "_greenlet_primitives.c"
22459 "_abstract_linkable.c")
22460 (find-files "." "\\.html$"))))))))
22461 (build-system pyproject-build-system)
22462 (arguments
22463 (list
22464 #:test-flags
22465 '(list
22466 ;; These tests relies on networking which is
22467 ;; not available in the build container.
22468 "test__getaddrinfo_import.py"
22469 ;; These tests rely on KeyboardInterrupts which do not
22470 ;; work inside the build container for some reason
22471 ;; (lack of controlling terminal?).
22472 "test__issues461_471.py"
22473 ;; TODO: Patch out the tests that use getprotobyname, etc
22474 ;; instead of disabling all the tests from these files.
22475 "test__resolver_dnspython.py"
22476 ;; This test contains 'test_unlink', which
22477 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
22478 "test__core_stat.py")
22479 #:phases
22480 #~(modify-phases %standard-phases
22481 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
22482 (lambda _
22483 (substitute* "src/gevent/subprocess.py"
22484 (("/bin/sh") (which "sh")))
22485 (for-each (lambda (file)
22486 (substitute* file
22487 (("/bin/sh") (which "sh"))
22488 (("/bin/true") (which "true"))))
22489 (find-files "src/greentest" "\\.py$"))))
22490 (add-before 'build 'do-not-use-bundled-sources
22491 (lambda _
22492 (setenv "GEVENTSETUP_EMBED" "0")
22493
22494 ;; Prevent building bundled libev.
22495 (substitute* "setup.py"
22496 (("run_make=_BUILDING")
22497 "run_make=False"))))
22498 (add-before 'build 'augment-C_INCLUDE_PATH
22499 (lambda* (#:key inputs #:allow-other-keys)
22500 (let* ((python (dirname (dirname
22501 (search-input-file
22502 inputs "bin/python"))))
22503 (version (python-version python))
22504 (greenlet (string-append
22505 #$(this-package-input "python-greenlet")
22506 "/include/python" version)))
22507 (setenv "C_INCLUDE_PATH"
22508 (string-append greenlet "/:"
22509 (or (getenv "C_INCLUDE_PATH")
22510 ""))))))
22511 (add-before 'check 'pretend-to-be-CI
22512 (lambda _
22513 ;; A few tests are skipped due to network constraints or
22514 ;; get longer timeouts when running in a CI environment.
22515 ;; Piggy-back on that, as we need the same adjustments.
22516 (setenv "TRAVIS" "1")
22517 (setenv "APPVEYOR" "1")))
22518 (add-before 'check 'adjust-tests
22519 (lambda* (#:key test-flags #:allow-other-keys)
22520 (call-with-output-file "skipped_tests.txt"
22521 (lambda (port)
22522 (format port "~a~%" (string-join test-flags "\n"))))))
22523 (replace 'check
22524 (lambda* (#:key tests? #:allow-other-keys)
22525 (when tests?
22526 ;; Use the build daemons configured number of workers.
22527 (setenv "NWORKERS" (number->string (parallel-job-count)))
22528 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
22529 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
22530 (propagated-inputs
22531 (list python-greenlet python-zope-event python-zope-interface))
22532 (native-inputs
22533 (list python-cffi
22534 python-cython
22535 python-dnspython
22536 python-idna
22537 python-objgraph
22538 python-psutil
22539 python-requests
22540 python-setuptools))
22541 (inputs
22542 (list c-ares libev libuv))
22543 (home-page "https://www.gevent.org/")
22544 (synopsis "Coroutine-based network library")
22545 (description
22546 "@code{gevent} is a coroutine-based Python networking library that uses
22547@code{greenlet} to provide a high-level synchronous API on top of the
22548@code{libev} event loop.")
22549 (license license:expat)))
22550
22551(define-public python-fastimport
22552 (package
22553 (name "python-fastimport")
22554 (version "0.9.16")
22555 (source
22556 (origin
22557 (method git-fetch)
22558 (uri (git-reference
22559 (url "https://github.com/jelmer/python-fastimport")
22560 (commit (string-append "v" version))))
22561 (file-name (git-file-name name version))
22562 (sha256
22563 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
22564 (build-system pyproject-build-system)
22565 (arguments (list #:test-backend #~'unittest))
22566 (native-inputs (list python-setuptools))
22567 (home-page "https://github.com/jelmer/python-fastimport")
22568 (synopsis "VCS fastimport parser and generator in Python")
22569 (description
22570 "This package provides a parser for and generator of the Git
22571@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
22572format.")
22573 (license license:gpl2+)))
22574
22575(define-public python-pika
22576 (package
22577 (name "python-pika")
22578 (version "1.3.2")
22579 (source
22580 (origin
22581 (method git-fetch)
22582 (uri (git-reference
22583 (url "https://github.com/pika/pika")
22584 (commit version)))
22585 (file-name (git-file-name name version))
22586 (sha256
22587 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
22588 (build-system pyproject-build-system)
22589 (arguments
22590 (list
22591 #:test-flags
22592 ;; XXX: These test most likely require a running RabbitMQ server.
22593 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
22594 #:phases
22595 #~(modify-phases %standard-phases
22596 (add-before 'check 'configure-tests
22597 (lambda* (#:key tests? #:allow-other-keys)
22598 (when tests?
22599 (setenv "PYTHONPATH" (getcwd))))))))
22600 (native-inputs (list python-pytest
22601 python-gevent
22602 python-tornado
22603 python-twisted
22604 python-setuptools))
22605 (home-page "https://pika.readthedocs.org")
22606 (synopsis "Pure Python AMQP Client Library")
22607 (description
22608 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
22609Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
22610network support library.")
22611 (license license:bsd-3)))
22612
22613(define-public python-pykka
22614 (package
22615 (name "python-pykka")
22616 (version "4.4.2")
22617 (source
22618 (origin
22619 (method git-fetch)
22620 (uri (git-reference
22621 (url "https://github.com/jodal/pykka")
22622 (commit (string-append "v" version))))
22623 (file-name (git-file-name name version))
22624 (sha256
22625 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
22626 (build-system pyproject-build-system)
22627 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
22628 (home-page "https://pykka.readthedocs.io")
22629 (synopsis "Implementation of the actor model")
22630 (description
22631 "Pykka implements the actor model in Python, which introduces some simple
22632rules to control the sharing of state and cooperation between execution units,
22633and makes it easier to build concurrent applications.")
22634 (license license:asl2.0)))
22635
22636;; WARNING: This package is a dependency of mesa.
22637(define-public python-ply
22638 (package
22639 (name "python-ply")
22640 (version "3.11")
22641 (source
22642 (origin
22643 (method url-fetch)
22644 (uri (pypi-uri "ply" version))
22645 (sha256
22646 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
22647 (build-system pyproject-build-system)
22648 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
22649 (native-inputs
22650 (list python-setuptools
22651 python-wheel))
22652 (home-page "http://www.dabeaz.com/ply/")
22653 (synopsis "Python Lex & Yacc")
22654 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
22655It uses LR parsing and does extensive error checking.")
22656 (license license:bsd-3)))
22657
22658(define-public python-kazoo
22659 (package
22660 (name "python-kazoo")
22661 (version "2.10.0")
22662 (source
22663 (origin
22664 (method git-fetch)
22665 (uri (git-reference
22666 (url "https://github.com/python-zk/kazoo")
22667 (commit version)))
22668 (file-name (git-file-name name version))
22669 (sha256
22670 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
22671 (build-system pyproject-build-system)
22672 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
22673 (native-inputs (list python-setuptools))
22674 (home-page "https://kazoo.readthedocs.org")
22675 (synopsis "High-level Zookeeper client library")
22676 (description
22677 "Kazoo is a Python client library for the Apache Zookeeper distributed
22678application service. It is designed to be easy to use and to avoid common
22679programming errors.")
22680 (license license:asl2.0)))
22681
22682(define-public python-columnize
22683 (package
22684 (name "python-columnize")
22685 (version "0.3.11")
22686 (source
22687 (origin
22688 (method url-fetch)
22689 (uri (pypi-uri "columnize" version))
22690 (sha256
22691 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
22692 (build-system pyproject-build-system)
22693 (native-inputs (list python-pytest python-setuptools))
22694 (home-page "https://github.com/rocky/pycolumnize")
22695 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
22696 (description
22697 "This package provides a way to format a simple (i.e. not nested) list
22698into aligned columns.")
22699 (license license:expat)))
22700
22701(define-public python-pysol-cards
22702 (package
22703 (name "python-pysol-cards")
22704 (version "0.24.0")
22705 (source
22706 (origin
22707 (method url-fetch)
22708 (uri (pypi-uri "pysol_cards" version))
22709 (sha256
22710 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
22711 (build-system pyproject-build-system)
22712 (arguments
22713 (list
22714 #:phases
22715 #~(modify-phases %standard-phases
22716 (replace 'check
22717 (lambda* (#:key test-flags tests? #:allow-other-keys)
22718 (when tests?
22719 (apply invoke
22720 "python"
22721 "-m"
22722 "unittest"
22723 "discover"
22724 "tests"
22725 test-flags)))))))
22726 (native-inputs (list python-setuptools python-wheel))
22727 (home-page "https://github.com/shlomif/pysol_cards")
22728 (synopsis "Deal PySol FC Cards")
22729 (description
22730 "The pysol-cards python modules provide code to generate the initial deals of
22731some PySol games.")
22732 (license license:expat)))
22733
22734(define-public python-freecell-solver
22735 (package
22736 (name "python-freecell-solver")
22737 (version "0.6.0")
22738 (source
22739 (origin
22740 (method url-fetch)
22741 (uri (pypi-uri "freecell_solver" version))
22742 (sha256
22743 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
22744 (build-system pyproject-build-system)
22745 (propagated-inputs (list python-cffi))
22746 (native-inputs (list python-pytest python-setuptools))
22747 (home-page "https://pypi.org/project/freecell-solver/")
22748 (synopsis "Freecell Solver bindings")
22749 (description
22750 "This package provides Python bindings for the freecell-solver
22751package. Freecell Solver is a program that automatically solves layouts of
22752Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
22753and Seahaven Towers, as well as Simple Simon boards.")
22754 (license license:expat)))
22755
22756(define-public python-inflection
22757 (package
22758 (name "python-inflection")
22759 (version "0.5.1")
22760 (source
22761 (origin
22762 (method git-fetch)
22763 (uri (git-reference
22764 (url "https://github.com/jpvanhal/inflection")
22765 (commit version)))
22766 (file-name (git-file-name name version))
22767 (sha256
22768 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
22769 (build-system pyproject-build-system)
22770 (native-inputs (list python-pytest python-setuptools))
22771 (home-page "https://github.com/jpvanhal/inflection")
22772 (synopsis "Python string transformation library")
22773 (description
22774 "Inflection is a string transformation library. It singularizes
22775and pluralizes English words, and transforms strings from CamelCase to
22776underscored string.")
22777 (license license:expat)))
22778
22779(define-public python-krb5
22780 (package
22781 (name "python-krb5")
22782 (version "0.5.1")
22783 (source
22784 (origin
22785 (method url-fetch)
22786 (uri (pypi-uri "krb5" version))
22787 (sha256
22788 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
22789 (build-system pyproject-build-system)
22790 (inputs (list mit-krb5))
22791 (native-inputs (list python-cython python-k5test python-pytest
22792 python-setuptools python-wheel))
22793 (home-page "https://github.com/jborean93/pykrb5")
22794 (synopsis "Kerberos API bindings for Python")
22795 (description "This library provides Python functions that wraps the
22796Kerberos 5 C API.")
22797 (license license:expat)))
22798
22799(define-public python-pylev
22800 (package
22801 (name "python-pylev")
22802 (version "1.4.0")
22803 (source
22804 (origin
22805 (method git-fetch)
22806 (uri (git-reference
22807 (url "https://github.com/toastdriven/pylev")
22808 (commit (string-append "v" version))))
22809 (file-name (git-file-name name version))
22810 (sha256
22811 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
22812 (build-system pyproject-build-system)
22813 (arguments
22814 (list
22815 #:test-backend #~'custom
22816 #:test-flags #~(list "tests.py")))
22817 (native-inputs (list python-setuptools))
22818 (home-page "https://github.com/toastdriven/pylev")
22819 (synopsis "Levenshtein distance implementation in Python")
22820 (description
22821 "Pure Python Levenshtein implementation, based off the Wikipedia code
22822samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
22823 (license license:bsd-3)))
22824
22825(define-public python-cleo
22826 (package
22827 (name "python-cleo")
22828 (version "2.1.0")
22829 (source (origin
22830 (method url-fetch)
22831 (uri (pypi-uri "cleo" version))
22832 (sha256
22833 (base32
22834 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
22835 (build-system pyproject-build-system)
22836 (native-inputs
22837 (list python-poetry-core
22838 python-mock
22839 python-pytest-mock
22840 python-pytest))
22841 (propagated-inputs
22842 (list python-crashtest python-rapidfuzz))
22843 (home-page "https://github.com/sdispater/cleo")
22844 (synopsis "Command-line arguments library for Python")
22845 (description
22846 "Cleo allows you to create command-line commands with signature in
22847docstring and colored output.")
22848 (license license:expat)))
22849
22850(define-public python-shellingham
22851 (package
22852 (name "python-shellingham")
22853 (version "1.5.4")
22854 (source
22855 (origin
22856 (method url-fetch)
22857 (uri (pypi-uri "shellingham" version))
22858 (sha256
22859 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
22860 (build-system pyproject-build-system)
22861 (native-inputs
22862 (list python-pytest python-pytest-mock python-setuptools python-wheel))
22863 (home-page "https://github.com/sarugaku/shellingham")
22864 (synopsis "Tool to detect surrounding shell")
22865 (description
22866 "Shellingham detects what shell the current Python executable is
22867running in.")
22868 (license license:isc)))
22869
22870(define-public python-shshsh
22871 (package
22872 (name "python-shshsh")
22873 (version "1.0.5")
22874 (source
22875 (origin
22876 (method git-fetch)
22877 (uri
22878 (git-reference
22879 (url "https://github.com/zqqqqz2000/shshsh")
22880 (commit
22881 "fd21c8696aebaae04507760c16cb45979291fef5")))
22882 (file-name (git-file-name name version))
22883 (sha256
22884 (base32
22885 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
22886 (build-system pyproject-build-system)
22887 (native-inputs
22888 (list python-poetry-core
22889 python-pytest))
22890 (home-page "https://github.com/zqqqqz2000/shshsh")
22891 (synopsis "Write Shell commands simply and safely within Python")
22892 (description "This package provides a way to write Shell commands from
22893within Python. Python functions can be chained together to process input
22894Bash control characters are escapted so that parameters can be passed
22895without worrying about command injection.")
22896 (license license:expat)))
22897
22898(define-public python-memcached
22899 (package
22900 (name "python-memcached")
22901 (version "1.62")
22902 (source
22903 (origin
22904 (method git-fetch)
22905 (uri (git-reference
22906 (url "https://github.com/linsomniac/python-memcached")
22907 (commit version)))
22908 (file-name (git-file-name name version))
22909 (sha256
22910 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
22911 (build-system pyproject-build-system)
22912 (arguments
22913 (list
22914 #:tests? #f ;Requires a connection to a socket.
22915 #:test-backend #~'unittest))
22916 (native-inputs (list python-setuptools))
22917 (home-page "https://github.com/linsomniac/python-memcached")
22918 (synopsis "Pure python memcached client")
22919 (description
22920 "This software is a pure Python interface to the memcached memory cache
22921daemon. It is the client side software which allows storing values in one or
22922more, possibly remote, memcached servers.")
22923 (license license:psfl)))
22924
22925(define-public python-mergedeep
22926 (package
22927 (name "python-mergedeep")
22928 (version "1.3.4")
22929 (source
22930 (origin
22931 (method git-fetch)
22932 (uri (git-reference
22933 (url "https://github.com/clarketm/mergedeep")
22934 (commit (string-append "v" version))))
22935 (file-name (git-file-name name version))
22936 (sha256
22937 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
22938 (build-system pyproject-build-system)
22939 (arguments (list #:test-backend #~'unittest))
22940 (native-inputs (list python-setuptools))
22941 (home-page "https://github.com/clarketm/mergedeep")
22942 (synopsis "Deep merge function for Python")
22943 (description
22944 "This package provides a deep merge function for Python, useful to
22945combine multiple data objects as one.")
22946 (license license:expat)))
22947
22948(define-public python-clikit
22949 (package
22950 (name "python-clikit")
22951 (version "0.6.2")
22952 (source
22953 (origin
22954 (method git-fetch)
22955 (uri (git-reference
22956 (url "https://github.com/sdispater/clikit")
22957 (commit version)))
22958 (file-name (git-file-name name version))
22959 (sha256
22960 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
22961 (build-system pyproject-build-system)
22962 (arguments
22963 (list
22964 #:phases
22965 #~(modify-phases %standard-phases
22966 (add-after 'unpack 'relax-requirements
22967 (lambda _
22968 (substitute* "pyproject.toml"
22969 (("^crashtest.*")
22970 (format #f "crashtest=~s"
22971 #$(package-version
22972 (this-package-input "python-crashtest"))))))))))
22973 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
22974 (propagated-inputs (list python-crashtest python-pastel python-pylev))
22975 (home-page "https://github.com/sdispater/clikit")
22976 (synopsis "Group of utilities to build command line interfaces")
22977 (description
22978 "CliKit is a group of utilities to build testable command line
22979interfaces.")
22980 (license license:expat)))
22981
22982(define-public python-cattrs
22983 (package
22984 (name "python-cattrs")
22985 (version "24.1.2")
22986 (source (origin
22987 (method git-fetch) ;for tests
22988 (uri (git-reference
22989 (url "https://github.com/python-attrs/cattrs")
22990 (commit (string-append "v" version))))
22991 (file-name (git-file-name name version))
22992 (sha256
22993 (base32
22994 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
22995 (build-system pyproject-build-system)
22996 (arguments
22997 (list
22998 #:test-flags
22999 '(list "--numprocesses" (number->string (parallel-job-count))
23000 ;; Skip all benchmark tests.
23001 "--ignore=bench/test_attrs_collections.py"
23002 "--ignore=bench/test_attrs_nested.py"
23003 "--ignore=bench/test_attrs_primitives.py"
23004 "--ignore=bench/test_primitives.py"
23005 "-k"
23006 (string-join
23007 ;; XXX: Tests fail with error: AssertionError: assert ...,
23008 ;; check why.
23009 (list "not test_msgspec_json_converter"
23010 "test_structure_simple_from_dict_default"
23011 "test_310_optional_field_roundtrip"
23012 "test_310_union_field_roundtrip"
23013 "test_individual_overrides"
23014 "test_nested_roundtrip"
23015 "test_nested_roundtrip_tuple"
23016 "test_omit_default_roundtrip"
23017 "test_optional_field_roundtrip"
23018 "test_renaming"
23019 ;; 'utf-8' codec can't encode character '\ud800' in
23020 ;; position 0: surrogates not allowed
23021 "test_simple_classes"
23022 ;; This test fails with an assertion error on the build
23023 ;; farm, but not on my laptop.
23024 "test_nodefs_generated_unstructuring_cl"
23025 ;; See https://github.com/python-attrs/cattrs/issues/575
23026 "test_simple_roundtrip"
23027 "test_simple_roundtrip_defaults"
23028 "test_simple_roundtrip_defaults_tuple"
23029 "test_simple_roundtrip_tuple"
23030 "test_simple_roundtrip_with_extra_keys_forbidden"
23031 "test_structure_simple_from_dict_default"
23032 "test_union_field_roundtrip"
23033 "test_unmodified_generated_structuring")
23034 " and not "))
23035 #:phases
23036 #~(modify-phases %standard-phases
23037 (add-after 'unpack 'patch-pyproject
23038 (lambda _
23039 (substitute* "pyproject.toml"
23040 ;; Fix version string
23041 (("dynamic = \\[\"version\"\\]")
23042 (string-append "version = \"" #$version "\"")))))
23043 ;; XXX Our python-hypothesis package is too old.
23044 (add-after 'unpack 'compatibility
23045 (lambda _
23046 (substitute* "tests/typed.py"
23047 (("characters\\(codec=codec\\)")
23048 "characters()")))))))
23049 (native-inputs
23050 (list python-hatchling
23051 python-hatch-vcs
23052 python-hypothesis
23053 python-immutables
23054 python-msgpack
23055 python-msgspec
23056 python-poetry-core
23057 python-pymongo ;for the bson module
23058 python-pytest
23059 python-pytest-benchmark
23060 python-pytest-xdist))
23061 (propagated-inputs
23062 (list python-attrs
23063 python-cbor2
23064 python-orjson
23065 python-pyyaml
23066 python-tomlkit
23067 python-typing-extensions
23068 python-ujson))
23069 (home-page "https://github.com/python-attrs/cattrs")
23070 (synopsis "Python library for structuring and unstructuring data")
23071 (description "@code{cattrs} is an Python library for structuring and
23072unstructuring data. @code{cattrs} works best with @code{attrs} classes,
23073@code{dataclasses} and the usual Python collections, but other kinds of
23074classes can also be supported by manually registering converters.")
23075 (license license:expat)))
23076
23077;; A bare minimal package, mainly to use in tests and reduce closure
23078;; size. Tests are left out in the main package to slim down native-inputs and
23079;; optional propagated-inputs.
23080(define-public python-cattrs-minimal
23081 (package/inherit python-cattrs
23082 (name "python-cattrs-minimal")
23083 (arguments
23084 (substitute-keyword-arguments arguments
23085 ((#:tests? _ #t) #f)))
23086 (native-inputs
23087 (list python-hatchling
23088 python-hatch-vcs))
23089 (propagated-inputs
23090 (list python-attrs
23091 python-typing-extensions))))
23092
23093(define-public python-cachy
23094 (package
23095 (name "python-cachy")
23096 (version "0.3.0")
23097 (source
23098 (origin
23099 (method url-fetch)
23100 (uri (pypi-uri "cachy" version))
23101 (sha256
23102 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
23103 (build-system pyproject-build-system)
23104 (arguments
23105 (list
23106 #:phases
23107 #~(modify-phases %standard-phases
23108 (replace 'check
23109 (lambda* (#:key tests? #:allow-other-keys)
23110 (when tests?
23111 ;; Make it compatible with python-flexmock 0.12.
23112 (substitute* (find-files "tests" "\\.py$")
23113 (("from flexmock import flexmock, flexmock_teardown")
23114 (string-append "from flexmock import flexmock\n"
23115 "from flexmock._api import flexmock_teardown")))
23116 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
23117 "pytest")))))))
23118 (native-inputs
23119 (list memcached
23120 python-fakeredis
23121 python-flexmock
23122 python-pifpaf
23123 python-pytest
23124 python-setuptools
23125 python-wheel))
23126 (propagated-inputs
23127 (list python-memcached
23128 python-msgpack
23129 python-redis))
23130 (home-page "https://github.com/sdispater/cachy")
23131 (synopsis "Simple yet effective caching library")
23132 (description
23133 "Cachy provides a simple yet effective caching library. A simple but
23134powerful API: thread-safety; decorator syntax; support for memcached, redis,
23135database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
23136 (license license:expat)))
23137
23138(define-public python-pyproject-api
23139 (package
23140 (name "python-pyproject-api")
23141 (version "1.10.0")
23142 (source
23143 (origin
23144 (method url-fetch)
23145 (uri (pypi-uri "pyproject_api" version))
23146 (sha256
23147 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
23148 (build-system pyproject-build-system)
23149 (native-inputs
23150 (list python-hatch-vcs
23151 python-hatchling
23152 python-pytest
23153 python-pytest-mock
23154 python-setuptools))
23155 (propagated-inputs
23156 (list python-packaging python-tomli))
23157 (home-page "https://pyproject-api.readthedocs.io/latest/")
23158 (synopsis "API to interact with the Python pyproject.toml based projects")
23159 (description
23160 "@code{pyproject-api} aims to abstract away interaction with
23161@code{pyproject.toml} style projects in a flexible way.")
23162 (license license:expat)))
23163
23164(define-public python-lark
23165 (package
23166 (name "python-lark")
23167 (version "1.2.2")
23168 (source
23169 (origin
23170 (method url-fetch)
23171 (uri (pypi-uri "lark" version))
23172 (sha256
23173 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
23174 (build-system pyproject-build-system)
23175 (native-inputs (list python-pytest python-setuptools python-wheel))
23176 (home-page "https://github.com/lark-parser/lark")
23177 (synopsis "Multi-language parser for Python")
23178 (description
23179 "Lark is a parser built with a focus on ergonomics, performance and
23180resilience. Lark can parse all context-free languages. That means it is
23181capable of parsing almost any programming language out there, and to
23182some degree most natural languages too.")
23183 (license license:expat)))
23184
23185(define-public python-find-libpython
23186 (package
23187 (name "python-find-libpython")
23188 (version "0.4.1")
23189 (source
23190 (origin
23191 (method git-fetch)
23192 (uri (git-reference
23193 (url "https://github.com/ktbarrett/find_libpython")
23194 (commit (string-append "v" version))))
23195 (file-name (git-file-name name version))
23196 (sha256
23197 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
23198 (build-system pyproject-build-system)
23199 (native-inputs (list python-setuptools python-wheel
23200 ;; tests
23201 python-pytest))
23202 (home-page "https://github.com/ktbarrett/find_libpython")
23203 (synopsis "Find the path to the @code{libpython} dynamic library")
23204 (description
23205 "@code{find_libpython} helps find the path to the
23206@code{libpython} dynamic library for the current Python environment. It is
23207both a script and a Python package.")
23208 (license license:expat)))
23209
23210(define-public python-libcst
23211 (package
23212 (name "python-libcst")
23213 (version "1.6.0")
23214 (source (origin
23215 (method url-fetch)
23216 (uri (pypi-uri "libcst" version))
23217 (sha256
23218 (base32
23219 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
23220 (snippet
23221 #~(begin (use-modules (guix build utils))
23222 ;; This is mostly to keep the cargo-build-system happy
23223 (with-output-to-file "Cargo.toml"
23224 (lambda ()
23225 (format #t "\
23226[workspace]
23227
23228members = [
23229 \"native\",]")))))))
23230 (build-system cargo-build-system)
23231 (arguments
23232 (list
23233 #:install-source? #false
23234 #:cargo-test-flags
23235 ;; According to .github/workflows/ci.yml
23236 '(list "--manifest-path=native/Cargo.toml"
23237 "--release"
23238 "--no-default-features")
23239 #:imported-modules `(,@%pyproject-build-system-modules
23240 ,@%cargo-build-system-modules)
23241 #:modules `((guix build cargo-build-system)
23242 ((guix build pyproject-build-system) #:prefix py:)
23243 (guix build utils))
23244 #:phases
23245 #~(modify-phases %standard-phases
23246 (add-after 'unpack 'prepare-source
23247 (lambda _
23248 (delete-file "native/Cargo.lock")))
23249 (replace 'build
23250 (assoc-ref py:%standard-phases 'build))
23251 (add-after 'install 'wrap
23252 (lambda _
23253 ;; Collection of python- and pyproject-build-system phases
23254 ;; between 'install and 'check.
23255 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
23256 (assoc-ref py:%standard-phases 'add-install-to-path)
23257 (assoc-ref py:%standard-phases 'wrap)
23258 (assoc-ref py:%standard-phases 'create-entrypoints)
23259 (assoc-ref py:%standard-phases 'compile-bytecode)))
23260 ;; We are not the only ones who cannot load libcst.native
23261 ;; during the 'check phase
23262 ;; https://github.com/Instagram/LibCST/issues/1176
23263 ;; (add-after 'wrap 'python-check
23264 ;; (lambda args
23265 ;; (apply (assoc-ref py:%standard-phases 'check)
23266 ;; #:test-flags '()
23267 ;; args)))
23268 (replace 'install
23269 (assoc-ref py:%standard-phases 'install)))))
23270 (native-inputs
23271 (list python-minimal-wrapper
23272 python-hypothesmith
23273 python-pytest
23274 python-setuptools
23275 python-setuptools-rust
23276 python-setuptools-scm
23277 python-wheel))
23278 (inputs (cons maturin (cargo-inputs 'python-libcst)))
23279 (propagated-inputs
23280 (list python-pyyaml))
23281 (home-page "https://github.com/Instagram/LibCST")
23282 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
23283 (description
23284 "LibCST parses Python source code as a CST tree that keeps all
23285formatting details (comments, whitespaces, parentheses, etc). It's useful
23286for building automated refactoring (codemod) applications and linters.
23287LibCST creates a compromise between an Abstract Syntax Tree (AST) and
23288a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
23289naming node types and fields, LibCST creates a lossless CST that looks and
23290feels like an AST.")
23291 (license (list license:expat
23292 ;; Some files unde libcst/_parser/ are under Python Software
23293 ;; Foundation license (see LICENSE file for details)
23294 license:psfl
23295 ;; libcst/_add_slots.py
23296 license:asl2.0))))
23297
23298(define-public python-libcst-minimal
23299 (hidden-package
23300 (package
23301 (inherit python-libcst)
23302 (name "python-libcst-minimal")
23303 (arguments
23304 (substitute-keyword-arguments arguments
23305 ((#:tests? _ #t) #f)))
23306 (native-inputs
23307 (list python-minimal-wrapper
23308 python-setuptools
23309 python-setuptools-rust
23310 python-setuptools-scm
23311 python-wheel)))))
23312
23313(define-public python-lazy-loader
23314 (package
23315 (name "python-lazy-loader")
23316 (version "0.4")
23317 (source (origin
23318 (method url-fetch)
23319 (uri (pypi-uri "lazy_loader" version))
23320 (sha256
23321 (base32
23322 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
23323 (build-system pyproject-build-system)
23324 (native-inputs
23325 (list python-numpy python-pytest python-setuptools))
23326 (propagated-inputs
23327 (list python-flit-core
23328 python-setuptools
23329 python-wheel))
23330 (home-page "https://scientific-python.org/specs/spec-0001/")
23331 (synopsis "Load subpackages and functions on demand")
23332 (description "@code{python-lazy-loader} makes it easy to load subpackages
23333and functions on demand. Its main features are:
23334
23335@itemize
23336@item Allow subpackages to be made visible to users without incurring import
23337costs.
23338@item Allow external libraries to be imported only when used, improving import
23339times.
23340@end itemize")
23341 (license license:bsd-3)))
23342
23343(define-public python-lazy-object-proxy
23344 (package
23345 (name "python-lazy-object-proxy")
23346 (version "1.11.0")
23347 (source
23348 (origin
23349 (method url-fetch)
23350 (uri (pypi-uri "lazy_object_proxy" version))
23351 (sha256
23352 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
23353 (build-system pyproject-build-system)
23354 (native-inputs
23355 (list python-pytest
23356 python-pytest-benchmark
23357 python-setuptools
23358 python-setuptools-scm
23359 python-wheel))
23360 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
23361 (synopsis "Lazy object proxy for Python")
23362 (description
23363 "Lazy object proxy is an object that wraps a callable but defers the call
23364until the object is actually required, and caches the result of said call.")
23365 (license license:bsd-2)))
23366
23367(define-public python-dnspython
23368 (package
23369 (name "python-dnspython")
23370 (version "2.8.0")
23371 (source
23372 (origin
23373 (method url-fetch)
23374 (uri (pypi-uri "dnspython" version))
23375 (sha256
23376 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
23377 (build-system pyproject-build-system)
23378 (arguments
23379 (list
23380 ;; tests: 1216 passed, 198 skipped, 2 deselected
23381 #:test-flags
23382 #~(list
23383 ;; AssertionError: assert False
23384 "--deselect=tests/test_features.py::test_have"
23385 ;; dns.exception.SyntaxError: protocol not found
23386 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
23387 #:phases
23388 #~(modify-phases %standard-phases
23389 (add-after 'unpack 'patch-getprotobyname-calls
23390 ;; These calls are problematic in the build environment as there is
23391 ;; no /etc/protocols. This breaks the sanity-check phase of any
23392 ;; package depending on this one.
23393 (lambda _
23394 (substitute* "dns/rdtypes/IN/WKS.py"
23395 (("socket.getprotobyname\\('tcp'\\)")
23396 "6")
23397 (("socket.getprotobyname\\('udp'\\)")
23398 "17")))))))
23399 (native-inputs
23400 (list python-hatchling
23401 python-pytest))
23402 (propagated-inputs
23403 (append
23404 (if (supported-package? python-cryptography)
23405 (list ;; DNSSEC
23406 python-cryptography
23407 ;; DNS over Quic
23408 python-aioquic
23409 ;; DNS over HTTPS
23410 python-h2
23411 python-httpcore
23412 python-httpx)
23413 '())
23414 (list python-idna
23415 python-trio)))
23416 (home-page "https://www.dnspython.org")
23417 (synopsis "DNS toolkit for Python")
23418 (description
23419 "dnspython is a DNS toolkit for Python. It supports almost all record
23420types. It can be used for queries, zone transfers, and dynamic updates.
23421It supports TSIG authenticated messages and EDNS0.")
23422 (license license:expat)))
23423
23424(define-public python-py3dns
23425 (package
23426 (name "python-py3dns")
23427 (version "4.0.2")
23428 (source
23429 (origin
23430 (method url-fetch)
23431 (uri (pypi-uri "py3dns" version))
23432 (sha256
23433 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
23434 (build-system pyproject-build-system)
23435 (arguments
23436 ;; This package wants to read /etc/resolv.conf. We can't patch it without
23437 ;; removing functionality so we don't run tests.
23438 (list #:tests? #f))
23439 (native-inputs (list python-flit-core))
23440 (home-page "https://launchpad.net/py3dns")
23441 (synopsis "Python 3 DNS library")
23442 (description
23443 "This Python 3 module provides a DNS API for looking up DNS entries from
23444within Python 3 modules and applications. This module is a simple,
23445lightweight implementation.")
23446 (license license:psfl)))
23447
23448(define-public python-email-validator
23449 (package
23450 (name "python-email-validator")
23451 (version "2.2.0")
23452 (source
23453 (origin
23454 (method url-fetch)
23455 (uri (pypi-uri "email_validator" version))
23456 (sha256
23457 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
23458 (build-system pyproject-build-system)
23459 (arguments
23460 (list
23461 #:test-flags
23462 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
23463 #~(list "-k" "not test_caching_dns_resolver")))
23464 (native-inputs
23465 (list python-pytest
23466 python-setuptools
23467 python-wheel))
23468 (propagated-inputs
23469 (list python-dnspython
23470 python-idna))
23471 (home-page "https://github.com/JoshData/python-email-validator")
23472 (synopsis "Email address validation library for Python")
23473 (description
23474 "This library validates email address syntax and deliverability.")
23475 (license license:cc0)))
23476
23477(define-public python-faker
23478 (package
23479 (name "python-faker")
23480 (version "37.4.2")
23481 (source
23482 (origin
23483 (method url-fetch)
23484 (uri (pypi-uri "faker" version))
23485 (sha256
23486 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23487 (build-system pyproject-build-system)
23488 ;; tests: 2104 passed, 12 skipped, 2 warnings
23489 (native-inputs
23490 (list python-freezegun
23491 python-pytest
23492 python-setuptools
23493 python-validators))
23494 (propagated-inputs
23495 (list python-tzdata))
23496 (home-page "https://github.com/joke2k/faker")
23497 (synopsis "Python package that generates fake data")
23498 (description
23499 "Faker is a Python package that generates fake data such as names,
23500addresses, and phone numbers.")
23501 (license license:expat)))
23502
23503(define-public python-pyaml
23504 (package
23505 (name "python-pyaml")
23506 (version "25.7.0")
23507 (source
23508 (origin
23509 (method url-fetch)
23510 (uri (pypi-uri "pyaml" version))
23511 (sha256
23512 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23513 (build-system pyproject-build-system)
23514 (native-inputs
23515 (list python-pytest
23516 python-setuptools))
23517 (propagated-inputs
23518 (list python-pyyaml))
23519 (home-page "https://github.com/mk-fg/pretty-yaml")
23520 (synopsis "YAML pretty-print library for Python")
23521 (description
23522 "pyaml is a PyYAML based python module to produce pretty and readable
23523YAML-serialized data.")
23524 (license license:wtfpl2)))
23525
23526(define-public python-pyyaml-env-tag
23527 (package
23528 (name "python-pyyaml-env-tag")
23529 (version "1.1")
23530 (source
23531 (origin
23532 (method git-fetch)
23533 (uri (git-reference
23534 (url "https://github.com/waylan/pyyaml-env-tag")
23535 (commit version)))
23536 (file-name (git-file-name name version))
23537 (sha256
23538 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
23539 (build-system pyproject-build-system)
23540 (native-inputs (list python-pytest python-setuptools))
23541 (propagated-inputs (list python-pyyaml))
23542 (home-page "https://github.com/waylan/pyyaml-env-tag")
23543 (synopsis "Custom YAML tag for environment variables")
23544 (description
23545 "This package provides a custom YAML tag for referencing environment
23546variables in YAML files.")
23547 (license license:expat)))
23548
23549(define-public python-prompt-toolkit
23550 (package
23551 (name "python-prompt-toolkit")
23552 (version "3.0.51")
23553 (source
23554 (origin
23555 (method url-fetch)
23556 (uri (pypi-uri "prompt_toolkit" version))
23557 (sha256
23558 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
23559 (build-system pyproject-build-system)
23560 (arguments
23561 (list
23562 #:phases
23563 #~(modify-phases %standard-phases
23564 (add-before 'check 'pre-check
23565 (lambda _
23566 ;; HOME is needed for the test
23567 ;; "test_pathcompleter_can_expanduser".
23568 (setenv "HOME" "/tmp"))))))
23569 (native-inputs
23570 (list python-pytest
23571 python-setuptools))
23572 (propagated-inputs
23573 (list python-wcwidth))
23574 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
23575 (synopsis "Library for building command line interfaces in Python")
23576 (description
23577 "Prompt-Toolkit is a library for building interactive command line
23578interfaces in Python. It's like GNU Readline but it also features syntax
23579highlighting while typing, out-of-the-box multi-line input editing, advanced
23580code completion, incremental search, support for Chinese double-width
23581characters, mouse support, and auto suggestions.")
23582 (license license:bsd-3)))
23583
23584(define-public python-proselint
23585 (package
23586 (name "python-proselint")
23587 (version "0.14.0")
23588 (source
23589 (origin
23590 (method url-fetch)
23591 (uri (pypi-uri "proselint" version))
23592 (sha256
23593 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
23594 (build-system pyproject-build-system)
23595 (arguments
23596 (list
23597 #:phases
23598 #~(modify-phases %standard-phases
23599 (add-after 'unpack 'set-home-directory
23600 (lambda _
23601 (setenv "HOME" "/tmp"))))))
23602 (native-inputs
23603 (list python-poetry-core
23604 python-pytest))
23605 (propagated-inputs
23606 (list python-click))
23607 (home-page "http://proselint.com/")
23608 (synopsis "Linter for prose")
23609 (description "@code{python-proselint} is a linter for English prose, that
23610scans through a file and detects issues.")
23611 (license license:bsd-3)))
23612
23613(define-public python-jedi
23614 (package
23615 (name "python-jedi")
23616 (version "0.19.2")
23617 (source
23618 (origin
23619 (method git-fetch)
23620 (uri (git-reference
23621 (url "https://github.com/davidhalter/jedi")
23622 (commit (string-append "v" version))
23623 (recursive? #true)))
23624 (file-name (git-file-name name version))
23625 (sha256
23626 (base32
23627 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
23628 (build-system pyproject-build-system)
23629 (arguments
23630 (list
23631 #:phases
23632 '(modify-phases %standard-phases
23633 (add-before 'check 'set-HOME
23634 (lambda _ (setenv "HOME" "/tmp"))))))
23635 (native-inputs
23636 (list python-docopt
23637 python-pytest
23638 python-setuptools
23639 python-wheel))
23640 (propagated-inputs
23641 (list python-parso))
23642 (home-page "https://github.com/davidhalter/jedi")
23643 (synopsis "Autocompletion and static analysis library for Python")
23644 (description
23645 "Jedi is a static analysis tool for Python that can be used in Integrated
23646Development Environments (@dfn{IDE}s) and text editors. It understands Python
23647on a deeper level than many other static analysis frameworks for Python.
23648
23649Jedi understands docstrings and you can use Jedi autocompletion in your REPL
23650as well.")
23651 (license license:expat)))
23652
23653(define-public ptpython
23654 (package
23655 (name "ptpython")
23656 (version "3.0.20")
23657 (source
23658 (origin
23659 (method git-fetch)
23660 (uri (git-reference
23661 (url "https://github.com/jonathanslenders/ptpython")
23662 (commit version)))
23663 (file-name (git-file-name name version))
23664 (sha256
23665 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
23666 (build-system pyproject-build-system)
23667 (arguments
23668 (list
23669 ;; XXX: There is a tests/run_tests.py file but all it does is a
23670 ;; sanity check.
23671 #:tests? #f))
23672 (native-inputs (list python-setuptools))
23673 (propagated-inputs
23674 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
23675 (home-page "https://github.com/jonathanslenders/ptpython")
23676 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
23677 (description
23678 "ptpython is a Python read-eval-print loop with IDE-like features.
23679It supports syntax highlighting, multiline editing, autocompletion, mouse,
23680color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
23681etc.")
23682 (license license:bsd-3)))
23683
23684(define-public python-easyprocess
23685 (package
23686 (name "python-easyprocess")
23687 (version "1.1")
23688 (source
23689 (origin
23690 (method git-fetch)
23691 (uri (git-reference
23692 (url "https://github.com/ponty/easyprocess")
23693 (commit version)))
23694 (file-name (git-file-name name version))
23695 (sha256
23696 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
23697 (build-system pyproject-build-system)
23698 (arguments
23699 ;; Tests require pyvirtualdisplay, which requires this package.
23700 (list #:tests? #f))
23701 (native-inputs (list python-setuptools))
23702 (home-page "https://github.com/ponty/easyprocess")
23703 (synopsis "Python subprocess interface")
23704 (description
23705 "@code{easyprocess} is an easy to use Python subprocess interface.")
23706 (license license:bsd-3)))
23707
23708(define-public python-entrypoint2
23709 (package
23710 (name "python-entrypoint2")
23711 (version "0.2.4")
23712 (source
23713 (origin
23714 (method url-fetch)
23715 (uri (pypi-uri "entrypoint2" version))
23716 (sha256
23717 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
23718 (build-system pyproject-build-system)
23719 (native-inputs (list python-easyprocess
23720 python-pytest
23721 python-setuptools
23722 python-wheel))
23723 (home-page "https://github.com/ponty/entrypoint2")
23724 (synopsis "Command-line interface for Python modules")
23725 (description
23726 "@code{entrypoint2} is an easy to use command-line interface for Python
23727 modules based on @code{argparse}. It translates function signature and
23728 documentation to argparse configuration.")
23729 (license license:bsd-3)))
23730
23731(define-public python-pyvirtualdisplay
23732 (package
23733 (name "python-pyvirtualdisplay")
23734 (version "3.0")
23735 (source
23736 (origin
23737 (method url-fetch)
23738 (uri (pypi-uri "PyVirtualDisplay" version))
23739 (sha256
23740 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23741 (build-system pyproject-build-system)
23742 (arguments
23743 (list
23744 ;; tests: 27 passed, 8 deselected
23745 #:test-flags
23746 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23747 ;; OSError: Pillow was built without XCB support
23748 #~(list #$@(map (lambda (test) (string-append "--deselect="
23749 "tests/"
23750 test))
23751 (list "test_smart.py::test_slowshot"
23752 "test_smart.py::test_slowshot_with"
23753 "test_smart.py::test_slowshot_nocrop"
23754 "test_smart.py::test_slowshot_timeout"
23755 "test_smart.py::test_slowshot_timeout_nocrop"
23756 "test_smart2.py::test_double"
23757 "test_smart_thread.py::test_smart"
23758 "test_examples.py::test_screenshot")))))
23759 (native-inputs
23760 (list python-easyprocess
23761 python-entrypoint2
23762 python-psutil
23763 python-pytest
23764 python-setuptools
23765 python-vncdotool-bootstrap
23766 xmessage
23767 xorg-server-for-tests))
23768 (home-page "https://github.com/ponty/pyvirtualdisplay")
23769 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23770 (description
23771 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23772 (license license:bsd-3)))
23773
23774(define-public python-pyserial
23775 (package
23776 (name "python-pyserial")
23777 (version "3.5")
23778 (source
23779 (origin
23780 (method url-fetch)
23781 (uri (pypi-uri "pyserial" version))
23782 (sha256
23783 (base32
23784 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
23785 (build-system pyproject-build-system)
23786 (native-inputs
23787 (list python-pytest
23788 python-setuptools
23789 python-wheel))
23790 (home-page "https://github.com/pyserial/pyserial")
23791 (synopsis "Python Serial Port Bindings")
23792 (description
23793 "@code{pyserial} provide serial port bindings for Python. It supports
23794different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
23795Xon/Xoff. The port is accessed in RAW mode.")
23796 (license license:bsd-3)))
23797
23798(define-public python-pyserial-asyncio
23799 (package
23800 (name "python-pyserial-asyncio")
23801 (version "0.6")
23802 (source
23803 (origin
23804 (method git-fetch)
23805 (uri (git-reference
23806 (url "https://github.com/pyserial/pyserial-asyncio")
23807 (commit (string-append "v" version))))
23808 (file-name (git-file-name name version))
23809 (sha256
23810 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
23811 (build-system pyproject-build-system)
23812 (arguments (list #:test-backend #~'unittest))
23813 (native-inputs (list python-setuptools))
23814 (propagated-inputs (list python-pyserial))
23815 (home-page "https://github.com/pyserial/pyserial-asyncio")
23816 (synopsis "Pyserial asynchronous I/O extension")
23817 (description
23818 "This package extends Pyserial with asynchronous I/O support.")
23819 (license license:bsd-3)))
23820
23821(define-public python-pymemcache
23822 (package
23823 (name "python-pymemcache")
23824 (version "4.0.0")
23825 (source
23826 (origin
23827 (method url-fetch)
23828 (uri (pypi-uri "pymemcache" version))
23829 (sha256
23830 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
23831 (build-system pyproject-build-system)
23832 (arguments
23833 ;; We don't have the zstd module.
23834 (list
23835 #:test-flags
23836 '(list "--ignore=pymemcache/test/test_compression.py")))
23837 (native-inputs
23838 (list python-faker
23839 python-pytest
23840 python-setuptools
23841 python-wheel))
23842 (home-page "https://github.com/pinterest/pymemcache")
23843 (synopsis "Comprehensive, fast, pure Python memcached client")
23844 (description
23845 "This package provides a comprehensive, fast, pure Python memcached
23846client.")
23847 (license license:asl2.0)))
23848
23849(define-public python-pymodbus
23850 (package
23851 (name "python-pymodbus")
23852 (version "3.8.6")
23853 (source
23854 (origin
23855 (method git-fetch)
23856 (uri (git-reference
23857 (url "https://github.com/riptideio/pymodbus")
23858 (commit (string-append "v" version))))
23859 (file-name (git-file-name name version))
23860 (sha256
23861 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
23862 (build-system pyproject-build-system)
23863 (arguments
23864 (list
23865 #:test-flags
23866 #~(list "--ignore"
23867 "test/server/test_simulator_api.py"
23868 ;; These tests require the presence of a certificate.
23869 "--ignore-glob"
23870 "test/examples/*"
23871 "--ignore"
23872 "test/client/test_client.py")))
23873 (native-inputs (list python-mock
23874 python-pytest
23875 python-pytest-asyncio
23876 python-pytest-xdist
23877 python-redis
23878 python-setuptools
23879 python-sqlalchemy
23880 python-tornado
23881 python-twisted
23882 python-wheel))
23883 (propagated-inputs (list python-pyserial
23884 python-six
23885 ;; For the REPL.
23886 python-aiohttp
23887 python-click
23888 python-prompt-toolkit
23889 python-pygments
23890 python-pyserial-asyncio))
23891 (home-page "https://github.com/riptideio/pymodbus/")
23892 (synopsis "Modbus protocol stack in Python")
23893 (description
23894 "Pymodbus is a full Modbus protocol implementation using
23895 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
23896 communications core. It includes the following @emph{client} features:
23897 @itemize
23898 @item full read/write protocol on discrete and register
23899 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
23900 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23901 @item asynchronous and synchronous versions
23902 @item payload builder/decoder utilities
23903 @item pymodbus read eval print loop (REPL).
23904 @end itemize
23905 It also includes the following @emph{server} features:
23906 @itemize
23907 @item can function as a fully implemented Modbus server
23908 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23909 @item asynchronous and synchronous versions
23910 @item full server control context (device information, counters, etc)
23911 @item a number of backing contexts (database, redis, sqlite, a slave device).
23912 @end itemize")
23913 (license license:bsd-3)))
23914
23915(define-public python-exodriver
23916 (package
23917 (name "python-exodriver")
23918 (version "2.6.0")
23919 (source (origin
23920 (method git-fetch)
23921 (uri (git-reference
23922 (url "https://github.com/labjack/exodriver")
23923 (commit (string-append "v" version))))
23924 (file-name (git-file-name name version))
23925 (sha256
23926 (base32
23927 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
23928 (outputs (list "out"
23929 "doc")) ;544 KiB of examples
23930 (build-system gnu-build-system)
23931 (arguments
23932 (list
23933 #:tests? #f ;no test suite
23934 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
23935 (string-append "PREFIX=" #$output)
23936 "RUN_LDCONFIG=0"
23937 "LINK_SO=1")
23938 #:phases
23939 #~(modify-phases %standard-phases
23940 (delete 'configure)
23941 (replace 'build
23942 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23943 (with-directory-excursion "liblabjackusb"
23944 (apply (assoc-ref %standard-phases 'build)
23945 `(,@args #:make-flags ,make-flags)))))
23946 (replace 'install
23947 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23948 (with-directory-excursion "liblabjackusb"
23949 (apply (assoc-ref %standard-phases 'install)
23950 `(,@args #:make-flags ,make-flags)))
23951 ;; Install udev rules.
23952 (install-file "90-labjack.rules"
23953 (string-append #$output "/lib/udev/rules.d"))
23954 ;; Install examples.
23955 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
23956 (mkdir-p doc)
23957 (copy-recursively "examples"
23958 (string-append doc "/examples"))))))))
23959 (inputs (list libusb))
23960 (home-page "https://github.com/labjack/exodriver")
23961 (synopsis "USB driver for LabJack data acquisition instruments")
23962 (description "This package provides @code{liblabjackusb}, a USB library for low-level
23963communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
23964instruments. A udev rule is also included to allow unprivileged users to
23965communicate with the instruments via USB.")
23966 (license license:expat))) ;see README
23967
23968(define-public python-labjack
23969 (package
23970 (name "python-labjack")
23971 (version "2.1.0")
23972 (source (origin
23973 (method url-fetch)
23974 (uri (pypi-uri "LabJackPython" version))
23975 (sha256
23976 (base32
23977 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
23978 (build-system pyproject-build-system)
23979 (arguments
23980 (list
23981 #:tests? #f ;no test suite
23982 #:phases
23983 #~(modify-phases %standard-phases
23984 (add-after 'unpack 'patch-liblabjackusb.so
23985 (lambda* (#:key inputs #:allow-other-keys)
23986 (substitute* (find-files "." "\\.py$")
23987 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
23988 (format #f "ctypes.CDLL(~s"
23989 (search-input-file inputs
23990 "lib/liblabjackusb.so")))))))))
23991 (native-inputs (list python-setuptools))
23992 ;; exodriver is provided as a regular input, as only its shared object is
23993 ;; used, not its Python API.
23994 (inputs (list python-exodriver))
23995 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
23996 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
23997 (description
23998 "This Python library allows communicating with the U3, U6, UE9 and U12
23999LabJack data acquisition (DAQ) modules.")
24000 (license license:expat))) ;see setup.py
24001
24002(define-public python-kivy-garden
24003 (package
24004 (name "python-kivy-garden")
24005 (version "0.1.5")
24006 (source
24007 (origin
24008 (method git-fetch) ; source was removed from PyPI
24009 (uri (git-reference
24010 (url "https://github.com/kivy-garden/garden")
24011 (commit (string-append "v" version))))
24012 (file-name (git-file-name name version))
24013 (sha256
24014 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
24015 (build-system pyproject-build-system)
24016 (arguments
24017 (list
24018 #:tests? #f)) ; no tests in PyPI or Git distributions
24019 (native-inputs
24020 (list python-setuptools
24021 python-wheel))
24022 (propagated-inputs
24023 (list python-requests))
24024 (home-page "https://github.com/kivy-garden/garden")
24025 (synopsis "Garden tool for Kivy flowers")
24026 (description
24027 "This package provides the @command{garden} command to install packages
24028for Kivy, the multitouch application platform.")
24029 (license license:expat)))
24030
24031(define-public python-async-lru
24032 (package
24033 (name "python-async-lru")
24034 (version "2.0.4")
24035 (source
24036 (origin
24037 (method url-fetch)
24038 (uri (pypi-uri "async-lru" version))
24039 (sha256
24040 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
24041 (build-system pyproject-build-system)
24042 (native-inputs
24043 (list python-pytest
24044 python-pytest-asyncio
24045 python-pytest-timeout
24046 python-setuptools
24047 python-wheel))
24048 (propagated-inputs
24049 (list python-typing-extensions))
24050 (home-page "https://github.com/aio-libs/async-lru")
24051 (synopsis "Simple LRU cache for asyncio")
24052 (description
24053 "This package is a port of Python's built-in @code{functools.lru_cache}
24054function for @code{asyncio}. To better handle async behaviour, it also
24055ensures multiple concurrent calls will only result in 1 call to the wrapped
24056function, with all awaits receiving the result of that call when it
24057completes.")
24058 (license license:expat)))
24059
24060(define-public python-asyncinject
24061 (package
24062 (name "python-asyncinject")
24063 (version "0.6.1")
24064 (source
24065 (origin
24066 (method git-fetch)
24067 (uri (git-reference
24068 (url "https://github.com/simonw/asyncinject")
24069 (commit version)))
24070 (file-name (git-file-name name version))
24071 (sha256
24072 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
24073 (build-system pyproject-build-system)
24074 (native-inputs
24075 (list python-pytest
24076 python-pytest-asyncio
24077 python-setuptools))
24078 (home-page "https://github.com/simonw/asyncinject")
24079 (synopsis
24080 "Run async workflows using pytest-fixtures-style dependency injection")
24081 (description
24082 "This package lets you run asynchronous workflows using
24083pytest-fixtures-style dependency injection.")
24084 (license license:asl2.0)))
24085
24086(define-public python-binaryornot
24087 (package
24088 (name "python-binaryornot")
24089 (version "0.4.4")
24090 (source
24091 (origin
24092 (method url-fetch)
24093 (uri (pypi-uri "binaryornot" version))
24094 (sha256
24095 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
24096 (build-system pyproject-build-system)
24097 (arguments
24098 (list
24099 #:test-backend #~'unittest
24100 #:test-flags #~(list "discover" "tests")
24101 #:phases
24102 #~(modify-phases %standard-phases
24103 (add-after 'unpack 'patch-tests
24104 (lambda _
24105 ;; TypeError: binary() got an unexpected keyword argument
24106 ;; 'average_size'.
24107 (substitute* "tests/test_check.py"
24108 (("average_size=512") "")))))))
24109 (native-inputs
24110 (list python-hypothesis
24111 python-setuptools))
24112 (propagated-inputs
24113 (list python-chardet))
24114 (home-page "https://github.com/audreyr/binaryornot")
24115 (synopsis "Package to check if a file is binary or text")
24116 (description "Ultra-lightweight pure Python package to check if a file is
24117 binary or text.")
24118 (license license:bsd-3)))
24119
24120(define-public python-bson
24121 (package
24122 (name "python-bson")
24123 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
24124 (revision . "0")))
24125 (version (git-version "0.5.10"
24126 (assoc-ref properties 'revision)
24127 (assoc-ref properties 'commit)))
24128 (source
24129 (origin
24130 (method git-fetch) ;for tests
24131 (uri (git-reference
24132 (url "https://github.com/py-bson/bson")
24133 (commit (assoc-ref properties 'commit))))
24134 (file-name (git-file-name name version))
24135 (sha256
24136 (base32
24137 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
24138 (build-system pyproject-build-system)
24139 (native-inputs
24140 (list python-pytest
24141 python-setuptools))
24142 (propagated-inputs
24143 (list python-dateutil
24144 python-six))
24145 (home-page "https://github.com/py-bson/bson")
24146 (synopsis "BSON (Binary JSON) codec for Python")
24147 (description "@code{bson} is a Python library implementing a BSON (Binary
24148JSON) codec.")
24149 (license license:asl2.0)))
24150
24151(define-public python-nltk
24152 (package
24153 (name "python-nltk")
24154 (version "3.9.1")
24155 (source
24156 (origin
24157 (method url-fetch)
24158 (uri (pypi-uri "nltk" version))
24159 (sha256
24160 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
24161 (build-system pyproject-build-system)
24162 (arguments
24163 ;; Tests require some extra resources to be downloaded.
24164 ;; TODO Try packaging these resources.
24165 '(#:tests? #f))
24166 (propagated-inputs (list python-click python-joblib python-regex
24167 python-tqdm))
24168 (native-inputs (list python-setuptools python-wheel))
24169 (home-page "https://www.nltk.org/")
24170 (synopsis "Natural Language Toolkit")
24171 (description
24172 "NLTK provides interfaces to over 50 corpora and lexical resources such as
24173WordNet, along with a suite of text processing libraries for classification,
24174tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
24175natural language processing libraries.")
24176 (license license:asl2.0)))
24177
24178(define-public python-pymongo
24179 (package
24180 (name "python-pymongo")
24181 (version "4.16.0")
24182 (source
24183 (origin
24184 (method url-fetch)
24185 (uri (pypi-uri "pymongo" version))
24186 (sha256
24187 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
24188 (build-system pyproject-build-system)
24189 (arguments
24190 (list
24191 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
24192 #:test-flags
24193 ;; Tests need access to /etc/resolve.conf.
24194 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
24195 "--ignore=test/test_srv_polling.py"
24196 "-k" (string-join
24197 ;; Tests need access to /etc/resolve.conf
24198 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
24199 "test_detected_environment_warning"
24200 ;; XXX: Tests fail with assertion is not equal.
24201 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
24202 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
24203 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
24204 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
24205 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
24206 " and not "))))
24207 (native-inputs
24208 (list python-hatch-requirements-txt
24209 python-hatchling
24210 python-pytest
24211 python-pytest-asyncio
24212 python-setuptools))
24213 (propagated-inputs
24214 (list python-certifi
24215 python-dnspython))
24216 (home-page "https://github.com/mongodb/mongo-python-driver")
24217 (synopsis "Python driver for MongoDB")
24218 (description "Python driver for MongoDB.")
24219 (license license:asl2.0)))
24220
24221(define-public python-py-consul
24222 (package
24223 (name "python-py-consul")
24224 (version "1.6.0")
24225 (source
24226 (origin
24227 (method git-fetch)
24228 (uri (git-reference
24229 ;; Fork from https://github.com/cablehead/python-consul
24230 (url "https://github.com/criteo/py-consul")
24231 (commit (string-append "v" version))))
24232 (file-name (git-file-name name version))
24233 (sha256
24234 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
24235 (build-system pyproject-build-system)
24236 (arguments (list #:tests? #f)) ; Tests require docker.
24237 (native-inputs (list python-setuptools))
24238 (propagated-inputs (list python-requests))
24239 (home-page "https://github.com/criteo/py-consul")
24240 (synopsis "Python client for Consul")
24241 (description
24242 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
24243discovery, monitoring and configuration.")
24244 (license license:expat)))
24245
24246(define-public python-schematics
24247 (package
24248 (name "python-schematics")
24249 (version "2.1.1")
24250 (source
24251 (origin
24252 (method git-fetch)
24253 (uri (git-reference
24254 (url "https://github.com/schematics/schematics")
24255 (commit (string-append "v" version))))
24256 (file-name (git-file-name name version))
24257 (sha256
24258 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
24259 (build-system pyproject-build-system)
24260 (native-inputs
24261 (list python-dateutil python-mock python-pytest python-setuptools))
24262 (home-page "https://github.com/schematics/schematics")
24263 (synopsis "Python Data Structures for Humans")
24264 (description
24265 "Schematics is a Python library to combine types into structures,
24266validate them, and transform the shapes of your data based on simple
24267descriptions.
24268
24269The internals are similar to ORM type systems, but there is no database layer
24270in Schematics. Instead, building a database layer is easily made when
24271Schematics handles everything except for writing the query. Schematics can be
24272used for tasks where having a database involved is unusual.")
24273 (license license:bsd-3)))
24274
24275(define-public python-odfpy
24276 (package
24277 (name "python-odfpy")
24278 (version "1.4.2")
24279 (source
24280 (origin
24281 (method git-fetch)
24282 (uri (git-reference
24283 (url "https://github.com/eea/odfpy")
24284 (commit (string-append "release-" version))))
24285 (file-name (git-file-name name version))
24286 (sha256
24287 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
24288 (build-system pyproject-build-system)
24289 (native-inputs (list python-pytest python-setuptools))
24290 (propagated-inputs (list python-defusedxml))
24291 (home-page "https://github.com/eea/odfpy")
24292 (synopsis "Python API and tools to manipulate OpenDocument files")
24293 (description
24294 "Collection of libraries and utility programs written in Python to
24295manipulate OpenDocument 1.2 files.")
24296 (license
24297 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
24298 ;; number of files with other licenses.
24299 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
24300
24301(define-public python-namex
24302 (package
24303 (name "python-namex")
24304 (version "0.0.7")
24305 (source
24306 (origin
24307 (method url-fetch)
24308 (uri (pypi-uri "namex" version))
24309 (sha256
24310 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
24311 (build-system pyproject-build-system)
24312 (arguments (list #:tests? #false)) ;there are none
24313 (native-inputs (list python-setuptools python-wheel))
24314 (home-page "https://github.com/fchollet/namex")
24315 (synopsis
24316 "Separate implementation and public API surface of Python packages")
24317 (description
24318 "This package provides a simple utility to separate the
24319implementation of your Python package and its public API surface.")
24320 (license license:asl2.0)))
24321
24322(define-public python-natsort
24323 (package
24324 (name "python-natsort")
24325 (version "8.4.0")
24326 (source
24327 (origin
24328 (method url-fetch)
24329 (uri (pypi-uri "natsort" version))
24330 (sha256
24331 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
24332 (build-system pyproject-build-system)
24333 (native-inputs
24334 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
24335 python-pytest
24336 python-pytest-mock
24337 python-setuptools))
24338 (propagated-inputs
24339 (list python-fastnumbers
24340 python-pyicu))
24341 (home-page "https://github.com/SethMMorton/natsort")
24342 (synopsis "Natural sorting for python and shell")
24343 (description
24344 "Natsort lets you apply natural sorting on lists instead of
24345lexicographical. If you use the built-in @code{sorted} method in python on a
24346list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
24347it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
24348@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
24349numbers and sorts them separately from strings. It can also sort version
24350numbers, real numbers, mixed types and more, and comes with a shell command
24351@command{natsort} that exposes this functionality in the command line.")
24352 (license license:expat)))
24353
24354(define-public python-graphql-core
24355 (package
24356 (name "python-graphql-core")
24357 (version "3.2.7")
24358 (source
24359 (origin
24360 (method git-fetch)
24361 (uri (git-reference
24362 (url "https://github.com/graphql-python/graphql-core")
24363 (commit (string-append "v" version))))
24364 (file-name (git-file-name name version))
24365 (sha256
24366 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
24367 (build-system pyproject-build-system)
24368 (native-inputs
24369 (list python-gevent
24370 python-mock
24371 python-poetry-core
24372 python-pytest
24373 python-pytest-benchmark
24374 python-pytest-mock))
24375 (propagated-inputs
24376 (list python-promise python-six))
24377 (home-page "https://github.com/graphql-python/graphql-core")
24378 (synopsis "GraphQL implementation for Python")
24379 (description
24380 "GraphQL implementation for Python. GraphQL is a data query language and
24381 runtime designed and used to request and deliver data to mobile and web apps.
24382 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
24383 to Python.")
24384 (license license:expat)))
24385
24386(define-public python-graphql-relay
24387 (package
24388 (name "python-graphql-relay")
24389 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
24390 (revision . "0")))
24391 (version (git-version "3.1.5"
24392 (assoc-ref properties 'revision)
24393 (assoc-ref properties 'commit)))
24394 (source
24395 (origin
24396 (method git-fetch)
24397 (uri (git-reference
24398 (url "https://github.com/graphql-python/graphql-relay-py")
24399 (commit (assoc-ref properties 'commit))))
24400 (file-name (git-file-name name version))
24401 (sha256
24402 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
24403 (build-system pyproject-build-system)
24404 (native-inputs
24405 (list python-pytest
24406 python-pytest-asyncio
24407 python-pytest-describe
24408 python-poetry-core))
24409 (propagated-inputs (list python-graphql-core))
24410 (home-page "https://github.com/graphql-python/graphql-relay-py")
24411 (synopsis "Relay implementation for Python")
24412 (description
24413 "This is a library to allow the easy creation of Relay-compliant servers
24414using the GraphQL Python reference implementation of a GraphQL server. It
24415should be noted that the code is a exact port of the original
24416@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
24417implementation} from Facebook.")
24418 (license license:expat)))
24419
24420(define-public python-graphene
24421 (package
24422 (name "python-graphene")
24423 (version "3.4.3")
24424 (source
24425 (origin
24426 (method url-fetch)
24427 (uri (pypi-uri "graphene" version))
24428 (sha256
24429 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
24430 (build-system pyproject-build-system)
24431 (arguments
24432 (list #:tests? #f)) ;XXX: tests fail to load
24433 (native-inputs
24434 (list python-setuptools))
24435 (propagated-inputs
24436 (list python-dateutil
24437 python-graphql-core
24438 python-graphql-relay
24439 python-typing-extensions))
24440 (home-page "https://graphene-python.org/")
24441 (synopsis "GraphQL Framework for Python")
24442 (description
24443 "Graphene is a Python library for building GraphQL schemas/types. A
24444GraphQL schema describes your data model, and provides a GraphQL server with
24445an associated set of resolve methods that know how to fetch data.")
24446 (license license:expat)))
24447
24448(define-public python-rodi
24449 (package
24450 (name "python-rodi")
24451 (version "2.0.8")
24452 (source
24453 (origin
24454 (method git-fetch)
24455 (uri (git-reference
24456 (url "https://github.com/Neoteroi/rodi")
24457 (commit (string-append "v" version))))
24458 (file-name (git-file-name name version))
24459 (sha256
24460 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
24461 (build-system pyproject-build-system)
24462 (native-inputs
24463 (list python-hatchling
24464 python-pytest
24465 python-pytest-asyncio))
24466 (home-page "https://github.com/Neoteroi/rodi")
24467 (synopsis "Dependency injection framework for Python")
24468 (description
24469 "Rodi is a dependency injection framework for Python applications.
24470
24471Its features include
24472
24473@itemize
24474@item Type resolution by signature types annotations.
24475@item Type resolution by class annotations.
24476@item Type resolution by names and aliases.
24477@item Build graph of objects without the need for source code changes.
24478@item Minimum overhead to obtain services, once the objects graph is built.
24479@item Support for singleton, transient, and scoped services.
24480@end itemize")
24481 (license license:expat)))
24482
24483;; XXX: The last time updated in 2015, consider to remove it when nothing is
24484;; depend on it.
24485(define-public python-snowballstemmer
24486 (package
24487 (name "python-snowballstemmer")
24488 (version "2.2.0")
24489 (source
24490 (origin
24491 (method url-fetch)
24492 (uri (pypi-uri "snowballstemmer" version))
24493 (sha256
24494 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24495 (build-system pyproject-build-system)
24496 (arguments
24497 (list
24498 #:tests? #f)) ; no tests
24499 (native-inputs
24500 (list python-setuptools
24501 python-wheel))
24502 (home-page "https://github.com/shibukawa/snowball_py")
24503 (synopsis "Snowball stemming library collection for Python")
24504 (description
24505 "This package provides 16 word stemmer algorithms generated from Snowball
24506algorithms. It includes the 15 original ones plus the Poerter English
24507stemmer.")
24508 (license license:bsd-3)))
24509
24510(define-public python-setproctitle
24511 (package
24512 (name "python-setproctitle")
24513 (version "1.3.7")
24514 (source
24515 (origin
24516 (method git-fetch)
24517 (uri (git-reference
24518 (url "https://github.com/dvarrazzo/py-setproctitle")
24519 (commit (string-append "version-" version))))
24520 (file-name (git-file-name name version))
24521 (sha256
24522 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24523 (build-system pyproject-build-system)
24524 (arguments
24525 (list
24526 #:phases
24527 #~(modify-phases %standard-phases
24528 (add-before 'check 'configure-tests
24529 (lambda* (#:key tests? #:allow-other-keys)
24530 (when tests?
24531 (setenv "PYTHON"
24532 (or (which "python3")
24533 (which "python")))
24534 (setenv "PYCONFIG"
24535 (if (which "python3-config")
24536 "python3-config --embed"
24537 "python-config"))
24538 (substitute* "tests/conftest.py"
24539 (("cc") "gcc"))))))))
24540 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
24541 (home-page "https://github.com/dvarrazzo/py-setproctitle")
24542 (synopsis
24543 "Setproctitle implementation for Python to customize the process title")
24544 (description
24545 "The library allows a process to change its title (as displayed by system
24546tools such as @code{ps} and @code{top}).
24547
24548Changing the title is mostly useful in multi-process systems, for example when a
24549master process is forked: changing the children's title allows identifying the
24550task each process is busy with. The technique is used by PostgreSQL and the
24551OpenSSH Server for example.")
24552 (license license:bsd-3)))
24553
24554(define-public python-pyelftools
24555 (package
24556 (name "python-pyelftools")
24557 (version "0.32")
24558 (source
24559 (origin
24560 (method git-fetch)
24561 (uri (git-reference
24562 (url "https://github.com/eliben/pyelftools")
24563 (commit (string-append "v" version))))
24564 (file-name (git-file-name name version))
24565 (sha256
24566 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
24567 (snippet
24568 #~(begin
24569 ;; Delete bundled readelf and llvm-dwardump executables. Project
24570 ;; also ships quite a lot binary files mainly for tests, check
24571 ;; with:
24572 ;;
24573 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
24574 ;;
24575 (delete-file "test/external_tools/readelf")
24576 (delete-file "test/external_tools/llvm-dwarfdump")))))
24577 (build-system pyproject-build-system)
24578 (arguments
24579 (list
24580 #:phases
24581 #~(modify-phases %standard-phases
24582 (replace 'check
24583 (lambda* (#:key tests? #:allow-other-keys)
24584 (when tests?
24585 ;; Run just basic unit and example tests, dwarfdump and
24586 ;; readelf tests are not selected as they are fragile and
24587 ;; arch-specific.
24588 (invoke "python" "test/run_all_unittests.py")
24589 (invoke "python" "test/run_examples_test.py")))))))
24590 (home-page "https://github.com/eliben/pyelftools")
24591 (native-inputs
24592 (list python-setuptools
24593 python-wheel))
24594 (synopsis "Analyze binary and library file information")
24595 (description
24596 "This Python library provides interfaces for parsing and analyzing two
24597binary and library file formats ; the Executable and Linking Format (ELF), and
24598debugging information in the Debugging With Attributed Record
24599Format (DWARF).")
24600 (license license:public-domain)))
24601
24602(define-public python-pefile
24603 (package
24604 (name "python-pefile")
24605 (version "2024.8.26")
24606 (source
24607 (origin
24608 (method git-fetch)
24609 (uri (git-reference
24610 (url "https://github.com/erocarrera/pefile")
24611 (commit (string-append "v" version))))
24612 (file-name (git-file-name name version))
24613 (sha256
24614 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
24615 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
24616 (build-system pyproject-build-system)
24617 (arguments
24618 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
24619 ;; It seems clear however that test_data.tar.bz2.enc needs to be
24620 ;; decrypted and unpacked before we can run them.
24621 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
24622 (native-inputs (list python-pytest python-setuptools))
24623 (propagated-inputs (list python-future))
24624 (home-page "https://github.com/erocarrera/pefile")
24625 (synopsis "Portable Executable (PE) file parser")
24626 (description
24627 "This python library provides interfaces for parsing and working with
24628Portable Executable (PE) files. It makes to most information from the header,
24629as well as section details and data available.")
24630 (license license:expat)))
24631
24632(define-public python-pyemd
24633 (package
24634 (name "python-pyemd")
24635 (version "1.0.0")
24636 (source (origin
24637 (method url-fetch)
24638 (uri (pypi-uri "pyemd" version))
24639 (sha256
24640 (base32
24641 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
24642 (build-system pyproject-build-system)
24643 (native-inputs
24644 (list python-cython
24645 python-pytest
24646 python-setuptools
24647 python-setuptools-scm))
24648 (propagated-inputs
24649 (list python-numpy-1))
24650 (home-page "https://github.com/wmayner/pyemd")
24651 (synopsis
24652 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
24653 (description
24654 "This package provides a Python wrapper for Ofir Pele and Michael
24655Werman's implementation of the Earth Mover's Distance.")
24656 (license license:expat)))
24657
24658(define-public python-imagesize
24659 (package
24660 (name "python-imagesize")
24661 (version "1.4.1")
24662 (source
24663 (origin
24664 (method url-fetch)
24665 (uri (pypi-uri "imagesize" version))
24666 (sha256
24667 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
24668 (build-system pyproject-build-system)
24669 (arguments (list #:test-backend #~'unittest))
24670 (native-inputs
24671 (list python-setuptools
24672 python-wheel))
24673 (home-page "https://github.com/shibukawa/imagesize_py")
24674 (synopsis "Gets image size of files in various formats in Python")
24675 (description
24676 "This package allows determination of image size from PNG, JPEG,
24677JPEG2000 and GIF files in pure Python.")
24678 (license license:expat)))
24679
24680(define-public python-argcomplete
24681 (package
24682 (name "python-argcomplete")
24683 (version "3.6.2")
24684 (source
24685 (origin
24686 (method url-fetch)
24687 (uri (pypi-uri "argcomplete" version))
24688 (sha256
24689 (base32
24690 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
24691 (build-system pyproject-build-system)
24692 (arguments
24693 (list
24694 #:test-backend #~'custom
24695 #:test-flags #~(list "test/test.py" "-v")
24696 #:phases
24697 #~(modify-phases %standard-phases
24698 (add-before 'check 'disable-pip-tests
24699 (lambda _
24700 ;; pip: command not found
24701 (substitute* "test/test.py"
24702 (("def test_console_script")
24703 "def __disable_test_console_script"))))
24704 ;; Disable tests that fail with zsh 5.9.1. See
24705 ;; https://github.com/kislyuk/argcomplete/issues/544
24706 (add-before 'check 'disable-failing-zsh-tests
24707 (lambda _
24708 (substitute* "test/test.py"
24709 (("def (test_python_completion|test_python_filename_completion|test_python_module|test_python_not_executable)" all)
24710 (string-append "@unittest.skip(\"fails with zsh 5.9.1\")\n "
24711 all))))))))
24712 (native-inputs
24713 (list python-hatch-vcs
24714 python-hatchling
24715 python-pexpect
24716 tcsh
24717 fish
24718 bash ;full Bash for 'test_file_completion'
24719 zsh))
24720 (home-page "https://github.com/kislyuk/argcomplete")
24721 (synopsis "Shell tab completion for Python argparse")
24722 (description "argcomplete provides extensible command line tab completion
24723of arguments and options for Python scripts using @code{argparse}. It's
24724particularly useful for programs with many options or sub-parsers that can
24725dynamically suggest completions ; for example, when browsing resources over
24726the network.")
24727 (license license:asl2.0)))
24728
24729(define-public python-csscompressor
24730 (package
24731 (name "python-csscompressor")
24732 (version "0.9.5")
24733 (source
24734 (origin
24735 (method git-fetch)
24736 (uri (git-reference
24737 (url "https://github.com/sprymix/csscompressor")
24738 (commit (string-append "v" version))))
24739 (file-name (git-file-name name version))
24740 (sha256
24741 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24742 (build-system pyproject-build-system)
24743 (native-inputs (list python-pytest python-setuptools))
24744 (home-page "https://github.com/sprymix/csscompressor")
24745 (synopsis "Python port of YUI CSS Compressor")
24746 (description "This package provides a python port of YUI CSS Compressor.")
24747 (license license:bsd-3)))
24748
24749(define-public python-rcssmin
24750 (package
24751 (name "python-rcssmin")
24752 (version "1.2.0")
24753 (source
24754 (origin
24755 (method url-fetch)
24756 (uri (pypi-uri "rcssmin" version))
24757 (sha256
24758 (base32
24759 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24760 (build-system pyproject-build-system)
24761 (native-inputs (list python-pytest python-setuptools python-wheel))
24762 (home-page "http://opensource.perlig.de/rcssmin/")
24763 (synopsis "CSS Minifier")
24764 (description "The minifier is based on the semantics of the YUI compressor,
24765 which itself is based on the rule list by Isaac Schlueter.")
24766 (license license:asl2.0)))
24767
24768(define-public python-rjsmin
24769 (package
24770 (name "python-rjsmin")
24771 (version "1.2.3")
24772 (source
24773 (origin
24774 (method url-fetch)
24775 (uri (pypi-uri "rjsmin" version))
24776 (sha256
24777 (base32
24778 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
24779 (modules '((guix build utils)))
24780 (snippet
24781 '(for-each delete-file (find-files "bench" "\\.js$")))))
24782 (build-system pyproject-build-system)
24783 (native-inputs
24784 (list python-pytest python-setuptools python-wheel))
24785 (home-page "http://opensource.perlig.de/rjsmin/")
24786 (synopsis "Javascript Minifier")
24787 (description "@code{rJSmin} is a javascript minifier written in Python.
24788The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
24789module is a re-implementation aiming for speed, so it can be used at
24790runtime (rather than during a preprocessing step).")
24791 (license license:asl2.0)))
24792
24793(define-public python-cheetah
24794 (package
24795 (name "python-cheetah")
24796 (version "3.3.1")
24797 (source
24798 (origin
24799 (method url-fetch)
24800 (uri (pypi-uri "CT3" version))
24801 (sha256
24802 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
24803 (build-system pyproject-build-system)
24804 (arguments
24805 (list
24806 #:test-backend #~'custom
24807 #:test-flags #~(list "Cheetah/Tests/Test.py")
24808 #:phases
24809 #~(modify-phases %standard-phases
24810 (add-after 'unpack 'use-absolute-python
24811 (lambda _
24812 (substitute* "Cheetah/CheetahWrapper.py"
24813 (("#!/usr/bin/env python")
24814 (string-append "#!" (which "python"))))))
24815 (add-before 'check 'configure-tests
24816 (lambda* (#:key tests? #:allow-other-keys)
24817 (substitute* "Cheetah/Tests/ImportHooks.py"
24818 (("os.path.dirname\\(__file__\\)")
24819 (string-append "'" (getcwd) "/Cheetah/Tests'")))
24820 (substitute* "Cheetah/Tests/Test.py"
24821 (("unittest.TextTestRunner\\(\\)")
24822 "unittest.TextTestRunner(verbosity=2)"))
24823 (setenv "TMPDIR" "/tmp"))))))
24824 (native-inputs (list python-setuptools))
24825 (propagated-inputs (list python-markdown)) ;optional
24826 (home-page "https://cheetahtemplate.org/")
24827 (synopsis "Template engine")
24828 (description
24829 "Cheetah is a text-based template engine and Python code generator.
24830
24831 Cheetah can be used as a standalone templating utility or referenced as a
24832library from other Python applications. It has many potential uses, but web
24833developers looking for a viable alternative to ASP, JSP, PHP and PSP are
24834expected to be its principle user group.
24835
24836Features:
24837@enumerate
24838@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
24839other text-based format.
24840@item Cleanly separates content, graphic design, and program code.
24841@item Blends the power and flexibility of Python with a simple template
24842language that non-programmers can understand.
24843@item Gives template writers full access to any Python data structure, module,
24844function, object, or method in their templates.
24845@item Makes code reuse easy by providing an object-orientated interface to
24846templates that is accessible from Python code or other Cheetah templates. One
24847template can subclass another and selectively reimplement sections of it.
24848@item Provides a simple, yet powerful, caching mechanism that can dramatically
24849improve the performance of a dynamic website.
24850@item Compiles templates into optimized, yet readable, Python code.
24851@end enumerate")
24852 (license (license:x11-style "file://LICENSE"))))
24853
24854(define-public python-chevron
24855 (package
24856 (name "python-chevron")
24857 (version "0.14.0")
24858 (source (origin
24859 (method url-fetch)
24860 (uri (pypi-uri "chevron" version))
24861 (sha256
24862 (base32
24863 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
24864 (build-system pyproject-build-system)
24865 (arguments (list #:tests? #false)) ;there are none
24866 (native-inputs (list python-setuptools python-wheel))
24867 (home-page "https://github.com/noahmorrison/chevron")
24868 (synopsis "Mustache templating language renderer")
24869 (description "This package provides a Python implementation of the
24870Mustache templating language renderer.")
24871 (license license:expat)))
24872
24873(define-public python-dulwich
24874 (package
24875 (name "python-dulwich")
24876 (version "1.0.0")
24877 (source
24878 (origin
24879 (method url-fetch)
24880 (uri (list (string-append "https://www.dulwich.io/releases/"
24881 "dulwich-" version ".tar.gz")
24882 (pypi-uri "dulwich" version)))
24883 (sha256
24884 (base32 "1g09iwy5hvjgd8qmkc5cny4qqcng2734ll9mxjzj4psj6m3i01rx"))))
24885 (build-system pyproject-build-system)
24886 (arguments
24887 (list
24888 #:test-flags
24889 ;; DULWICH_SWIFT_CFG is not set.
24890 #~(list "--ignore=tests/contrib/test_swift.py"
24891 "--ignore=tests/contrib/test_swift_smoke.py")
24892 #:phases
24893 #~(modify-phases %standard-phases
24894 (add-after 'unpack 'fix-tests
24895 (lambda* (#:key inputs #:allow-other-keys)
24896 (substitute* '("tests/test_hooks.py"
24897 "tests/porcelain/test_filters.py"
24898 "tests/test_repository.py"
24899 "tests/test_worktree.py")
24900 (("/bin/sh")
24901 (search-input-file inputs "/bin/sh")))))
24902 (add-before 'check 'pre-check
24903 (lambda _ (setenv "PYTHONHASHSEED" "random"))))))
24904 (propagated-inputs
24905 (list python-fastimport python-urllib3))
24906 (native-inputs
24907 (list gnupg
24908 git-minimal/pinned
24909 openssh-sans-x
24910 python-geventhttpclient
24911 python-merge3
24912 python-mypy
24913 python-paramiko
24914 python-pytest
24915 python-requests
24916 python-setuptools
24917 python-setuptools-rust))
24918 (home-page "https://www.dulwich.io/")
24919 (synopsis "Git implementation in Python")
24920 (description "Dulwich is an implementation of the Git file formats and
24921protocols written in pure Python.")
24922 ;; Can be used with either license.
24923 (license (list license:asl2.0 license:gpl2+))))
24924
24925(define-public python-dunamai
24926 (package
24927 (name "python-dunamai")
24928 (version "1.26.0")
24929 (source
24930 (origin
24931 (method url-fetch)
24932 (uri (pypi-uri "dunamai" version))
24933 (sha256
24934 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
24935 (build-system pyproject-build-system)
24936 (arguments
24937 (list
24938 #:test-flags
24939 #~(list "-k" "not test__version__from_git__shallow")
24940 #:phases
24941 #~(modify-phases %standard-phases
24942 ;; These steps are taken from NixOS package definition:
24943 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
24944 (add-before 'check 'pre-check
24945 (lambda _
24946 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
24947 (setenv "HOME" "/tmp")
24948 (invoke "git" "config" "--global" "user.email" "[email protected]")
24949 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
24950 (propagated-inputs
24951 (list python-packaging))
24952 (native-inputs
24953 (list git-minimal/pinned
24954 python-poetry-core
24955 python-pytest))
24956 (home-page "https://github.com/mtkennerly/dunamai")
24957 (synopsis "Dynamic version generation")
24958 (description
24959 "Dunamai is Python library and command line tool for producing dynamic,
24960standards-compliant version strings, derived from tags in your version control
24961system. This facilitates uniquely identifying nightly or per-commit builds in
24962continuous integration and releasing new versions of your software simply by
24963creating a tag.")
24964 (license license:expat)))
24965
24966(define-public python-pbkdf2
24967 (package
24968 (name "python-pbkdf2")
24969 (version "1.3")
24970 (source
24971 (origin
24972 (method url-fetch)
24973 (uri (pypi-uri "pbkdf2" version))
24974 (sha256
24975 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
24976 (build-system pyproject-build-system)
24977 (arguments
24978 (list
24979 #:test-backend #~'custom
24980 #:test-flags #~(list "test/test_pbkdf2.py")))
24981 (native-inputs (list python-setuptools))
24982 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
24983 (synopsis "Password-based key derivation")
24984 (description
24985 "This module implements the password-based key derivation function,
24986PBKDF2, specified in RSA PKCS#5 v2.0.
24987
24988PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
24989is part of the RSA Public Key Cryptography Standards series. The provided
24990implementation takes a password or a passphrase and a salt value (and
24991optionally a iteration count, a digest module, and a MAC module) and provides
24992a file-like object from which an arbitrarily-sized key can be read.")
24993 (license license:expat)))
24994
24995(define-public python-qrcode
24996 (package
24997 (name "python-qrcode")
24998 (version "8.2")
24999 (source
25000 (origin
25001 (method url-fetch)
25002 (uri (pypi-uri "qrcode" version))
25003 (sha256
25004 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
25005 (build-system pyproject-build-system)
25006 (native-inputs
25007 (list python-poetry-core
25008 python-pytest))
25009 (home-page "https://github.com/lincolnloop/python-qrcode")
25010 (synopsis "QR Code image generator")
25011 (description
25012 "This package provides a pure Python QR Code generator module. It uses
25013the Python Imaging Library (PIL) to allow for the generation of QR Codes.
25014
25015In addition this package provides a command line tool to generate QR codes and
25016either write these QR codes to a file or do the output as ascii art at the
25017console.")
25018 (license license:bsd-3)))
25019
25020(define-public python-rst2ansi
25021 (package
25022 (name "python-rst2ansi")
25023 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
25024 (revision . "0")))
25025 (version (git-version "0.1.5"
25026 (assoc-ref properties 'revision)
25027 (assoc-ref properties 'commit)))
25028 (source
25029 (origin
25030 (method git-fetch)
25031 (uri (git-reference
25032 (url "https://github.com/Snaipe/python-rst-to-ansi")
25033 (commit (assoc-ref properties 'commit))))
25034 (file-name (git-file-name name version))
25035 (sha256
25036 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
25037 (build-system pyproject-build-system)
25038 (arguments
25039 (list
25040 #:tests? #f ; 2 tests fail with additional line characters
25041 #:phases
25042 #~(modify-phases %standard-phases
25043 (replace 'check
25044 (lambda* (#:key tests? #:allow-other-keys)
25045 (when tests?
25046 (invoke "cram" "test" "-v")))))))
25047 (native-inputs (list python-cram python-setuptools))
25048 (propagated-inputs (list python-docutils))
25049 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
25050 (synopsis "Convert RST to ANSI-decorated console output")
25051 (description
25052 "Python module dedicated to rendering RST (reStructuredText) documents to
25053ansi-escaped strings suitable for display in a terminal.")
25054 (license license:expat)))
25055
25056(define-public python-ansi2html
25057 (package
25058 (name "python-ansi2html")
25059 (version "1.9.2")
25060 (source
25061 (origin
25062 (method url-fetch)
25063 (uri (pypi-uri "ansi2html" version))
25064 (sha256
25065 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
25066 (build-system pyproject-build-system)
25067 (native-inputs
25068 (list python-mock
25069 python-pytest
25070 python-setuptools
25071 python-wheel))
25072 (home-page "https://github.com/ralphbean/ansi2html")
25073 (synopsis "Convert ANSI-decorated console output to HTML")
25074 (description
25075 "@command{ansi2html} is a Python library and command line utility for
25076converting text with ANSI color codes to HTML or LaTeX.")
25077 (license license:gpl3+)))
25078
25079(define-public python-easy-ansi
25080 (package
25081 (name "python-easy-ansi")
25082 (version "2.1")
25083 (source
25084 (origin
25085 (method git-fetch)
25086 (uri (git-reference
25087 (url "https://gitlab.com/joeysbytes/easy-ansi")
25088 (commit (string-append "v" version))))
25089 (file-name (git-file-name name version))
25090 (sha256
25091 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
25092 (build-system pyproject-build-system)
25093 (arguments
25094 (list
25095 #:phases
25096 #~(modify-phases %standard-phases
25097 (add-after 'install 'remove-extra
25098 (lambda* (#:key inputs outputs #:allow-other-keys)
25099 (with-directory-excursion (site-packages inputs outputs)
25100 (delete-file-recursively "tests")
25101 (delete-file "setup.py")))))))
25102 (native-inputs (list python-pytest python-setuptools))
25103 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
25104 (synopsis "Terminal framework API")
25105 (description
25106 "Easy ANSI is a terminal framework API to give you an easy way to use
25107colors, cursor control movements, and line/box drawing. It is not meant as a
25108replacement to more full-featured frameworks (such as curses or urwid), but as
25109a tool to quickly create nice-looking screens in your terminal window. You
25110can even create animations with the cursor controls.")
25111 (license license:expat)))
25112
25113(define-public python-easy-ansi-0.3
25114 (package
25115 (inherit python-easy-ansi)
25116 (name "python-easy-ansi")
25117 (version "0.3")
25118 (source
25119 (origin
25120 (method git-fetch)
25121 (uri (git-reference
25122 (url "https://gitlab.com/joeysbytes/easy-ansi")
25123 (commit (string-append "v" version))))
25124 (file-name (git-file-name name version))
25125 (sha256
25126 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
25127 (arguments '())))
25128
25129(define-public python-pycosat
25130 (package
25131 (name "python-pycosat")
25132 (version "0.6.6")
25133 (source
25134 (origin
25135 (method git-fetch)
25136 (uri (git-reference
25137 (url "https://github.com/ContinuumIO/pycosat")
25138 (commit version)))
25139 (file-name (git-file-name name version))
25140 (sha256
25141 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
25142 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
25143 (build-system pyproject-build-system)
25144 (arguments (list #:test-backend #~'unittest))
25145 (native-inputs (list unzip python-setuptools))
25146 (home-page "https://github.com/ContinuumIO/pycosat")
25147 (synopsis "Bindings to picosat (a SAT solver)")
25148 (description
25149 "This package provides efficient Python bindings to @code{picosat} on the
25150C level. When importing pycosat, the @code{picosat} solver becomes part of
25151the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
25152Problem} (SAT) solver.")
25153 (license license:expat)))
25154
25155(define-public python-pypeg2
25156 (package
25157 (name "python-pypeg2")
25158 (version "2.15.2")
25159 (source
25160 (origin
25161 (method url-fetch)
25162 (uri (pypi-uri "pyPEG2" version))
25163 (sha256
25164 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
25165 (build-system pyproject-build-system)
25166 (native-inputs (list python-pytest python-setuptools))
25167 (propagated-inputs (list python-lxml))
25168 (home-page "https://fdik.org/pyPEG/")
25169 (synopsis "Parsing Expression Grammars in Python")
25170 (description
25171 "PyPEG is an intrinsic parser interpreter framework for Python. It is
25172based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
25173formal languages.")
25174 (license license:gpl2)))
25175
25176(define-public python-pyformlang
25177 (package
25178 (name "python-pyformlang")
25179 (version "1.0.10")
25180 (source
25181 (origin
25182 (method url-fetch)
25183 (uri (pypi-uri "pyformlang" version))
25184 (sha256
25185 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
25186 (build-system pyproject-build-system)
25187 (native-inputs
25188 (list python-pytest
25189 python-setuptools
25190 python-wheel))
25191 (propagated-inputs
25192 (list python-networkx
25193 python-numpy
25194 python-pydot))
25195 (home-page "https://github.com/Aunsiels/pyformlang")
25196 (synopsis "Framework for interacting with formal grammars")
25197 (description
25198 "This package provides a framework for working with formal
25199language grammars. The library was originally developed for educational
25200purposes and therefore implements many textbook algorithms regarding the
25201manipulation and interaction with formal grammars.")
25202 (license license:expat)))
25203
25204(define-public python-incremental
25205 (package
25206 (name "python-incremental")
25207 (version "24.7.2")
25208 (source
25209 (origin
25210 (method url-fetch)
25211 (uri (pypi-uri "incremental" version))
25212 (sha256
25213 (base32
25214 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
25215 (build-system pyproject-build-system)
25216 (arguments
25217 ;; Tests require twisted, which needs this package.
25218 (list #:tests? #false
25219 #:build-backend "setuptools.build_meta"))
25220 (native-inputs
25221 (list python-setuptools))
25222 (home-page "https://github.com/hawkowl/incremental")
25223 (synopsis "Library for versioning Python projects")
25224 (description "Incremental is a small library that versions your Python
25225 projects.")
25226 (license license:expat)))
25227
25228(define-public python-invoke
25229 (package
25230 (name "python-invoke")
25231 (version "2.2.1")
25232 (source
25233 (origin
25234 (method url-fetch)
25235 (uri (pypi-uri "invoke" version))
25236 (sha256
25237 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
25238 ;; TODO: invoke/vendor contains:
25239 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
25240 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
25241 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
25242 (build-system pyproject-build-system)
25243 (arguments
25244 (list
25245 ;; XXX: Requires many dependencies that are not yet in Guix.
25246 #:tests? #f
25247 #:phases
25248 #~(modify-phases %standard-phases
25249 (add-after 'unpack 'fix-bash-path
25250 (lambda _
25251 (let ((bash #$(this-package-input "bash-minimal")))
25252 (substitute* "invoke/config.py"
25253 (("shell = \"/bin/bash\"")
25254 (string-append "shell = \"" bash "/bin/bash\"")))))))))
25255 (native-inputs
25256 (list python-setuptools
25257 python-wheel))
25258 (inputs
25259 (list bash-minimal))
25260 (home-page "https://www.pyinvoke.org/")
25261 (synopsis "Pythonic task execution")
25262 (description
25263 "Invoke is a Python task execution tool and library, drawing inspiration
25264from various sources to arrive at a powerful and clean feature set. It is
25265evolved from the Fabric project, but focuses on local and abstract concerns
25266instead of servers and network commands.")
25267 (license license:bsd-3)))
25268
25269(define-public python-automat
25270 (package
25271 (name "python-automat")
25272 (version "24.8.1")
25273 (source (origin
25274 (method url-fetch)
25275 (uri (pypi-uri "Automat" version))
25276 (sha256
25277 (base32
25278 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
25279 (build-system pyproject-build-system)
25280 (arguments
25281 (list
25282 #:phases
25283 #~(modify-phases %standard-phases
25284 (replace 'check
25285 (lambda* (#:key tests? test-flags #:allow-other-keys)
25286 (with-directory-excursion #$output
25287 (apply invoke "pytest" "-vv" test-flags))))
25288 ;; Remove script, because it depends on python-twisted.
25289 (add-after 'unpack 'remove-entrypoint
25290 (lambda _
25291 (substitute* "pyproject.toml"
25292 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
25293 (native-inputs
25294 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25295 (propagated-inputs
25296 (list python-graphviz python-typing-extensions))
25297 (home-page "https://github.com/glyph/Automat")
25298 (synopsis "Self-service finite-state machines")
25299 (description "Automat is a library for concise, idiomatic Python
25300 expression of finite-state automata (particularly deterministic finite-state
25301 transducers).")
25302 (license license:expat)))
25303
25304(define-public python-constantly
25305 (package
25306 (name "python-constantly")
25307 (version "23.10.4")
25308 (source
25309 (origin
25310 (method url-fetch)
25311 (uri (pypi-uri "constantly" version))
25312 (sha256
25313 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
25314 (build-system pyproject-build-system)
25315 (arguments
25316 (list #:tests? #f)) ;cycles with python-twisted
25317 (native-inputs
25318 (list python-setuptools
25319 python-versioneer))
25320 (home-page "https://github.com/twisted/constantly")
25321 (synopsis "Symbolic constants in Python")
25322 (description "Constantly is a Python library that provides symbolic
25323 constant support. It includes collections and constants with text, numeric,
25324 and bit flag values.")
25325 (license license:expat)))
25326
25327(define-public python-attrs
25328 (package
25329 (name "python-attrs")
25330 (version "25.3.0")
25331 (source
25332 (origin
25333 (method url-fetch)
25334 (uri (pypi-uri "attrs" version))
25335 (sha256
25336 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
25337 (build-system pyproject-build-system)
25338 (native-inputs
25339 (list python-hatch-fancy-pypi-readme
25340 python-hatch-vcs
25341 python-hatchling
25342 python-hypothesis
25343 python-pytest))
25344 (home-page "https://github.com/python-attrs/attrs/")
25345 (synopsis "Attributes without boilerplate")
25346 (description "@code{attrs} is a Python package with class decorators that
25347 ease the chores of implementing the most common attribute-related object
25348 protocols.")
25349 (license license:expat)))
25350
25351(define-public python-attrs-bootstrap
25352 (package
25353 (inherit python-attrs)
25354 (name "python-attrs-bootstrap")
25355 (native-inputs (list python-hatchling
25356 python-hatch-fancy-pypi-readme
25357 python-hatch-vcs))
25358 (arguments `(#:tests? #f))))
25359
25360(define-public python-astroid
25361 (package
25362 (name "python-astroid")
25363 (version "3.3.11")
25364 (source
25365 (origin
25366 (method git-fetch)
25367 (uri (git-reference
25368 (url "https://github.com/PyCQA/astroid")
25369 (commit (string-append "v" version))))
25370 (file-name (git-file-name name version))
25371 (sha256
25372 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
25373 (build-system pyproject-build-system)
25374 (arguments
25375 ;; UserWarning: pkg_resources is deprecated as an API. See
25376 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
25377 ;; pkg_resources package is slated for removal as early as
25378 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
25379 (list #:test-flags
25380 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
25381 (native-inputs
25382 (list python-mypy-minimal
25383 python-pytest
25384 python-setuptools
25385 python-wheel))
25386 (propagated-inputs
25387 (list python-lazy-object-proxy
25388 python-typing-extensions
25389 python-wrapt))
25390 (home-page "https://github.com/PyCQA/astroid")
25391 (synopsis "Python source code base representation")
25392 (description "@code{python-astroid} provides a common base representation
25393of Python source code for projects such as pychecker, pyreverse, pylint, etc.
25394It provides a compatible representation which comes from the _ast module. It
25395rebuilds the tree generated by the builtin _ast module by recursively walking
25396down the AST and building an extended ast. The new node classes have
25397additional methods and attributes for different usages. They include some
25398support for static inference and local name scopes. Furthermore, astroid
25399builds partial trees by inspecting living objects.")
25400 (license license:lgpl2.1+)))
25401
25402(define-public python-isbnlib
25403 (package
25404 (name "python-isbnlib")
25405 (version "3.10.14")
25406 (source
25407 (origin
25408 (method git-fetch)
25409 (uri (git-reference
25410 (url "https://github.com/xlcnd/isbnlib")
25411 (commit (string-append "v" version))))
25412 (file-name (git-file-name name version))
25413 (sha256
25414 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
25415 (build-system pyproject-build-system)
25416 (arguments
25417 (list
25418 #:test-flags #~(list "-m" "not network")))
25419 (native-inputs (list python-pytest python-setuptools))
25420 (home-page "https://github.com/xlcnd/isbnlib")
25421 (synopsis "Python library to work with ISBN strings")
25422 (description
25423 "@code{python-isbnlib} is a (pure) python library that provides several
25424useful methods and functions to validate, clean, transform, hyphenate and get
25425metadata for ISBN strings. Its origin was as the core of isbntools. This
25426short version, is suitable to be include as a dependency in other projects.")
25427 (license license:lgpl3+)))
25428
25429(define-public python-isoduration
25430 (package
25431 (name "python-isoduration")
25432 (version "20.11.0")
25433 (source
25434 (origin
25435 (method url-fetch)
25436 (uri (pypi-uri "isoduration" version))
25437 (sha256
25438 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
25439 (build-system pyproject-build-system)
25440 (arguments '(#:tests? #f)) ;no tests in PyPI archive
25441 (propagated-inputs (list python-arrow))
25442 (native-inputs (list python-setuptools python-wheel))
25443 (home-page "https://github.com/bolsote/isoduration")
25444 (synopsis "Operations with ISO 8601 durations")
25445 (description "ISO 8601 is most commonly known as a way to exchange
25446datetimes in textual format. A lesser known aspect of the standard is the
25447representation of durations. The state of the art of ISO 8601 duration
25448handling in Python is more or less limited to what's offered by isodate. This
25449package attempts to address the shortcomings of @code{isodate}.")
25450 (license license:isc)))
25451
25452(define-public python-isort
25453 (package
25454 (name "python-isort")
25455 (version "6.0.1")
25456 (source
25457 (origin
25458 (method git-fetch) ;no tests in PyPI archive
25459 (uri (git-reference
25460 (url "https://github.com/timothycrosley/isort")
25461 (commit version)))
25462 (file-name (git-file-name name version))
25463 (modules '((guix build utils)))
25464 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
25465 (sha256
25466 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
25467 (build-system pyproject-build-system)
25468 (arguments
25469 (list
25470 #:test-flags
25471 ;; Ignore benchmark and integration to reduce closure size.
25472 #~(list "--ignore=tests/benchmark/"
25473 "--ignore=tests/integration/"
25474 "--ignore=tests/unit/profiles/test_black.py"
25475 "-k" (string-join
25476 (list "not test_gitignore"
25477 "test_isort_supports_shared_profiles_issue_970"
25478 "test_requirements_dir"
25479 "test_requirements_finder"
25480 "test_sort_configurable_sort_issue_1732"
25481 "test_sort_imports_error_handling")
25482 " and not "))))
25483 ;; TODO: Package example plugins separately, available in PyPI:
25484 ;; - example_isort_formatting_plugin
25485 ;; - example_isort_sorting_plugin
25486 ;; - example_shared_isort_profile
25487 (native-inputs
25488 (list python-colorama
25489 python-hatch-vcs
25490 python-hatchling
25491 python-hypothesis
25492 python-pylama
25493 python-pytest))
25494 (home-page "https://github.com/PyCQA/isort")
25495 (synopsis "Python utility/library to sort python imports")
25496 (description
25497 "@code{python-isort} is a python utility/library to sort imports
25498alphabetically, and automatically separated into sections. It provides a
25499command line utility, a python library and plugins for various editors.")
25500 (license license:expat)))
25501
25502(define-public python-configparser
25503 (package
25504 (name "python-configparser")
25505 (version "7.2.0")
25506 (source
25507 (origin
25508 (method url-fetch)
25509 (uri (pypi-uri "configparser" version))
25510 (sha256
25511 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25512 (build-system pyproject-build-system)
25513 (native-inputs
25514 (list python-pytest
25515 python-setuptools
25516 python-setuptools-scm
25517 python-wheel))
25518 (home-page "https://github.com/jaraco/configparser/")
25519 (synopsis "Backport of configparser from python 3.5")
25520 (description "@code{python-configparser} is a backport of
25521 @code{configparser} from Python 3.5 so that it can be used directly
25522 in other versions.")
25523 (license license:expat)))
25524
25525(define-public python-mando
25526 (package
25527 (name "python-mando")
25528 (version "0.8.2")
25529 (source
25530 (origin
25531 (method url-fetch)
25532 (uri (pypi-uri "mando" version))
25533 (sha256
25534 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
25535 (build-system pyproject-build-system)
25536 (native-inputs
25537 (list python-pytest python-setuptools))
25538 (home-page "https://mando.readthedocs.org/")
25539 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
25540 (description
25541 "This package is a wrapper around argparse, allowing you to write complete CLI
25542applications in seconds while maintaining all the flexibility.")
25543 (license license:expat)))
25544
25545(define-public python-mwclient
25546 (package
25547 (name "python-mwclient")
25548 (version "0.11.0")
25549 (source
25550 (origin
25551 (method git-fetch)
25552 (uri (git-reference
25553 (url "https://github.com/mwclient/mwclient")
25554 (commit (string-append "v" version))))
25555 (file-name (git-file-name name version))
25556 (sha256
25557 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
25558 (build-system pyproject-build-system)
25559 (propagated-inputs
25560 (list python-requests-oauthlib))
25561 (native-inputs
25562 (list python-mock
25563 python-pytest
25564 python-responses
25565 python-setuptools))
25566 (home-page "https://github.com/btongminh/mwclient")
25567 (synopsis "MediaWiki API client")
25568 (description "This package provides a MediaWiki API client.")
25569 (license license:expat)))
25570
25571(define-public python-kneed
25572 (package
25573 (name "python-kneed")
25574 (version "0.8.5")
25575 (source
25576 (origin
25577 (method git-fetch)
25578 (uri (git-reference
25579 (url "https://github.com/arvkevi/kneed")
25580 (commit (string-append "v" version))))
25581 (file-name (git-file-name name version))
25582 (sha256
25583 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25584 (build-system pyproject-build-system)
25585 (arguments
25586 (list
25587 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25588 (native-inputs (list python-hatchling python-pytest))
25589 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25590 (home-page "https://github.com/arvkevi/kneed")
25591 (synopsis "Knee-point detection in Python")
25592 (description
25593 "This package implements the kneedle algorithm. Given a set of x and y
25594values, kneed will return the knee point of the function. The knee point is
25595the point of maximum curvature.")
25596 (license license:bsd-3)))
25597
25598(define-public python-diff-cover
25599 (package
25600 (name "python-diff-cover")
25601 (version "9.7.1")
25602 (source
25603 (origin
25604 (method url-fetch)
25605 (uri (pypi-uri "diff_cover" version))
25606 (sha256
25607 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25608 (build-system pyproject-build-system)
25609 (arguments
25610 (list
25611 #:test-flags
25612 ;; Dropp check of flake8 in tests.
25613 #~(list "-k" "not test_file_does_not_exist")))
25614 (native-inputs
25615 (list python-pycodestyle
25616 python-poetry-core
25617 python-pyflakes
25618 python-pylint
25619 python-pytest
25620 python-pytest-datadir
25621 python-pytest-mock))
25622 (propagated-inputs
25623 (list python-chardet
25624 python-jinja2
25625 python-pluggy
25626 python-pygments
25627 python-setuptools ; For pkg_resources.
25628 python-tomli))
25629 (home-page "https://github.com/Bachmann1234/diff_cover")
25630 (synopsis "Run coverage and linting reports on diffs")
25631 (description
25632 "Automatically find diff lines that need test coverage. It also finds
25633diff lines that have violations (according to tools such as pycodestyle,
25634pyflakes, flake8, or pylint). This is used as a code quality metric during
25635code reviews.")
25636 (license license:asl2.0)))
25637
25638(define-public python-diff-match-patch
25639 (package
25640 (name "python-diff-match-patch")
25641 (version "20241021")
25642 (source
25643 (origin
25644 (method url-fetch)
25645 (uri (pypi-uri "diff_match_patch" version))
25646 (sha256
25647 (base32
25648 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25649 (build-system pyproject-build-system)
25650 (native-inputs (list python-flit-core python-pytest))
25651 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25652 (synopsis "Synchronize plain text")
25653 (description "Diff Match and Patch libraries offer robust algorithms to
25654 perform the operations required for synchronizing plain text.")
25655 (license license:asl2.0)))
25656
25657(define-public python-icdiff
25658 (package
25659 (name "python-icdiff")
25660 (version "2.0.7")
25661 (source (origin
25662 (method git-fetch)
25663 (uri (git-reference
25664 (url "https://github.com/jeffkaufman/icdiff")
25665 (commit (string-append "release-" version))))
25666 (file-name (git-file-name name version))
25667 (sha256
25668 (base32
25669 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25670 (build-system pyproject-build-system)
25671 (arguments
25672 (list #:tests? #f)) ; there are no test scripts
25673 (native-inputs (list python-setuptools python-wheel))
25674 (home-page "https://www.jefftk.com/icdiff")
25675 (synopsis "Improved colored diff")
25676 (description "This package provides colored diff functions that highlight
25677parts of the lines that were modified.")
25678 (license license:psfl)))
25679
25680(define-public python-dirsync
25681 (package
25682 (name "python-dirsync")
25683 (version "2.2.6")
25684 (source
25685 (origin
25686 (method url-fetch)
25687 (uri (pypi-uri "dirsync" version))
25688 (sha256
25689 (base32
25690 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25691 (build-system pyproject-build-system)
25692 (arguments
25693 ;; No tests in PyPI release and GitHub repository does not have the
25694 ;; latest release tag.
25695 (list #:tests? #f))
25696 (native-inputs (list python-setuptools python-wheel))
25697 (home-page "https://github.com/tkhyn/dirsync")
25698 (synopsis "Advanced directory tree synchronisation tool")
25699 (description
25700 "Dirsync is an advanced directory tree synchronisation tool.")
25701 (license license:expat)))
25702
25703(define-public python-levenshtein
25704 (package
25705 (name "python-levenshtein")
25706 (version "0.27.1")
25707 (source
25708 (origin
25709 (method git-fetch)
25710 (uri (git-reference
25711 (url "https://github.com/rapidfuzz/Levenshtein")
25712 (commit (string-append "v" version))))
25713 (file-name (git-file-name name version))
25714 (sha256
25715 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
25716 (build-system pyproject-build-system)
25717 (propagated-inputs (list python-rapidfuzz))
25718 (native-inputs
25719 (list cmake-minimal
25720 python-cython
25721 python-pytest
25722 python-scikit-build-core
25723 python-setuptools
25724 rapidfuzz-cpp))
25725 (home-page "https://github.com/rapidfuzz/Levenshtein")
25726 (synopsis "Fast computation of Levenshtein distance and string similarity")
25727 (description
25728 "The Levenshtein Python C extension module contains functions for fast computation of
25729@enumerate
25730@item Levenshtein (edit) distance, and edit operations
25731@item string similarity
25732@item approximate median strings, and generally string averaging
25733@item string sequence and set similarity
25734@end enumerate
25735It supports both normal and Unicode strings.")
25736 (license license:gpl2+)))
25737
25738(define-public python-factory-boy
25739 (package
25740 (name "python-factory-boy")
25741 (version "3.3.3")
25742 (source
25743 (origin
25744 (method url-fetch)
25745 (uri (pypi-uri "factory_boy" version))
25746 (sha256
25747 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25748 (build-system pyproject-build-system)
25749 (arguments
25750 ;; Tests are not included in the tarball.
25751 `(#:tests? #f))
25752 (native-inputs (list python-setuptools))
25753 (propagated-inputs (list python-faker))
25754 (home-page "https://github.com/FactoryBoy/factory_boy")
25755 (synopsis "Versatile test fixtures replacement")
25756 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
25757factory_girl. As a fixtures replacement tool, it aims to replace static, hard
25758to maintain fixtures with easy-to-use factories for complex object. Instead
25759of building an exhaustive test setup with every possible combination of corner
25760cases, factory_boy allows you to use objects customized for the current test,
25761while only declaring the test-specific fields.")
25762 (license license:expat)))
25763
25764(define-public python-gtts
25765 (package
25766 (name "python-gtts")
25767 (version "2.5.4")
25768 (source
25769 (origin
25770 (method git-fetch)
25771 (uri (git-reference
25772 (url "https://github.com/pndurette/gTTS")
25773 (commit (string-append "v" version))))
25774 (file-name (git-file-name name version))
25775 (sha256
25776 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
25777 (build-system pyproject-build-system)
25778 (arguments
25779 ;; Disable tests that require internet.
25780 (list #:test-flags '(list "-k" "not net")))
25781 (native-inputs
25782 (list python-pytest python-setuptools python-testfixtures))
25783 (propagated-inputs
25784 (list python-click-8.1 python-requests))
25785 (home-page "https://github.com/pndurette/gTTS")
25786 (synopsis "Google Translate text-to-speech interface")
25787 (description
25788 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
25789interface with the Google Translate text-to-speech API. It lets you write
25790spoken MP3 data to a file, a file-like object (bytestring) for further audio
25791manipulation, or @code{stdout}.")
25792 (license license:expat)))
25793
25794(define-public python-packaging-legacy
25795 (package
25796 (name "python-packaging-legacy")
25797 (version "23.0.post0")
25798 (source
25799 (origin
25800 (method url-fetch)
25801 (uri (pypi-uri "packaging_legacy" version))
25802 (sha256
25803 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
25804 (build-system pyproject-build-system)
25805 (propagated-inputs (list python-packaging))
25806 (native-inputs
25807 (list python-pretend
25808 python-pytest
25809 python-setuptools
25810 python-wheel))
25811 (home-page "https://pypi.org/project/packaging-legacy/")
25812 (synopsis "Core utilities for legacy Python packages")
25813 (description "This library provides support for legacy Python Packaging
25814functionality removed from @code{packaging}.")
25815 (license license:asl2.0)))
25816
25817(define-public python-relatorio
25818 (package
25819 (name "python-relatorio")
25820 (version "0.11.1")
25821 (source
25822 (origin
25823 (method url-fetch)
25824 (uri (pypi-uri "relatorio" version))
25825 (sha256
25826 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
25827 (build-system pyproject-build-system)
25828 (native-inputs
25829 (list python-pytest
25830 python-setuptools))
25831 (propagated-inputs
25832 (list python-genshi
25833 python-lxml
25834 python-magic))
25835 (home-page "https://relatorio.tryton.org/")
25836 (synopsis "Templating library able to output ODT and PDF files")
25837 (description
25838 "Relatorio is a templating library which provides a way to easily output
25839ODT, ODS, PNG, SVG and several other kinds of files. Support for more
25840filetypes can be easily added by creating plugins for them.")
25841 (license license:gpl3+)))
25842
25843(define-public python-radon
25844 (package
25845 (name "python-radon")
25846 (version "6.0.1")
25847 (source
25848 (origin
25849 (method git-fetch)
25850 (uri (git-reference
25851 (url "https://github.com/rubik/radon")
25852 (commit (string-append "v" version))))
25853 (file-name (git-file-name name version))
25854 (sha256
25855 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
25856 (build-system pyproject-build-system)
25857 (arguments
25858 (list
25859 #:phases
25860 #~(modify-phases %standard-phases
25861 (add-after 'unpack 'relax-requirements
25862 (lambda _
25863 (substitute* (list "pyproject.toml" "requirements.txt")
25864 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
25865 mando-lower-bound)))))))
25866 (propagated-inputs (list python-colorama python-mando))
25867 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
25868 python-setuptools))
25869 (home-page "https://radon.readthedocs.org/")
25870 (synopsis "Code Metrics in Python")
25871 (description
25872 "Radon is a Python tool which computes various code metrics. Supported
25873metrics are:
25874@itemize @bullet
25875@item raw metrics: SLOC, comment lines, blank lines, &c.
25876@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
25877@item Halstead metrics (all of them)
25878@item the Maintainability Index (a Visual Studio metric)
25879@end itemize")
25880 (license license:expat)))
25881
25882(define-public python-rgbxy
25883 (package
25884 (name "python-rgbxy")
25885 (version "0.5")
25886 (source
25887 (origin
25888 (method url-fetch)
25889 (uri (pypi-uri "rgbxy" version))
25890 (sha256
25891 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
25892 (build-system pyproject-build-system)
25893 (arguments
25894 (list #:tests? #f)) ;no tests in PyPI or Git
25895 (native-inputs
25896 (list python-setuptools))
25897 (home-page "https://github.com/benknight/hue-python-rgb-converter")
25898 (synopsis "RGB conversion tool in Python")
25899 (description
25900 "This package implements functionality of RGB/CIE1931 'xy' gammuts
25901conversion: Gamut A, B, and C.")
25902 (license license:expat)))
25903
25904(define-public python-jsonpointer
25905 (package
25906 (name "python-jsonpointer")
25907 (version "3.0.0")
25908 (source
25909 (origin
25910 (method url-fetch)
25911 (uri (pypi-uri "jsonpointer" version))
25912 (sha256
25913 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
25914 (build-system pyproject-build-system)
25915 (arguments (list #:test-backend #~'unittest))
25916 (native-inputs
25917 (list python-setuptools
25918 python-wheel))
25919 (home-page "https://github.com/stefankoegl/python-json-pointer")
25920 (synopsis "Identify specific nodes in a JSON document")
25921 (description "@code{jsonpointer} allows you to access specific nodes
25922 by path in a JSON document (see RFC 6901).")
25923 (license license:bsd-3)))
25924
25925(define-public python-jsonpatch
25926 (package
25927 (name "python-jsonpatch")
25928 (version "1.33")
25929 (source
25930 (origin
25931 (method git-fetch)
25932 ;; pypi version lacks tests.js
25933 (uri (git-reference
25934 (url "https://github.com/stefankoegl/python-json-patch")
25935 (commit (string-append "v" version))))
25936 (file-name (git-file-name name version))
25937 (sha256
25938 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
25939 (build-system pyproject-build-system)
25940 (arguments
25941 (list #:test-backend #~'custom
25942 #:test-flags #~(list "tests.py")))
25943 (native-inputs
25944 (list python-setuptools))
25945 (propagated-inputs
25946 (list python-jsonpointer))
25947 (home-page "https://github.com/stefankoegl/python-json-patch")
25948 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
25949 (description "@code{jsonpatch} is a library and program that allows
25950 applying JSON Patches according to RFC 6902.")
25951 (license license:bsd-3)))
25952
25953(define-public python-rfc3987-syntax
25954 (package
25955 (name "python-rfc3987-syntax")
25956 (version "1.1.0")
25957 (source
25958 (origin
25959 (method git-fetch)
25960 (uri (git-reference
25961 (url "https://github.com/willynilly/rfc3987-syntax")
25962 (commit (string-append "v" version))))
25963 (file-name (git-file-name name version))
25964 (sha256
25965 (base32 "13nmzq1ra5660c3k29c937q4kwq7qj7z6dv9bgr1ph57qb3kyc7a"))))
25966 (build-system pyproject-build-system)
25967 (native-inputs
25968 (list python-hatchling
25969 python-pytest))
25970 (propagated-inputs
25971 (list python-lark))
25972 (home-page "https://github.com/willynilly/rfc3987-syntax")
25973 (synopsis "RFC 3987 IRI validation built on a Lark grammar")
25974 (description
25975 "This package validates Internationalized Resource Identifiers (IRIs) and
25976their components against the ABNF grammar from RFC 3987. Built on the Lark
25977parser, it is an MIT-licensed alternative to the GPL-licensed @code{rfc3987}
25978package, and provides the @code{format-nongpl} extra required by recent
25979@code{jsonschema} releases.")
25980 (license license:expat)))
25981
25982(define-public python-rfc3986
25983 (package
25984 (name "python-rfc3986")
25985 (version "2.0.0")
25986 (source
25987 (origin
25988 (method url-fetch)
25989 (uri (pypi-uri "rfc3986" version))
25990 (sha256
25991 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
25992 (build-system pyproject-build-system)
25993 (native-inputs
25994 (list python-pytest python-setuptools))
25995 (home-page "https://rfc3986.readthedocs.io/")
25996 (synopsis "Parse and validate URI references")
25997 (description
25998 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
25999validation and authority parsing. This module also supports RFC@tie{}6874
26000which adds support for zone identifiers to IPv6 addresses.")
26001 (license license:asl2.0)))
26002
26003(define-public python-rfc3986-validator
26004 (package
26005 (name "python-rfc3986-validator")
26006 (version "0.1.1")
26007 (source
26008 (origin
26009 (method url-fetch)
26010 (uri (pypi-uri "rfc3986_validator" version))
26011 (sha256
26012 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
26013 (build-system pyproject-build-system)
26014 (native-inputs
26015 (list python-pytest
26016 python-rfc3987
26017 python-setuptools))
26018 (home-page "https://github.com/naimetti/rfc3986-validator")
26019 (synopsis "Pure python rfc3986 validator")
26020 (description "This package implements a URI validator according to RFC3986
26021in pure Python.")
26022 (license license:expat)))
26023
26024(define-public python-rfc3987
26025 (package
26026 (name "python-rfc3987")
26027 (version "1.3.8")
26028 (source
26029 (origin
26030 (method url-fetch)
26031 (uri (pypi-uri "rfc3987" version))
26032 (sha256
26033 (base32
26034 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
26035 (build-system pyproject-build-system)
26036 (arguments
26037 (list #:test-backend #~'custom
26038 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
26039 (native-inputs
26040 (list python-setuptools))
26041 ;; Source: <https://codeberg.org/atufi/rfc3987>.
26042 (home-page "https://pypi.org/project/rfc3987/")
26043 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
26044 (description "@code{rfc3987} provides routines for parsing and
26045 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
26046 (license license:gpl3+)))
26047
26048;; The latest commit contains fixes for building with both python3 and python2.
26049(define-public python-rfc6555
26050 (package
26051 (name "python-rfc6555")
26052 (version "0.1.0")
26053 (source
26054 (origin
26055 (method git-fetch)
26056 (uri (git-reference
26057 (url "https://github.com/sethmlarson/rfc6555")
26058 (commit (string-append "v" version))))
26059 (file-name (git-file-name name version))
26060 (sha256
26061 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
26062 (build-system pyproject-build-system)
26063 (arguments
26064 (list
26065 ;; Other tests require network access.
26066 #:test-flags #~(list "tests/test_ipv6.py")))
26067 (native-inputs (list python-pytest python-setuptools))
26068 (home-page "https://pypi.org/project/rfc6555/")
26069 (synopsis "Python implementation of RFC 6555")
26070 (description
26071 "Python implementation of the Happy Eyeballs Algorithm described in RFC
260726555. Provided with a single file and dead-simple API to allow easy vendoring
26073and integration into other projects.")
26074 (license license:asl2.0)))
26075
26076(define-public python-sacn
26077 (package
26078 (name "python-sacn")
26079 (version "1.11.0")
26080 (source
26081 (origin
26082 (method url-fetch)
26083 (uri (pypi-uri "sacn" version))
26084 (sha256
26085 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
26086 (build-system pyproject-build-system)
26087 (native-inputs (list python-pytest python-setuptools python-wheel))
26088 (home-page "https://github.com/Hundemeier/sacn")
26089 (synopsis "Python library for sending and receiving sACN data")
26090 (description
26091 "This package provides a Python library for sending and receiving
26092 sACN (Streaming Architecture for Control Networks) data, a standard
26093 protocol used for controlling lighting and other devices over
26094 a network.")
26095 (license license:expat)))
26096
26097(define-public python-bagit
26098 (package
26099 (name "python-bagit")
26100 (version "1.9.0")
26101 (source
26102 (origin
26103 (method git-fetch) ; no tests in PyPI
26104 (uri (git-reference
26105 (url "https://github.com/LibraryOfCongress/bagit-python")
26106 (commit (string-append "v" version))))
26107 (file-name (git-file-name name version))
26108 (sha256
26109 (base32
26110 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
26111 (build-system pyproject-build-system)
26112 (arguments
26113 (list #:test-flags #~(list "test.py")))
26114 (native-inputs
26115 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
26116 (home-page "https://libraryofcongress.github.io/bagit-python/")
26117 (synopsis "Create and validate BagIt packages")
26118 (description "Bagit is a Python library and command line utility for working
26119 with BagIt style packages. BagIt is a minimalist packaging format for digital
26120 preservation.")
26121 (license license:cc0)))
26122
26123(define-public python-prov
26124 (package
26125 (name "python-prov")
26126 (version "2.1.1")
26127 (source
26128 (origin
26129 (method git-fetch)
26130 (uri (git-reference
26131 (url "https://github.com/trungdong/prov")
26132 (commit version)))
26133 (file-name (git-file-name name version))
26134 (sha256
26135 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
26136 (build-system pyproject-build-system)
26137 (arguments
26138 (list
26139 #:test-backend #~'unittest
26140 #:test-flags #~(list "discover" "-s" "src")
26141 #:phases
26142 #~(modify-phases %standard-phases
26143 (add-before 'check 'disable-tests
26144 (lambda _
26145 ;; prov.model.ProvException: The provided identifier
26146 ;; "http://www.example.org/bundle" is not valid
26147 (substitute* "src/prov/tests/qnames.py"
26148 (("test_namespace_inheritance")
26149 "disabled_test_namespace_inheritance")
26150 (("test_default_namespace_inheritance")
26151 "disabled_test_default_namespace_inheritance")))))))
26152 (native-inputs
26153 (list python-setuptools))
26154 (propagated-inputs
26155 (list graphviz
26156 python-dateutil
26157 python-networkx
26158 python-pydot
26159 ;; optional dependencies, also needed for tests
26160 python-lxml
26161 python-rdflib))
26162 (home-page "https://github.com/trungdong/prov")
26163 (synopsis
26164 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
26165 (description
26166 "This package provides a library for W3C Provenance Data Model supporting
26167 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
26168 (license license:expat)))
26169
26170(define-public python-arcp
26171 (package
26172 (name "python-arcp")
26173 (version "0.2.1")
26174 (source
26175 (origin
26176 (method git-fetch)
26177 (uri (git-reference
26178 (url "https://github.com/stain/arcp-py")
26179 (commit version)))
26180 (file-name (git-file-name name version))
26181 (sha256
26182 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
26183 (build-system pyproject-build-system)
26184 (arguments
26185 (list
26186 #:phases
26187 #~(modify-phases %standard-phases
26188 (add-after 'unpack 'patch-tests
26189 (lambda _
26190 (substitute* "tests/test_parse.py"
26191 (("ni:///")
26192 "ni:")))))))
26193 (native-inputs (list python-pytest python-setuptools))
26194 (home-page "https://arcp.readthedocs.io/")
26195 (synopsis "Archive and Package URI parser and generator")
26196 (description
26197 "@acronym{arcp, Archive and Package} provides functions for creating
26198@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
26199files packaged in an archive or package, like a ZIP file. arcp URIs can be
26200used to consume or reference hypermedia resources bundled inside a file
26201archive or an application package, as well as to resolve URIs for archive
26202resources within a programmatic framework. This URI scheme provides
26203mechanisms to generate a unique base URI to represent the root of the archive,
26204so that relative URI references in a bundled resource can be resolved within
26205the archive without having to extract the archive content on the local file
26206system. An arcp URI can be used for purposes of isolation (e.g. when
26207consuming multiple archives), security constraints (avoiding \"climb out\"
26208from the archive), or for externally identiyfing sub-resources referenced by
26209hypermedia formats.")
26210 (license license:asl2.0)))
26211
26212;; XXX: Project has no updates since 2019, consider to remove when nothing
26213;; depends on it in the next refresh cycle.
26214;; See: <https://github.com/pipermerriam/flex/issues/237>.
26215(define-public python-flex
26216 (package
26217 (name "python-flex")
26218 (version "6.14.1")
26219 (source
26220 (origin
26221 (method url-fetch)
26222 (uri (pypi-uri "flex" version))
26223 (sha256
26224 (base32
26225 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
26226 (build-system pyproject-build-system)
26227 (arguments (list #:tests? #f)) ;no tests in PyPI archive
26228 (native-inputs
26229 (list python-setuptools))
26230 (propagated-inputs
26231 (list python-click
26232 python-jsonpointer
26233 python-pyyaml
26234 python-requests
26235 python-rfc3987
26236 python-six
26237 python-strict-rfc3339
26238 python-validate-email))
26239 (home-page "https://github.com/pipermerriam/flex")
26240 (synopsis "Validates Swagger schemata")
26241 (description "@code{flex} can be used to validate Swagger schemata.")
26242 (license license:bsd-3)))
26243
26244(define-public python-marshmallow
26245 (package
26246 (name "python-marshmallow")
26247 (version "4.0.0")
26248 (source
26249 (origin
26250 (method url-fetch)
26251 (uri (pypi-uri "marshmallow" version))
26252 (sha256
26253 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
26254 (build-system pyproject-build-system)
26255 (arguments
26256 (list
26257 ;; tests: x86_64 1117 passed
26258 ;; i686-linux 1116 passed, 1 deselected
26259 #:test-flags
26260 #~(list #$@(if (target-64bit?)
26261 '()
26262 ;; OverflowError
26263 '((string-append "--deselect=tests/test_utils.py"
26264 "::test_from_timestamp_with_overflow_value"))))))
26265 (native-inputs
26266 (list python-flit-core
26267 python-pytest
26268 python-simplejson
26269 tzdata-for-tests))
26270 (home-page "https://github.com/marshmallow-code/marshmallow")
26271 (synopsis "Convert complex datatypes to and from native Python datatypes")
26272 (description
26273 "@code{marshmallow} provides a library for converting complex datatypes
26274to and from native Python datatypes.")
26275 (license license:expat)))
26276
26277(define-public python-marshmallow-3
26278 (package
26279 (inherit python-marshmallow)
26280 (version "3.22.0")
26281 (source
26282 (origin
26283 (method url-fetch)
26284 (uri (pypi-uri "marshmallow" version))
26285 (sha256
26286 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
26287 (arguments '())
26288 (native-inputs
26289 (list python-pytest
26290 python-pytz
26291 python-simplejson
26292 python-flit-core))
26293 (propagated-inputs
26294 (list python-packaging))))
26295
26296
26297(define-public python-apispec
26298 (package
26299 (name "python-apispec")
26300 (version "6.8.2")
26301 (source
26302 (origin
26303 (method url-fetch)
26304 (uri (pypi-uri "apispec" version))
26305 (sha256
26306 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
26307 (build-system pyproject-build-system)
26308 (native-inputs
26309 (list python-flit-core
26310 python-openapi-spec-validator
26311 python-pytest))
26312 (propagated-inputs
26313 (list python-marshmallow
26314 python-packaging
26315 python-pyyaml))
26316 (home-page "https://github.com/marshmallow-code/apispec")
26317 (synopsis "Swagger/OpenAPI specification generator")
26318 (description
26319 "@code{python-apispec} is a pluggable API specification generator. It
26320currently supports the OpenAPI specification, formerly known as Swagger.")
26321 (license license:expat)))
26322
26323(define-public python-apispec-webframeworks
26324 (package
26325 (name "python-apispec-webframeworks")
26326 (version "1.2.0")
26327 (source
26328 (origin
26329 (method url-fetch)
26330 (uri (pypi-uri "apispec_webframeworks" version))
26331 (sha256
26332 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
26333 (build-system pyproject-build-system)
26334 (native-inputs
26335 (list python-aiohttp
26336 python-flit-core
26337 python-bottle
26338 python-flask
26339 python-pytest
26340 python-pyyaml
26341 python-tornado
26342 python-wheel))
26343 (propagated-inputs
26344 (list python-apispec))
26345 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
26346 (synopsis "Web framework plugins for apispec")
26347 (description "This package provides plugins for using @code{apispec} with
26348web frameworks.")
26349 (license license:expat)))
26350
26351(define-public python-flasgger
26352 (package
26353 (name "python-flasgger")
26354 (version "0.9.7.1")
26355 (source
26356 (origin
26357 (method git-fetch)
26358 (uri (git-reference
26359 (url "https://github.com/rochacbruno/flasgger")
26360 (commit (string-append "v" version))))
26361 (file-name (git-file-name name version))
26362 (sha256
26363 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
26364 (patches
26365 (list
26366 (origin
26367 (method url-fetch)
26368 (uri
26369 (string-append "https://github.com/flasgger/flasgger/commit/"
26370 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
26371 (sha256
26372 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
26373 (build-system pyproject-build-system)
26374 (arguments
26375 (list
26376 #:test-flags
26377 #~(list "--ignore=tests/test_examples.py"
26378 "tests")))
26379 (propagated-inputs
26380 (list python-flask
26381 python-pyyaml
26382 python-jsonschema
26383 python-mistune
26384 python-six))
26385 (native-inputs
26386 (list python-pytest
26387 python-setuptools))
26388 (home-page "https://github.com/rochacbruno/flasgger/")
26389 (synopsis "Extract Swagger specs from your Flask project")
26390 (description "@code{python-flasgger} allows extracting Swagger specs
26391 from your Flask project. It is a fork of Flask-Swagger.")
26392 (license license:expat)))
26393
26394(define-public python-apache-libcloud
26395 (package
26396 (name "python-apache-libcloud")
26397 (version "3.8.0")
26398 (source
26399 (origin
26400 (method url-fetch)
26401 (uri (pypi-uri "apache-libcloud" version))
26402 (sha256
26403 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
26404 (build-system pyproject-build-system)
26405 (arguments
26406 (list
26407 #:tests? #f ; XXX: all tests fail requiring additional credentials
26408 #:phases
26409 #~(modify-phases %standard-phases
26410 (add-after 'unpack 'patch-ssh
26411 (lambda* (#:key inputs #:allow-other-keys)
26412 (substitute* "libcloud/compute/ssh.py"
26413 (("'ssh'")
26414 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
26415 (add-after 'unpack 'patch-tests
26416 (lambda _
26417 (substitute* "libcloud/test/compute/test_ssh_client.py"
26418 (("^class ShellOutSSHClientTests")
26419 "@unittest.skip(\"Guix container doesn't have ssh service\")
26420class ShellOutSSHClientTests"))))
26421 (add-before 'check 'copy-secret
26422 (lambda _
26423 (copy-file "libcloud/test/secrets.py-dist"
26424 "libcloud/test/secrets.py"))))))
26425 (inputs
26426 (list openssh))
26427 (propagated-inputs
26428 (list python-requests))
26429 (native-inputs
26430 (list python-pytest python-requests-mock python-setuptools))
26431 (home-page "https://libcloud.apache.org/")
26432 (synopsis "Unified Cloud API")
26433 (description
26434 "@code{libcloud} is a Python library for interacting with many of the
26435popular cloud service providers using a unified API.")
26436 (license license:asl2.0)))
26437
26438(define-public python-smmap
26439 (package
26440 (name "python-smmap")
26441 (version "5.0.2")
26442 (source
26443 (origin
26444 (method url-fetch)
26445 (uri (pypi-uri "smmap" version))
26446 (sha256
26447 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
26448 (build-system pyproject-build-system)
26449 (native-inputs
26450 (list python-pytest
26451 python-setuptools
26452 python-wheel))
26453 (home-page "https://github.com/Byron/smmap")
26454 (synopsis "Python sliding window memory map manager")
26455 (description "@code{smmap} is a pure Python implementation of a sliding
26456 window memory map manager.")
26457 (license license:bsd-3)))
26458
26459(define-public python-regex
26460 (package
26461 (name "python-regex")
26462 (version "2026.2.28")
26463 (source
26464 (origin
26465 (method git-fetch)
26466 (uri (git-reference
26467 (url "https://github.com/mrabarnett/mrab-regex")
26468 (commit version)))
26469 (file-name (git-file-name name version))
26470 (sha256
26471 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
26472 (build-system pyproject-build-system)
26473 (arguments
26474 (list
26475 #:test-backend #~'unittest
26476 #:test-flags #~(list "-v" "regex.tests.test_regex")
26477 #:phases
26478 #~(modify-phases %standard-phases
26479 (add-before 'check 'remove-local-source
26480 (lambda _
26481 (delete-file-recursively "regex"))))))
26482 (native-inputs
26483 (list python-setuptools))
26484 (home-page "https://github.com/mrabarnett/mrab-regex")
26485 (synopsis "Alternative regular expression module")
26486 (description
26487 "This regular expression implementation is backwards-compatible with the
26488standard @code{re} module, but offers additional functionality like full
26489case-folding for case-insensitive matches in Unicode.")
26490 (license license:psfl)))
26491
26492(define-public python-pysocks
26493 (package
26494 (name "python-pysocks")
26495 (version "1.7.1")
26496 (source
26497 (origin
26498 (method url-fetch)
26499 (uri (pypi-uri "PySocks" version))
26500 (sha256
26501 (base32
26502 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
26503 (build-system pyproject-build-system)
26504 (arguments `(#:tests? #f))
26505 (native-inputs
26506 (list python-setuptools))
26507 (home-page "https://github.com/Anorov/PySocks")
26508 (synopsis "SOCKS client module")
26509 (description "@code{pysocks} is an updated and semi-actively maintained
26510version of @code{SocksiPy} with bug fixes and extra features.")
26511 (license license:bsd-3)))
26512
26513(define-public python-pydub
26514 ;; TODO: Move to (gnu packages audio)
26515 (package
26516 (name "python-pydub")
26517 (version "0.25.1")
26518 (source
26519 (origin
26520 (method git-fetch)
26521 (uri (git-reference
26522 (url "https://github.com/jiaaro/pydub")
26523 (commit (string-append "v" version))))
26524 (file-name (git-file-name name version))
26525 (sha256
26526 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
26527 (patches
26528 (list
26529 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
26530 (origin
26531 (method url-fetch)
26532 (uri
26533 (string-append "https://github.com/jiaaro/pydub/commit/"
26534 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
26535 (sha256
26536 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
26537 (build-system pyproject-build-system)
26538 (arguments
26539 (list
26540 #:test-backend ''unittest
26541 #:phases
26542 #~(modify-phases %standard-phases
26543 (add-after 'unpack 'fix-ffmpeg-path
26544 (lambda* (#:key inputs #:allow-other-keys)
26545 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
26546 (substitute* "pydub/utils.py"
26547 (("return \"ffmpeg\"")
26548 (string-append "return \"" bin "/ffmpeg\""))
26549 (("return \"ffplay\"")
26550 (string-append "return \"" bin "/ffplay\""))
26551 (("return \"ffprobe\"")
26552 (string-append "return \"" bin "/ffprobe\""))
26553 (("warn\\(\"Couldn't find ff")
26554 "# warn\\(\"Couldn't find ff"))))))))
26555 (native-inputs (list python-setuptools))
26556 (home-page "https://pydub.com")
26557 (inputs (list ffmpeg))
26558 (propagated-inputs (list python-scipy))
26559 (synopsis "Manipulate audio with a high level interface in Python")
26560 (description
26561 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
26562@code{ffmpeg} to open various audio formats.")
26563 (license license:expat))) ; MIT license
26564
26565(define-public python-pkginfo
26566 (package
26567 (name "python-pkginfo")
26568 (version "1.12.1.2")
26569 (source
26570 (origin
26571 (method url-fetch)
26572 (uri (pypi-uri "pkginfo" version))
26573 (sha256
26574 (base32
26575 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26576 (build-system pyproject-build-system)
26577 (arguments
26578 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26579 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26580 (native-inputs
26581 (list python-pytest
26582 python-setuptools
26583 python-wheel))
26584 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26585 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26586 (description
26587 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26588source distriubtion (an sdist) or a binary distribution (e.g., created by
26589running bdist_egg). It can also query the EGG-INFO directory of an installed
26590distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26591created by running @code{python setup.py develop}).")
26592 (license license:expat)))
26593
26594;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
26595;; read-only. Consider to remove when nothing depends on it.
26596(define-public python-ratelimiter
26597 ;; From https://github.com/RazerM/ratelimiter/pull/11
26598 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
26599 (revision "0"))
26600 (package
26601 (name "python-ratelimiter")
26602 (version (git-version "1.2.0.post1" revision commit))
26603 (source
26604 (origin
26605 (method git-fetch)
26606 (uri (git-reference
26607 (url "https://github.com/RazerM/ratelimiter")
26608 (commit commit)))
26609 (sha256
26610 (base32
26611 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26612 (build-system pyproject-build-system)
26613 (arguments
26614 (list #:phases
26615 '(modify-phases %standard-phases
26616 (add-after 'unpack 'pytest-compatibility
26617 (lambda _
26618 (substitute* "tests/conftest.py"
26619 (("pytest.collect.File") "pytest.File")))))))
26620 (native-inputs
26621 (list python-pytest-8
26622 python-pytest-asyncio-0.26
26623 python-setuptools))
26624 (home-page "https://github.com/RazerM/ratelimiter")
26625 (synopsis "Simple rate limiting object")
26626 (description
26627 "The @code{ratelimiter} module ensures that an operation will not be
26628executed more than a given number of times during a given period.")
26629 (license license:asl2.0))))
26630
26631(define-public python-rbfly
26632 (package
26633 (name "python-rbfly")
26634 (version "0.11.0")
26635 (source
26636 (origin
26637 (method url-fetch)
26638 (uri (pypi-uri "rbfly" version))
26639 (sha256
26640 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
26641 (build-system pyproject-build-system)
26642 (arguments
26643 (list
26644 #:test-flags
26645 #~(list "--pyargs" "rbfly"
26646 #$@(if (target-64bit?)
26647 '()
26648 '((string-append "--deselect=tests/amqp/test_message.py"
26649 "::test_encode_amqp_string_too_long"))))
26650 #:phases
26651 #~(modify-phases %standard-phases
26652 (add-before 'check 'remove-local-source
26653 (lambda _
26654 (delete-file-recursively "rbfly"))))))
26655 (native-inputs
26656 (list python-cython
26657 python-pytest
26658 python-pytest-asyncio
26659 python-pytest-timeout
26660 python-setuptools))
26661 (home-page "https://wrobell.dcmod.org/rbfly/")
26662 (synopsis "Work with RabbitMQ Streams in Python")
26663 (description
26664 "This package implements a functionality to deal with
26665@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26666@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26667
26668It is designed and implemented with the following qualities in mind:
26669@itemize
26670@item asynchronous Pythonic API with type annotations
26671@item use of
26672@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
266731.0 message format to enable interoperability between RabbitMQ Stream. clients
26674@item auto reconnection to RabbitMQ broker with lazily created connection
26675objects
26676@end itemize
26677
26678Support of many RabbitMQ Streams broker features:
26679@itemize
26680@item publishing single messages, or in batches, with confirmation
26681@item subscribing to a stream at a specific point in time, from a specific
26682offset, or using offset reference
26683@item stream message filtering
26684@item writing stream offset reference
26685@item message deduplication
26686@item integration with AMQP 1.0 ecosystem at message format level
26687@end itemize")
26688 (license license:gpl3+)))
26689
26690(define-public python-jsonrpclib-pelix
26691 (package
26692 (name "python-jsonrpclib-pelix")
26693 (version "0.3.2")
26694 (source
26695 (origin
26696 (method git-fetch)
26697 (uri (git-reference
26698 (url "https://github.com/tcalmant/jsonrpclib")
26699 (commit (string-append "v" version))))
26700 (file-name (git-file-name name version))
26701 (sha256
26702 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26703 (build-system pyproject-build-system)
26704 (arguments
26705 (list
26706 #:test-flags #~(list "--deselect=\
26707tests/test_internal.py::InternalTests::test_multicall_success")))
26708 (native-inputs (list python-pytest python-setuptools))
26709 (home-page "https://github.com/tcalmant/jsonrpclib")
26710 (synopsis "JSON-RPC 2.0 client library for Python")
26711 (description
26712 "This library implements the JSON-RPC v2.0 specification
26713(backwards-compatible) as a client library for Python. This version is a fork
26714of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26715 (license license:asl2.0)))
26716
26717(define-public python-setuptools-git
26718 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26719 ;; refresh cycle.
26720 (package
26721 (name "python-setuptools-git")
26722 (version "1.2")
26723 (source
26724 (origin
26725 (method url-fetch)
26726 (uri (pypi-uri "setuptools-git" version))
26727 (sha256
26728 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26729 (build-system pyproject-build-system)
26730 (arguments
26731 (list
26732 #:tests? #f ;no tests in PyPI
26733 #:phases
26734 #~(modify-phases %standard-phases
26735 ;; This is needed for tests.
26736 (add-after 'unpack 'configure-git
26737 (lambda _
26738 (setenv "HOME" "/tmp")
26739 (invoke "git" "config" "--global" "user.email" "guix")
26740 (invoke "git" "config" "--global" "user.name" "guix"))))))
26741 (native-inputs
26742 (list git-minimal/pinned python-setuptools python-wheel))
26743 (home-page "https://github.com/msabramo/setuptools-git")
26744 (synopsis "Setuptools revision control system plugin for Git")
26745 (description
26746 "This package provides a plugin for Setuptools for revision control with
26747Git.")
26748 (license license:bsd-3)))
26749
26750(define-public python-setuptools-rust
26751 (package
26752 (name "python-setuptools-rust")
26753 (version "1.11.1")
26754 (source
26755 (origin
26756 (method url-fetch)
26757 (uri (pypi-uri "setuptools_rust" version))
26758 (sha256
26759 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
26760 (build-system pyproject-build-system)
26761 (arguments
26762 (list #:tests? #f)) ;tests require Cargo
26763 (propagated-inputs
26764 (list python-semantic-version
26765 python-setuptools))
26766 (home-page "https://github.com/PyO3/setuptools-rust")
26767 (synopsis "Setuptools plugin for Rust extensions")
26768 (description
26769 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
26770Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
26771 (license license:expat)))
26772
26773(define-public python-setuptools-gettext
26774 (package
26775 (name "python-setuptools-gettext")
26776 (version "0.1.14")
26777 (source
26778 (origin
26779 (method git-fetch)
26780 (uri (git-reference
26781 (url "https://github.com/breezy-team/setuptools-gettext")
26782 (commit (string-append "v" version))))
26783 (file-name (git-file-name name version))
26784 (sha256
26785 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
26786 (build-system pyproject-build-system)
26787 (native-inputs (list python-pytest python-tomli python-setuptools))
26788 (home-page "https://github.com/breezy-team/setuptools-gettext")
26789 (synopsis "Setuptools plugin for gettext")
26790 (description "This package provides a plugin for Setuptools for gettext.")
26791 (license license:gpl2+)))
26792
26793(define-public python-pyclibrary
26794 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
26795 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
26796 (revision "0"))
26797 (package
26798 (name "python-pyclibrary")
26799 (version (git-version "0.2.2" revision commit))
26800 (source
26801 (origin
26802 (method git-fetch)
26803 (uri (git-reference
26804 (url "https://github.com/MatthieuDartiailh/pyclibrary")
26805 (commit commit)))
26806 (file-name (git-file-name name version))
26807 (sha256
26808 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
26809 (build-system pyproject-build-system)
26810 (native-inputs
26811 (list python-pytest
26812 python-setuptools
26813 python-setuptools-scm))
26814 (propagated-inputs
26815 (list python-pyparsing))
26816 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
26817 (synopsis "Wrap dynamic libraries in Python")
26818 (description
26819 "This package helps wrapping dynamic libraries in Python. It includes
26820a pure-Python C parser and an automation library that uses C header file
26821definitions to simplify the use of C bindings.")
26822 (license license:expat))))
26823
26824(define-public python-pyclipper
26825 (package
26826 (name "python-pyclipper")
26827 (version "1.3.0.post6")
26828 (source
26829 (origin
26830 (method git-fetch)
26831 (uri (git-reference
26832 (url "https://github.com/greginvm/pyclipper")
26833 (commit version)))
26834 (file-name (git-file-name name version))
26835 (sha256
26836 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
26837 (build-system pyproject-build-system)
26838 (arguments
26839 (list
26840 #:phases
26841 #~(modify-phases %standard-phases
26842 (add-before 'build 'cythonize-sources
26843 (lambda _
26844 (with-directory-excursion "src/pyclipper"
26845 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
26846 (native-inputs
26847 (list python-cython
26848 python-pytest
26849 python-setuptools
26850 python-setuptools-scm))
26851 (home-page "https://github.com/greginvm/pyclipper")
26852 (synopsis "Wrapper for Angus Johnson's Clipper library")
26853 (description
26854 "Pyclipper is a Cython wrapper for the C++ translation of the
26855Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
26856 (license license:expat)))
26857
26858(define-public python-semver
26859 (package
26860 (name "python-semver")
26861 (version "3.0.4")
26862 (source
26863 (origin
26864 (method url-fetch)
26865 (uri (pypi-uri "semver" version))
26866 (sha256
26867 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
26868 (build-system pyproject-build-system)
26869 (native-inputs (list python-pytest python-setuptools))
26870 (home-page "https://github.com/k-bx/python-semver")
26871 (synopsis "Python helper for Semantic Versioning")
26872 (description
26873 "This package provides a Python library for @url{Semantic Versioning,
26874http://semver.org/}.")
26875 (license license:bsd-3)))
26876
26877(define-public python-phonenumbers
26878 (package
26879 (name "python-phonenumbers")
26880 (version "8.13.37")
26881 (source
26882 (origin
26883 (method git-fetch)
26884 (uri (git-reference
26885 (url "https://github.com/daviddrysdale/python-phonenumbers")
26886 (commit (string-append "v" version))))
26887 (file-name (git-file-name name version))
26888 (sha256
26889 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
26890 (build-system pyproject-build-system)
26891 (arguments
26892 (list
26893 #:test-backend #~'custom
26894 #:test-flags #~(list "-m" "testwrapper")
26895 #:phases
26896 #~(modify-phases %standard-phases
26897 (add-after 'unpack 'chdir
26898 (lambda _
26899 (chdir "python"))))))
26900 (propagated-inputs (list python-protobuf))
26901 (native-inputs (list python-setuptools))
26902 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
26903 (synopsis "Python library for dealing with international phone numbers")
26904 (description
26905 "This package provides a Python port of Google's libphonenumber library.")
26906 (license license:asl2.0)))
26907
26908(define-public python-heapdict
26909 (package
26910 (name "python-heapdict")
26911 (version "1.0.1")
26912 (source
26913 (origin
26914 (method url-fetch)
26915 (uri (pypi-uri "HeapDict" version))
26916 (sha256
26917 (base32
26918 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
26919 (build-system pyproject-build-system)
26920 (arguments (list #:test-backend #~'unittest))
26921 (native-inputs (list python-setuptools))
26922 (home-page "http://stutzbachenterprises.com/")
26923 (synopsis "Heap with decrease-key and increase-key operations")
26924 (description
26925 "heapdict implements the MutableMapping ABC, meaning it works pretty much
26926like a regular Python @code{dict}. It’s designed to be used as a priority
26927queue.")
26928 (license license:bsd-3)))
26929
26930(define-public python-send2trash
26931 (package
26932 (name "python-send2trash")
26933 (version "1.8.2")
26934 (source
26935 (origin (method git-fetch)
26936 ;; Source tarball on PyPI doesn't include tests.
26937 (uri (git-reference
26938 (url "https://github.com/arsenetar/send2trash")
26939 (commit version)))
26940 (file-name (git-file-name name version))
26941 (sha256
26942 (base32
26943 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
26944 (build-system pyproject-build-system)
26945 (arguments
26946 (list
26947 #:phases
26948 '(modify-phases %standard-phases
26949 (add-before 'check 'pre-check
26950 (lambda _ (setenv "HOME" "/tmp"))))))
26951 (native-inputs (list python-pytest python-setuptools python-wheel))
26952 (home-page "https://github.com/arsenetar/send2trash")
26953 (synopsis "Send files to the user's @file{~/Trash} directory")
26954 (description "This package provides a Python library to send files to the
26955user's @file{~/Trash} directory.")
26956 (license license:bsd-3)))
26957
26958(define-public python-pyfavicon
26959 (package
26960 (name "python-pyfavicon")
26961 (version "0.1.1")
26962 (source
26963 (origin
26964 (method git-fetch)
26965 (uri (git-reference
26966 (url "https://github.com/bilelmoussaoui/pyfavicon")
26967 (commit version)))
26968 (file-name (git-file-name name version))
26969 (sha256
26970 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
26971 (build-system pyproject-build-system)
26972 (arguments
26973 (list
26974 #:test-flags
26975 #~(list "-k" (string-join (list
26976 ;; Socket name resolution fails.
26977 "not test_url_icon_link_type"
26978 "test_icon_sizes"
26979 ;; Tuples differ.
26980 "test_largest_icon")
26981 " and not "))))
26982 (native-inputs (list python-pytest python-setuptools))
26983 (propagated-inputs
26984 (list python-aiohttp python-beautifulsoup4 python-pillow))
26985 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
26986 (synopsis "Async favicon fetcher")
26987 (description
26988 "@code{pyfavicon} is an async favicon fetcher.")
26989 (license license:expat)))
26990
26991(define-public python-funcy
26992 (package
26993 (name "python-funcy")
26994 (version "1.11")
26995 (source
26996 (origin
26997 (method git-fetch)
26998 (uri (git-reference
26999 (url "https://github.com/Suor/funcy")
27000 (commit version)))
27001 (sha256
27002 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
27003 (file-name (git-file-name name version))))
27004 (build-system pyproject-build-system)
27005 (native-inputs
27006 (list python-pytest python-whatever python-setuptools python-wheel))
27007 (home-page "https://github.com/Suor/funcy")
27008 (synopsis "Functional tools")
27009 (description "@code{funcy} is a library that provides functional tools.
27010Examples are:
27011@enumerate
27012@item merge - Merges collections of the same type
27013@item walk - Type-preserving map
27014@item select - Selects a part of a collection
27015@item take - Takes the first n items of a collection
27016@item first - Takes the first item of a collection
27017@item remove - Predicated-removes items of a collection
27018@item concat - Concatenates two collections
27019@item flatten - Flattens a collection with subcollections
27020@item distinct - Returns only distinct items
27021@item split - Predicated-splits a collection
27022@item split_at - Splits a collection at a given item
27023@item group_by - Groups items by group
27024@item pairwise - Pairs off adjacent items
27025@item partial - Partially-applies a function
27026@item curry - Curries a function
27027@item compose - Composes functions
27028@item complement - Complements a predicate
27029@item all_fn - \"all\" with predicate
27030@end enumerate")
27031 (license license:bsd-3)))
27032
27033(define-public python-funcy-1.14
27034 (package/inherit python-funcy
27035 (name "python-funcy")
27036 (version "1.14")
27037 (source
27038 (origin
27039 (method git-fetch)
27040 (uri (git-reference
27041 (url "https://github.com/Suor/funcy")
27042 (commit version)))
27043 (sha256
27044 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
27045 (file-name (git-file-name name version))))))
27046
27047(define-public python-isoweek
27048 (package
27049 (name "python-isoweek")
27050 (version "1.3.3")
27051 (source
27052 (origin
27053 (method url-fetch)
27054 (uri (pypi-uri "isoweek" version))
27055 (sha256
27056 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
27057 (build-system pyproject-build-system)
27058 (arguments (list #:test-backend #~'unittest))
27059 (native-inputs (list python-setuptools))
27060 (home-page "https://github.com/gisle/isoweek")
27061 (synopsis "Objects representing a week")
27062 (description "The @code{isoweek} module provide the class Week that
27063implements the week definition of ISO 8601. This standard also defines
27064a notation for identifying weeks; yyyyWww (where the W is a literal).
27065Week instances stringify to this form.")
27066 (license license:bsd-3)))
27067
27068(define-public bpython
27069 (package
27070 (name "bpython")
27071 (version "0.25")
27072 (source
27073 (origin
27074 (method url-fetch)
27075 (uri (pypi-uri "bpython" version))
27076 (sha256
27077 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
27078 (build-system pyproject-build-system)
27079 (arguments
27080 (list
27081 #:test-flags
27082 ;; Tests can't import curtsies, pygments and urwid.
27083 #~(list "-k" (string-join
27084 (list "not test_issue108"
27085 "test_issue133")
27086 " and not " ))
27087 #:phases
27088 #~(modify-phases %standard-phases
27089 (add-after 'wrap 'add-aliases
27090 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
27091 (lambda _
27092 (for-each
27093 (lambda (old new)
27094 (symlink old (string-append #$output "/bin/" new)))
27095 '("bpython" "bpython-urwid" "bpdb")
27096 '("bpython3" "bpython3-urwid" "bpdb3")))))))
27097 (native-inputs
27098 (list python-mock
27099 python-pytest
27100 python-setuptools))
27101 (propagated-inputs
27102 (list python-curtsies
27103 python-cwcwidth
27104 python-greenlet
27105 python-pygments
27106 python-pyxdg
27107 python-requests
27108 ;; [optional]
27109 python-pyperclip
27110 python-jedi
27111 python-urwid-2
27112 python-watchdog))
27113 (home-page "https://bpython-interpreter.org/")
27114 (synopsis "Fancy interface to the Python interpreter")
27115 (description "Bpython is a fancy interface to the Python
27116interpreter. bpython's main features are
27117
27118@enumerate
27119@item in-line syntax highlighting,
27120@item readline-like autocomplete with suggestions displayed as you type,
27121@item expected parameter list for any Python function,
27122@item \"rewind\" function to pop the last line of code from memory and
27123 re-evaluate,
27124@item send the code you've entered off to a pastebin,
27125@item save the code you've entered to a file, and
27126@item auto-indentation.
27127@end enumerate")
27128 (license license:expat)))
27129
27130(define-public python-pyinotify
27131 (package
27132 (name "python-pyinotify")
27133 (version "0.9.6")
27134 (source
27135 (origin
27136 (method git-fetch)
27137 (uri (git-reference
27138 (url "https://github.com/seb-m/pyinotify")
27139 (commit version)))
27140 (file-name (git-file-name name version))
27141 (sha256
27142 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
27143 (build-system pyproject-build-system)
27144 (arguments
27145 (list
27146 #:tests? #f ;no tests
27147 #:phases
27148 #~(modify-phases %standard-phases
27149 (add-after 'unpack 'drop-shebang
27150 (lambda _
27151 ;; Dropping this shebang prevents the build system from adding
27152 ;; python-wrapper as an input, reducing package closure size from
27153 ;; ~200 MiB to ~0.2 MiB.
27154 (substitute* "python3/pyinotify.py"
27155 (("#!/usr/bin/env python") "")))))))
27156 (native-inputs
27157 (list python-setuptools))
27158 (propagated-inputs
27159 (list python-pyasyncore))
27160 (home-page "https://github.com/seb-m/pyinotify")
27161 (synopsis "Python library for monitoring inotify events")
27162 (description
27163 "@code{pyinotify} provides a Python interface for monitoring file system
27164events on Linux.")
27165 (license license:expat)))
27166
27167(define-public python-pyinotify-cli
27168 (package
27169 (inherit python-pyinotify)
27170 (name "python-pyinotify-cli")
27171 (arguments
27172 (substitute-keyword-arguments arguments
27173 ((#:phases phases #~%standard-phases)
27174 #~(modify-phases #$phases
27175 (delete 'drop-shebang)
27176 (add-after 'install 'install-entrypoint
27177 (lambda _
27178 (let ((entrypoint
27179 (string-append #$output "/lib/python"
27180 (python-version (which "python"))
27181 "/site-packages/pyinotify.py"))
27182 (bin (string-append #$output "/bin")))
27183 (mkdir-p bin)
27184 (invoke "chmod" "+x" entrypoint)
27185 (symlink
27186 entrypoint (string-append #$output "/bin/pyinotify")))))))))
27187 (description
27188 "This package provides, in addition to the @code{pyinotify} Python library,
27189a command line application exposing the same functionality.")))
27190
27191(define-public python-latex2pydata
27192 (package
27193 (name "python-latex2pydata")
27194 (version "0.5.0")
27195 (source
27196 (origin
27197 (method url-fetch)
27198 (uri (pypi-uri "latex2pydata" version))
27199 (sha256
27200 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
27201 (build-system pyproject-build-system)
27202 (native-inputs (list python-setuptools python-wheel python-pytest))
27203 (home-page "https://github.com/gpoore/latex2pydata")
27204 (synopsis "Load data from LaTeX in Python literal format")
27205 (description
27206 "This package is designed to load data in Python literal format that was
27207saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
27208passed from LaTeX to Python.")
27209 (license license:bsd-3)))
27210
27211(define-public python-latexcodec
27212 (package
27213 (name "python-latexcodec")
27214 (version "3.0.1")
27215 (source
27216 (origin
27217 (method git-fetch)
27218 (uri (git-reference
27219 (url "https://github.com/mcmtroffaes/latexcodec/")
27220 (commit version)))
27221 (file-name (git-file-name name version))
27222 (sha256
27223 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
27224 (build-system pyproject-build-system)
27225 (native-inputs (list python-pytest python-setuptools))
27226 (home-page "https://readthedocs.org/projects/latexcodec/")
27227 (synopsis "Work with LaTeX code in Python")
27228 (description "Lexer and codec to work with LaTeX code in Python.")
27229 (license license:expat)))
27230
27231(define-public python-latexminted
27232 (package
27233 (name "python-latexminted")
27234 (version "0.7.1")
27235 (source
27236 (origin
27237 (method url-fetch)
27238 (uri (pypi-uri "latexminted" version))
27239 (sha256
27240 (base32 "1yj08q1bpy0lk3gk6zs9b7ik83mwn9d7s85fpvyj1wk06iphj96p"))))
27241 (build-system pyproject-build-system)
27242 (arguments (list #:tests? #f)) ; No tests upstream.
27243 (propagated-inputs (list python-latex2pydata
27244 python-latexrestricted
27245 python-pygments))
27246 (native-inputs (list texlive-kpathsea python-setuptools))
27247 (home-page "https://github.com/gpoore/minted")
27248 (synopsis "Python library for the LaTeX minted package")
27249 (description "This Python package provides the Python side of the
27250@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
27251@code{python-pygments} library. It also provides several code formatting and
27252manipulation features implemented in Python that would be difficult to perform
27253in LaTeX, such as dedenting code and extracting code snippets from source files
27254using regular expressions.")
27255 (license license:lppl1.3c+)))
27256
27257(define-public python-latexrestricted
27258 (package
27259 (name "python-latexrestricted")
27260 (version "0.6.2")
27261 (source
27262 (origin
27263 (method url-fetch)
27264 (uri (pypi-uri "latexrestricted" version))
27265 (sha256
27266 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
27267 (build-system pyproject-build-system)
27268 (arguments
27269 (list
27270 #:tests? #f ;no test
27271 #:phases
27272 #~(modify-phases %standard-phases
27273 (add-after 'unpack 'fix-paths
27274 (lambda* (#:key inputs #:allow-other-keys)
27275 (let ((pystr (lambda (s) (string-append "'" s "'")))
27276 (kpse (search-input-file inputs "/bin/kpsewhich")))
27277 (substitute* "latexrestricted/_latex_config.py"
27278 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
27279 ;; this variable is bogus in Guix because binaries are scattered
27280 ;; across multiple directories. This phase sets SELFAUTOLOC to
27281 ;; the specific directory containing `kpsewhich'.
27282 (("os\\.getenv\\('SELFAUTOLOC'\\)")
27283 (pystr (dirname kpse)))
27284 ;; Refer to kpse by store path instead of looking it upein $PATH.
27285 (("shutil.which\\('kpse'.*$")
27286 (string-append (pystr kpse) "\n")))))))))
27287 (native-inputs (list python-setuptools python-wheel))
27288 (inputs (list texlive-kpathsea))
27289 (home-page "https://github.com/gpoore/latexrestricted")
27290 (synopsis
27291 "Library for creating executables compatible with LaTeX's shell escape")
27292 (description
27293 "This Python package is designed to simplify the process of creating Python
27294executables compatible with LaTeX restricted shell escape. Restricted shell
27295escape allows LaTeX to run trusted executables as part of compiling documents.
27296These executables have restricted access to the file system and restricted
27297ability to launch subprocesses.")
27298 (license license:lppl1.3+)))
27299
27300(define-public python-pybloom-live
27301 (package
27302 (name "python-pybloom-live")
27303 (version "4.0.0")
27304 (source (origin
27305 (method url-fetch)
27306 (uri (pypi-uri "pybloom_live" version))
27307 (sha256
27308 (base32
27309 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
27310 (build-system pyproject-build-system)
27311 (propagated-inputs (list python-bitarray python-xxhash))
27312 (native-inputs (list python-pytest python-setuptools python-wheel))
27313 (home-page "https://github.com/joseph-fox/python-bloomfilter")
27314 (synopsis "Bloom filter")
27315 (description "This package provides a scalable Bloom filter implemented in
27316Python.")
27317 (license license:expat)))
27318
27319;; XXX: Not maintained since 2020.
27320(define-public python-pybktree
27321 (package
27322 (name "python-pybktree")
27323 (version "1.1")
27324 (source
27325 (origin
27326 (method url-fetch)
27327 (uri (pypi-uri "pybktree" version))
27328 (sha256
27329 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
27330 (build-system pyproject-build-system)
27331 (arguments
27332 (list #:tests? #f)) ;no tests provided
27333 (native-inputs (list python-setuptools))
27334 (home-page "https://github.com/Jetsetter/pybktree")
27335 (synopsis "Pythonic BK-tree data structure")
27336 (description
27337 "This package provides a BK-tree data structure to allow fast querying of
27338close matches in Python.")
27339 (license license:expat)))
27340
27341(define-public python-pybtex
27342 (package
27343 (name "python-pybtex")
27344 (version "0.25.0")
27345 (source
27346 (origin
27347 (method git-fetch)
27348 (uri (git-reference
27349 (url "https://codeberg.org/pybtex/pybtex")
27350 (commit version)))
27351 (file-name (git-file-name name version))
27352 (sha256
27353 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
27354 (build-system pyproject-build-system)
27355 (native-inputs (list python-pytest python-setuptools))
27356 (propagated-inputs (list python-latexcodec python-pyyaml))
27357 (home-page "https://pybtex.org/")
27358 (synopsis "BibTeX-compatible bibliography processor")
27359 (description
27360 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
27361You can simply type pybtex instead of bibtex.")
27362 (license license:expat)))
27363
27364(define-public python-pybtex-apa-style
27365 (package
27366 (name "python-pybtex-apa-style")
27367 (version "1.3")
27368 (source
27369 (origin
27370 (method url-fetch)
27371 (uri (pypi-uri "pybtex-apa-style" version))
27372 (sha256
27373 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
27374 (build-system pyproject-build-system)
27375 (arguments
27376 (list
27377 #:test-backend #~'custom
27378 #:test-flags
27379 #~(list "-c" (string-append "import sys, pybtex.plugin;"
27380 " sys.exit('apa' not"
27381 " in pybtex.plugin.enumerate_plugin_names"
27382 "('pybtex.style.labels'))"))))
27383 (native-inputs (list python-pybtex python-setuptools))
27384 (home-page "https://github.com/naeka/pybtex-apa-style")
27385 (synopsis "APA style for pybtex")
27386 (description
27387 "This package provides support for the APA style within pybtex.")
27388 (license license:expat)))
27389
27390(define-public python-pybtex-docutils
27391 (package
27392 (name "python-pybtex-docutils")
27393 (version "1.0.3")
27394 (source
27395 (origin
27396 (method git-fetch)
27397 (uri (git-reference
27398 (url "https://github.com/mcmtroffaes/pybtex-docutils")
27399 (commit version)))
27400 (file-name (git-file-name name version))
27401 (sha256
27402 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
27403 (build-system pyproject-build-system)
27404 (propagated-inputs (list python-docutils python-pybtex))
27405 (native-inputs (list python-setuptools python-pytest))
27406 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
27407 (synopsis "Docutils backend for pybtex")
27408 (description "The pybtex docutils backend allows bibtex citations to be
27409inserted into documentation generated by docutils.")
27410 (license license:expat)))
27411
27412(define-public python-onetimepass
27413 (package
27414 (name "python-onetimepass")
27415 (version "1.0.1")
27416 (source
27417 (origin
27418 (method git-fetch)
27419 (uri (git-reference
27420 (url "https://github.com/tadeck/onetimepass/")
27421 (commit (string-append "v" version))))
27422 (file-name (git-file-name name version))
27423 (sha256
27424 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27425 (build-system pyproject-build-system)
27426 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27427 (native-inputs (list python-setuptools))
27428 (propagated-inputs (list python-six))
27429 (home-page "https://github.com/tadeck/onetimepass/")
27430 (synopsis "One-time password library")
27431 (description
27432 "Python one-time password library for HMAC-based (HOTP) and time-based
27433(TOTP) passwords.")
27434 (license license:expat)))
27435
27436(define-public python-online-judge-api-client
27437 (package
27438 (name "python-online-judge-api-client")
27439 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27440 (revision . "0")))
27441 (version (git-version "10.10.1"
27442 (assoc-ref properties 'revision)
27443 (assoc-ref properties 'commit)))
27444 (source
27445 (origin
27446 (method git-fetch)
27447 (uri (git-reference
27448 (url "https://github.com/online-judge-tools/api-client")
27449 (commit (assoc-ref properties 'commit))))
27450 (file-name (git-file-name name version))
27451 (sha256
27452 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27453 (patches
27454 (search-patches "python-online-judge-api-client-tests.patch"))
27455 ))
27456 (build-system pyproject-build-system)
27457 (arguments
27458 (list
27459 #:test-flags
27460 #~(list "--ignore-glob=tests/get_contest_*.py"
27461 "--ignore-glob=tests/get_problem_*.py")
27462 #:phases
27463 #~(modify-phases %standard-phases
27464 (add-before 'check 'configure-tests
27465 (lambda* (#:key inputs outputs #:allow-other-keys)
27466 (delete-file-recursively
27467 (string-append (site-packages inputs outputs)
27468 "/tests"))
27469 (call-with-output-file "pytest.ini"
27470 (lambda (port)
27471 (format port "\
27472[pytest]
27473python_files = tests/*.py"))))))))
27474 (native-inputs (list python-pytest python-setuptools))
27475 (propagated-inputs
27476 (list python-appdirs
27477 python-beautifulsoup4
27478 python-colorlog
27479 python-lxml
27480 python-requests
27481 python-toml
27482 python-jsonschema))
27483 (home-page "https://github.com/online-judge-tools/api-client")
27484 (synopsis "API client for various online judges")
27485 (description
27486 "This is an API client for various online judges, used as the backend
27487library of @code{oj} command. You can use the Python library
27488(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27489command) which talks JSON compatible with jmerle/competitive-companion.")
27490 (license license:expat)))
27491
27492(define-public online-judge-tools
27493 (package
27494 (name "online-judge-tools")
27495 (version "11.5.1")
27496 ;; Source distributions are not uploaded to PyPI.
27497 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27498 (source
27499 (origin
27500 (method git-fetch)
27501 (uri (git-reference
27502 (url "https://github.com/online-judge-tools/oj")
27503 (commit (string-append "v" version))))
27504 (file-name (git-file-name name version))
27505 (sha256
27506 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27507 (patches (search-patches "online-judge-tools.patch"))))
27508 (build-system pyproject-build-system)
27509 (arguments
27510 (list
27511 #:test-flags
27512 ;; These tests require network connections
27513 #~(list "--ignore=tests/command_version.py")))
27514 (native-inputs (list python-pytest python-setuptools))
27515 (inputs (list time))
27516 (propagated-inputs (list python-online-judge-api-client python-colorama
27517 python-requests))
27518 (home-page "https://github.com/online-judge-tools/oj")
27519 (synopsis "Command to help solving problems on various online judges")
27520 (description
27521 "@command{oj} is a command line tool to help solving problems on
27522various online judges. This command automates downloading sample
27523cases, generating additional test cases, testing for your code, and
27524submitting it.")
27525 (license license:expat)))
27526
27527(define-public python-mpv-jsonipc
27528 (package
27529 (name "python-mpv-jsonipc")
27530 (version "1.2.0")
27531 (source
27532 (origin
27533 (method url-fetch)
27534 (uri (pypi-uri "python-mpv-jsonipc" version))
27535 (sha256
27536 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27537 (build-system pyproject-build-system)
27538 (arguments (list #:tests? #f)) ;No test suite.
27539 (native-inputs (list python-setuptools python-wheel))
27540 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27541 (synopsis "Python API to control MPV using JSON IPC")
27542 (description "Python MPV JSONIPC implements an interface similar to
27543python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27544 (license license:asl2.0)))
27545
27546(define-public python-jellyfin-apiclient
27547 (package
27548 (name "python-jellyfin-apiclient")
27549 (version "1.11.0")
27550 (source
27551 (origin
27552 (method git-fetch)
27553 (uri
27554 (git-reference
27555 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27556 (commit (string-append "v" version))))
27557 (sha256
27558 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27559 (build-system pyproject-build-system)
27560 (native-inputs (list python-setuptools python-pytest python-wheel))
27561 (propagated-inputs (list python-certifi python-requests python-urllib3
27562 python-websocket-client))
27563 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27564 (synopsis "Python API client for Jellyfin")
27565 (description "The Jellyfin ApiClient Python package makes it possible
27566to use the Jellyfin API from Python. It was extracted from the Jellyfin
27567Kodi plugin.")
27568 (license license:gpl3+)))
27569
27570(define-public python-parso
27571 (package
27572 (name "python-parso")
27573 (version "0.8.5")
27574 (source
27575 (origin
27576 (method url-fetch)
27577 (uri (pypi-uri "parso" version))
27578 (sha256
27579 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
27580 (build-system pyproject-build-system)
27581 (native-inputs
27582 (list python-pytest
27583 python-setuptools))
27584 (home-page "https://github.com/davidhalter/parso")
27585 (synopsis "Python Parser")
27586 (description "Parso is a Python parser that supports error recovery and
27587round-trip parsing for different Python versions (in multiple Python versions).
27588Parso is also able to list multiple syntax errors in your Python file.")
27589 (license license:expat)))
27590
27591(define-public python-async-generator
27592 (package
27593 (name "python-async-generator")
27594 (version "1.10")
27595 (source
27596 (origin
27597 (method url-fetch)
27598 (uri (pypi-uri "async_generator" version))
27599 (sha256
27600 (base32
27601 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27602 (build-system pyproject-build-system)
27603 (native-inputs
27604 (list python-pytest python-setuptools))
27605 (home-page "https://github.com/python-trio/async_generator")
27606 (synopsis "Async generators and context managers for Python 3.5+")
27607 (description "@code{async_generator} back-ports Python 3.6's native async
27608generators and Python 3.7's context managers into Python 3.5.")
27609 ;; Dual licensed.
27610 (license (list license:expat license:asl2.0))))
27611
27612(define-public python-async-timeout
27613 (package
27614 (name "python-async-timeout")
27615 (version "5.0.1")
27616 (source
27617 (origin
27618 (method url-fetch)
27619 (uri (pypi-uri "async_timeout" version))
27620 (sha256
27621 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27622 (build-system pyproject-build-system)
27623 (native-inputs
27624 (list python-pytest
27625 python-pytest-asyncio
27626 python-setuptools
27627 python-wheel))
27628 (home-page "https://github.com/aio-libs/async-timeout")
27629 (synopsis "Timeout context manager for asyncio programs")
27630 (description
27631 "@code{async-timeout} provides a timeout timeout context manager
27632compatible with @code{asyncio}.")
27633 (license license:asl2.0)))
27634
27635(define-public python-async-timeout-4
27636 (package
27637 (inherit python-async-timeout)
27638 (name "python-async-timeout")
27639 (version "4.0.3")
27640 (source
27641 (origin
27642 (method url-fetch)
27643 (uri (pypi-uri "async-timeout" version))
27644 (sha256
27645 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27646
27647(define-public python-glob2
27648 (package
27649 (name "python-glob2")
27650 (version "0.7")
27651 (source
27652 (origin
27653 (method git-fetch)
27654 (uri (git-reference
27655 (url "https://github.com/miracle2k/python-glob2")
27656 (commit (string-append "v" version))))
27657 (file-name (git-file-name name version))
27658 (sha256
27659 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27660 (build-system pyproject-build-system)
27661 (arguments
27662 (list
27663 #:phases
27664 #~(modify-phases %standard-phases
27665 (add-after 'unpack 'patch-tests-for-pytest8
27666 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27667 (lambda _
27668 (substitute* "test.py"
27669 (("setup\\(") "setup_method(")
27670 (("teardown\\(") "teardown_method("))
27671 (rename-file "test.py" "glob2_test.py"))))))
27672 (native-inputs (list python-pytest python-setuptools))
27673 (home-page "https://github.com/miracle2k/python-glob2/")
27674 (synopsis "Extended Version of the python buildin glob module")
27675 (description "This is an extended version of the Python
27676@url{http://docs.python.org/library/glob.html, built-in glob module} which
27677adds:
27678
27679@itemize
27680@item The ability to capture the text matched by glob patterns, and return
27681those matches alongside the file names.
27682@item A recursive @code{**} globbing syntax, akin for example to the
27683@code{globstar} option of Bash.
27684@item The ability to replace the file system functions used, in order to glob
27685on virtual file systems.
27686@item Compatible with Python 2 and Python 3 (tested with 3.3).
27687@end itemize
27688
27689Glob2 currently based on the glob code from Python 3.3.1.")
27690 (license license:bsd-2)))
27691
27692(define-public python-gipc
27693 (package
27694 (name "python-gipc")
27695 (version "1.8.0")
27696 (source
27697 (origin
27698 (method git-fetch)
27699 (uri (git-reference
27700 (url "https://github.com/jgehrcke/gipc")
27701 (commit version)))
27702 (file-name (git-file-name name version))
27703 (sha256
27704 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27705 (build-system pyproject-build-system)
27706 (arguments
27707 (list
27708 #:phases
27709 #~(modify-phases %standard-phases
27710 (add-after 'unpack 'adjust-for-pytest-8
27711 (lambda _
27712 (substitute* "test/test_gipc.py"
27713 (("def setup") "def setup_method")
27714 (("def teardown") "def teardown_method")))))))
27715 (native-inputs
27716 (list python-pytest
27717 python-setuptools))
27718 (propagated-inputs
27719 (list python-gevent))
27720 (home-page "https://gehrcke.de/gipc/")
27721 (synopsis "Child process management in the context of gevent")
27722 (description
27723 "Usage of Python's multiprocessing package in a gevent-powered
27724application may raise problems. With @code{gipc}, process-based child
27725processes can safely be created anywhere within a gevent-powered
27726application.")
27727 (license license:expat)))
27728
27729(define-public python-beautifultable
27730 (package
27731 (name "python-beautifultable")
27732 (version "1.1.0")
27733 (source
27734 (origin
27735 (method git-fetch)
27736 (uri (git-reference
27737 (url "https://github.com/pri22296/beautifultable")
27738 (commit (string-append "v" version))))
27739 (file-name (git-file-name name version))
27740 (sha256
27741 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27742 (build-system pyproject-build-system)
27743 (arguments (list #:test-backend #~'unittest))
27744 (native-inputs (list python-pandas python-setuptools))
27745 (propagated-inputs (list python-wcwidth))
27746 (home-page "https://github.com/pri22296/beautifultable")
27747 (synopsis "Print ASCII tables for terminals")
27748 (description
27749 "@code{python-beautifultable} provides a class for easily printing
27750tabular data in a visually appealing ASCII format to a terminal.
27751
27752Features include, but are not limited to:
27753@itemize
27754@item Full customization of the look and feel of the table
27755@item Row and column accessors.
27756@item Full support for colors using ANSI sequences or any library.
27757@item Plenty of predefined styles and option to create custom ones.
27758@item Support for Unicode characters.
27759@item Supports streaming table when data is slow to retrieve.
27760@end itemize")
27761 (license license:expat)))
27762
27763(define-public python-globber
27764 (package
27765 (name "python-globber")
27766 (version "0.2.1")
27767 (source
27768 (origin
27769 (method git-fetch)
27770 (uri (git-reference
27771 (url "https://github.com/asharov/globber")
27772 (commit version)))
27773 (file-name (git-file-name name version))
27774 (sha256
27775 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
27776 (build-system pyproject-build-system)
27777 (native-inputs (list python-pytest python-setuptools))
27778 (home-page "https://github.com/asharov/globber")
27779 (synopsis "Library for string matching with glob patterns")
27780 (description
27781 "Globber is a Python library for matching file names against glob patterns.
27782In contrast to other glob-matching libraries, it matches arbitrary strings and
27783doesn't require the matched names to be existing files. In addition, it
27784supports the globstar @code{**} operator to match an arbitrary number of
27785path components.")
27786 (license license:asl2.0)))
27787
27788;; XXX: Not maintained since 2021.
27789(define-public python-git-hammer
27790 (package
27791 (name "python-git-hammer")
27792 (version "0.3.2")
27793 (source
27794 (origin
27795 (method git-fetch)
27796 (uri (git-reference
27797 (url "https://github.com/asharov/git-hammer")
27798 (commit version)))
27799 (file-name (git-file-name name version))
27800 (sha256
27801 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
27802 (build-system pyproject-build-system)
27803 (arguments
27804 (list
27805 #:phases
27806 #~(modify-phases %standard-phases
27807 (add-after 'unpack 'relax-requirements
27808 (lambda _
27809 (substitute* "setup.py"
27810 (("matplotlib <3.1") "matplotlib")))))))
27811 (native-inputs
27812 (list python-pytest
27813 python-setuptools))
27814 (propagated-inputs
27815 (list python-beautifultable
27816 python-dateutil
27817 python-gitpython
27818 python-globber
27819 python-matplotlib
27820 python-sqlalchemy
27821 python-sqlalchemy-utils))
27822 (home-page "https://github.com/asharov/git-hammer")
27823 (synopsis "Provide statistics for git repositories")
27824 (description
27825 "Git Hammer is a statistics tool for projects in git repositories. Its major
27826feature is tracking the number of lines authored by each person for every
27827commit, but it also includes some other useful statistics.")
27828 (license license:asl2.0)))
27829
27830(define-public python-gitignore-parser
27831 (package
27832 (name "python-gitignore-parser")
27833 (version "0.1.13")
27834 (source
27835 (origin
27836 (method git-fetch)
27837 (uri (git-reference
27838 (url "https://github.com/mherrmann/gitignore_parser")
27839 (commit (string-append "v" version))))
27840 (file-name (git-file-name name version))
27841 (sha256
27842 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
27843 (build-system pyproject-build-system)
27844 (arguments (list #:test-backend #~'unittest))
27845 (native-inputs (list python-setuptools))
27846 (home-page "https://github.com/mherrmann/gitignore_parser")
27847 (synopsis "Spec-compliant gitignore parser for Python")
27848 (description
27849 "This package provides a spec-compliant gitignore parser for Python.")
27850 (license license:expat)))
27851
27852(define-public python-fusepy
27853 (package
27854 (name "python-fusepy")
27855 (version "2.0.4")
27856 (source
27857 (origin
27858 (method git-fetch)
27859 (uri (git-reference
27860 (url "https://github.com/fusepy/fusepy")
27861 (commit (string-append "v" version))))
27862 (file-name (git-file-name name version))
27863 (sha256
27864 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
27865 (build-system pyproject-build-system)
27866 (arguments
27867 (list
27868 #:tests? #f ; No formalized tests.
27869 #:phases
27870 #~(modify-phases %standard-phases
27871 (add-before 'build 'set-library-file-name
27872 (lambda* (#:key inputs #:allow-other-keys)
27873 (substitute* "fuse.py"
27874 (("find_library\\('fuse'\\)")
27875 (format #f "~s"
27876 (search-input-file inputs "lib/libfuse.so")))))))))
27877 (native-inputs (list python-setuptools))
27878 (propagated-inputs (list fuse-2))
27879 (home-page "https://github.com/fusepy/fusepy")
27880 (synopsis "Simple ctypes bindings for FUSE")
27881 (description
27882 "Python module that provides a simple interface to FUSE and MacFUSE. The
27883binding is created using the standard @code{ctypes} library.")
27884 (license license:isc)))
27885
27886(define-public pybind11-2
27887 (package
27888 (name "pybind11")
27889 (version "2.13.6")
27890 (source (origin
27891 (method git-fetch)
27892 (uri (git-reference
27893 (url "https://github.com/pybind/pybind11")
27894 (commit (string-append "v" version))))
27895 (sha256
27896 (base32
27897 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
27898 (file-name (git-file-name name version))))
27899 (build-system cmake-build-system)
27900 (arguments
27901 (list
27902 #:configure-flags
27903 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27904 (assoc-ref %build-inputs "catch2")
27905 "/include/catch"))
27906 #:modules '((guix build cmake-build-system)
27907 ((guix build gnu-build-system) #:prefix gnu:)
27908 (guix build utils))
27909 #:phases
27910 #~(modify-phases %standard-phases
27911 (replace 'check
27912 (lambda args
27913 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27914 (add-after 'install 'install-python
27915 (lambda _
27916 (with-directory-excursion "../source"
27917 (setenv "PYBIND11_USE_CMAKE" "yes")
27918 (invoke "python" "setup.py" "install"
27919 "--single-version-externally-managed"
27920 "--root=/"
27921 (string-append "--prefix=" #$output))))))))
27922 (native-inputs
27923 (list catch2-1
27924 eigen
27925 python-pytest
27926 python-setuptools
27927 python-wrapper))
27928 (home-page "https://github.com/pybind/pybind11/")
27929 (synopsis "Seamless operability between C++11 and Python")
27930 (description
27931 "@code{pybind11} is a lightweight header-only library that exposes C++
27932types in Python and vice versa, mainly to create Python bindings of existing
27933C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27934library: to minimize boilerplate code in traditional extension modules by
27935inferring type information using compile-time introspection.")
27936 (license license:bsd-3)))
27937
27938(define-public pybind11
27939 (package
27940 (name "pybind11")
27941 (version "3.0.2")
27942 (source (origin
27943 (method git-fetch)
27944 (uri (git-reference
27945 (url "https://github.com/pybind/pybind11")
27946 (commit (string-append "v" version))))
27947 (sha256
27948 (base32
27949 "1ad4fnn4p2m3sradxxd9wfnll3pa44aw081b6ssh3pq95xqpwksg"))
27950 (file-name (git-file-name name version))))
27951 (build-system cmake-build-system)
27952 (arguments
27953 (list
27954 #:configure-flags
27955 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27956 (assoc-ref %build-inputs "catch2")
27957 "/include/catch"))
27958 #:modules '((guix build cmake-build-system)
27959 ((guix build gnu-build-system) #:prefix gnu:)
27960 (guix build utils))
27961 #:phases
27962 #~(modify-phases %standard-phases
27963 (replace 'check
27964 (lambda args
27965 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27966 (add-after 'install 'build-python-library
27967 (lambda _
27968 (with-directory-excursion "../source"
27969 (setenv "PYBIND11_USE_CMAKE" "yes")
27970 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
27971 "--prefix" #$output ".")))))))
27972 (inputs (list boost))
27973 (native-inputs
27974 (list catch2-1
27975 eigen
27976 python-pytest
27977 python-setuptools
27978 python-wrapper
27979 python-scikit-build-core))
27980 (home-page "https://github.com/pybind/pybind11/")
27981 (synopsis "Seamless operability between C++11 and Python")
27982 (description
27983 "@code{pybind11} is a lightweight header-only library that exposes C++
27984types in Python and vice versa, mainly to create Python bindings of existing
27985C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27986library: to minimize boilerplate code in traditional extension modules by
27987inferring type information using compile-time introspection.")
27988 (license license:bsd-3)))
27989
27990(define-public python-pooch
27991 (package
27992 (name "python-pooch")
27993 (version "1.8.1")
27994 (source
27995 (origin
27996 (method url-fetch)
27997 (uri (pypi-uri "pooch" version))
27998 (sha256
27999 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
28000 (build-system pyproject-build-system)
28001 (arguments
28002 (list
28003 #:test-flags
28004 '(list "-k"
28005 (string-append
28006 ;; We don't have the test archives
28007 "not test_decompress"
28008 " and not test_multiple_unpacking"
28009 " and not test_unpack_members_with_leading_dot"
28010 " and not test_unpacking"
28011 " and not test_unpacking_members_then_no_members"
28012 " and not test_unpacking_wrong_members_then_no_members"
28013 ;; These all require access to the internet
28014 " and not test_check_availability"
28015 " and not test_check_availability_invalid_downloader"
28016 " and not test_check_availability_on_ftp"
28017 " and not test_create_and_fetch"
28018 " and not test_downloader_arbitrary_progressbar"
28019 " and not test_fetch_with_downloader"
28020 " and not test_figshare_data_repository_versions"
28021 " and not test_load_registry_from_doi"
28022 " and not test_pooch_corrupted"
28023 " and not test_pooch_custom_url"
28024 " and not test_pooch_download"
28025 " and not test_pooch_download_retry"
28026 " and not test_pooch_download_retry_fails_eventually"
28027 " and not test_pooch_download_retry_off_by_default"
28028 " and not test_pooch_logging_level"
28029 " and not test_pooch_update"
28030 " and not test_retrieve"
28031 " and not test_retrieve_default_path"
28032 " and not test_retrieve_fname"
28033 " and not test_stream_download")
28034 "--ignore=pooch/tests/test_downloaders.py")))
28035 (native-inputs
28036 (list python-pytest
28037 python-setuptools-scm
28038 python-setuptools
28039 python-wheel))
28040 (propagated-inputs
28041 (list python-packaging python-platformdirs python-requests))
28042 (home-page "https://github.com/fatiando/pooch")
28043 (synopsis "Manage your Python library's sample data files")
28044 (description
28045 "Pooch manages your Python library's sample data files: it automatically
28046downloads and stores them in a local directory, with support for versioning
28047and corruption checks.")
28048 (license license:bsd-3)))
28049
28050(define-public python-fasteners
28051 (package
28052 (name "python-fasteners")
28053 (version "0.20")
28054 (source (origin
28055 ;; No tests in the pypi tarball
28056 (method git-fetch)
28057 (uri (git-reference
28058 (url "https://github.com/harlowja/fasteners")
28059 (commit version)))
28060 (file-name (git-file-name name version))
28061 (sha256
28062 (base32
28063 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
28064 (build-system pyproject-build-system)
28065 (native-inputs (list python-diskcache python-eventlet python-more-itertools
28066 python-setuptools python-pytest))
28067 (home-page "https://github.com/harlowja/fasteners")
28068 (synopsis "Python package that provides useful locks")
28069 (description
28070 "This package provides a Python program that provides following locks:
28071
28072@itemize
28073@item Locking decorator
28074@item Reader-writer locks
28075@item Inter-process locks
28076@item Generic helpers
28077@end itemize\n")
28078 (license license:asl2.0)))
28079
28080(define-public python-requests-file
28081 (package
28082 (name "python-requests-file")
28083 (version "3.0.1")
28084 (source
28085 (origin
28086 (method git-fetch)
28087 (uri (git-reference
28088 (url "https://codeberg.org/dashea/requests-file")
28089 (commit version)))
28090 (file-name (git-file-name name version))
28091 (sha256
28092 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
28093 (build-system pyproject-build-system)
28094 (native-inputs (list python-pytest python-setuptools))
28095 (propagated-inputs (list python-requests))
28096 (home-page "https://codeberg.org/dashea/requests-file")
28097 (synopsis "File transport adapter for Requests")
28098 (description
28099 "Requests-File is a transport adapter for use with the Requests Python
28100library to allow local file system access via @code{file://} URLs.")
28101 (license license:asl2.0)))
28102
28103(define-public python-identify
28104 (package
28105 (name "python-identify")
28106 (version "2.6.14")
28107 (source
28108 (origin
28109 ;; There are no tests in the PyPI tarball.
28110 (method git-fetch)
28111 (uri (git-reference
28112 (url "https://github.com/chriskuehl/identify")
28113 (commit (string-append "v" version))))
28114 (file-name (git-file-name name version))
28115 (sha256
28116 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
28117 (build-system pyproject-build-system)
28118 (native-inputs
28119 (list python-pytest
28120 python-setuptools
28121 python-ukkonen))
28122 (home-page "https://github.com/chriskuehl/identify")
28123 (synopsis "File identification library for Python")
28124 (description
28125 "@code{identify} is a file identification library for Python. Given
28126a file (or some information about a file), return a set of standardized tags
28127identifying what the file is.")
28128 (license license:expat)))
28129
28130(define-public python-nodeenv
28131 (package
28132 (name "python-nodeenv")
28133 (version "1.8.0")
28134 (source
28135 (origin
28136 ;; There's no tarball in PyPI.
28137 (method git-fetch)
28138 (uri (git-reference
28139 (url "https://github.com/ekalinin/nodeenv")
28140 (commit version)))
28141 (file-name (git-file-name name version))
28142 (sha256
28143 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
28144 (build-system pyproject-build-system)
28145 (arguments
28146 (list #:test-flags
28147 #~(list "-k" (string-append
28148 "not test_smoke"
28149 " and not test_smoke_n_system_special_chars"))))
28150 (native-inputs
28151 (list python-mock
28152 python-pytest
28153 python-setuptools
28154 python-wheel))
28155 (home-page "https://ekalinin.github.io/nodeenv/")
28156 (synopsis "Create isolated node.js environments")
28157 (description
28158 "Nodeenv (node.js virtual environment) is a tool to create isolated
28159node.js environments. It creates an environment that has its own installation
28160directories, that doesn't share libraries with other node.js virtual
28161environments.")
28162 (license license:bsd-3)))
28163
28164(define-public python-pynamecheap
28165 (package
28166 (name "python-pynamecheap")
28167 (version "0.0.3")
28168 (source
28169 (origin
28170 (method url-fetch)
28171 (uri (pypi-uri "PyNamecheap" version))
28172 (sha256
28173 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
28174 (build-system pyproject-build-system)
28175 (arguments (list #:tests? #f)) ; No tests.
28176 (native-inputs (list python-setuptools))
28177 (propagated-inputs (list python-requests))
28178 (home-page "https://github.com/Bemmu/PyNamecheap")
28179 (synopsis "Namecheap API client in Python")
28180 (description
28181 "PyNamecheap is a Namecheap API client in Python.")
28182 (license license:expat)))
28183
28184(define-public python-pynput
28185 (package
28186 (name "python-pynput")
28187 (version "1.8.1")
28188 (source
28189 (origin
28190 (method git-fetch)
28191 (uri (git-reference
28192 (url "https://github.com/moses-palmer/pynput")
28193 (commit (string-append "v" version))))
28194 (file-name (git-file-name name version))
28195 (sha256
28196 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
28197 (build-system pyproject-build-system)
28198 (arguments
28199 (list
28200 #:tests? #f ;XXX: tests can't be found with pytest or unittest
28201 #:phases
28202 #~(modify-phases %standard-phases
28203 (add-after 'unpack 'relax-requirements
28204 (lambda _
28205 (substitute* "setup.py"
28206 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
28207 "RUNTIME_PACKAGES"))))
28208 (add-before 'sanity-check 'start-xserver
28209 (lambda* (#:key inputs #:allow-other-keys)
28210 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
28211 (system (format #f "~a :1 -screen 0 640x480x24 &"
28212 Xvfb))
28213 (setenv "DISPLAY" ":1")))))))
28214 (propagated-inputs
28215 (list python-evdev python-xlib))
28216 (native-inputs
28217 (list python-setuptools xorg-server-for-tests))
28218 (home-page "https://github.com/moses-palmer/pynput")
28219 (synopsis "Send virtual input commands")
28220 (description
28221 "This package provides tools to monitor and control user input devices in
28222Python.")
28223 (license license:lgpl3)))
28224
28225(define-public python-pynixutil
28226 (package
28227 (name "python-pynixutil")
28228 (version "0.5.0")
28229 (source
28230 (origin
28231 (method git-fetch)
28232 (uri (git-reference
28233 (url "https://github.com/nix-community/pynixutil")
28234 (commit version)))
28235 (file-name (git-file-name name version))
28236 (sha256
28237 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
28238 (build-system pyproject-build-system)
28239 (arguments
28240 (list
28241 #:test-flags
28242 ;; Tests require nix in the PATH.
28243 #~(list "--ignore=tests/test_drv.py")
28244 #:phases
28245 #~(modify-phases %standard-phases
28246 (add-after 'unpack 'use-poetry-core
28247 (lambda _
28248 ;; Patch to use the core poetry API.
28249 (substitute* "pyproject.toml"
28250 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
28251 (native-inputs
28252 (list python-poetry-core
28253 python-pytest))
28254 (home-page "https://github.com/nix-community/pynixutil")
28255 (synopsis "Utility functions for working with data from Nix in Python")
28256 (description
28257 "@code{pynixutil} provides functions for base32 encoding/decoding and
28258derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
28259@code{drvparse()}.")
28260 (license license:expat)))
28261
28262(define-public python-dns-lexicon
28263 (package
28264 (name "python-dns-lexicon")
28265 (version "3.21.1")
28266 (source
28267 (origin
28268 (method git-fetch)
28269 (uri (git-reference
28270 (url "https://github.com/dns-lexicon/dns-lexicon")
28271 (commit (string-append "v" version))))
28272 (file-name (git-file-name name version))
28273 (sha256
28274 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
28275 (build-system pyproject-build-system)
28276 (arguments
28277 (list
28278 ;; Integration tests require network access.
28279 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
28280 #:phases
28281 #~(modify-phases %standard-phases
28282 (add-before 'check 'configure-tests
28283 (lambda _
28284 (setenv "HOME" (getcwd)))))))
28285 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
28286 (propagated-inputs
28287 (list python-beautifulsoup4
28288 python-cryptography
28289 python-dnspython
28290 python-pyotp
28291 python-pyyaml
28292 python-requests
28293 python-tldextract))
28294 (home-page "https://github.com/dns-lexicon/dns-lexicon")
28295 (synopsis "Manipulate DNS records on various DNS providers")
28296 (description
28297 "Lexicon provides a way to manipulate DNS records on multiple DNS
28298providers in a standardized way. It has a CLI but it can also be used as a
28299Python library. It was designed to be used in automation, specifically with
28300Let's Encrypt.")
28301 (license license:expat)))
28302
28303(define-public python-cfgv
28304 (package
28305 (name "python-cfgv")
28306 (version "3.4.0")
28307 (source
28308 (origin
28309 ;; There are no tests in the PyPI tarball.
28310 (method git-fetch)
28311 (uri (git-reference
28312 (url "https://github.com/asottile/cfgv")
28313 (commit (string-append "v" version))))
28314 (file-name (git-file-name name version))
28315 (sha256
28316 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
28317 (build-system pyproject-build-system)
28318 (native-inputs
28319 (list python-pytest python-setuptools python-wheel))
28320 (home-page "https://github.com/asottile/cfgv")
28321 (synopsis "Configuration validation library")
28322 (description
28323 "This library helps to validate configuration files and produce human
28324readable error messages.")
28325 (license license:expat)))
28326
28327(define-public python-commandlines
28328 (package
28329 (name "python-commandlines")
28330 (version "0.4.1")
28331 (source
28332 (origin
28333 (method git-fetch)
28334 (uri (git-reference
28335 (url "https://github.com/chrissimpkins/commandlines")
28336 (commit (string-append "v" version))))
28337 (file-name (git-file-name name version))
28338 (sha256
28339 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
28340 (build-system pyproject-build-system)
28341 (native-inputs (list python-pytest python-setuptools))
28342 (home-page "https://github.com/chrissimpkins/commandlines")
28343 (synopsis "Command line argument to object parsing library")
28344 (description
28345 "@code{Commandlines} is a Python library for command line application
28346development that supports command line argument parsing, command string
28347validation testing and application logic.")
28348 (license license:expat)))
28349
28350;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
28351;; python-numba. They have a very inflexible relationship.
28352(define-public python-numba
28353 (package
28354 (name "python-numba")
28355 (version "0.62.1")
28356 (source
28357 (origin
28358 (method url-fetch)
28359 (uri (pypi-uri "numba" version))
28360 (sha256
28361 (base32
28362 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
28363 (build-system pyproject-build-system)
28364 (arguments
28365 (list
28366 ;; tests: 10723 tests (skipped=708, expected failures=23)
28367 #:test-backend #~'custom
28368 #:test-flags
28369 ;; Check <buildscripts> directory for more build/tests examples.
28370 #~(list "-m" "numba.runtests"
28371 "--exclude-tags='long_running'"
28372 "--multiprocess" (number->string (min 8 (parallel-job-count)))
28373 "-b"
28374 "-v"
28375 "--"
28376 "numba.tests")
28377 #:phases
28378 #~(modify-phases %standard-phases
28379 (add-after 'unpack 'disable-failing-tests
28380 (lambda _
28381 ;; This expects to be able to run pip.
28382 (delete-file "numba/tests/test_sysinfo.py")
28383 ;; This fails nondeterministically, possibly depending on CPU.
28384 ;; https://github.com/numba/numba/issues/8282.
28385 (substitute* "numba/tests/test_function_type.py"
28386 (("def test_wrapper_address_protocol_libm")
28387 "def disabled_test_wrapper_address_protocol_libm"))
28388 (substitute* "numba/tests/test_caching.py"
28389 ;; RuntimeError: cannot cache function 'simple_usecase': no
28390 ;; locator available for file
28391 (("def test_non_creatable_pycache")
28392 "def __off_test_non_creatable_pycache")
28393 (("def test_non_writable_pycache")
28394 "def __off_test_non_writable_pycache")
28395 ;; AssertionError: None is not an instance of <class
28396 ;; 'numba.core.caching.UserWideCacheLocator'>
28397 (("def test_frozen")
28398 "def __off_test_frozen"))))
28399 (add-before 'build 'disable-proprietary-features
28400 (lambda _
28401 (setenv "NUMBA_DISABLE_HSA" "1")
28402 (setenv "NUMBA_DISABLE_CUDA" "1")))
28403 (add-before 'check 'pre-check
28404 (lambda _
28405 (setenv "HOME" "/tmp")
28406 ;; XXX: Something is wrong with the PYTHONPATH when running the
28407 ;; tests from the build directory, as it complains about not
28408 ;; being able to import certain modules.
28409 (delete-file-recursively "numba"))))))
28410 (native-inputs
28411 (list python-setuptools))
28412 (propagated-inputs
28413 (list python-llvmlite
28414 python-numpy))
28415 (home-page "https://numba.pydata.org")
28416 (synopsis "Compile Python code using LLVM")
28417 (description "Numba gives you the power to speed up your applications with
28418high performance functions written directly in Python. With a few
28419annotations, array-oriented and math-heavy Python code can be just-in-time
28420compiled to native machine instructions, similar in performance to C, C++ and
28421Fortran, without having to switch languages or Python interpreters.
28422
28423Numba works by generating optimized machine code using the LLVM compiler
28424infrastructure at import time, runtime, or statically (using the included pycc
28425tool).")
28426 (license license:bsd-3)))
28427
28428(define-public python-numcodecs
28429 (package
28430 (name "python-numcodecs")
28431 (version "0.13.1")
28432 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
28433 ;;(version "0.14.1")
28434 (source
28435 (origin
28436 (method url-fetch)
28437 (uri (pypi-uri "numcodecs" version))
28438 (sha256
28439 (base32
28440 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
28441 (modules '((guix build utils)))
28442 (snippet
28443 '(begin
28444 ;; Only add CFLAGS on architectures where they are supported
28445 (substitute* "setup.py"
28446 (("import sys")
28447 "import sys\nimport platform")
28448 (("os\\.name == 'posix'")
28449 (string-append "os.name + platform.machine() == 'posixx86_64' or"
28450 " os.name + platform.machine() == 'posixx86'")))
28451 (delete-file-recursively "c-blosc")))))
28452 (build-system pyproject-build-system)
28453 (arguments
28454 (list
28455 #:test-flags
28456 ;; zarr isn't available, because it dependes on this package.
28457 '(list "-k" "not test_zarr3_import")
28458 #:phases
28459 '(modify-phases %standard-phases
28460 (add-after 'unpack 'disable-avx2
28461 (lambda _
28462 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
28463 (add-after 'unpack 'unbundle
28464 (lambda _
28465 (substitute* "setup.py"
28466 (("sources=sources \\+ blosc_sources,")
28467 "sources=sources,")
28468 (("extra_compile_args=extra_compile_args")
28469 "extra_compile_args=list(base_compile_args)")
28470 (("'numcodecs.zstd',")
28471 "'numcodecs.zstd', libraries=['zstd'], ")
28472 (("'numcodecs.lz4',")
28473 "'numcodecs.lz4', libraries=['lz4'], ")
28474 (("'numcodecs.blosc',")
28475 "'numcodecs.blosc', libraries=['blosc'], "))))
28476 (add-before 'check 'build-extensions
28477 (lambda _
28478 ;; Cython extensions have to be built before running the tests.
28479 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
28480 (inputs
28481 (list c-blosc lz4 zlib
28482 `(,zstd "lib")))
28483 (propagated-inputs
28484 (list python-google-crc32c
28485 python-importlib-metadata
28486 python-msgpack
28487 python-numpy))
28488 (native-inputs
28489 (list python-cython
28490 python-py-cpuinfo
28491 python-pydata-sphinx-theme
28492 python-pytest
28493 python-setuptools
28494 python-setuptools-scm ;for correct version
28495 python-sphinx
28496 python-sphinx-issues))
28497 (home-page "https://github.com/zarr-developers/numcodecs")
28498 (synopsis "Buffer compression and transformation codecs")
28499 (description
28500 "This Python package provides buffer compression and transformation
28501codecs for use in data storage and communication applications.")
28502 (license license:expat)))
28503
28504(define-public python-asciitree
28505 (package
28506 (name "python-asciitree")
28507 (version "0.3.3")
28508 (source
28509 (origin
28510 (method git-fetch)
28511 (uri (git-reference
28512 (url "https://github.com/mbr/asciitree")
28513 (commit version)))
28514 (file-name (git-file-name name version))
28515 (sha256
28516 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28517 (build-system pyproject-build-system)
28518 (native-inputs (list python-pytest python-setuptools))
28519 (home-page "https://github.com/mbr/asciitree")
28520 (synopsis "Draws ASCII trees")
28521 (description "This package draws tree structures using characters.")
28522 (license license:expat)))
28523
28524(define-public python-dill
28525 (package
28526 (name "python-dill")
28527 (version "0.4.0")
28528 (source
28529 (origin
28530 (method url-fetch)
28531 (uri (pypi-uri "dill" version))
28532 (sha256
28533 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
28534 (build-system pyproject-build-system)
28535 (arguments
28536 (list
28537 #:phases #~(modify-phases %standard-phases
28538 (replace 'check
28539 (lambda* (#:key tests? #:allow-other-keys)
28540 (if tests?
28541 ;; Extracted from tox.ini
28542 (invoke "python" "dill/tests/__main__.py")
28543 (format #t "test suite not run~%")))))))
28544 (native-inputs
28545 (list python-setuptools python-wheel))
28546 (home-page "https://pypi.org/project/dill/")
28547 (synopsis "Serialize all of Python")
28548 (description "Dill extends Python's @code{pickle} module for serializing
28549and de-serializing Python objects to the majority of the built-in Python
28550types. Dill provides the user the same interface as the @code{pickle} module,
28551and also includes some additional features. In addition to pickling Python
28552objects, @code{dill} provides the ability to save the state of an interpreter
28553session in a single command. Hence, it would be feasible to save a
28554interpreter session, close the interpreter, ship the pickled file to another
28555computer, open a new interpreter, unpickle the session and thus continue from
28556the saved state of the original interpreter session.")
28557 (license license:bsd-3)))
28558
28559(define-public python-multiprocess
28560 (package
28561 (name "python-multiprocess")
28562 (version "0.70.18")
28563 (source
28564 (origin
28565 (method url-fetch)
28566 (uri (pypi-uri "multiprocess" version))
28567 (sha256
28568 (base32
28569 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28570 (build-system pyproject-build-system)
28571 (arguments
28572 (list
28573 #:phases
28574 #~(modify-phases %standard-phases
28575 (add-after 'unpack 'disable-broken-tests
28576 (lambda* (#:key inputs #:allow-other-keys)
28577 ;; The "wait_result" and "shared_memory..." tests are broken as
28578 ;; there is no keyboard interrupt.
28579 ;;
28580 ;; The "preload_resources" test fails as it cannot find
28581 ;; mp_preload.py.
28582 (substitute*
28583 (string-append "py" (python-version
28584 (assoc-ref inputs "python"))
28585 "/multiprocess/tests/__init__.py")
28586 (("^(.*)def test_(\
28587wait_result|\
28588shared_memory_SharedMemoryServer_ignores_sigint|\
28589preload_resources\
28590)" line indent)
28591 (string-append indent
28592 "@unittest.skip(\"Disabled by Guix\")\n"
28593 line)))))
28594 (replace 'check
28595 (lambda* (#:key tests? #:allow-other-keys)
28596 (if tests?
28597 (invoke "python" "-m" "multiprocess.tests")
28598 (format #t "test suite not run~%")))))))
28599 (propagated-inputs
28600 (list python-dill))
28601 (native-inputs (list python-setuptools))
28602 (home-page "https://pypi.org/project/multiprocess/")
28603 (synopsis "Multiprocessing and multithreading in Python")
28604 (description
28605 "This package is a fork of the multiprocessing Python package, a package
28606which supports the spawning of processes using the API of the standard
28607library's @code{threading} module.")
28608 (license license:bsd-3)))
28609
28610(define-public python-multiprocessing-on-dill
28611 (package
28612 (name "python-multiprocessing-on-dill")
28613 (version "3.5.0a4")
28614 (source (origin
28615 (method url-fetch)
28616 (uri (pypi-uri "multiprocessing_on_dill" version))
28617 (sha256
28618 (base32
28619 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28620 (build-system pyproject-build-system)
28621 (propagated-inputs (list python-dill))
28622 (native-inputs (list python-pytest python-setuptools python-wheel))
28623 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28624 (synopsis "Multiprocessing using dill instead of pickle")
28625 (description
28626 "This package provides a friendly fork of multiprocessing which uses dill
28627instead of pickle.")
28628 (license license:psfl)))
28629
28630(define-public python-cytoolz
28631 (package
28632 (name "python-cytoolz")
28633 (version "1.0.1")
28634 (source
28635 (origin
28636 (method url-fetch)
28637 (uri (pypi-uri "cytoolz" version))
28638 (sha256
28639 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28640 (modules '((guix build utils)))
28641 (snippet
28642 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28643 (build-system pyproject-build-system)
28644 (arguments
28645 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28646 (native-inputs
28647 (list python-cython
28648 python-pytest
28649 python-setuptools
28650 python-wheel))
28651 (propagated-inputs
28652 (list python-toolz))
28653 (home-page "https://github.com/pytoolz/cytoolz")
28654 (synopsis "High performance functional utilities")
28655 (description
28656 "The cytoolz package implements the same API as provided by toolz. The
28657main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28658that is accessible to other projects developed in Cython.")
28659 (license license:bsd-3)))
28660
28661(define-public python-cloudpickle
28662 (package
28663 (name "python-cloudpickle")
28664 (version "3.1.0")
28665 (source
28666 (origin
28667 ;; Archive on pypi does not include test infrastructure.
28668 (method git-fetch)
28669 (uri (git-reference
28670 (url "https://github.com/cloudpipe/cloudpickle")
28671 (commit (string-append "v" version))))
28672 (file-name (git-file-name name version))
28673 (sha256
28674 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28675 (build-system pyproject-build-system)
28676 (native-inputs
28677 (list python-flit-core
28678 python-psutil
28679 python-pytest))
28680 (home-page "https://github.com/cloudpipe/cloudpickle")
28681 (synopsis "Extended pickling support for Python objects")
28682 (description
28683 "Cloudpickle makes it possible to serialize Python constructs not
28684supported by the default pickle module from the Python standard library. It
28685is especially useful for cluster computing where Python expressions are
28686shipped over the network to execute on remote hosts, possibly close to the
28687data.")
28688 (license license:bsd-3)))
28689
28690(define-public python-locket
28691 (package
28692 (name "python-locket")
28693 (version "1.0.0")
28694 (source
28695 (origin
28696 (method git-fetch)
28697 (uri (git-reference
28698 (url "https://github.com/mwilliamson/locket.py")
28699 (commit version)))
28700 (file-name (git-file-name name version))
28701 (sha256
28702 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28703 (build-system pyproject-build-system)
28704 ;; XXX: Requires python-spur, which requires another version of
28705 ;; python-paramiko.
28706 (arguments (list #:tests? #f))
28707 (native-inputs (list python-setuptools))
28708 (home-page "https://github.com/mwilliamson/locket.py")
28709 (synopsis "File-based locks for Python")
28710 (description
28711 "Locket implements a lock that can be used by multiple processes provided
28712they use the same path.")
28713 (license license:bsd-2)))
28714
28715(define-public python-loky
28716 (package
28717 (name "python-loky")
28718 (version "3.5.6")
28719 (source
28720 (origin
28721 (method git-fetch)
28722 (uri (git-reference
28723 (url "https://github.com/joblib/loky")
28724 (commit version)))
28725 (file-name (git-file-name name version))
28726 (sha256
28727 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
28728 (build-system pyproject-build-system)
28729 (arguments
28730 (list
28731 #:test-flags
28732 #~(list "-k" (string-join
28733 (list
28734 ;; Requires process control.
28735 "not (test_kill_process_tree"
28736 ;; Hardware dependent tests.
28737 "test_only_physical_cores_error"
28738 ;; Depends on previous results.
28739 "test_wait_result)")
28740 " or "))))
28741 (native-inputs
28742 (list python-packaging
28743 python-psutil
28744 python-pytest
28745 python-setuptools))
28746 (propagated-inputs
28747 (list python-cloudpickle))
28748 (home-page "https://loky.readthedocs.io")
28749 (synopsis "Robust and reusable Executor for joblib")
28750 (description
28751 "This package provides a robust implementation of
28752@code{concurrent.futures.ProcessPoolExecutor}.")
28753 (license license:bsd-3)))
28754
28755(define-public python-partd
28756 (package
28757 (name "python-partd")
28758 (version "1.4.2")
28759 (source
28760 (origin
28761 (method url-fetch)
28762 (uri (pypi-uri "partd" version))
28763 (sha256
28764 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
28765 (build-system pyproject-build-system)
28766 (native-inputs
28767 (list python-pytest
28768 python-setuptools
28769 python-versioneer))
28770 (propagated-inputs
28771 (list python-locket
28772 python-toolz
28773 ;; [complete]
28774 python-blosc
28775 python-numpy
28776 python-pandas
28777 python-pyzmq))
28778 (home-page "https://github.com/dask/partd/")
28779 (synopsis "Appendable key-value storage")
28780 (description
28781 "Partd stores key-value pairs. Values are raw bytes. We append on old
28782values. Partd excels at shuffling operations.")
28783 (license license:bsd-3)))
28784
28785(define-public python-fsspec
28786 (package
28787 (name "python-fsspec")
28788 (version "2026.1.0")
28789 (source
28790 (origin
28791 (method git-fetch)
28792 (uri (git-reference
28793 (url "https://github.com/fsspec/filesystem_spec")
28794 (commit version)))
28795 (file-name (git-file-name name version))
28796 (sha256
28797 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
28798 (build-system pyproject-build-system)
28799 (arguments
28800 (list
28801 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
28802 #:test-flags
28803 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
28804 "-k" (string-join
28805 ;; Test requires nentwork access
28806 (list "not test_async_cat_file_ranges"
28807 "test_gist_public_all_files"
28808 "test_gist_public_missing_file"
28809 "test_gist_public_one_file"
28810 ;; Test hangs
28811 "test_processes")
28812 " and not "))))
28813 ;; The most of the inputs are optional, project does not force to include
28814 ;; any dependencies according to pyproject.toml.
28815 (propagated-inputs
28816 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
28817 (native-inputs
28818 (list nss-certs-for-test
28819 python-hatch-vcs
28820 python-hatchling
28821 python-numpy
28822 python-pytest
28823 python-pytest-asyncio
28824 python-pytest-mock
28825 python-pytest-rerunfailures))
28826 (home-page "https://github.com/fsspec/filesystem_spec")
28827 (synopsis "File-system specification")
28828 (description "The purpose of this package is to produce a template or
28829specification for a file-system interface, that specific implementations
28830should follow, so that applications making use of them can rely on a common
28831behavior and not have to worry about the specific internal implementation
28832decisions with any given backend.")
28833 (license license:bsd-3)))
28834
28835(define-public python-ilinkedlist
28836 (package
28837 (name "python-ilinkedlist")
28838 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
28839 (revision . "0")))
28840 (version (git-version "0.4.0"
28841 (assoc-ref properties 'revision)
28842 (assoc-ref properties 'commit)))
28843 (home-page "https://github.com/luther9/ilinkedlist-py")
28844 (source
28845 (origin
28846 (method git-fetch)
28847 (uri (git-reference
28848 (url home-page)
28849 (commit (assoc-ref properties 'commit))))
28850 (file-name (git-file-name name version))
28851 (sha256
28852 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
28853 (build-system pyproject-build-system)
28854 (native-inputs (list python-pytest python-setuptools))
28855 (synopsis "Immutable linked list library")
28856 (description
28857 "This is a implementation of immutable linked lists for Python. It
28858contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
28859Since a linked list is treated as immutable, it is hashable, and its length
28860can be retrieved in constant time. Some of the terminology is inspired by
28861LISP. It is possible to create an improper list by creating a @code{Pair}
28862with a non-list @code{cdr}.")
28863 (license license:gpl3+)))
28864
28865(define-public python-readlike
28866 (package
28867 (name "python-readlike")
28868 (version "0.1.3")
28869 (source
28870 (origin
28871 (method git-fetch)
28872 (uri (git-reference
28873 (url "https://github.com/jangler/readlike")
28874 (commit version)))
28875 (file-name (git-file-name name version))
28876 (sha256
28877 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
28878 (build-system pyproject-build-system)
28879 (native-inputs (list python-pytest python-setuptools))
28880 (home-page "https://github.com/jangler/readlike")
28881 (synopsis "GNU Readline-like line editing module")
28882 (description
28883 "This Python module provides line editing functions similar to the default
28884Emacs-style ones of GNU Readline. Unlike the Python standard library's
28885@code{readline} package, this one allows access to those capabilities in settings
28886outside of a standard command-line interface. It is especially well-suited to
28887interfacing with Urwid, due to a shared syntax for describing key inputs.
28888
28889Currently, all stateless Readline commands are implemented. Yanking and history
28890are not supported.")
28891 (license license:expat)))
28892
28893(define-public python-reparser
28894 (package
28895 (name "python-reparser")
28896 (version "1.4.3")
28897 (source
28898 (origin
28899 (method git-fetch)
28900 (uri (git-reference
28901 (url "https://github.com/xmikos/reparser")
28902 (commit (string-append "v" version))))
28903 (file-name (git-file-name name version))
28904 (sha256
28905 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
28906 (build-system pyproject-build-system)
28907 (arguments (list #:tests? #f)) ; No tests.
28908 (native-inputs (list python-setuptools))
28909 (home-page "https://github.com/xmikos/reparser")
28910 (synopsis "Lexer/parser for inline markup based on regular expressions")
28911 (description
28912 "This Python library provides a simple lexer/parser for inline markup based
28913on regular expressions.")
28914 (license license:expat)))
28915
28916(define-public python-retrying
28917 (package
28918 (name "python-retrying")
28919 (version "1.4.1")
28920 (source
28921 (origin
28922 (method git-fetch)
28923 (uri (git-reference
28924 (url "https://github.com/groodt/retrying")
28925 (commit (string-append "v" version))))
28926 (file-name (git-file-name name version))
28927 (sha256
28928 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
28929 (build-system pyproject-build-system)
28930 (native-inputs (list python-pytest python-setuptools))
28931 (home-page "https://github.com/groodt/retrying")
28932 (synopsis "Library for adding retry behavior")
28933 (description "Retrying is a general-purpose retrying library to simplify
28934the task of adding retry behavior to just about anything.
28935
28936Features:
28937
28938@itemize
28939@item Generic Decorator API.
28940@item Specify stop condition (i.e. limit by number of attempts).
28941@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
28942@item Customize retrying on Exceptions.
28943@item Customize retrying on expected returned result.
28944@end itemize")
28945 (license license:asl2.0)))
28946
28947(define-public python-precis-i18n
28948 (package
28949 (name "python-precis-i18n")
28950 (version "1.1.1")
28951 (source
28952 (origin
28953 (method url-fetch)
28954 (uri (pypi-uri "precis_i18n" version))
28955 (sha256
28956 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
28957 (build-system pyproject-build-system)
28958 (native-inputs
28959 (list python-pytest
28960 python-setuptools
28961 python-wheel))
28962 (home-page "https://github.com/byllyfish/precis_i18n")
28963 (synopsis "Implementation of the PRECIS framework")
28964 (description
28965 "This module implements the PRECIS Framework as described in RFC 8264,
28966RFC 8265 and RFC 8266.")
28967 (license license:expat)))
28968
28969(define-public python-absl-py
28970 (package
28971 (name "python-absl-py")
28972 (version "2.3.1")
28973 (source
28974 (origin
28975 (method url-fetch)
28976 (uri (pypi-uri "absl_py" version))
28977 (sha256
28978 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
28979 (build-system pyproject-build-system)
28980 (arguments
28981 (list #:tests? #f)) ;tests require bazel
28982 (native-inputs
28983 (list python-hatchling))
28984 (home-page "https://github.com/abseil/abseil-py")
28985 (synopsis "Abseil Python common libraries")
28986 (description
28987 "This package provides the Abseil Python Common Libraries, a collection
28988of Python libraries for building Python applications.")
28989 (license license:asl2.0)))
28990
28991(define-public python-astor
28992 (package
28993 (name "python-astor")
28994 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
28995 (revision . "0")))
28996 (version (git-version "0.8.1"
28997 (assoc-ref properties 'revision)
28998 (assoc-ref properties 'commit)))
28999 (source
29000 (origin
29001 (method git-fetch)
29002 (uri (git-reference
29003 (url "https://github.com/berkerpeksag/astor")
29004 (commit (assoc-ref properties 'commit))))
29005 (file-name (git-file-name name version))
29006 (sha256
29007 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
29008 (build-system pyproject-build-system)
29009 (arguments
29010 (list
29011 ;; FIXME: Unclear why this test fails.
29012 #:test-flags #~(list "--deselect=\
29013tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
29014 (native-inputs (list python-pytest python-setuptools))
29015 (home-page "https://github.com/berkerpeksag/astor")
29016 (synopsis "Read and write Python ASTs")
29017 (description
29018 "Astor is designed to allow easy manipulation of Python source via the
29019Abstract Syntax Tree.")
29020 (license license:bsd-3)))
29021
29022(define-public python-astunparse
29023 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
29024 ;; updated.
29025 (package
29026 (name "python-astunparse")
29027 (version "1.6.3")
29028 (source
29029 (origin
29030 (method url-fetch)
29031 (uri (pypi-uri "astunparse" version))
29032 (sha256
29033 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
29034 (build-system pyproject-build-system)
29035 (arguments '(#:tests? #f)) ; there are none
29036 (native-inputs
29037 (list python-setuptools))
29038 (propagated-inputs
29039 (list python-six))
29040 (home-page "https://github.com/simonpercivall/astunparse")
29041 (synopsis "AST unparser for Python")
29042 (description "This package provides an AST unparser for Python. It is a
29043factored out version of @code{unparse} found in the Python source
29044distribution.")
29045 (license license:bsd-3)))
29046
29047(define-public python-gast
29048 (package
29049 (name "python-gast")
29050 (version "0.6.0")
29051 (source
29052 (origin
29053 (method url-fetch)
29054 (uri (pypi-uri "gast" version))
29055 (sha256
29056 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
29057 (build-system pyproject-build-system)
29058 (native-inputs
29059 (list python-pytest python-setuptools python-wheel))
29060 (home-page "https://github.com/serge-sans-paille/gast/")
29061 (synopsis "Generic Python AST that abstracts the underlying Python version")
29062 (description
29063 "GAST provides a compatibility layer between the AST of various Python
29064versions, as produced by @code{ast.parse} from the standard @code{ast}
29065module.")
29066 (license license:bsd-3)))
29067
29068;; XXX: Not maintained since 2022, leaf package.
29069(define-public python-attr
29070 (package
29071 (name "python-attr")
29072 (version "0.3.2")
29073 (source
29074 (origin
29075 (method url-fetch)
29076 (uri (pypi-uri "attr" version))
29077 (sha256
29078 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
29079 (build-system pyproject-build-system)
29080 (arguments
29081 (list #:test-backend #~'custom
29082 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
29083 (native-inputs
29084 (list python-setuptools))
29085 (home-page "https://github.com/denis-ryzhkov/attr")
29086 (synopsis "Decorator for attributes of target function or class")
29087 (description "Simple decorator to set attributes of target function or
29088class in a @acronym{DRY, Don't Repeat Yourself} way.")
29089 (license license:expat)))
29090
29091(define-public python-construct
29092 ;; Fixes not in a release yet.
29093 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
29094 (revision "1"))
29095 (package
29096 (name "python-construct")
29097 (version (git-version "2.10.70" revision commit))
29098 (source
29099 (origin
29100 (method git-fetch)
29101 (uri (git-reference
29102 (url "https://github.com/construct/construct")
29103 (commit commit)))
29104 (file-name (git-file-name name version))
29105 (sha256
29106 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
29107 (build-system pyproject-build-system)
29108 (arguments
29109 (list
29110 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
29111 (native-inputs
29112 (list python-pytest python-setuptools))
29113 (propagated-inputs
29114 (list python-arrow
29115 python-cloudpickle
29116 python-cryptography
29117 python-lz4
29118 python-numpy
29119 python-ruamel.yaml))
29120 (home-page "https://construct.readthedocs.io")
29121 (synopsis "Declarative and symmetrical parser and builder for binary data")
29122 (description
29123 "This package provides both simple, atomic constructs (such as
29124integers of various sizes), as well as composite ones which allow you
29125form hierarchical and sequential structures of increasing complexity.
29126It features bit and byte granularity, easy debugging and testing, an
29127easy-to-extend subclass system, and lots of primitive constructs to
29128make your work easier.")
29129 (license license:expat))))
29130
29131(define-public python-outcome
29132 (package
29133 (name "python-outcome")
29134 (version "1.3.0.post0")
29135 (source
29136 (origin
29137 (method url-fetch)
29138 (uri (pypi-uri "outcome" version))
29139 (sha256
29140 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
29141 (build-system pyproject-build-system)
29142 (native-inputs
29143 (list python-pytest
29144 python-pytest-asyncio
29145 python-setuptools))
29146 (propagated-inputs
29147 (list python-attrs))
29148 (home-page "https://github.com/python-trio/outcome")
29149 (synopsis "Capture the outcome of Python function calls")
29150 (description
29151 "Capture the outcome of Python function calls. Extracted from the Trio
29152project.")
29153 ;; Either license applies.
29154 (license (list license:expat license:asl2.0))))
29155
29156(define-public python-humanize
29157 (package
29158 (name "python-humanize")
29159 (version "4.14.0")
29160 (source
29161 (origin
29162 (method url-fetch)
29163 (uri (pypi-uri "humanize" version))
29164 (sha256
29165 (base32
29166 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
29167 (build-system pyproject-build-system)
29168 (native-inputs
29169 (list python-freezegun
29170 python-hatch-vcs
29171 python-hatchling
29172 python-pytest))
29173 (home-page "https://github.com/jmoiron/humanize")
29174 (synopsis "Print numerical information in a human-readable form")
29175 (description "This package provides a Python module that displays numbers
29176and dates in \"human readable\" forms. For example, it would display
29177\"12345591313\" as \"12.3 billion\".")
29178 (license license:expat)))
29179
29180(define-public python-annoy
29181 (package
29182 (name "python-annoy")
29183 (version "1.17.3")
29184 (source
29185 (origin
29186 (method git-fetch)
29187 (uri (git-reference
29188 (url "https://github.com/spotify/annoy")
29189 (commit (string-append "v" version))))
29190 (file-name (git-file-name name version))
29191 (sha256
29192 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
29193 (build-system pyproject-build-system)
29194 (arguments
29195 (list
29196 #:test-flags
29197 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
29198 ;; name resolution>
29199 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
29200 "--deselect=test/accuracy_test.py::test_nytimes_16"
29201 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
29202 (native-inputs
29203 (list python-h5py
29204 python-numpy
29205 python-pytest
29206 python-setuptools))
29207 (home-page "https://github.com/spotify/annoy/")
29208 (synopsis "Approximate nearest neighbors library")
29209 (description
29210 "Annoy is a C++ library with Python bindings to search for points in
29211space that are close to a given query point. It also creates large read-only
29212file-based data structures that are @code{mmap}ped into memory so that many
29213processes may share the same data.")
29214 (license license:asl2.0)))
29215
29216(define-public python-croniter
29217 (package
29218 (name "python-croniter")
29219 (version "5.0.1")
29220 (source
29221 (origin
29222 (method git-fetch)
29223 (uri (git-reference
29224 (url "https://github.com/kiorky/croniter")
29225 (commit version)))
29226 (file-name (git-file-name name version))
29227 (sha256
29228 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
29229 (build-system pyproject-build-system)
29230 (native-inputs (list python-pytest python-setuptools))
29231 (propagated-inputs (list python-dateutil python-pytz))
29232 (home-page "https://github.com/kiorky/croniter")
29233 (synopsis "Iterate datetime objects with cron-like syntax")
29234 (description
29235 "@code{croniter} provides iteration for datetime object with cron-like
29236format.")
29237 (license license:expat)))
29238
29239(define-public python-crontab
29240 (package
29241 (name "python-crontab")
29242 (version "3.3.0")
29243 (source
29244 (origin
29245 (method url-fetch)
29246 (uri (pypi-uri "python_crontab" version))
29247 (sha256
29248 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
29249 (build-system pyproject-build-system)
29250 (arguments
29251 (list #:test-flags
29252 ;; This test is made for Windows.
29253 #~(list "-k" "not test_07_non_posix_shell")
29254 #:phases
29255 #~(modify-phases %standard-phases
29256 (add-after 'unpack 'defaults-to-mcron
29257 (lambda* (#:key inputs #:allow-other-keys)
29258 (substitute* "crontab.py"
29259 (("/usr/bin/crontab")
29260 (search-input-file inputs "bin/crontab"))))))))
29261 (inputs
29262 (list mcron python-dateutil))
29263 (native-inputs
29264 (list python-pytest python-setuptools))
29265 (home-page "https://gitlab.com/doctormo/python-crontab/")
29266 (synopsis "Module for reading and writing crontab files")
29267 (description "This Python module can read, write crontab files, and
29268access the system cron automatically and simply using a direct API.")
29269 (license license:lgpl3+)))
29270
29271(define-public python-apscheduler
29272 (package
29273 (name "python-apscheduler")
29274 (version "3.11.2")
29275 (source (origin
29276 (method url-fetch)
29277 (uri (pypi-uri "apscheduler" version))
29278 (sha256
29279 (base32
29280 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
29281 (build-system pyproject-build-system)
29282 (arguments
29283 (list
29284 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
29285 #:test-flags
29286 ;; XXX: Some tests hang or fail with verity of errors:
29287 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
29288 #~(list #$@(map (lambda (test) (string-append "--deselect="
29289 "tests/test_executors.py::"
29290 test))
29291 (list "test_broken_pool"
29292 "test_max_instances[processpool-pytz]"
29293 "test_max_instances[processpool-zoneinfo]"
29294 "test_run_coroutine_job_tornado"
29295 "test_run_job_error[processpool-pytz]"
29296 "test_run_job_error[processpool-zoneinfo]"
29297 "test_submit_job[processpool-pytz-error]"
29298 "test_submit_job[processpool-pytz-executed]"
29299 "test_submit_job[processpool-pytz-missed]"
29300 "test_submit_job[processpool-zoneinfo-error]"
29301 "test_submit_job[processpool-zoneinfo-executed]"
29302 "test_submit_job[processpool-zoneinfo-missed]")))))
29303 (native-inputs
29304 (list python-anyio
29305 python-gevent
29306 python-pyside-6
29307 python-pytest
29308 python-pytest-asyncio
29309 python-pytz
29310 python-setuptools
29311 python-setuptools-scm
29312 python-sqlalchemy
29313 python-tornado
29314 python-twisted))
29315 (propagated-inputs
29316 (list python-tzlocal))
29317 (home-page "https://github.com/agronholm/apscheduler")
29318 (synopsis "Task scheduling library for Python")
29319 (description "Advanced Python Scheduler (APScheduler) is a Python library
29320that lets you schedule your Python code to be executed later, either just once
29321or periodically.
29322
29323You can add new jobs or remove old ones on the fly as you please. If you store
29324your jobs in a database, they will also survive scheduler restarts and maintain
29325their state. When the scheduler is restarted, it will then run all the jobs it
29326should have run while it was offline.")
29327 (license license:expat)))
29328
29329(define-public python-ifaddr
29330 (package
29331 (name "python-ifaddr")
29332 (version "0.2.0")
29333 (source
29334 (origin
29335 (method url-fetch)
29336 (uri (pypi-uri "ifaddr" version))
29337 (sha256
29338 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
29339 (snippet #~(delete-file "ifaddr/_win32.py"))))
29340 (build-system pyproject-build-system)
29341 (native-inputs
29342 (list python-pytest python-setuptools python-wheel))
29343 (home-page "https://github.com/pydron/ifaddr")
29344 (synopsis "Network interface and IP address enumeration library")
29345 (description
29346 "This package provides a network interface and IP address enumeration
29347library in Python.")
29348 (license license:expat)))
29349
29350(define-public python-berkeleydb
29351 (package
29352 (name "python-berkeleydb")
29353 (version "18.1.15")
29354 (source
29355 (origin
29356 (method url-fetch)
29357 (uri (pypi-uri "berkeleydb" version))
29358 (sha256
29359 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
29360 (build-system pyproject-build-system)
29361 (arguments
29362 (list
29363 #:test-backend #~'custom
29364 #:test-flags #~(list "test.py" "-v")
29365 #:phases
29366 #~(modify-phases %standard-phases
29367 (add-after 'unpack 'configure-locations
29368 (lambda* (#:key inputs #:allow-other-keys)
29369 (setenv "BERKELEYDB_DIR"
29370 (assoc-ref inputs "bdb"))
29371 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
29372 "1")))
29373 (add-after 'unpack 'remove-legacy
29374 (lambda _
29375 (substitute* "pyproject.toml"
29376 ((":__legacy__") "")))))))
29377 (native-inputs (list python-setuptools))
29378 (inputs (list bdb))
29379 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
29380 (synopsis "Python bindings for Oracle Berkeley DB")
29381 (description
29382 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
29383C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
29384Transaction objects, and each of these is exposed as a Python type in the
29385bsddb3.db module. The database objects can use various access methods: btree,
29386hash, recno, and queue. Complete support of Berkeley DB distributed
29387transactions. Complete support for Berkeley DB Replication Manager.
29388Complete support for Berkeley DB Base Replication. Support for RPC.")
29389 (license license:bsd-3)))
29390
29391;; Last version before rename to python-berkeleydb.
29392;; This package is close to deprecation.
29393(define-public python-bsddb3
29394 (package
29395 (inherit python-berkeleydb)
29396 (name "python-bsddb3")
29397 (version "6.2.9")
29398 (source
29399 (origin
29400 (method url-fetch)
29401 (uri (pypi-uri "bsddb3" version))
29402 (sha256
29403 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
29404 (arguments
29405 (substitute-keyword-arguments arguments
29406 ;; Tests started failing from [email protected].
29407 ;; The package is in a pre-deprecation phase, so I didn't bother
29408 ;; to try and patch them, but sanity-check passes so the package
29409 ;; itself is likely fine.
29410 ((#:tests? tests? #t)
29411 #f)
29412 ((#:phases phases #~%standard-phases)
29413 #~(modify-phases #$phases
29414 (delete 'remove-legacy)))
29415 ((#:test-flags test-flags #~(list))
29416 #~(list "test3.py" "-v"))))))
29417
29418(define-public python-dbfread
29419 (package
29420 (name "python-dbfread")
29421 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
29422 (revision . "0")))
29423 (version (git-version "2.0.7"
29424 (assoc-ref properties 'revision)
29425 (assoc-ref properties 'commit)))
29426 (source
29427 (origin
29428 (method git-fetch)
29429 (uri (git-reference
29430 (url "https://github.com/olemb/dbfread")
29431 (commit (assoc-ref properties 'commit))))
29432 (file-name (git-file-name name version))
29433 (sha256
29434 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
29435 (build-system pyproject-build-system)
29436 (arguments
29437 (list
29438 #:phases
29439 #~(modify-phases %standard-phases
29440 (add-after 'unpack 'relax-setup.py
29441 (lambda _
29442 (substitute* "setup.py"
29443 (("python_requires.*")
29444 "")))))))
29445 (native-inputs (list python-pytest python-setuptools))
29446 (home-page "https://dbfread.readthedocs.io")
29447 (synopsis "Read DBF Files with Python")
29448 (description
29449 "This library reads DBF files and returns the data as native Python data
29450types for further processing. It is primarily intended for batch jobs and
29451one-off scripts.")
29452 (license license:expat)))
29453
29454(define-public python-cached-property
29455 (package
29456 (name "python-cached-property")
29457 (version "2.0.1")
29458 (source
29459 (origin
29460 (method url-fetch)
29461 (uri (pypi-uri "cached_property" version))
29462 (sha256
29463 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
29464 (build-system pyproject-build-system)
29465 (native-inputs
29466 (list python-freezegun
29467 python-pytest
29468 python-setuptools
29469 python-wheel))
29470 (home-page "https://github.com/pydanny/cached-property")
29471 (synopsis "Decorator for caching properties in classes")
29472 (description
29473 "This package provides a decorator which makes caching
29474time-or-computationally-expensive properties quick and easy and works in
29475Python 2 or 3.")
29476 (license license:bsd-3)))
29477
29478(define-public python-folium
29479 (package
29480 (name "python-folium")
29481 (version "0.19.4")
29482 (source
29483 (origin
29484 ;; PyPI has a ".whl" file but not a proper source release.
29485 ;; Thus, fetch code from Git.
29486 (method git-fetch)
29487 (uri (git-reference
29488 (url "https://github.com/python-visualization/folium")
29489 (commit (string-append "v" version))))
29490 (file-name (git-file-name name version))
29491 (sha256
29492 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29493 (build-system pyproject-build-system)
29494 (arguments
29495 (list #:test-flags
29496 ;; This file requires Selenium.
29497 #~(list "--ignore" "tests/selenium/test_selenium.py"
29498 "-k" (string-append
29499 ;; The tests below also require Selenium.
29500 "not test__repr_png_is_bytes"
29501 " and not test_valid_png"
29502 " and not test_valid_png_size"
29503 " and not test_geojson"
29504 " and not test_heat_map_with_weights"
29505 ;; This performs an online request.
29506 " and not test_json_request"
29507 ;; Requires geodatasets package.
29508 " and not test_timedynamic_geo_json"
29509 ;; AssertionError.
29510 " and not test_minimap"))))
29511 (propagated-inputs
29512 (list python-branca
29513 python-jinja2
29514 python-numpy
29515 python-requests
29516 python-xyzservices))
29517 (native-inputs
29518 (list python-geopandas
29519 python-nbconvert
29520 python-pandas
29521 python-pillow
29522 python-pytest
29523 python-selenium
29524 python-setuptools
29525 python-setuptools-scm
29526 python-wheel))
29527 (home-page "https://github.com/python-visualization/folium")
29528 (synopsis "Make beautiful maps with Leaflet.js & Python")
29529 (description "@code{folium} makes it easy to visualize data that’s been
29530manipulated in Python on an interactive leaflet map. It enables both the
29531binding of data to a map for @code{choropleth} visualizations as well as
29532passing rich vector/raster/HTML visualizations as markers on the map.
29533
29534The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29535Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29536supports Image, Video, GeoJSON and TopoJSON overlays.")
29537 (license license:expat)))
29538
29539(define-public python-mercantile
29540 (package
29541 (name "python-mercantile")
29542 (version "1.2.1")
29543 (source
29544 (origin
29545 (method git-fetch)
29546 (uri (git-reference
29547 (url "https://github.com/mapbox/mercantile")
29548 (commit version)))
29549 (file-name (git-file-name name version))
29550 (sha256
29551 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29552 (build-system pyproject-build-system)
29553 (propagated-inputs (list python-click))
29554 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29555 python-setuptools))
29556 (home-page "https://github.com/mapbox/mercantile")
29557 (synopsis "Web mercator XYZ tile utilities")
29558 (description
29559 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29560@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29561left corner and bounding longitudes and latitudes for XYZ tiles, a
29562@code{xy(lng, lat)} function that returns spherical mercator x and y
29563coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29564containing a given point, and quadkey conversion functions
29565@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29566translating between quadkey and tile coordinates.")
29567 (license license:bsd-3)))
29568
29569(define-public jube
29570 (package
29571 ;; This is a command-line tool, so no "python-" prefix.
29572 (name "jube")
29573 (version "2.6.1")
29574 (source
29575 (origin
29576 (method url-fetch)
29577 (uri (string-append
29578 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29579 version))
29580 (sha256
29581 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
29582 (file-name (string-append "jube-" version ".tar.gz"))))
29583 (build-system pyproject-build-system)
29584 (arguments
29585 (list
29586 #:tests? #f)) ; No tests.
29587 (propagated-inputs (list python-pyyaml))
29588 (native-inputs (list python-setuptools))
29589 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29590 (synopsis "Benchmarking environment")
29591 (description
29592 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29593benchmarked application, benchmark data is stored in a format that allows JUBE
29594to deduct the desired information. This data can be parsed by automatic pre-
29595and post-processing scripts that draw information and store it more densely
29596for manual interpretation.")
29597 (license license:gpl3+)))
29598
29599(define-public python-pyroutelib3
29600 (package
29601 (name "python-pyroutelib3")
29602 (version "2.0.0")
29603 (source
29604 (origin
29605 (method git-fetch)
29606 (uri (git-reference
29607 (url "https://github.com/MKuranowski/pyroutelib3")
29608 (commit (string-append "v" version))))
29609 (file-name (git-file-name name version))
29610 (sha256
29611 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29612 (build-system pyproject-build-system)
29613 (propagated-inputs (list python-dateutil python-protobuf-5))
29614 (native-inputs (list python-filelock python-flit-core python-pytest))
29615 (home-page "https://github.com/MKuranowski/pyroutelib3")
29616 (synopsis "Library for simple routing on OSM data")
29617 (description "Library for simple routing on OSM data")
29618 (license license:gpl3+)))
29619
29620(define-public python-bibtexparser
29621 (package
29622 (name "python-bibtexparser")
29623 (version "2.0.0b9")
29624 (source
29625 (origin
29626 (method git-fetch)
29627 (uri (git-reference
29628 (url "https://github.com/sciunto-org/python-bibtexparser")
29629 (commit (string-append "v" version))))
29630 (file-name (git-file-name name version))
29631 (sha256
29632 (base32 "1ym3lnvm02j2qxvm3qwbw8a10b6wc70wrfwqiqgppcap2vd5h85y"))))
29633 (build-system pyproject-build-system)
29634 (propagated-inputs (list python-pylatexenc python-pyparsing))
29635 (native-inputs
29636 (list python-pylatexenc python-pytest python-setuptools))
29637 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29638 (synopsis "Python library to parse BibTeX files")
29639 (description "BibtexParser is a Python library to parse BibTeX files.")
29640 (license (list license:bsd-3 license:lgpl3))))
29641
29642(define-public python-bibtexparser-for-cobib
29643 (hidden-package
29644 (package
29645 (inherit python-bibtexparser)
29646 (name "python-bibtexparser")
29647 (version "1.4.0")
29648 (source
29649 (origin
29650 (method git-fetch)
29651 (uri (git-reference
29652 (url "https://github.com/sciunto-org/python-bibtexparser")
29653 (commit (string-append "v" version))))
29654 (file-name (git-file-name name version))
29655 (sha256
29656 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29657
29658(define-public python-distro
29659 (package
29660 (name "python-distro")
29661 (version "1.9.0")
29662 (source
29663 (origin
29664 (method url-fetch)
29665 (uri (pypi-uri "distro" version))
29666 (sha256
29667 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29668 (build-system pyproject-build-system)
29669 (arguments
29670 (list
29671 #:test-flags
29672 #~(list "-k" (string-join
29673 ;; We are not on Ubunto distro:
29674 ;; AssertionError: assert '' == 'ubuntu'.
29675 (list "not test_ubuntu14normal_lsb_release"
29676 "test_trailingblanks_lsb_release"
29677 "test_ubuntu14nomodules_lsb_release")
29678 " and not "))))
29679 (native-inputs
29680 (list python-pytest
29681 python-setuptools))
29682 (home-page "https://github.com/python-distro/distro")
29683 (synopsis "OS platform information API")
29684 (description
29685 "@code{distro} provides information about the OS distribution it runs on,
29686such as a reliable machine-readable ID, or version information.
29687
29688It is the recommended replacement for Python's original
29689`platform.linux_distribution` function (which will be removed in Python 3.8).
29690@code{distro} also provides a command-line interface to output the platform
29691information in various formats.")
29692 (license license:asl2.0)))
29693
29694(define-public python-cairosvg
29695 (package
29696 (name "python-cairosvg")
29697 (version "2.8.2")
29698 (source
29699 (origin
29700 (method url-fetch)
29701 (uri (pypi-uri "cairosvg" version))
29702 (sha256
29703 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29704 (build-system pyproject-build-system)
29705 (arguments
29706 (list #:test-flags #~(list "cairosvg/test_api.py")))
29707 (native-inputs
29708 (list python-pytest
29709 python-setuptools))
29710 (propagated-inputs
29711 (list python-cairocffi
29712 python-cssselect2
29713 python-defusedxml
29714 python-pillow
29715 python-tinycss2))
29716 (home-page "https://cairosvg.org/")
29717 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29718 (description "CairoSVG is a SVG converter based on Cairo. It can export
29719SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29720SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29721parsed, the result is drawn to a Cairo surface that can be exported to
29722qvarious formats: PDF, PostScript, PNG and even SVG.")
29723 (license license:lgpl3+)))
29724
29725(define-public python-pyphen
29726 (package
29727 (name "python-pyphen")
29728 (version "0.17.2")
29729 (source
29730 (origin
29731 (method git-fetch)
29732 (uri (git-reference
29733 (url "https://github.com/Kozea/Pyphen")
29734 (commit version)))
29735 (file-name (git-file-name name version))
29736 (sha256
29737 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29738 (build-system pyproject-build-system)
29739 (native-inputs (list python-flit-core python-pytest))
29740 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29741 ;; embedded set provided by upstream - like Debian does.
29742 (home-page "https://github.com/Kozea/Pyphen")
29743 (synopsis "Pure Python module to hyphenate text")
29744 (description "Pyphen is a pure Python module to hyphenate text using
29745existing Hunspell hyphenation dictionaries.")
29746 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
29747
29748(define-public python-intelhex
29749 (package
29750 (name "python-intelhex")
29751 (version "2.3.0")
29752 (source
29753 (origin
29754 (method git-fetch)
29755 (uri (git-reference
29756 (url "https://github.com/python-intelhex/intelhex")
29757 (commit version)))
29758 (file-name (git-file-name name version))
29759 (sha256
29760 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
29761 (build-system pyproject-build-system)
29762 (arguments (list #:test-backend #~'unittest))
29763 (native-inputs (list python-setuptools))
29764 (home-page "https://github.com/python-intelhex/intelhex")
29765 (synopsis "Python library for Intel HEX files manipulations")
29766 (description
29767 "The Intel HEX file format is widely used in microprocessors and
29768microcontrollers area (embedded systems etc.) as the de facto standard for
29769representation of code to be programmed into microelectronic devices. This
29770package provides an intelhex Python library to read, write, create from
29771scratch and manipulate data from Intel HEX file format. It also includes
29772several convenience Python scripts, including \"classic\" hex2bin and bin2hex
29773converters and more, those based on the library itself.")
29774 (license license:bsd-3)))
29775
29776(define-public python-interlap
29777 (package
29778 (name "python-interlap")
29779 (version "0.2.7")
29780 (source
29781 (origin
29782 (method git-fetch)
29783 (uri (git-reference
29784 (url "https://github.com/brentp/interlap")
29785 (commit (string-append "v" version))))
29786 (file-name (git-file-name name version))
29787 (sha256
29788 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
29789 (build-system pyproject-build-system)
29790 (arguments
29791 (list
29792 #:test-backend #~'custom
29793 #:test-flags #~(list "interlap.py")))
29794 (native-inputs (list python-setuptools))
29795 (home-page "https://brentp.github.io/interlap")
29796 (synopsis "Fast, simple interval overlap testing")
29797 (description
29798 "InterLap does fast interval overlap testing with a simple Python data
29799structure.")
29800 (license license:expat)))
29801
29802(define-public python-pykwalify
29803 (package
29804 (name "python-pykwalify")
29805 (version "1.8.0")
29806 (source
29807 (origin
29808 (method git-fetch)
29809 (uri (git-reference
29810 (url "https://github.com/grokzen/pykwalify")
29811 (commit version)))
29812 (file-name (git-file-name name version))
29813 (sha256
29814 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
29815 (build-system pyproject-build-system)
29816 (arguments
29817 (list
29818 #:test-flags
29819 ;; XXX: yaml safe_dump() has been removed.
29820 #~(list "--ignore=tests/test_unicode.py"
29821 "--deselect=tests/test_core.py::TestCore::test_core_files")))
29822 (native-inputs
29823 (list python-pytest python-setuptools python-testfixtures))
29824 (propagated-inputs
29825 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
29826 (home-page "https://github.com/grokzen/pykwalify")
29827 (synopsis "Python lib/cli for JSON/YAML schema validation")
29828 (description
29829 "This package provides a parser, schema validator, and data binding tool
29830for YAML and JSON.")
29831 (license license:expat)))
29832
29833(define-public python-pykakasi
29834 (package
29835 (name "python-pykakasi")
29836 (version "2.3.0")
29837 (source
29838 (origin
29839 (method url-fetch)
29840 (uri (pypi-uri "pykakasi" version))
29841 (sha256
29842 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
29843 (build-system pyproject-build-system)
29844 (arguments (list #:test-flags ''("-k" "not test_aozora")))
29845 (propagated-inputs (list python-deprecated python-importlib-resources
29846 python-jaconv))
29847 (native-inputs (list python-coverage
29848 python-py-cpuinfo
29849 python-pytest
29850 python-pytest-benchmark
29851 python-setuptools
29852 python-setuptools-scm
29853 python-wheel))
29854 (home-page "https://codeberg.org/miurahr/pykakasi")
29855 (synopsis "Kana kanji simple inversion library")
29856 (description
29857 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
29858Language Processing} library to transliterate hiragana, katakana and
29859kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
29860characters in NFC form.
29861
29862Its algorithms are based on the kakasi library, which is written in C.")
29863 (license license:gpl3+)))
29864
29865(define-public python-dbus
29866 (package
29867 (name "python-dbus")
29868 (version "1.3.2")
29869 (source
29870 (origin
29871 (method url-fetch)
29872 (uri (pypi-uri "dbus-python" version))
29873 (sha256
29874 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
29875 (build-system pyproject-build-system)
29876 (arguments
29877 (list
29878 #:tests? #f ;XXX: Tests require setup
29879 #:phases
29880 #~(modify-phases %standard-phases
29881 (add-after 'unpack 'patch-requirements
29882 (lambda _
29883 (substitute* (list "pyproject.toml" "setup.py")
29884 (("'(ninja|patchelf)',?") ""))
29885 (substitute* "setup.cfg"
29886 (("(ninja|patchelf)") "")))))))
29887 (native-inputs
29888 (list pkg-config
29889 meson
29890 ninja/pinned
29891 patchelf
29892 python-meson
29893 python-setuptools
29894 python-tappy))
29895 (inputs
29896 (list dbus glib))
29897 (propagated-inputs
29898 (list python-pygobject))
29899 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
29900 (synopsis "Python bindings for libdbus")
29901 (description
29902 "This package provides Python bindings to libdbus, the reference
29903implementation of the D-Bus protocol.")
29904 (license license:expat)))
29905
29906;; Added on 2026-01-05
29907(define-deprecated-package python-dbus-python python-dbus)
29908
29909(define python-dbusmock-patch-paths-phase
29910 #~(lambda* (#:key inputs #:allow-other-keys)
29911 (substitute* "tests/test_api.py"
29912 (("/usr/bin/python3")
29913 (which "python3")))
29914 (substitute* "dbusmock/testcase.py"
29915 (("\"dbus-daemon\"")
29916 (object->string
29917 (search-input-file inputs "/bin/dbus-daemon"))))))
29918
29919(define-public python-dbusmock
29920 (package
29921 (name "python-dbusmock")
29922 (version "0.37.2")
29923 (source
29924 (origin
29925 (method git-fetch)
29926 (uri (git-reference
29927 (url "https://github.com/martinpitt/python-dbusmock")
29928 (commit version)))
29929 (file-name (git-file-name name version))
29930 (sha256
29931 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29932 (build-system pyproject-build-system)
29933 (arguments
29934 (list
29935 #:modules `((guix build pyproject-build-system)
29936 (guix build utils)
29937 (ice-9 match))
29938 #:phases
29939 #~(modify-phases %standard-phases
29940 (add-after 'unpack 'patch-paths
29941 #$python-dbusmock-patch-paths-phase)
29942 (replace 'check
29943 (lambda* (#:key tests? #:allow-other-keys)
29944 (when tests?
29945 (match (primitive-fork)
29946 (0 ;child process
29947 (execlp "pytest" "pytest" "-vv"))
29948 (pytest-pid
29949 (let loop ()
29950 ;; Reap child processes; otherwise, python-dbusmock
29951 ;; would waste time polling for the dbus processes
29952 ;; it spawns to be reaped, in vain.
29953 (match (waitpid WAIT_ANY)
29954 ((pid . status)
29955 (if (= pid pytest-pid)
29956 (unless (zero? status)
29957 (error "`pytest' exited with status"
29958 status))
29959 (loop)))))))))))))
29960 (native-inputs (list python-pytest python-setuptools upower which))
29961 (inputs (list dbus))
29962 (propagated-inputs (list python-dbus python-pygobject))
29963 (home-page "https://github.com/martinpitt/python-dbusmock")
29964 (synopsis "Python library for mock D-Bus objects")
29965 (description
29966 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
29967This is useful for writing tests for software which talks to D-Bus services
29968such as upower, systemd, logind, gnome-session or others, and it is hard (or
29969impossible without root privileges) to set the state of the real services to
29970what you expect in your tests.")
29971 (license license:lgpl3+)))
29972
29973(define-public python-dbusmock-for-tests
29974 (package
29975 (inherit python-dbusmock)
29976 (name "python-dbusmock-for-tests")
29977 (version "0.37.2")
29978 (source
29979 (origin
29980 (method git-fetch)
29981 (uri (git-reference
29982 (url "https://github.com/martinpitt/python-dbusmock")
29983 (commit version)))
29984 (file-name (git-file-name name version))
29985 (sha256
29986 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29987 (arguments
29988 (list
29989 #:tests? #f
29990 #:phases
29991 #~(modify-phases %standard-phases
29992 (add-after 'unpack 'patch-paths
29993 #$python-dbusmock-patch-paths-phase))))
29994 (native-inputs (list python-setuptools which))
29995 (properties '((hidden? . #t)))))
29996
29997;; XXX: Deprecated on <2026-01-21>.
29998(define-deprecated/public-alias python-dbusmock-minimal
29999 python-dbusmock-for-tests)
30000
30001(define-public python-jsonplus
30002 (package
30003 (name "python-jsonplus")
30004 (home-page "https://github.com/randomir/jsonplus")
30005 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
30006 (revision . "0")))
30007 (version (git-version "0.8.0"
30008 (assoc-ref properties 'revision)
30009 (assoc-ref properties 'commit)))
30010 (source
30011 (origin
30012 (method git-fetch)
30013 (uri (git-reference
30014 (url home-page)
30015 (commit (assoc-ref properties 'commit))))
30016 (file-name (git-file-name name version))
30017 (sha256
30018 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
30019 (build-system pyproject-build-system)
30020 (arguments
30021 (list
30022 ;; XXX: Tests require the additional package moneyed.
30023 #:tests? #f
30024 #:phases
30025 #~(modify-phases %standard-phases
30026 (add-after 'unpack 'chdir
30027 (lambda _
30028 (chdir "python"))))))
30029 (native-inputs (list python-setuptools))
30030 (propagated-inputs
30031 (list python-dateutil python-simplejson python-sortedcontainers))
30032 (synopsis "Serialize Python types to/from JSON")
30033 (description
30034 "This package provides functionality to serialize arbitrary data types
30035to and from JSON. Common data types are implemented and it is easy to
30036register custom encoders and decoders.")
30037 (license license:expat)))
30038
30039(define-public python-ioctl-opt
30040 (package
30041 (name "python-ioctl-opt")
30042 (version "1.3")
30043 (source
30044 (origin
30045 (method url-fetch)
30046 (uri (pypi-uri "ioctl-opt" version))
30047 (sha256
30048 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
30049 (build-system pyproject-build-system)
30050 (arguments
30051 (list #:tests? #f)) ;no tests
30052 (native-inputs (list python-setuptools))
30053 (home-page "http://github.com/vpelletier/python-ioctl-opt")
30054 (synopsis "Functions to compute fnctl.ioctl's opt argument")
30055 (description
30056 "This package provides functions to compute fnctl.ioctl's opt argument.")
30057 (license license:gpl2+)))
30058
30059(define-public python-anyio
30060 (package
30061 (name "python-anyio")
30062 (version "4.12.1")
30063 (source
30064 (origin
30065 (method url-fetch)
30066 (uri (pypi-uri "anyio" version))
30067 (sha256
30068 (base32
30069 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
30070 (patches
30071 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
30072 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
30073 (build-system pyproject-build-system)
30074 (arguments
30075 (list
30076 ;; tests:
30077 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
30078 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
30079 #:test-flags
30080 #~(list "-m" "not network"
30081 ;; Tests are shaky with a lot of DNS lookups.
30082 "--ignore=tests/test_sockets.py"
30083 #$@(map (lambda (ls)
30084 (string-append "--deselect=" (string-join ls "::")))
30085 (append
30086 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
30087 ;; timeout expired running: <...>
30088 '(("tests/test_pytest_plugin.py"
30089 "test_keyboardinterrupt_during_test"))
30090 (if (target-aarch64?)
30091 ;; Assertions are not equal on ARM.
30092 '(("tests/streams/test_tls.py"
30093 "TestTLSListener"
30094 "test_handshake_fail")
30095 ("tests/test_taskgroups.py"
30096 "test_shielded_cancel_sleep_time")
30097 ("tests/test_to_thread.py"
30098 "test_run_in_custom_limiter")
30099 ("tests/test_to_thread.py"
30100 "TestBlockingPortalProvider"
30101 "test_single_thread"))
30102 '()))))))
30103 (propagated-inputs
30104 (list python-idna
30105 python-sniffio
30106 python-typing-extensions))
30107 (native-inputs
30108 (list python-blockbuster
30109 python-psutil
30110 python-pytest
30111 python-pytest-mock
30112 python-setuptools
30113 python-setuptools-scm
30114 python-trio
30115 python-trustme
30116 python-truststore
30117 python-uvloop))
30118 (home-page "https://anyio.readthedocs.io")
30119 (synopsis "Compatibility layer for multiple asynchronous event loops")
30120 (description
30121 "AnyIO is an asynchronous networking and concurrency library that works
30122on top of either asyncio or trio. It implements trio-like structured
30123concurrency on top of asyncio, and works in harmony with the native SC of trio
30124itself.")
30125 (license license:expat)))
30126
30127(define-public python-argh
30128 (package
30129 (name "python-argh")
30130 (version "0.31.3")
30131 (source
30132 (origin
30133 (method url-fetch)
30134 (uri (pypi-uri "argh" version))
30135 (sha256
30136 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
30137 (build-system pyproject-build-system)
30138 (native-inputs (list python-flit-core python-pytest))
30139 (home-page "https://github.com/neithere/argh/")
30140 (synopsis "Argparse wrapper with natural syntax")
30141 (description
30142 "Argh is a small library that provides several layers of abstraction
30143on top of @code{python-argparse}. The layers can be mixed. It is always
30144possible to declare a command with the highest possible (and least flexible)
30145layer and then tune the behaviour with any of the lower layers including the
30146native API of @code{python-argparse}.")
30147 (license license:lgpl3+)))
30148
30149(define-public python-pox
30150 (package
30151 (name "python-pox")
30152 (version "0.3.6")
30153 (source
30154 (origin
30155 (method url-fetch)
30156 (uri (pypi-uri "pox" version))
30157 (sha256
30158 (base32
30159 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
30160 (build-system pyproject-build-system)
30161 (arguments
30162 (list
30163 #:phases
30164 #~(modify-phases %standard-phases
30165 (replace 'check
30166 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30167 (when tests?
30168 (mkdir-p "/tmp/guix")
30169 (setenv "SHELL" "bash")
30170 (setenv "USERNAME" "guix")
30171 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
30172 (invoke "python" "./pox/tests/__main__.py")))))))
30173 (native-inputs
30174 (list python-setuptools
30175 which)) ;pox/tests/test_shutils.py
30176 (home-page "https://pypi.org/project/pox/")
30177 (synopsis "Python utilities for file system exploration and automated builds")
30178 (description
30179 "Pox provides a collection of utilities for navigating and manipulating
30180file systems. This module is designed to facilitate some of the low-level
30181operating system interactions that are useful when exploring a file system on a
30182remote host. Pox provides Python equivalents of several shell commands such
30183as @command{which} and @command{find}. These commands allow automated
30184discovery of what has been installed on an operating system, and where the
30185essential tools are located.")
30186 (license license:bsd-3)))
30187
30188(define-public python-flit
30189 (package
30190 (name "python-flit")
30191 (version "3.12.0") ;same as python-flit-core
30192 (source
30193 (origin
30194 (method url-fetch)
30195 (uri (pypi-uri "flit" version))
30196 (sha256
30197 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
30198 (build-system pyproject-build-system)
30199 (arguments
30200 (list
30201 #:test-flags
30202 ;; These tests fail when FLIT_NO_NETWORK is set
30203 '(list "-k" "not test_invalid_classifier \
30204and not test_install_requires \
30205and not test_install_requires_extra \
30206and not test_validate_classifiers_private")
30207 #:phases
30208 #~(modify-phases %standard-phases
30209 (add-after 'unpack 'relax-pip-requirement
30210 ;; python -m pip is available by default, no need to
30211 ;; propagate pip.
30212 (lambda _
30213 (substitute* "pyproject.toml"
30214 (("\"pip\",")
30215 ""))))
30216 (add-before 'check 'pre-check
30217 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30218 (when tests?
30219 (setenv "HOME" "/tmp")
30220 (setenv "FLIT_NO_NETWORK" "1")))))))
30221 (propagated-inputs
30222 (list python-tomli-w
30223 python-flit-core
30224 python-docutils
30225 python-requests))
30226 (native-inputs
30227 (list python-responses
30228 python-pytest
30229 python-testpath))
30230 (home-page "https://flit.readthedocs.io/")
30231 (synopsis "Simple packaging tool for simple packages")
30232 (description "Flit is a simple way to put Python packages and modules on
30233PyPI. Flit packages a single importable module or package at a time, using
30234the import name as the name on PyPI. All subpackages and data files within a
30235package are included automatically.")
30236 (license license:bsd-3)))
30237
30238(define-public python-fastentrypoints
30239 (package
30240 (name "python-fastentrypoints")
30241 (home-page "https://github.com/ninjaaron/fast-entry_points")
30242 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
30243 (revision . "0")))
30244 (version (git-version "0.12"
30245 (assoc-ref properties 'revision)
30246 (assoc-ref properties 'commit)))
30247 (source
30248 (origin
30249 (method git-fetch)
30250 (uri (git-reference
30251 (url home-page)
30252 (commit (assoc-ref properties 'commit))))
30253 (file-name (git-file-name name version))
30254 (sha256
30255 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
30256 (build-system pyproject-build-system)
30257 (arguments
30258 (list
30259 ;; XXX: Testing is non-standard and hardly configurable.
30260 #:tests? #f
30261 #:test-backend #~'custom
30262 #:test-flags #~(list "test/runtest.py")))
30263 (native-inputs (list python-setuptools))
30264 (synopsis "Makes entry_points specified in setup.py load more quickly")
30265 (description
30266 "Using entry_points in your setup.py makes scripts that start really
30267slowly because it imports pkg_resources. This package allows such setup
30268scripts to load entry points more quickly.")
30269 (license license:bsd-3)))
30270
30271(define-public python-funcparserlib
30272 (package
30273 (name "python-funcparserlib")
30274 (version "1.0.1")
30275 (source
30276 (origin
30277 ;; Source tarball on PyPi lacks tests.
30278 (method git-fetch)
30279 (uri (git-reference
30280 (url "https://github.com/vlasovskikh/funcparserlib")
30281 (commit version)))
30282 (file-name (git-file-name name version))
30283 (sha256
30284 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
30285 (build-system pyproject-build-system)
30286 (arguments
30287 '(#:phases
30288 (modify-phases %standard-phases
30289 (replace 'check
30290 (lambda* (#:key tests? #:allow-other-keys)
30291 (when tests?
30292 (invoke "python" "-m" "unittest" "discover" "-v")))))))
30293 ;; ModuleNotFoundError: No module named 'poetry'
30294 (native-inputs (list python-poetry-core python-six))
30295 (home-page "https://github.com/vlasovskikh/funcparserlib")
30296 (synopsis
30297 "Recursive descent parsing library based on functional combinators")
30298 (description
30299 "This package is a recursive descent parsing library for Python based on
30300functional combinators. Parser combinators are just higher-order functions
30301that take parsers as their arguments and return them as result values.")
30302 (license license:expat)))
30303
30304(define-public python-cson
30305 (package
30306 (name "python-cson")
30307 (version "0.8")
30308 (source
30309 (origin
30310 (method git-fetch)
30311 (uri (git-reference
30312 (url "https://github.com/avakar/pycson")
30313 (commit version)))
30314 (file-name (git-file-name name version))
30315 (sha256
30316 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
30317 (build-system pyproject-build-system)
30318 (native-inputs (list python-pytest python-setuptools python-wheel))
30319 (propagated-inputs (list python-speg))
30320 (home-page "https://github.com/avakar/pycson")
30321 (synopsis "Parser for Coffeescript Object Notation (CSON)")
30322 (description
30323 "This package is a parser for Coffeescript Object Notation (CSON).")
30324 (license license:expat)))
30325
30326(define-public python-aionotify
30327 (package
30328 (name "python-aionotify")
30329 (version "0.3.1")
30330 (source
30331 (origin
30332 ;; Source tarball on PyPi lacks tests
30333 (method git-fetch)
30334 (uri (git-reference
30335 (url "https://github.com/rbarrois/aionotify")
30336 (commit version)))
30337 (file-name (git-file-name name version))
30338 (sha256
30339 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
30340 (build-system pyproject-build-system)
30341 (native-inputs
30342 (list python-pytest
30343 python-setuptools
30344 python-wheel))
30345 (home-page "https://github.com/rbarrois/aionotify")
30346 (synopsis "inotify library for Python")
30347 (description
30348 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
30349 (license license:bsd-3)))
30350
30351(define-public python-forbiddenfruit
30352 (package
30353 (name "python-forbiddenfruit")
30354 (version "0.1.4")
30355 (source
30356 (origin
30357 (method git-fetch)
30358 (uri (git-reference
30359 (url "https://github.com/clarete/forbiddenfruit")
30360 (commit version)))
30361 (file-name (git-file-name name version))
30362 (sha256
30363 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
30364 (build-system pyproject-build-system)
30365 (arguments
30366 (list
30367 #:phases
30368 #~(modify-phases %standard-phases
30369 (replace 'check
30370 (lambda* (#:key tests? #:allow-other-keys)
30371 (when tests?
30372 (invoke "make" "prepare" "SKIP_DEPS=1")
30373 (invoke "nosetests")))))))
30374 (native-inputs (list python-pynose python-setuptools))
30375 (home-page "https://github.com/clarete/forbiddenfruit")
30376 (synopsis "Patch python built-in objects")
30377 (description "This project allows Python code to extend built-in types.")
30378 (license (list license:gpl3+ license:expat))))
30379
30380(define-public python-k5test
30381 (package
30382 (name "python-k5test")
30383 (version "0.10.4")
30384 (source
30385 (origin
30386 (method url-fetch)
30387 (uri (pypi-uri "k5test" version))
30388 (sha256
30389 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
30390 (build-system pyproject-build-system)
30391 (arguments
30392 (list #:tests? #f)) ;no tests
30393 (native-inputs
30394 (list python-setuptools))
30395 (inputs
30396 (list mit-krb5))
30397 (home-page "https://github.com/pythongssapi/k5test")
30398 (synopsis "Library for setting up self-contained Kerberos 5 environments")
30399 (description
30400 "@code{k5test} is a library for setting up self-contained Kerberos 5
30401environments, and running Python unit tests inside those environments. It is
30402based on the file of the same name found alongside the MIT Kerberos 5 unit
30403tests.")
30404 (license license:isc)))
30405
30406(define-public python-gssapi
30407 (package
30408 (name "python-gssapi")
30409 (version "1.10.0")
30410 (source
30411 (origin
30412 (method url-fetch)
30413 (uri (pypi-uri "gssapi" version))
30414 (sha256
30415 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
30416 (build-system pyproject-build-system)
30417 (arguments
30418 (list #:test-flags #~(list "--pyargs" "gssapi")))
30419 (native-inputs
30420 (list python-cython
30421 python-k5test
30422 python-parameterized
30423 python-pytest
30424 python-setuptools))
30425 (inputs
30426 (list mit-krb5))
30427 (propagated-inputs
30428 (list python-decorator))
30429 (home-page "https://github.com/pythongssapi/python-gssapi")
30430 (synopsis "Python GSSAPI Wrapper")
30431 (description
30432 "Python-GSSAPI provides both low-level and high level wrappers around the
30433GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
30434also be usable with other GSSAPI mechanisms.")
30435 (license license:isc)))
30436
30437(define-public python-check-manifest
30438 (package
30439 (name "python-check-manifest")
30440 (version "0.51")
30441 (source
30442 (origin
30443 (method url-fetch)
30444 (uri (pypi-uri "check_manifest" version))
30445 (sha256
30446 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
30447 (build-system pyproject-build-system)
30448 (arguments
30449 (list
30450 ;; tests: 127 passed, 20 skipped, 2 deselected
30451 #:test-flags
30452 ;; This tests requires setting up a venv which does not work
30453 ;; properly in the build environment.
30454 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
30455 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
30456 (native-inputs
30457 (list git-minimal/pinned python-pytest))
30458 (propagated-inputs
30459 (list python-pypa-build python-setuptools))
30460 (home-page "https://github.com/mgedmin/check-manifest")
30461 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30462 (description "Python package can include a MANIFEST.in file to help with
30463sending package files to the Python Package Index. This package checks that
30464file to ensure it completely and accurately describes your project.")
30465 (license license:expat)))
30466
30467(define-public python-android-stringslib
30468 (package
30469 (name "python-android-stringslib")
30470 (version "0.1.2")
30471 (source
30472 (origin
30473 (method git-fetch)
30474 (uri (git-reference
30475 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30476 (commit (string-append "v" version))))
30477 (file-name (git-file-name name version))
30478 (sha256
30479 (base32
30480 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30481 (build-system pyproject-build-system)
30482 (arguments (list #:tests? #f)) ; No tests.
30483 (native-inputs (list python-setuptools))
30484 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30485 (synopsis "Android strings.xml support")
30486 (description
30487 "Android Strings Lib provides support for android's strings.xml files.
30488These files are used to translate strings in android apps.")
30489 (license license:expat)))
30490
30491(define-public offlate
30492 (package
30493 (name "offlate")
30494 (version "0.6.1")
30495 (source
30496 (origin
30497 (method git-fetch)
30498 (uri (git-reference
30499 (url "https://framagit.org/tyreunom/offlate")
30500 (commit version)))
30501 (file-name (git-file-name name version))
30502 (sha256
30503 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
30504 (build-system pyproject-build-system)
30505 (arguments
30506 (list
30507 #:tests? #f ; No tests.
30508 #:phases
30509 #~(modify-phases %standard-phases
30510 (add-before 'build 'generate-fonts
30511 (lambda _
30512 (invoke "make" "fonts")))
30513 (add-before 'build 'generate-translations
30514 (lambda _
30515 (invoke "make" "update-langs"))))))
30516 (propagated-inputs
30517 (list python-android-stringslib
30518 python-dateutil
30519 python-gitlab
30520 python-lxml
30521 python-polib
30522 python-pycountry
30523 python-pyenchant
30524 python-pygit2
30525 python-pygithub
30526 python-pyqt
30527 python-requests
30528 python-ruamel.yaml
30529 python-translate-toolkit-for-offlate
30530 python-translation-finder
30531 python-watchdog))
30532 (native-inputs (list qttools-5 fontforge python-setuptools))
30533 (home-page "https://framagit.org/tyreunom/offlate")
30534 (synopsis "Offline translation interface for online translation tools")
30535 (description
30536 "Offlate offers a unified interface for different translation file
30537formats, as well as many different online translation platforms. You can use
30538it to get work from online platforms, specialized such as the Translation
30539Project, or not such a gitlab instance when your upstream doesn't use any
30540dedicated platform. The tool proposes a unified interface for any format and
30541an upload option to send your work back to the platform.")
30542 (license license:gpl3+)))
30543
30544(define-public python-pypng
30545 (package
30546 (name "python-pypng")
30547 (version "0.20220715.0")
30548 (source
30549 (origin
30550 (method url-fetch)
30551 (uri (pypi-uri "pypng" version))
30552 (sha256
30553 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30554 (build-system pyproject-build-system)
30555 (arguments
30556 (list
30557 #:phases
30558 '(modify-phases %standard-phases
30559 (add-before 'check 'pre-check
30560 (lambda _
30561 (setenv "PYTHONPATH"
30562 (string-append (getcwd) "/code:"
30563 (getenv "GUIX_PYTHONPATH"))))))))
30564 (native-inputs (list python-pytest python-setuptools python-wheel))
30565 (home-page "https://github.com/drj11/pypng")
30566 (synopsis "Pure Python PNG image encoder/decoder")
30567 (description
30568 "The PyPNG module implements support for PNG images. It reads and writes
30569PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30570pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30571LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30572images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30573A number of optional chunks can be specified (when writing) and
30574understood (when reading): tRNS, bKGD, gAMA.
30575
30576PyPNG is not a high level toolkit for image processing (like PIL) and does not
30577aim at being a replacement or competitor. Its strength lies in fine-grained
30578extensive support of PNG features. It can also read and write Netpbm PAM
30579files, with a focus on its use as an intermediate format for implementing
30580custom PNG processing.")
30581 (license license:expat)))
30582
30583(define-public python-fuzzywuzzy
30584 (package
30585 (name "python-fuzzywuzzy")
30586 (version "0.18.0")
30587 (source
30588 (origin
30589 (method git-fetch)
30590 (uri (git-reference
30591 (url "https://github.com/seatgeek/fuzzywuzzy")
30592 (commit version)))
30593 (file-name (git-file-name name version))
30594 (sha256
30595 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30596 (build-system pyproject-build-system)
30597 (arguments
30598 (list
30599 #:test-flags
30600 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30601 (native-inputs
30602 (list python-hypothesis
30603 python-pycodestyle
30604 python-pytest
30605 python-setuptools))
30606 (propagated-inputs (list python-levenshtein))
30607 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30608 (synopsis "Fuzzy string matching in Python")
30609 (description
30610 "Approximate string matching using @emph{Levenshtein Distance} to
30611calculate the differences between sequences.")
30612 (license license:gpl2)))
30613
30614(define-public python-block-tracing
30615 (package
30616 (name "python-block-tracing")
30617 (version "1.0.1")
30618 (source
30619 (origin
30620 (method url-fetch)
30621 (uri (pypi-uri "block_tracing" version))
30622 (sha256
30623 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30624 (build-system pyproject-build-system)
30625 (arguments (list #:tests? #f)) ; No tests.
30626 (native-inputs (list python-setuptools))
30627 (home-page "https://github.com/rianhunter/block_tracing")
30628 (synopsis "Protect process memory")
30629 (description
30630 "@code{block_tracing} is a tiny Python library that can be used to
30631prevent debuggers and other applications from inspecting the memory within
30632your process.")
30633 (license license:expat)))
30634
30635(define-public python-json-e
30636 (package
30637 (name "python-json-e")
30638 (version "4.8.0")
30639 (source
30640 (origin
30641 (method git-fetch) ; no tests in PyPI release
30642 (uri (git-reference
30643 (url "https://github.com/json-e/json-e")
30644 (commit (string-append "v" version))))
30645 (file-name (git-file-name name version))
30646 (sha256
30647 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30648 (build-system pyproject-build-system)
30649 (arguments
30650 (list
30651 #:phases
30652 #~(modify-phases %standard-phases
30653 ;; Git repository provides implementations for JavaScript, Golang,
30654 ;; Python and Rust, pick "py".
30655 (add-before 'build 'chdir-to-py
30656 (lambda _
30657 (chdir "py"))))))
30658 (native-inputs
30659 (list python-freezegun
30660 python-pytest
30661 python-pyyaml
30662 python-setuptools
30663 python-wheel))
30664 (home-page "https://json-e.js.org")
30665 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30666 (description
30667 "This package provides a data-structure parameterization system written
30668for embedding context in JSON objects.")
30669 (license license:mpl2.0)))
30670
30671(define-public python-json-logger
30672 (package
30673 (name "python-json-logger")
30674 (version "4.0.0")
30675 (source
30676 (origin
30677 (method git-fetch)
30678 (uri (git-reference
30679 (url "https://github.com/nhairs/python-json-logger")
30680 (commit (string-append "v" version))))
30681 (file-name (git-file-name name version))
30682 (sha256
30683 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
30684 (build-system pyproject-build-system)
30685 (native-inputs
30686 (list python-freezegun
30687 python-mike
30688 python-msgspec
30689 python-orjson
30690 python-pypa-build
30691 python-pytest
30692 python-setuptools
30693 python-tzdata
30694 python-validate-pyproject
30695 python-typing-extensions))
30696 (home-page "https://github.com/nhairs/python-json-logger")
30697 (synopsis "JSON log formatter in Python")
30698 (description "This library allows standard Python logging to output log data
30699as JSON objects. With JSON we can make our logs more readable by machines and
30700we can stop writing custom parsers for syslog-type records.")
30701 (license license:bsd-3)))
30702
30703(define-public python-daiquiri
30704 (package
30705 (name "python-daiquiri")
30706 (version "3.0.1")
30707 (source
30708 (origin
30709 (method git-fetch)
30710 (uri (git-reference
30711 (url "https://github.com/jd/daiquiri")
30712 (commit version)))
30713 (file-name (git-file-name name version))
30714 (sha256
30715 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30716 (build-system pyproject-build-system)
30717 (propagated-inputs (list python-json-logger))
30718 (native-inputs (list python-mock python-pytest python-setuptools
30719 python-setuptools-scm))
30720 (home-page "https://github.com/jd/daiquiri")
30721 (synopsis "Library to configure Python logging easily")
30722 (description
30723 "The daiquiri library provides an easy way to configure logging in
30724Python. It also provides some custom formatters and handlers.")
30725 (license license:asl2.0)))
30726
30727(define-public python-pifpaf
30728 (package
30729 (name "python-pifpaf")
30730 (version "3.4.0")
30731 (source
30732 (origin
30733 (method git-fetch)
30734 (uri (git-reference
30735 (url "https://github.com/jd/pifpaf")
30736 (commit version)))
30737 (file-name (git-file-name name version))
30738 (sha256
30739 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30740 (build-system pyproject-build-system)
30741 (arguments
30742 (list
30743 #:phases
30744 #~(modify-phases %standard-phases
30745 (add-after 'install 'install-drivers
30746 (lambda* (#:key inputs outputs #:allow-other-keys)
30747 (let ((site (site-packages inputs outputs)))
30748 (copy-recursively "pifpaf/drivers"
30749 (string-append site "/pifpaf/drivers/"))))))))
30750 (propagated-inputs
30751 (list python-click
30752 python-daiquiri
30753 python-fixtures
30754 python-jinja2
30755 python-pbr
30756 python-psutil
30757 python-xattr))
30758 (native-inputs
30759 (list python-mock
30760 python-stestr
30761 python-packaging
30762 python-requests
30763 python-testrepository
30764 python-testtools
30765 python-setuptools))
30766 (home-page "https://github.com/jd/pifpaf")
30767 (synopsis "Tools and fixtures to manage daemons for testing in Python")
30768 (description
30769 "Pifpaf is a suite of fixtures and a command-line tool that starts and
30770stops daemons for a quick throw-away usage. This is typically useful when
30771needing these daemons to run integration testing. It originally evolved from
30772its precursor @code{overtest}.")
30773 (license license:asl2.0)))
30774
30775(define-public python-pytest-check-links
30776 (package
30777 (name "python-pytest-check-links")
30778 (version "0.10.1")
30779 (source
30780 (origin
30781 (method url-fetch)
30782 (uri (pypi-uri "pytest_check_links" version))
30783 (sha256
30784 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
30785 (build-system pyproject-build-system)
30786 (arguments
30787 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
30788 (native-inputs
30789 (list python-hatchling))
30790 (propagated-inputs
30791 (list python-docutils
30792 python-html5lib
30793 python-nbconvert
30794 python-nbformat
30795 python-requests))
30796 (home-page "https://github.com/jupyterlab/pytest-check-links")
30797 (synopsis "Check links in files")
30798 (description "This package provides a pytest plugin that checks URLs for
30799HTML-containing files.")
30800 (license license:bsd-3)))
30801
30802(define-public python-json5
30803 (package
30804 (name "python-json5")
30805 (version "0.9.25")
30806 (source
30807 (origin
30808 ;; sample.json5 is missing from PyPi source tarball
30809 (method git-fetch)
30810 (uri (git-reference
30811 (url "https://github.com/dpranke/pyjson5")
30812 (commit (string-append "v" version))))
30813 (file-name (git-file-name name version))
30814 (sha256
30815 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
30816 (build-system pyproject-build-system)
30817 (native-inputs (list python-pytest python-setuptools python-wheel))
30818 (home-page "https://github.com/dpranke/pyjson5")
30819 (synopsis "Python implementation of the JSON5 data format")
30820 (description
30821 "JSON5 extends the JSON data interchange format to make it slightly more
30822usable as a configuration language. This Python package implements parsing and
30823dumping of JSON5 data structures.")
30824 (license license:asl2.0)))
30825
30826(define-public python-farama-notifications
30827 (package
30828 (name "python-farama-notifications")
30829 (version "0.0.4")
30830 (source
30831 ;; The version on pypi does not include tests.
30832 (origin
30833 (method git-fetch)
30834 (uri (git-reference
30835 (url "https://github.com/Farama-Foundation/Farama-Notifications")
30836 (commit version)))
30837 (file-name (git-file-name name version))
30838 (sha256
30839 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
30840 (build-system pyproject-build-system)
30841 (arguments
30842 (list
30843 #:phases
30844 '(modify-phases %standard-phases
30845 (replace 'check
30846 (lambda* (#:key tests? #:allow-other-keys)
30847 (when tests?
30848 (invoke "python3" "tests/ci-test.py")))))))
30849 (native-inputs (list python-pytest python-setuptools python-wheel))
30850 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
30851 (synopsis "Notifications for all Farama Foundation maintained libraries")
30852 (description
30853 "This package allows for providing notifications for all Farama
30854Foundation maintained libraries.")
30855 (license license:expat)))
30856
30857(define-public python-frontmatter
30858 (package
30859 (name "python-frontmatter")
30860 (version "1.3.0")
30861 (source
30862 (origin
30863 (method git-fetch)
30864 (uri (git-reference
30865 (url "https://github.com/eyeseast/python-frontmatter")
30866 (commit (string-append "v" version))))
30867 (file-name (git-file-name name version))
30868 (sha256
30869 (base32 "09kgl9kw96f1pyszqnm7slq1lw5nh4c8f59p6brz0ap2ydcfxykg"))))
30870 (build-system pyproject-build-system)
30871 (arguments
30872 (list
30873 #:build-backend "setuptools.build_meta")) ;requires uv_build
30874 (native-inputs
30875 (list python-hatchling
30876 python-pyaml
30877 python-pytest
30878 python-setuptools
30879 python-toml
30880 python-types-pyyaml
30881 python-types-toml))
30882 (propagated-inputs (list python-pyyaml))
30883 (home-page "https://github.com/eyeseast/python-frontmatter")
30884 (synopsis "Parse and manage posts with YAML (or other) frontmatter")
30885 (description
30886 "This package offers a useful way to add arbitrary, structured metadata
30887to text documents, regardless of type. This is a small package to load and
30888parse files (or just text) with YAML (or JSON, TOML or other) front matter.")
30889 (license license:expat)))
30890
30891(define-public python-frozendict
30892 (package
30893 (name "python-frozendict")
30894 (version "2.4.6")
30895 (source
30896 (origin
30897 (method url-fetch)
30898 (uri (pypi-uri "frozendict" version))
30899 (sha256
30900 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
30901 (build-system pyproject-build-system)
30902 (native-inputs
30903 (list python-pytest
30904 python-setuptools
30905 python-wheel))
30906 (home-page "https://github.com/Marco-Sulla/python-frozendict")
30907 (synopsis "Simple immutable mapping for Python")
30908 (description
30909 "@dfn{frozendict} is an immutable wrapper around dictionaries that
30910implements the complete mapping interface. It can be used as a drop-in
30911replacement for dictionaries where immutability is desired.")
30912 (license license:expat)))
30913
30914(define-public python-py-cpuinfo
30915 (package
30916 (name "python-py-cpuinfo")
30917 (version "9.0.0")
30918 (source
30919 (origin
30920 (method git-fetch)
30921 (uri (git-reference
30922 (url "https://github.com/workhorsy/py-cpuinfo")
30923 (commit (string-append "v" version))))
30924 (file-name (git-file-name name version))
30925 (sha256
30926 (base32
30927 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
30928 (build-system pyproject-build-system)
30929 (arguments
30930 (list #:test-backend #~'custom
30931 #:test-flags #~(list "test_suite.py")))
30932 (native-inputs
30933 (list python-setuptools))
30934 (home-page "https://github.com/workhorsy/py-cpuinfo")
30935 (synopsis "Get CPU info with Python")
30936 (description
30937 "This Python module returns the CPU info by using the best sources of
30938information for your operating system.")
30939 (license license:expat)))
30940
30941(define-public python-canonicaljson
30942 (package
30943 (name "python-canonicaljson")
30944 (version "2.0.0")
30945 (source
30946 (origin
30947 (method url-fetch)
30948 (uri (pypi-uri "canonicaljson" version))
30949 (sha256
30950 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
30951 (build-system pyproject-build-system)
30952 (arguments
30953 (list #:test-backend #~'unittest))
30954 (native-inputs
30955 (list python-setuptools))
30956 (home-page "https://github.com/matrix-org/python-canonicaljson")
30957 (synopsis "Canonical JSON")
30958 (description
30959 "Deterministically encode JSON.
30960
30961@itemize
30962@item Encodes objects and arrays as RFC 7159 JSON.
30963@item Sorts object keys so that you get the same result each time.
30964@item Has no insignificant whitespace to make the output as small as possible.
30965@item Escapes only the characters that must be escaped, U+0000 to
30966 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
30967@item Uses the shortest escape sequence for each escaped character.
30968@item Encodes the JSON as UTF-8.
30969@item Can encode frozendict immutable dictionaries.
30970@end itemize")
30971 (license license:asl2.0)))
30972
30973(define-public python-signedjson
30974 (package
30975 (name "python-signedjson")
30976 (version "1.1.4")
30977 (source
30978 (origin
30979 (method git-fetch)
30980 (uri (git-reference
30981 (url "https://github.com/matrix-org/python-signedjson")
30982 (commit (string-append "v" version))))
30983 (file-name (git-file-name name version))
30984 (sha256
30985 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
30986 (build-system pyproject-build-system)
30987 (propagated-inputs
30988 (list python-canonicaljson
30989 python-pynacl
30990 python-typing-extensions
30991 python-unpaddedbase64))
30992 (native-inputs
30993 (list python-pytest python-setuptools-scm python-setuptools))
30994 (home-page "https://github.com/matrix-org/python-signedjson")
30995 (synopsis "Sign JSON objects with ED25519 signatures")
30996 (description
30997 "Sign JSON objects with ED25519 signatures.
30998
30999@itemize
31000@item More than one entity can sign the same object.
31001@item Each entity can sign the object with more than one key making it easier to
31002rotate keys
31003@item ED25519 can be replaced with a different algorithm.
31004@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
31005key.
31006@end itemize")
31007 (license license:asl2.0)))
31008
31009(define-public python-daemonize
31010 (package
31011 (name "python-daemonize")
31012 (version "2.5.0")
31013 (source
31014 (origin
31015 (method git-fetch)
31016 (uri (git-reference
31017 (url "https://github.com/thesharp/daemonize")
31018 (commit (string-append "v" version))))
31019 (file-name (git-file-name name version))
31020 (sha256
31021 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
31022 (build-system pyproject-build-system)
31023 (arguments
31024 (list
31025 #:test-backend #~'custom
31026 #:test-flags #~(list "tests/test.py")
31027 #:phases
31028 #~(modify-phases %standard-phases
31029 (add-before 'check 'fix-tests
31030 (lambda _
31031 ;; XXX: nobody has group nogroup on Guix.
31032 (substitute* "tests/test.py"
31033 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
31034 (number->string (passwd:gid (getpw "nobody"))))))))))
31035 (native-inputs (list coreutils-minimal procps python-setuptools))
31036 (home-page "https://github.com/thesharp/daemonize")
31037 (synopsis "Library for writing system daemons in Python")
31038 (description
31039 "Daemonize is a library for writing system daemons in Python.")
31040 (license license:expat)))
31041
31042(define-public python-pymacaroons
31043 (package
31044 (name "python-pymacaroons")
31045 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
31046 (revision . "0")))
31047 (version (git-version "0.13.0"
31048 (assoc-ref properties 'revision)
31049 (assoc-ref properties 'commit)))
31050 (source
31051 (origin
31052 (method git-fetch)
31053 (uri (git-reference
31054 (url "https://github.com/ecordell/pymacaroons")
31055 (commit (assoc-ref properties 'commit))))
31056 (file-name (git-file-name name version))
31057 (sha256
31058 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
31059 (build-system pyproject-build-system)
31060 (arguments
31061 (list
31062 #:test-flags
31063 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
31064 ;; No module named 'hypothesis.specifiers'
31065 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
31066 (native-inputs
31067 (list python-hypothesis
31068 python-mock
31069 python-pytest
31070 python-setuptools))
31071 (propagated-inputs (list python-pynacl))
31072 (home-page "https://github.com/ecordell/pymacaroons")
31073 (synopsis "Python Macaroon Library")
31074 (description
31075 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
31076tokens, macaroons embed caveats that define specific authorization
31077requirements for the target service, the service that issued the root macaroon
31078and which is capable of verifying the integrity of macaroons it receives.
31079
31080Macaroons allow for delegation and attenuation of authorization. They are
31081simple and fast to verify, and decouple authorization policy from the
31082enforcement of that policy.")
31083 (license license:expat)))
31084
31085(define-public python-ldap3
31086 (package
31087 (name "python-ldap3")
31088 (version "2.9.1")
31089 (home-page "https://github.com/cannatag/ldap3")
31090 (source
31091 (origin
31092 (method git-fetch)
31093 (uri (git-reference (url home-page)
31094 (commit (string-append "v" version))))
31095 (file-name (git-file-name name version))
31096 (sha256
31097 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
31098 (build-system pyproject-build-system)
31099 (arguments
31100 (list
31101 #:tests? #f ;TODO: Tests need a real LDAP server to run
31102 #:test-backend #~'nose))
31103 (native-inputs
31104 (list python-pynose python-setuptools))
31105 (propagated-inputs
31106 (list python-gssapi python-pyasn1))
31107 (synopsis "Python LDAP client")
31108 (description
31109 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
31110library.")
31111 (license license:lgpl3+)))
31112
31113(define-public python-boltons
31114 (package
31115 (name "python-boltons")
31116 (version "25.0.0")
31117 (source
31118 (origin
31119 (method git-fetch)
31120 (uri (git-reference
31121 (url "https://github.com/mahmoud/boltons")
31122 (commit version)))
31123 (file-name (git-file-name name version))
31124 (sha256
31125 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
31126 (build-system pyproject-build-system)
31127 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
31128 (home-page "https://github.com/mahmoud/boltons")
31129 (synopsis "Extensions to the Python standard library")
31130 (description
31131 "Boltons is a set of over 230 pure-Python utilities in the same spirit
31132as — and yet conspicuously missing from — the standard library, including:
31133
31134@itemize
31135@item Atomic file saving, bolted on with fileutils
31136@item A highly-optimized OrderedMultiDict, in dictutils
31137@item Two types of PriorityQueue, in queueutils
31138@item Chunked and windowed iteration, in iterutils
31139@item Recursive data structure iteration and merging, with iterutils.remap
31140@item Exponential backoff functionality, including jitter, through
31141iterutils.backoff
31142@item A full-featured TracebackInfo type, for representing stack traces, in
31143tbutils
31144@end itemize")
31145 (license license:bsd-3)))
31146
31147(define-public python-eliot
31148 (package
31149 (name "python-eliot")
31150 (version "1.17.5")
31151 (source
31152 (origin
31153 (method url-fetch)
31154 (uri (pypi-uri "eliot" version))
31155 (sha256
31156 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
31157 (build-system pyproject-build-system)
31158 (arguments
31159 (list
31160 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
31161 ;; Two tests fail with error: TypeError: Unsupported type.
31162 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
31163 #:phases
31164 #~(modify-phases %standard-phases
31165 (add-after 'unpack 'remove-journald-support
31166 (lambda _
31167 (for-each delete-file
31168 '("eliot/tests/test_journald.py"
31169 "eliot/journald.py")))))))
31170 (native-inputs
31171 (list python-pytest
31172 python-setuptools
31173 python-testtools))
31174 (propagated-inputs
31175 (list python-boltons
31176 python-orjson
31177 python-pyrsistent
31178 python-zope-interface))
31179 (home-page "https://github.com/itamarst/eliot/")
31180 (synopsis "Eliot: the logging system that tells you why it happened")
31181 (description
31182 "@dfn{eliot} is a Python logging system that outputs causal chains of
31183actions: actions can spawn other actions, and eventually they either succeed
31184or fail. The resulting logs tell you the story of what your software did: what
31185happened, and what caused it.")
31186 (license license:asl2.0)))
31187
31188(define-public python-pem
31189 (package
31190 (name "python-pem")
31191 (version "23.1.0")
31192 (source
31193 (origin
31194 (method git-fetch)
31195 (uri (git-reference
31196 (url "https://github.com/hynek/pem")
31197 (commit version)))
31198 (file-name (git-file-name name version))
31199 (sha256
31200 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
31201 (build-system pyproject-build-system)
31202 (native-inputs
31203 (list nss-certs-for-test
31204 python-certifi
31205 python-hatch-fancy-pypi-readme
31206 python-hatch-vcs
31207 python-hatchling
31208 python-pretend
31209 python-pyopenssl
31210 python-pytest
31211 python-twisted))
31212 (home-page "https://pem.readthedocs.io/")
31213 (synopsis "Easy PEM file parsing in Python")
31214 (description
31215 "This package provides a Python module for parsing and splitting PEM files.")
31216 (license license:expat)))
31217
31218(define-public python-pysaml2
31219 (package
31220 (name "python-pysaml2")
31221 (version "7.5.4")
31222 (source
31223 (origin
31224 (method git-fetch)
31225 (uri (git-reference
31226 (url "https://github.com/IdentityPython/pysaml2")
31227 (commit (string-append "v" version))))
31228 (file-name (git-file-name name version))
31229 (sha256
31230 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
31231 (build-system pyproject-build-system)
31232 (arguments
31233 (list
31234 #:test-flags
31235 #~(list "-k"
31236 (string-join
31237 ;; XXX: encryption failures
31238 (list "not test_encrypted_response_6"
31239 "test_validate_cert_chains"
31240 "test_validate_with_root_cert"
31241 ;; XXX: xml parsing error
31242 "test_namespace_processing") " and not "))
31243 #:phases
31244 #~(modify-phases %standard-phases
31245 (add-after 'unpack 'relax-requirements
31246 (lambda _
31247 (substitute* "pyproject.toml"
31248 (("\"(pyopenssl|xmlschema).*\"" _ dep)
31249 (format #f "~s" dep))))))))
31250 (native-inputs (list python-poetry-core python-pytest))
31251 (propagated-inputs
31252 (list python-cryptography
31253 python-dateutil
31254 python-defusedxml
31255 python-pymongo
31256 python-pyopenssl
31257 python-responses
31258 python-requests
31259 python-xmlschema
31260 python-xmlsec))
31261 (home-page "https://idpy.org")
31262 (synopsis "Python implementation of SAML Version 2 Standard")
31263 (description
31264 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
31265It contains all necessary pieces for building a SAML2 service provider or
31266an identity provider. The distribution contains examples of both.
31267
31268This package was originally written to work in a WSGI environment, but
31269there are extensions that allow you to use it with other frameworks.")
31270 (license license:asl2.0)))
31271
31272;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
31273;; This PyPI package is no longer actively maintained, but the underlying
31274;; library can be vendored.
31275;;
31276;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
31277;; pyproject.toml) and can't be used as a common input, do not update this
31278;; package.
31279(define-public python-click-plugins
31280 (package
31281 (name "python-click-plugins")
31282 (version "1.1.1.2")
31283 (source
31284 (origin
31285 (method git-fetch)
31286 (uri (git-reference
31287 (url "https://github.com/click-contrib/click-plugins")
31288 (commit version)))
31289 (file-name (git-file-name name version))
31290 (sha256
31291 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
31292 (build-system pyproject-build-system)
31293 (arguments
31294 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
31295 (native-inputs
31296 (list python-setuptools))
31297 (propagated-inputs
31298 (list python-click))
31299 (synopsis "Extension for Click to register external CLI commands")
31300 (description
31301 "This package provides n extension module for Click to register external
31302CLI commands via setuptools entry-points.")
31303 (home-page "https://github.com/click-contrib/click-plugins")
31304 (license license:bsd-3)))
31305
31306;; XXX: Deprecated on <2026-03-23>.
31307(define-deprecated-package python-click-plugins-1 python-click-plugins)
31308
31309(define-public python-diceware
31310 (package
31311 (name "python-diceware")
31312 (version "1.0.1")
31313 (source
31314 (origin
31315 (method url-fetch)
31316 (uri (pypi-uri "diceware" version))
31317 (sha256
31318 (base32
31319 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
31320 (build-system pyproject-build-system)
31321 (native-inputs
31322 (list python-pytest python-setuptools python-wheel))
31323 (home-page "https://github.com/ulif/diceware/")
31324 (synopsis "Generates memorable passphrases")
31325 (description "This package generates passphrases by concatenating words
31326randomly picked from wordlists. It supports several sources of
31327randomness (including real life dice) and different wordlists (including
31328cryptographically signed ones).")
31329 (license license:gpl3+)))
31330
31331(define-public python-dictdiffer
31332 (package
31333 (name "python-dictdiffer")
31334 (version "0.9.0")
31335 (source
31336 (origin
31337 (method git-fetch)
31338 (uri (git-reference
31339 (url "https://github.com/inveniosoftware/dictdiffer")
31340 (commit (string-append "v" version))))
31341 (file-name (git-file-name name version))
31342 (sha256
31343 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
31344 (build-system pyproject-build-system)
31345 (arguments
31346 (list
31347 #:phases
31348 #~(modify-phases %standard-phases
31349 (add-after 'unpack 'relax-requirements
31350 (lambda _
31351 (delete-file "pytest.ini")
31352 (substitute* "setup.py"
31353 (("'pytest-runner.*',")
31354 "'pytest',")))))))
31355 (native-inputs
31356 (list python-pytest python-setuptools python-setuptools-scm))
31357 (home-page "https://github.com/inveniosoftware/dictdiffer")
31358 (synopsis "Diff and patch Python dictionary objects")
31359 (description
31360 "Dictdiffer is a Python module that helps you to diff and patch
31361dictionaries.")
31362 (license license:expat)))
31363
31364(define-public python-osc
31365 (package
31366 (name "python-osc")
31367 (version "1.9.3")
31368 (source
31369 (origin
31370 (method git-fetch)
31371 (uri (git-reference
31372 (url "https://github.com/attwad/python-osc")
31373 (commit (string-append "v" version))))
31374 (file-name (git-file-name name version))
31375 (sha256
31376 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
31377 (build-system pyproject-build-system)
31378 (native-inputs (list python-setuptools))
31379 (home-page "https://github.com/attwad/python-osc")
31380 (synopsis "Open Sound Control server and client implementations")
31381 (description
31382 "@code{python-osc} is a pure Python library with no external
31383dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
31384Open Sound Control 1.0} specification.")
31385 (license license:unlicense)))
31386
31387(define-public python-cmd2
31388 (package
31389 (name "python-cmd2")
31390 (version "2.5.11")
31391 (source
31392 (origin
31393 (method url-fetch)
31394 (uri (pypi-uri "cmd2" version))
31395 (sha256
31396 (base32
31397 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
31398 (build-system pyproject-build-system)
31399 (arguments
31400 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
31401and not test_transcript")))
31402 (propagated-inputs
31403 (list python-pyperclip python-wcwidth))
31404 (native-inputs
31405 (list python-pytest
31406 python-pytest-mock
31407 python-setuptools
31408 python-setuptools-scm
31409 python-wheel))
31410 (home-page "https://github.com/python-cmd2/cmd2")
31411 (synopsis "Tool for building interactive command line applications")
31412 (description
31413 "Cmd2 is a tool for building interactive command line applications in
31414Python. Its goal is to make it quick and easy for developers to build
31415feature-rich and user-friendly interactive command line applications. It
31416provides a simple API which is an extension of Python's built-in @code{cmd}
31417module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
31418make your life easier and eliminates much of the boilerplate code which would
31419be necessary when using @code{cmd}.")
31420 (license license:expat)))
31421
31422(define-public python-pytidylib
31423 (package
31424 (name "python-pytidylib")
31425 (version "0.3.2")
31426 (source
31427 (origin
31428 (method git-fetch)
31429 (uri (git-reference
31430 (url "https://github.com/countergram/pytidylib")
31431 (commit version)))
31432 (file-name (git-file-name name version))
31433 (sha256
31434 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
31435 (build-system pyproject-build-system)
31436 (arguments
31437 (list
31438 #:phases
31439 #~(modify-phases %standard-phases
31440 (add-after 'unpack 'fix-queue-import
31441 (lambda _
31442 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
31443 (substitute* "tests/threadsafety.py"
31444 (("from Queue import Queue")
31445 "from queue import Queue"))))
31446 (add-before 'build 'qualify-libtidy
31447 (lambda* (#:key inputs #:allow-other-keys)
31448 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
31449 (substitute* "tidylib/tidy.py"
31450 (("ctypes\\.util\\.find_library\\('tidy'\\)")
31451 (format #f "'~a'" libtidy)))))))))
31452 (native-inputs (list python-pytest python-setuptools))
31453 (inputs (list tidy-html))
31454 (home-page "https://github.com/countergram/pytidylib")
31455 (synopsis "Python wrapper for HTML Tidy library")
31456 (description
31457 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31458allows you, from Python code, to “fix” invalid (X)HTML markup.")
31459 (license license:expat)))
31460
31461(define-public python-mujson
31462 (package
31463 (name "python-mujson")
31464 (version "1.4")
31465 (source
31466 (origin
31467 (method git-fetch)
31468 (uri (git-reference
31469 (url "https://github.com/mattgiles/mujson")
31470 (commit version)))
31471 (file-name (git-file-name name version))
31472 (sha256
31473 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31474 (build-system pyproject-build-system)
31475 (arguments (list #:tests? #f)) ;No tests.
31476 (native-inputs (list python-setuptools))
31477 (home-page "https://github.com/mattgiles/mujson")
31478 (synopsis "Use the fastest JSON functions available at import time")
31479 (description
31480 "This module selects the fastest JSON functions available at import time
31481in Python.")
31482 (license license:expat)))
31483
31484(define-public python-bashlex
31485 (package
31486 (name "python-bashlex")
31487 (version "0.18")
31488 (source
31489 (origin
31490 (method git-fetch)
31491 (uri (git-reference
31492 (url "https://github.com/idank/bashlex")
31493 (commit version)))
31494 (file-name (git-file-name name version))
31495 (sha256
31496 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31497 (build-system pyproject-build-system)
31498 (arguments
31499 (list
31500 #:phases
31501 #~(modify-phases %standard-phases
31502 (add-before 'build 'pregenerate-yacc-tables
31503 (lambda _
31504 ;; parser.py caches tables, which attempts to write to site lib
31505 ;; see https://github.com/idank/bashlex/issues/51
31506 (invoke "python" "-c" "import bashlex"))))))
31507 (native-inputs (list python-pytest python-setuptools))
31508 (home-page "https://github.com/idank/bashlex")
31509 (synopsis "Python parser for bash")
31510 (description
31511 "@code{bashlex} is a Python port of the parser used internally by GNU
31512bash.
31513
31514For the most part it's transliterated from C, the major differences are:
31515
31516@itemize
31517@item it does not execute anything
31518@item it is reentrant
31519@item it generates a complete AST
31520@end itemize
31521")
31522 (license license:gpl3+)))
31523
31524(define-public python-jinxed
31525 (package
31526 (name "python-jinxed")
31527 (version "1.3.0")
31528 (source
31529 (origin
31530 (method git-fetch)
31531 (uri (git-reference
31532 (url "https://github.com/Rockhopper-Technologies/jinxed")
31533 (commit version)))
31534 (file-name (git-file-name name version))
31535 (sha256
31536 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31537 (build-system pyproject-build-system)
31538 (arguments
31539 (list
31540 #:tests? #f ;_curses.error: setupterm: could not find terminal
31541 #:phases
31542 #~(modify-phases %standard-phases
31543 (add-before 'check 'set-environment-variables
31544 (lambda* (#:key inputs #:allow-other-keys)
31545 (setenv "TERM" "LINUX")
31546 (setenv "TERMINFO"
31547 (search-input-directory inputs "share/terminfo")))))))
31548 (native-inputs (list ncurses python-setuptools))
31549 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31550 (synopsis "Jinxed Terminal Library")
31551 (description
31552 "Jinxed is an implementation of a subset of the Python curses library.")
31553 (license license:mpl2.0)))
31554
31555(define-public python-blessed
31556 (package
31557 (name "python-blessed")
31558 (version "1.20.0")
31559 (source
31560 (origin
31561 (method url-fetch)
31562 (uri (pypi-uri "blessed" version))
31563 (sha256
31564 (base32
31565 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31566 (snippet
31567 ;; Don't get hung up on Windows test failures.
31568 '(delete-file "blessed/win_terminal.py"))))
31569 (build-system pyproject-build-system)
31570 (propagated-inputs (list python-six python-wcwidth))
31571 (native-inputs (list python-pytest python-setuptools python-wheel))
31572 (home-page "https://github.com/jquast/blessed")
31573 (synopsis "Wrapper around terminal capabilities")
31574 (description
31575 "Blessed is a thin, practical wrapper around terminal styling, screen
31576positioning, and keyboard input.")
31577 (license license:expat)))
31578
31579(define-public python-readme-renderer
31580 (package
31581 (name "python-readme-renderer")
31582 (version "44.0")
31583 (source
31584 (origin
31585 (method url-fetch)
31586 (uri (pypi-uri "readme_renderer" version))
31587 (sha256
31588 (base32
31589 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
31590 (build-system pyproject-build-system)
31591 (arguments
31592 (list
31593 #:test-flags
31594 '(list "-k"
31595 (string-append
31596 ;; These tests fail due to slight differences in the generated
31597 ;; vs expected HTML, e.g. because of difference in whitespace or
31598 ;; line breaks. (See also
31599 ;; https://github.com/pypa/readme_renderer/issues/234).
31600 "not test_md_fixtures[test_CommonMark_008.md]"
31601 " and not test_rst_fixtures[test_rst_008.rst]"
31602 " and not GFM"))))
31603 (propagated-inputs
31604 (list python-cmarkgfm
31605 python-docutils
31606 python-nh3
31607 python-pygments))
31608 (native-inputs
31609 (list python-pytest
31610 python-setuptools
31611 python-wheel))
31612 (home-page "https://github.com/pypa/readme_renderer")
31613 (synopsis "Render README files in Warehouse")
31614 (description
31615 "Readme Renderer is a library that will safely render arbitrary README
31616files into HTML. It is designed to be used in Warehouse to render the
31617@code{long_description} for packages. It can handle Markdown,
31618reStructuredText, and plain text.")
31619 (license license:asl2.0)))
31620
31621(define-public python-lazr-delegates
31622 (package
31623 (name "python-lazr-delegates")
31624 (version "2.1.1")
31625 (source
31626 (origin
31627 (method url-fetch)
31628 (uri (pypi-uri "lazr_delegates" version))
31629 (sha256
31630 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31631 (build-system pyproject-build-system)
31632 (arguments
31633 (list
31634 #:test-flags #~(list "-v" #$output)
31635 #:phases
31636 #~(modify-phases %standard-phases
31637 (add-after 'check 'check-cleanup
31638 (lambda* (#:key tests? #:allow-other-keys)
31639 (when tests?
31640 (for-each
31641 delete-file-recursively
31642 (find-files #$output
31643 (lambda (file stat)
31644 (or (member (basename file)
31645 '("tests" ".pytest_cache"))))
31646 #:directories? #t))))))))
31647 (native-inputs
31648 (list python-pytest python-setuptools python-wheel))
31649 (propagated-inputs
31650 (list python-zope-interface))
31651 (home-page "https://launchpad.net/lazr.delegates")
31652 (synopsis "Easily write objects that delegate behavior")
31653 (description
31654 "The @code{lazr.delegates} package makes it easy to write objects that
31655delegate behavior to another object. The new object adds some property or
31656behavior on to the other object, while still providing the underlying interface,
31657and delegating behavior.")
31658 (license license:lgpl3)))
31659
31660(define-public python-lazr-config
31661 (package
31662 (name "python-lazr-config")
31663 (version "3.1")
31664 (source
31665 (origin
31666 (method url-fetch)
31667 (uri (pypi-uri "lazr_config" version))
31668 (sha256
31669 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31670 (build-system pyproject-build-system)
31671 (arguments
31672 (list
31673 #:test-flags #~(list "-v" #$output)
31674 #:phases
31675 #~(modify-phases %standard-phases
31676 (add-after 'check 'check-cleanup
31677 (lambda* (#:key tests? #:allow-other-keys)
31678 (when tests?
31679 (for-each
31680 delete-file-recursively
31681 (find-files #$output
31682 (lambda (file stat)
31683 (or (member (basename file)
31684 '("tests" ".pytest_cache"))))
31685 #:directories? #t))))))))
31686 (native-inputs
31687 (list python-pytest python-setuptools python-wheel))
31688 (propagated-inputs
31689 (list python-lazr-delegates python-zope-interface))
31690 (home-page "https://launchpad.net/lazr.config")
31691 (synopsis "Create configuration schemas and process and validate configurations")
31692 (description
31693 "The LAZR config system is typically used to manage process configuration.
31694Process configuration is for saying how things change when we run systems on
31695different machines, or under different circumstances. This system uses ini-like
31696file format of section, keys, and values. The config file supports inheritance
31697to minimize duplication of information across files. The format supports schema
31698validation.")
31699 (license license:lgpl3)))
31700
31701(define-public python-flufl-bounce
31702 (package
31703 (name "python-flufl-bounce")
31704 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
31705 (revision . "0")))
31706 (version (git-version "4.0"
31707 (assoc-ref properties 'revision)
31708 (assoc-ref properties 'commit)))
31709 (source
31710 (origin
31711 (method git-fetch)
31712 (uri (git-reference
31713 (url "https://gitlab.com/flufl/flufl.bounce")
31714 (commit (assoc-ref properties 'commit))))
31715 (file-name (git-file-name name version))
31716 (sha256
31717 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
31718 (build-system pyproject-build-system)
31719 (arguments
31720 (list
31721 #:phases
31722 #~(modify-phases %standard-phases
31723 (replace 'check
31724 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31725 (when tests?
31726 (with-directory-excursion
31727 (string-append (site-packages inputs outputs) "/flufl")
31728 (invoke "python" "-m" "nose2" "-v"))))))))
31729 (propagated-inputs
31730 (list python-atpublic python-zope-interface))
31731 (native-inputs
31732 (list python-flufl-testing python-nose2 python-setuptools))
31733 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31734 (synopsis "Email bounce detectors")
31735 (description "The @code{flufl.bounce} library provides a set of heuristics
31736and an API for detecting the original bouncing email addresses from a bounce
31737message. Many formats found in the wild are supported, as are VERP and
31738RFC 3464.")
31739 (license (list license:asl2.0
31740 license:lgpl3)))) ; only for setup_headers.py
31741
31742(define-public python-flufl-i18n
31743 (package
31744 (name "python-flufl-i18n")
31745 (version "5.1.0")
31746 (source
31747 (origin
31748 (method url-fetch)
31749 (uri (pypi-uri "flufl_i18n" version))
31750 (sha256
31751 (base32
31752 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
31753 (build-system pyproject-build-system)
31754 (arguments
31755 (list #:test-flags
31756 #~(list "--no-cov" "--ignore-glob=docs/*")
31757 #:phases
31758 #~(modify-phases %standard-phases
31759 ;; This phase add a symlink of dist-info dir for packages
31760 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
31761 (add-after 'install 'add-custom-dist-info
31762 (lambda _
31763 (for-each
31764 (lambda (dir)
31765 (with-directory-excursion (dirname dir)
31766 (let ((base (basename dir)))
31767 (symlink base
31768 (string-join (string-split base #\_) ".")))))
31769 (find-files #$output
31770 (lambda (file stat)
31771 (string-suffix? ".dist-info" file))
31772 #:directories? #t)))))))
31773 (propagated-inputs
31774 (list python-atpublic))
31775 (native-inputs
31776 (list python-hatchling python-pytest python-sybil))
31777 (home-page "https://flufli18n.readthedocs.io")
31778 (synopsis "API for Python internationalization")
31779 (description
31780 "This package provides a high-level, convenient API for managing
31781internationalization/translation contexts in Python applications. There is a
31782simple API for single-context applications, such as command line scripts which
31783only need to translate into one language during the entire course of their
31784execution. There is a more flexible, but still convenient API for multi-context
31785applications, such as servers, which may need to switch language contexts for
31786different tasks.")
31787 (license license:asl2.0)))
31788
31789(define-public python-flufl-lock
31790 (package
31791 (name "python-flufl-lock")
31792 (version "8.1.0")
31793 (source
31794 (origin
31795 (method url-fetch)
31796 (uri (pypi-uri "flufl.lock" version))
31797 (sha256
31798 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
31799 (build-system pyproject-build-system)
31800 (arguments
31801 (list #:test-flags
31802 #~(list "--no-cov" "--ignore-glob=docs/*")
31803 #:phases
31804 #~(modify-phases %standard-phases
31805 ;; This phase add a symlink of dist-info dir for packages
31806 ;; expecting flufl.lock rather than flufl_lock (mailman).
31807 (add-after 'install 'add-custom-dist-info
31808 (lambda _
31809 (for-each
31810 (lambda (dir)
31811 (with-directory-excursion (dirname dir)
31812 (let ((base (basename dir)))
31813 (symlink base
31814 (string-join (string-split base #\_) ".")))))
31815 (find-files #$output
31816 (lambda (file stat)
31817 (string-suffix? ".dist-info" file))
31818 #:directories? #t)))))))
31819 (native-inputs
31820 (list python-hatchling python-pytest python-sybil))
31821 (propagated-inputs
31822 (list python-atpublic python-psutil))
31823 (home-page "https://flufllock.readthedocs.io")
31824 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
31825 (description
31826 "The @dfn{flufl.lock} package provides NFS-safe file locking with
31827timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
31828@code{open} system call but uses a lockfile. Lock objects support lock-breaking
31829and have a maximum lifetime built-in.")
31830 (license (list license:asl2.0
31831 license:lgpl3)))) ; only for setup_helpers.py
31832
31833(define-public python-flufl-testing
31834 (package
31835 (name "python-flufl-testing")
31836 (version "0.8")
31837 (source
31838 (origin
31839 (method git-fetch)
31840 (uri (git-reference
31841 (url "https://gitlab.com/warsaw/flufl.testing")
31842 (commit version)))
31843 (file-name (git-file-name name version))
31844 (sha256
31845 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
31846 (build-system pyproject-build-system)
31847 (arguments (list #:tests? #f)) ;no tests
31848 (native-inputs (list python-setuptools))
31849 (home-page "https://gitlab.com/warsaw/flufl.testing")
31850 (synopsis "Collection of test tool plugins")
31851 (description
31852 "This package contains a small collection of test tool plugins for
31853@code{nose2} and @code{flake8}.")
31854 (license license:asl2.0)))
31855
31856(define-public python-devtools
31857 (package
31858 (name "python-devtools")
31859 (version "0.12.2")
31860 (source
31861 (origin
31862 (method git-fetch)
31863 (uri (git-reference
31864 (url "https://github.com/samuelcolvin/python-devtools")
31865 (commit (string-append "v" version))))
31866 (file-name (git-file-name name version))
31867 (sha256
31868 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
31869 (build-system pyproject-build-system)
31870 (arguments
31871 (list
31872 #:test-flags
31873 ;; Disable some failing tests.
31874 ;;
31875 ;; test_print_subprocess seems to inherit wrong environment, fails with
31876 ;; E + ModuleNotFoundError: No module named 'executing'
31877 ;; Test runs fine from local clone.
31878 ;;
31879 ;; test_executing_failure fails with
31880 ;; E - [1, 2] (list) len=2
31881 ;; E + [x, y]: [1, 2] (list) len=2
31882 ;; unclear why, probably due to a dependency.
31883 '(list "-k" "not test_print_subprocess and not test_executing_failure"
31884 ;; test_insert_assert.py also seems to inherit a bad environment:
31885 ;; E fixture 'pytester_pretty' not found
31886 ;; Test runs fine from local clone.
31887 "--ignore=tests/test_insert_assert.py")))
31888 (native-inputs
31889 (list python-hatchling python-pytest python-pytest-mock))
31890 (propagated-inputs
31891 (list python-asttokens python-executing python-pygments))
31892 (home-page "https://github.com/samuelcolvin/python-devtools")
31893 (synopsis "Debug command and development tools")
31894 (description
31895 "This package provides a debug print command and other development tools.
31896It adds a simple and readable way to print stuff during development.")
31897 (license license:expat)))
31898
31899(define-public python-dateparser
31900 (package
31901 (name "python-dateparser")
31902 (version "1.2.2")
31903 (source
31904 (origin
31905 (method url-fetch)
31906 (uri (pypi-uri "dateparser" version))
31907 (sha256
31908 (base32
31909 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
31910 (build-system pyproject-build-system)
31911 (arguments
31912 (list
31913 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
31914 #:test-flags
31915 #~(list (string-join '("--deselect=tests/test_search.py"
31916 "TestTranslateSearch"
31917 "test_search_dates_with_prepositions")
31918 "::"))))
31919 (propagated-inputs
31920 (list python-dateutil
31921 python-pytz
31922 python-regex
31923 python-tzlocal))
31924 (native-inputs
31925 (list python-parameterized
31926 python-pytest
31927 python-setuptools
31928 tzdata-for-tests))
31929 (home-page "https://github.com/scrapinghub/dateparser")
31930 (synopsis
31931 "Date parsing library designed to parse dates from HTML pages")
31932 (description
31933 "@code{python-dateparser} provides modules to easily parse localized
31934dates in almost any string formats commonly found on web pages.")
31935 (license license:bsd-3)))
31936
31937(define-public python-dparse
31938 (package
31939 (name "python-dparse")
31940 (version "0.6.4")
31941 (source
31942 (origin
31943 (method url-fetch)
31944 (uri (pypi-uri "dparse" version))
31945 (sha256
31946 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
31947 (build-system pyproject-build-system)
31948 (native-inputs (list python-hatchling python-pytest))
31949 (propagated-inputs (list python-packaging python-toml))
31950 (home-page "https://github.com/pyupio/dparse")
31951 (synopsis "Parser for Python dependency files")
31952 (description "This package provides a parser for Python dependency files.")
31953 (license license:expat)))
31954
31955(define-public python-dpath
31956 (package
31957 (name "python-dpath")
31958 (version "2.2.0")
31959 (source
31960 (origin
31961 (method url-fetch)
31962 (uri (pypi-uri "dpath" version))
31963 (sha256
31964 (base32
31965 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
31966 (build-system pyproject-build-system)
31967 (native-inputs
31968 (list python-hypothesis python-nose2 python-setuptools python-wheel))
31969 (home-page "https://github.com/akesterson/dpath-python")
31970 (synopsis "File-system-like pathing and searching for dictionaries")
31971 (description
31972 "@code{python-dpath} is a library for accessing and searching
31973dictionaries via /slashed/paths ala xpath.
31974
31975Basically it lets you glob over a dictionary as if it were a file system. It
31976allows you to specify globs (ala the bash eglob syntax, through some advanced
31977fnmatch.fnmatch magic) to access dictionary elements, and provides some
31978facility for filtering those results.")
31979 (license license:expat)))
31980
31981(define-public python-safety
31982 (package
31983 (name "python-safety")
31984 (version "3.6.2")
31985 (source
31986 (origin
31987 (method url-fetch)
31988 (uri (pypi-uri "safety" version))
31989 (sha256
31990 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
31991 (build-system pyproject-build-system)
31992 (arguments
31993 (list
31994 #:test-flags
31995 #~(list "-k" (string-join
31996 ;; test_announcements fails with AssertionError.
31997 (list "not test_announcements_if_is_not_tty"
31998 ;; Tests below need a network connection.
31999 "test_check_live"
32000 "test_check_live_cached"
32001 "test_get_packages_licenses_without_api_key"
32002 ;; AttributeError: 'PackageInstalledPayload' object
32003 ;; has no attribute 'tool_path'
32004 "test_emit_diff_operations_with_multiple_operations"
32005 "test_emit_diff_operations_with_empty_locations"
32006 "test_emit_diff_operations_with_different_tools"
32007 "test_emit_diff_operations_creates_correct_payload_structure")
32008 " and not "))
32009 #:phases #~(modify-phases %standard-phases
32010 (add-after 'unpack 'disable-telemetry
32011 (lambda _
32012 (substitute* (find-files "." "\\.py$")
32013 (("telemetry: bool = True")
32014 "telemetry: bool = False")
32015 (("telemetry=True")
32016 "telemetry=False"))))
32017 (add-before 'check 'set-home ; some tests run mkdir
32018 (lambda _
32019 (setenv "HOME" "/tmp"))))))
32020 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
32021 (propagated-inputs (list python-authlib
32022 python-click
32023 python-dparse
32024 python-filelock
32025 python-httpx
32026 python-jinja2
32027 python-marshmallow
32028 python-nltk
32029 python-packaging
32030 python-psutil
32031 python-pydantic
32032 python-requests
32033 python-ruamel.yaml
32034 python-safety-schemas
32035 python-tenacity
32036 python-tomli
32037 python-tomlkit
32038 python-typer
32039 python-typing-extensions))
32040 (home-page "https://github.com/pyupio/safety")
32041 (synopsis "Check installed dependencies for known vulnerabilities")
32042 (description
32043 "Safety checks installed dependencies for known vulnerabilities.
32044By default it uses the open Python vulnerability database Safety DB.")
32045 (license license:expat)))
32046
32047(define-public python-pypandoc
32048 (package
32049 (name "python-pypandoc")
32050 (version "1.15")
32051 (source
32052 (origin
32053 (method git-fetch)
32054 (uri (git-reference
32055 (url "https://github.com/JessicaTegner/pypandoc")
32056 (commit (string-append "v" version))))
32057 (file-name (git-file-name name version))
32058 (sha256
32059 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
32060 (build-system pyproject-build-system)
32061 (arguments
32062 (list
32063 #:test-backend #~'unittest
32064 #:phases
32065 #~(modify-phases %standard-phases
32066 (add-before 'check 'disable-tests
32067 (lambda _
32068 (substitute* "tests.py"
32069 ;; Disable test requiring network access
32070 (("test_basic_conversion_from_http_url")
32071 "skip_test_basic_conversion_from_http_url")
32072 ;; Disable tests with missing files
32073 (("test_basic_conversion_from_file_pattern")
32074 "skip_test_basic_conversion_from_file_pattern")
32075 (("test_conversion_with_data_files")
32076 "skip_test_conversion_with_data_files")))))))
32077 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
32078 ;; the missing etoolbox.sty file is added
32079 (native-inputs
32080 (list (texlive-local-tree
32081 (list texlive-etoolbox
32082 texlive-lm
32083 texlive-regexpatch
32084 texlive-xcolor))
32085 python-poetry-core
32086 python-setuptools))
32087 (inputs (list pandoc python-pandocfilters))
32088 (propagated-inputs (list python-wheel))
32089 (home-page "https://github.com/JessicaTegner/pypandoc")
32090 (synopsis "Python wrapper for pandoc")
32091 (description
32092 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
32093 (license license:expat)))
32094
32095(define-public python-rnc2rng
32096 (package
32097 (name "python-rnc2rng")
32098 (version "2.7.0")
32099 (source
32100 (origin
32101 (method git-fetch)
32102 (uri (git-reference
32103 (url "https://github.com/djc/rnc2rng")
32104 (commit version)))
32105 (file-name (git-file-name name version))
32106 (sha256
32107 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
32108 (build-system pyproject-build-system)
32109 (arguments
32110 (list
32111 #:test-backend #~'custom
32112 #:test-flags #~(list "test.py")))
32113 (native-inputs (list python-setuptools))
32114 (propagated-inputs (list python-rply))
32115 (home-page "https://github.com/djc/rnc2rng")
32116 (synopsis "Convert RELAX NG Compact to regular syntax")
32117 (description
32118 "This package provides the @command{rnc2rng} command-line tool as well as
32119a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
32120equivalent schemata in the XML-based default RELAX NG syntax.")
32121 (license license:expat)))
32122
32123(define-public python-citeproc-py
32124 (package
32125 (name "python-citeproc-py")
32126 (version "0.9.0")
32127 (source
32128 (origin
32129 (method git-fetch)
32130 (uri (git-reference
32131 (url "https://github.com/brechtm/citeproc-py")
32132 (commit (string-append "v" version))
32133 (recursive? #t))) ; TODO Unbundle.
32134 (file-name (git-file-name name version))
32135 (sha256
32136 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
32137 (build-system pyproject-build-system)
32138 (arguments
32139 (list
32140 #:phases
32141 #~(modify-phases %standard-phases
32142 (add-after 'unpack 'set-version
32143 (lambda _
32144 (delete-file "citeproc/_version.py")
32145 (substitute* "citeproc/__init__.py"
32146 (("from \\. import version")
32147 "")
32148 (("__version__ =.*")
32149 (format #f "__version__ = ~s" #$version))))))))
32150 (native-inputs (list python-pytest python-setuptools))
32151 (propagated-inputs (list python-lxml python-rnc2rng))
32152 (home-page "https://github.com/brechtm/citeproc-py")
32153 (synopsis "Citations and bibliography formatter")
32154 (description
32155 "Citeproc-py is a CSL processor for Python. It aims to implement the
32156CSL 1.0.1 specification. citeproc-py can output styled citations and
32157bibliographies in a number of different output formats. Currently supported
32158are plain text, reStructuredText and HTML.")
32159 (license license:bsd-2)))
32160
32161(define-public python-inform
32162 (package
32163 (name "python-inform")
32164 (version "1.34")
32165 (source
32166 (origin
32167 (method git-fetch) ; no tests in PyPI release
32168 (uri (git-reference
32169 (url "https://github.com/kenkundert/inform")
32170 (commit (string-append "v" version))))
32171 (file-name (git-file-name name version))
32172 (sha256
32173 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
32174 (build-system pyproject-build-system)
32175 (arguments
32176 (list
32177 #:test-flags #~(list "-k" (string-append
32178 ;; Test below needs the num2words package
32179 "not test_plural_words"
32180 ;; These last two failed with AssertionError
32181 " and not test_inform"
32182 " and not test_manual"))))
32183 (native-inputs
32184 (list python-flit-core python-pytest))
32185 (propagated-inputs
32186 (list python-arrow))
32187 (home-page "https://inform.readthedocs.io")
32188 (synopsis "Print & logging utilities for communicating with user")
32189 (description
32190 "Inform is designed to display messages from programs that are typically run from
32191a console. It provides a collection of ‘print’ functions that allow you to simply and
32192cleanly print different types of messages.")
32193 (license license:gpl3+)))
32194
32195(define-public python-nestedtext
32196 (package
32197 (name "python-nestedtext")
32198 (version "3.7")
32199 (source
32200 (origin
32201 (method git-fetch) ; no tests in PyPI release
32202 (uri (git-reference
32203 (url "https://github.com/KenKundert/nestedtext")
32204 (commit (string-append "v" version))))
32205 (file-name (git-file-name name version))
32206 (sha256
32207 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
32208 (build-system pyproject-build-system)
32209 (arguments
32210 (list
32211 ;; XXX: Tests below need some not yet packaged Python libraries.
32212 #:test-flags #~(list "--ignore" "examples/"
32213 "--ignore" "tests/test_nestedtext.py"
32214 "-k" (string-append
32215 "not techniques.rst"
32216 " and not nestedtext.nestedtext.dumps"))))
32217 (native-inputs (list python-flit-core python-pytest))
32218 (propagated-inputs
32219 (list python-inform))
32220 (home-page "https://nestedtext.org")
32221 (synopsis "Human readable and writable data interchange format")
32222 (description
32223 "NestedText is a file format for holding data that is to be entered, edited, or
32224viewed by people. It allows data to be organized into a nested collection of
32225dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
32226without the complexity and risk of YAML and without the syntactic clutter of JSON.
32227NestedText is both simple and natural. Only a small number of concepts and rules must
32228be kept in mind when creating it. It is easily created, modified, or viewed with
32229a text editor and easily understood and used by both programmers and non-programmers.")
32230 (license license:expat))) ; MIT license
32231
32232(define-public python-nest-asyncio
32233 (package
32234 (name "python-nest-asyncio")
32235 (version "1.6.0")
32236 (source
32237 (origin
32238 (method url-fetch)
32239 (uri (pypi-uri "nest_asyncio" version))
32240 (sha256
32241 (base32
32242 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
32243 (build-system pyproject-build-system)
32244 (native-inputs
32245 (list python-pytest python-setuptools))
32246 (home-page "https://github.com/erdewit/nest_asyncio")
32247 (synopsis "Patch asyncio to allow nested event loops")
32248 (description
32249 "By design @code{asyncio} does not allow its event loop to be nested.
32250This presents a practical problem: when in an environment where the event loop
32251is already running it's impossible to run tasks and wait for the result. This
32252module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
32253@code{loop.run_until_complete}.")
32254 (license license:bsd-3)))
32255
32256(define-public python-simpervisor
32257 (package
32258 (name "python-simpervisor")
32259 (version "1.0.0")
32260 (source
32261 (origin
32262 ;; Tests not included in release.
32263 (method git-fetch)
32264 (uri (git-reference
32265 (url "https://github.com/yuvipanda/simpervisor")
32266 (commit (string-append "v" version))))
32267 (file-name (git-file-name name version))
32268 (sha256
32269 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
32270 (build-system pyproject-build-system)
32271 (arguments
32272 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
32273 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
32274 (native-inputs
32275 (list python-aiohttp
32276 python-hatchling
32277 python-psutil
32278 python-pytest
32279 python-pytest-asyncio))
32280 (home-page "https://github.com/yuvipanda/simpervisor")
32281 (synopsis "Simple async process supervisor")
32282 (description
32283 "This package provides a simple async process supervisor in Python.")
32284 (license license:bsd-3)))
32285
32286(define-public python-parallel
32287 (package
32288 (name "python-parallel")
32289 (version "1.6.4.4")
32290 (source
32291 (origin
32292 (method url-fetch)
32293 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
32294 version ".zip"))
32295 (sha256
32296 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
32297 (build-system pyproject-build-system)
32298 (arguments (list #:tests? #f)) ;No test suite.
32299 (native-inputs (list python-setuptools unzip))
32300 (propagated-inputs (list python-six))
32301 (home-page "https://www.parallelpython.com")
32302 (synopsis "Parallel and distributed programming for Python")
32303 (description
32304 "Parallel Python module (PP) provides an easy and efficient way to create
32305parallel-enabled applications for SMP computers and clusters. PP module
32306features cross-platform portability and dynamic load balancing. Thus
32307applications written with PP will parallelize efficiently even on
32308heterogeneous and multi-platform clusters (including clusters running other
32309applications with variable CPU loads).")
32310 (license license:bsd-3)))
32311
32312(define-public python-param
32313 (package
32314 (name "python-param")
32315 (version "2.3.3")
32316 (source
32317 (origin
32318 (method git-fetch)
32319 (uri (git-reference
32320 (url "https://github.com/holoviz/param")
32321 (commit (string-append "v" version))))
32322 (file-name (git-file-name name version))
32323 (sha256
32324 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
32325 (build-system pyproject-build-system)
32326 ;; tests: 1448 passed, 5 skipped, 2 xfailed
32327 (native-inputs
32328 ;; Project does not require any dependencies, all of the listed
32329 ;; native-inputs are for build/test only.
32330 (list python-cloudpickle
32331 python-hatch-vcs
32332 python-hatchling
32333 python-ipython-minimal
32334 python-jsonschema
32335 python-nbval
32336 python-nest-asyncio
32337 python-numpy
32338 python-odfpy
32339 python-openpyxl
32340 python-pandas
32341 python-pyarrow
32342 python-pytest
32343 python-pytest-asyncio
32344 python-tables
32345 python-xlrd))
32346 (home-page "https://param.holoviz.org/")
32347 (synopsis
32348 "Make your Python code clearer and more reliable by declaring Parameters")
32349 (description
32350 "Param is a library for handling all the user-modifiable parameters,
32351arguments, and attributes that control your code. It provides automatic,
32352robust error-checking while dramatically reducing boilerplate code, letting
32353you focus on what you want your code to do rather than on checking for all the
32354possible ways users could supply inappropriate values to a function or
32355class.")
32356 (license license:bsd-3)))
32357
32358(define-public python-djitellopy
32359 (package
32360 (name "python-djitellopy")
32361 (version "2.5.0")
32362 (source
32363 (origin
32364 (method url-fetch)
32365 (uri (pypi-uri "djitellopy" version))
32366 (sha256
32367 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
32368 (build-system pyproject-build-system)
32369 (arguments
32370 (list
32371 #:tests? #f ;no test suite
32372 #:phases
32373 #~(modify-phases %standard-phases
32374 ;; OpenCV does not ship metadata files for its Python library, which
32375 ;; makes it invisible to the sanity_check script (see:
32376 ;; https://github.com/opencv/opencv/issues/24810).
32377 (delete 'sanity-check))))
32378 (propagated-inputs
32379 (list opencv ;for opencv-python
32380 python-av
32381 python-numpy
32382 python-pillow))
32383 (native-inputs (list python-setuptools python-wheel))
32384 (home-page "https://github.com/damiafuentes/DJITelloPy")
32385 (synopsis
32386 "DJI Tello drone video streaming, swarms and state packets library")
32387 (description
32388 "DJI Tello drone Python interface using the official Tello SDK and Tello
32389EDU SDK. This library has the following features:
32390@itemize
32391@item Implementation of all tello commands
32392@item Retrieve a video stream easily
32393@item Receive and parse state packets
32394@item Control a swarm of drones.
32395@end itemize")
32396 (license license:expat)))
32397
32398(define-public python-djvulibre
32399 ;; The original git repository of python-djvulibre is hosted at
32400 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
32401 ;; has been archived by its owner in 2022. The most active fork is
32402 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
32403 ;; version packaged here (its "python3" branch, the default).
32404 ;;
32405 ;; However, the python-djvulibre PyPI project still refers to the old
32406 ;; repository. The new repository is published as djvulibre-python on PyPI;
32407 ;; that is, with the name in reversed order.The original package name is
32408 ;; used in Guix because it best adheres to the Guix naming scheme.
32409 (package
32410 (name "python-djvulibre")
32411 (version "0.9.3")
32412 (source
32413 (origin
32414 (method git-fetch)
32415 (uri (git-reference
32416 (url "https://github.com/FriedrichFroebel/python-djvulibre")
32417 (commit version)))
32418 (file-name (git-file-name name version))
32419 (sha256
32420 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
32421 (build-system pyproject-build-system)
32422 (arguments
32423 (list
32424 #:phases
32425 #~(modify-phases %standard-phases
32426 (replace 'check
32427 (lambda* (#:key tests? #:allow-other-keys)
32428 (when tests?
32429 ;; The tests get confused by the djvu directory.
32430 (delete-file-recursively "djvu")
32431 ;; Tests can't find tools.py otherwise.
32432 (with-directory-excursion "tests"
32433 (invoke "python" "-m" "pytest"))))))))
32434 (native-inputs
32435 (list ghostscript
32436 pkg-config
32437 python-cython
32438 python-pytest
32439 python-setuptools))
32440 (inputs
32441 (list djvulibre))
32442 (synopsis "Python bindings for DjVuLibre")
32443 (description "This is a set of Python bindings for the DjVuLibre library.")
32444 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32445 (license license:gpl2)))
32446
32447(define-public python-gamera
32448 (package
32449 (name "python-gamera")
32450 (version "4.1.0")
32451 (source
32452 (origin
32453 (method git-fetch)
32454 (uri (git-reference
32455 (url "https://github.com/hsnr-gamera/gamera-4")
32456 (commit (string-append "v" version))))
32457 (file-name (git-file-name name version))
32458 (sha256
32459 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32460 (build-system pyproject-build-system)
32461 (arguments
32462 (list
32463 #:phases
32464 #~(modify-phases %standard-phases
32465 (add-after 'unpack 'fix-build
32466 (lambda _
32467 ;; The script to make daily build artifacts fails to compile,
32468 ;; but users don't need that, so ignore it.
32469 (delete-file "misc/daily_build.py")
32470 ;; Prepare tests
32471 (mkdir-p "tmp")
32472 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32473 (native-inputs (list python-docutils python-pytest python-setuptools))
32474 (inputs (list libpng libtiff zlib))
32475 (synopsis "Framework for building document analysis applications")
32476 (description
32477 "Gamera is a toolkit for building document image recognition systems.")
32478 (home-page "https://gamera.informatik.hsnr.de/")
32479 (license license:gpl2+)))
32480
32481(define-public python-aiofiles
32482 (package
32483 (name "python-aiofiles")
32484 (version "24.1.0")
32485 (source
32486 (origin
32487 (method url-fetch)
32488 (uri (pypi-uri "aiofiles" version))
32489 (sha256
32490 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32491 (build-system pyproject-build-system)
32492 (native-inputs
32493 (list python-hatch-vcs
32494 python-hatchling
32495 python-pytest
32496 python-pytest-asyncio))
32497 (home-page "https://github.com/Tinche/aiofiles")
32498 (synopsis "File support for @code{asyncio}")
32499 (description
32500 "@code{python-aiofiles} is a library for handling local disk files in
32501asyncio applications.")
32502 (license license:asl2.0)))
32503
32504(define-public python-pyre-extensions
32505 (package
32506 (name "python-pyre-extensions")
32507 (version "0.0.32")
32508 (source
32509 (origin
32510 (method url-fetch)
32511 (uri (pypi-uri "pyre_extensions" version))
32512 (sha256
32513 (base32
32514 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32515 (build-system pyproject-build-system)
32516 (native-inputs (list python-pytest python-setuptools python-wheel))
32517 (propagated-inputs
32518 (list python-typing-extensions python-typing-inspect))
32519 (home-page "https://pyre-check.org")
32520 (synopsis
32521 "Type system extensions for use with @code{python-pyre}")
32522 (description
32523 "@code{python-pyre-extensions} defines extensions to the standard
32524@code{typing} module that are supported by the Pyre typechecker.")
32525 (license license:expat)))
32526
32527(define-public python-pywatchman
32528 (package
32529 (name "python-pywatchman")
32530 (version "3.0.0")
32531 (source
32532 (origin
32533 (method url-fetch)
32534 (uri (pypi-uri "pywatchman" version))
32535 (sha256
32536 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32537 (build-system pyproject-build-system)
32538 (arguments
32539 (list
32540 #:test-backend #~'custom
32541 #:test-flags #~(list "tests/tests.py")))
32542 (native-inputs (list python-setuptools))
32543 (home-page "https://facebook.github.io/watchman/")
32544 (synopsis "Watchman client for python")
32545 (description
32546 "@code{python-pywatchman} is a library to connect and query Watchman to
32547discover file changes.")
32548 (license license:bsd-3)))
32549
32550(define-public python-roundrobin
32551 (package
32552 (name "python-roundrobin")
32553 (version "0.0.4")
32554 (source
32555 (origin
32556 (method git-fetch)
32557 (uri (git-reference
32558 (url "https://github.com/linnik/roundrobin")
32559 (commit version)))
32560 (file-name (git-file-name name version))
32561 (sha256
32562 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32563 (build-system pyproject-build-system)
32564 (arguments
32565 (list #:test-backend #~'unittest))
32566 (native-inputs (list python-setuptools))
32567 (home-page "https://github.com/linnik/roundrobin")
32568 (synopsis "Collection of roundrobin utilities")
32569 (description
32570 "This package provides a collection of utilities for round-robin
32571distribution in Python.")
32572 (license license:expat)))
32573
32574(define-public python-helpdev
32575 (package
32576 (name "python-helpdev")
32577 (version "0.7.1")
32578 (source
32579 (origin
32580 (method git-fetch)
32581 (uri (git-reference
32582 (url "https://gitlab.com/dpizetta/helpdev")
32583 (commit (string-append "v" version))))
32584 (file-name (git-file-name name version))
32585 (sha256
32586 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32587 (build-system pyproject-build-system)
32588 (native-inputs (list python-pip python-pytest python-setuptools))
32589 (home-page "https://gitlab.com/dpizetta/helpdev")
32590 (synopsis "Extract information about the Python environment easily")
32591 (description
32592 "Helpdev is a library to easily extract information about the Python
32593environment.")
32594 (license license:expat)))
32595
32596(define-public python-loguru
32597 (package
32598 (name "python-loguru")
32599 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32600 ;; covert to git tag when released.
32601 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32602 (revision . "0")))
32603 (version (git-version "0.7.3"
32604 (assoc-ref properties 'revision)
32605 (assoc-ref properties 'commit)))
32606 (source
32607 (origin
32608 (method git-fetch)
32609 (uri (git-reference
32610 (url "https://github.com/Delgan/loguru")
32611 (commit (assoc-ref properties 'commit))))
32612 (file-name (git-file-name name version))
32613 (sha256
32614 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32615 (build-system pyproject-build-system)
32616 ;; tests: x86_64-linux 1598 passed, 28 skipped
32617 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32618 (arguments
32619 (list
32620 #:test-flags
32621 #~(list #$@(if (target-64bit?)
32622 '()
32623 ;; OverflowError
32624 '("--deselect=tests/test_datetime.py::test_formatting"
32625 (string-append "--deselect=tests/test_datetime.py"
32626 "::test_value_of_gmtoff_is_invalid"))))))
32627 (native-inputs
32628 (list python-flit-core
32629 python-freezegun
32630 python-mypy-for-tests
32631 python-pytest
32632 python-setuptools
32633 tzdata-for-tests))
32634 (propagated-inputs
32635 (list python-colorama))
32636 (home-page "https://github.com/Delgan/loguru")
32637 (synopsis "Python logging made (stupidly) simple")
32638 (description "Python logging made (stupidly) simple.")
32639 (license license:expat)))
32640
32641(define-public python-qtsass
32642 (package
32643 (name "python-qtsass")
32644 (version "0.4.0")
32645 (source
32646 (origin
32647 ;; There are no tests in the PyPI tarball.
32648 (method git-fetch)
32649 (uri (git-reference
32650 (url "https://github.com/spyder-ide/qtsass/")
32651 (commit (string-append "v" version))))
32652 (file-name (git-file-name name version))
32653 (sha256
32654 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32655 (build-system pyproject-build-system)
32656 (native-inputs
32657 (list python-flaky python-pytest python-setuptools python-wheel))
32658 (propagated-inputs
32659 (list python-libsass))
32660 (home-page "https://github.com/spyder-ide/qtsass")
32661 (synopsis "Compile SCSS files to valid Qt stylesheets")
32662 (description
32663 "Besides being used in web development, CSS is also the way to stylize
32664Qt-based desktop applications. However, Qt's CSS has a few variations that
32665prevent the direct use of SASS compiler.
32666
32667The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32668handling those variations.")
32669 (license license:expat)))
32670
32671(define-public python-qdarkstyle
32672 (package
32673 (name "python-qdarkstyle")
32674 (version "3.2.3")
32675 (source
32676 (origin
32677 (method url-fetch)
32678 (uri (pypi-uri "QDarkStyle" version))
32679 (sha256
32680 (base32
32681 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32682 (build-system pyproject-build-system)
32683 (native-inputs (list python-pytest
32684 python-qtsass
32685 python-setuptools
32686 python-watchdog
32687 python-wheel))
32688 (propagated-inputs
32689 (list python-qtpy python-pyqt-6))
32690 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32691 (synopsis
32692 "Complete dark stylesheet for Python and Qt applications")
32693 (description "QDarkStyle is the most complete dark stylesheet for Python and
32694Qt applications.")
32695 (license license:expat)))
32696
32697(define-public python-pystray
32698 (package
32699 (name "python-pystray")
32700 (version "0.19.5")
32701 (source
32702 (origin
32703 (method git-fetch)
32704 (uri (git-reference
32705 (url "https://github.com/moses-palmer/pystray")
32706 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32707 (file-name (git-file-name name version))
32708 (sha256
32709 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32710 (build-system pyproject-build-system)
32711 (arguments
32712 (list
32713 ;; The test suite requires user interaction, there are no automated
32714 ;; tests.
32715 #:tests? #false
32716 #:phases #~(modify-phases %standard-phases
32717 (add-before 'sanity-check 'use-dummy-backend
32718 (lambda _
32719 ;; Without setting this, pystray tries to connect to
32720 ;; X11 on import.
32721 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32722 (native-inputs (list python-sphinx python-setuptools))
32723 (propagated-inputs (list python-pillow python-six python-xlib))
32724 (home-page "https://github.com/moses-palmer/pystray")
32725 (synopsis "Create a system tray icon")
32726 (description "This library allows you to create a system tray icon.
32727It makes it possible to specify an icon, a title and a callback for when
32728the icon is activated. The icon and title can be changed after the icon
32729has been created, and the visibility of the icon can be toggled.")
32730 (license license:lgpl3+)))
32731
32732(define-public python-bitstring
32733 (package
32734 (name "python-bitstring")
32735 (version "4.3.1")
32736 (source
32737 (origin
32738 (method url-fetch)
32739 (uri (pypi-uri "bitstring" version))
32740 (sha256
32741 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32742 (build-system pyproject-build-system)
32743 (arguments
32744 (list
32745 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32746 "--ignore=tests/test_fp8.py"
32747 "--ignore=tests/test_mxfp.py")))
32748 (native-inputs
32749 (list python-gfloat python-pytest python-setuptools python-wheel))
32750 (propagated-inputs
32751 (list python-bitarray))
32752 (home-page "https://github.com/scott-griffiths/bitstring")
32753 (synopsis
32754 "Simple construction, analysis and modification of binary data")
32755 (description
32756 "Bitstring is a library for simple construction, analysis and modification
32757 of binary data.")
32758 (license license:expat)))
32759
32760(define-public python-confuse
32761 (package
32762 (name "python-confuse")
32763 (version "2.0.1")
32764 (source
32765 (origin
32766 (method url-fetch)
32767 (uri (pypi-uri "confuse" version))
32768 (sha256
32769 (base32
32770 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
32771 (build-system pyproject-build-system)
32772 (native-inputs (list python-flit-core python-pytest))
32773 (propagated-inputs (list python-pyyaml))
32774 (home-page "https://github.com/beetbox/confuse")
32775 (synopsis "Painless YAML configuration")
32776 (description "Confuse is a configuration library for Python that uses
32777YAML. It takes care of defaults, overrides, type checking, command-line
32778integration, human-readable errors, and standard OS-specific locations.")
32779 (license license:expat)))
32780
32781(define-public python-referencing
32782 (package
32783 (name "python-referencing")
32784 (version "0.35.1")
32785 (source
32786 (origin
32787 (method url-fetch)
32788 (uri (pypi-uri "referencing" version))
32789 (sha256
32790 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
32791 (build-system pyproject-build-system)
32792 (arguments
32793 (list
32794 #:test-flags
32795 '(list "--pyargs" "referencing/tests")
32796 #:phases
32797 '(modify-phases %standard-phases
32798 (add-after 'unpack 'patch-pyproject
32799 (lambda _
32800 ;; The build system does not like this.
32801 (substitute* "pyproject.toml"
32802 ((" \"Topic :: File Formats.*") "")))))))
32803 (propagated-inputs (list python-attrs python-rpds-py))
32804 (native-inputs
32805 (list python-hatchling
32806 python-hatch-vcs
32807 python-jsonschema
32808 python-pytest
32809 python-pytest-subtests))
32810 (home-page "https://github.com/python-jsonschema/referencing")
32811 (synopsis "JSON Referencing + Python")
32812 (description "This package provides an implementation-agnostic
32813implementation of JSON reference resolution.")
32814 (license license:expat)))
32815
32816(define-public python-referencing-bootstrap
32817 (package
32818 (inherit python-referencing)
32819 (name "python-referencing-bootstrap")
32820 (arguments
32821 (list
32822 #:tests? #false
32823 #:phases
32824 '(modify-phases %standard-phases
32825 (add-after 'unpack 'patch-pyproject
32826 (lambda _
32827 ;; The build system does not like this.
32828 (substitute* "pyproject.toml"
32829 ((" \"Topic :: File Formats.*") "")))))))
32830 (native-inputs (list python-hatchling python-hatch-vcs))))
32831
32832(define-public python-reflink
32833 (package
32834 (name "python-reflink")
32835 (version "0.2.2")
32836 (source
32837 (origin
32838 (method git-fetch)
32839 (uri (git-reference
32840 (url "https://gitlab.com/rubdos/pyreflink")
32841 (commit version)))
32842 (file-name (git-file-name name version))
32843 (sha256
32844 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
32845 (build-system pyproject-build-system)
32846 (arguments
32847 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
32848 (propagated-inputs (list python-cffi))
32849 (native-inputs (list python-pytest python-setuptools))
32850 (home-page "https://gitlab.com/rubdos/pyreflink")
32851 (synopsis "Python wrapper around reflink system call")
32852 (description
32853 "Python reflink wraps around platform specific @code{reflink}
32854implementations.")
32855 (license license:expat)))
32856
32857(define-public python-retry
32858 (package
32859 (name "python-retry")
32860 (version "0.9.2")
32861 (source
32862 (origin
32863 (method git-fetch)
32864 (uri (git-reference
32865 (url "https://github.com/invl/retry")
32866 (commit version)))
32867 (file-name (git-file-name name version))
32868 (sha256
32869 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
32870 (build-system pyproject-build-system)
32871 (native-inputs (list python-pbr python-pytest))
32872 (propagated-inputs (list python-decorator python-py))
32873 (home-page "https://github.com/invl/retry")
32874 (synopsis "Retry decorator")
32875 (description
32876 "@code{retry} is an easy to use retry decorator for Python. It can be
32877used to retry a function a given number of times.")
32878 (license license:asl2.0)))
32879
32880(define-public python-crayons
32881 (package
32882 (name "python-crayons")
32883 (version "0.4.0")
32884 (source
32885 (origin
32886 (method git-fetch)
32887 (uri (git-reference
32888 (url "https://github.com/MasterOdin/crayons")
32889 (commit (string-append "v" version))))
32890 (file-name (git-file-name name version))
32891 (sha256
32892 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
32893 (build-system pyproject-build-system)
32894 (arguments
32895 (list
32896 #:test-backend #~'custom
32897 #:test-flags #~(list "test_crayons.py")))
32898 (native-inputs (list python-setuptools))
32899 (propagated-inputs (list python-colorama))
32900 (home-page "https://github.com/MasterOdin/crayons")
32901 (synopsis "TextUI colors for Python")
32902 (description
32903 "This package gives you colored strings for the terminal. Crayons
32904automatically wraps a given string in the foreground color and restores the
32905original state after the string is printed.")
32906 (license license:expat)))
32907
32908(define-public python-sane
32909 (package
32910 (name "python-sane")
32911 (version "2.9.2")
32912 (source
32913 (origin
32914 (method git-fetch)
32915 (uri (git-reference
32916 (url "https://github.com/python-pillow/Sane")
32917 (commit (string-append "v" version))))
32918 (file-name (git-file-name name version))
32919 (sha256
32920 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
32921 (build-system pyproject-build-system)
32922 (arguments (list #:tests? #f)) ; No tests.
32923 (native-inputs (list python-setuptools))
32924 (inputs (list sane))
32925 (home-page "https://github.com/python-pillow/Sane")
32926 (synopsis "Python interface to the SANE scanner")
32927 (description
32928 "This package provides Python interface to the SANE scanner and frame
32929grabber interface.")
32930 (license (license:non-copyleft
32931 ;; Yet another variant of the X/MIT license.
32932 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
32933
32934(define-public python-scikit-build
32935 (package
32936 (name "python-scikit-build")
32937 (version "0.18.1")
32938 (source
32939 (origin
32940 (method url-fetch)
32941 (uri (pypi-uri "scikit_build" version))
32942 (sha256
32943 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
32944 (patches
32945 (search-patches "python-scikit-build-setuptools-compat.patch"))))
32946 (build-system pyproject-build-system)
32947 (arguments
32948 (list
32949 #:phases
32950 #~(modify-phases %standard-phases
32951 (add-after 'unpack 'patch-cmake-executable
32952 (lambda* (#:key inputs #:allow-other-keys)
32953 (substitute* "skbuild/constants.py"
32954 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
32955 (format #f "~a ~s~%" head
32956 (search-input-file inputs "bin/cmake"))))))
32957 (add-before 'check 'pre-check
32958 (lambda _
32959 ;; Some tests try to access the network before being skipped.
32960 ;; Skip them by default.
32961 (substitute* "tests/test_setup.py"
32962 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
32963 "pytest.mark.isolated()\n"))))
32964 (replace 'check
32965 (lambda* (#:key tests? #:allow-other-keys)
32966 (when tests?
32967 ;; These tests attempt to pull dependencies from the Internet.
32968 (delete-file "tests/test_distribution.py")
32969 (delete-file "tests/test_pep518.py")
32970 ;; The tests marked as "isolate" are tests that require access
32971 ;; to the network.
32972 (invoke "pytest" "-vv" "-m" "not isolated"
32973 "-n" (number->string (parallel-job-count))
32974 "-k" (string-append
32975 ;; These tests attempt to write to read-only
32976 ;; Python install directory.
32977 "not test_install_command "
32978 "and not test_test_command "
32979 "and not test_hello_develop "
32980 ;; These sdist-related tests fail for unknown
32981 ;; reasons (see:
32982 ;; https://github.com/scikit-build/scikit-build/issues/689).
32983 "and not test_hello_sdist_with_base "
32984 "and not test_manifest_in_sdist "
32985 "and not test_hello_sdist "
32986 "and not test_sdist_with_symlinks "
32987 ;; These are not parallel safe and fail
32988 ;; nondeterministically (see:
32989 ;; https://github.com/scikit-build/scikit-build/issues/711).
32990 "and not test_generator_cleanup "
32991 "and not test_generator_selection "
32992 ;; … and there's more of them
32993 "and not test_cxx_compiler "
32994 "and not test_fortran_compiler ")))))
32995 (add-after 'install 'install-cmake
32996 (lambda* (#:key outputs #:allow-other-keys)
32997 (let ((lib (string-append (assoc-ref outputs "out")
32998 "/lib/cmake/modules")))
32999 (mkdir-p lib)
33000 (with-directory-excursion "skbuild/resources/cmake"
33001 (for-each (lambda (file) (install-file file lib))
33002 (find-files "." "\\.cmake")))))))))
33003 (native-inputs
33004 (list cmake-minimal
33005 gfortran
33006 git-minimal/pinned ;for tests
33007 ninja/pinned
33008 python-cython
33009 python-hatch-fancy-pypi-readme
33010 python-hatch-vcs
33011 python-hatchling
33012 python-pytest
33013 python-pytest-mock
33014 python-pytest-xdist
33015 python-requests
33016 python-virtualenv))
33017 (propagated-inputs
33018 (list python-distro
33019 python-packaging
33020 python-wheel))
33021 (home-page "https://github.com/scikit-build/scikit-build")
33022 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
33023 (description "Scikit-build is an improved build system generator for
33024CPython C/C++/Fortran/Cython extensions. It has support for additional
33025compilers, build systems, cross compilation, and locating dependencies and
33026determining their build requirements. The scikit-build package is
33027fundamentally just glue between the @code{setuptools} Python module and
33028CMake.")
33029 (license license:expat)))
33030
33031(define-public python-screeninfo
33032 (package
33033 (name "python-screeninfo")
33034 (version "0.8.1")
33035 (source
33036 (origin
33037 (method git-fetch)
33038 (uri (git-reference
33039 (url "https://github.com/rr-/screeninfo")
33040 (commit version)))
33041 (file-name (git-file-name name version))
33042 (sha256
33043 (base32 "0q0nvj2ghbyjfymsbsl6dr7ggpg177fjncnzbxj18yglyz0vhk2c"))))
33044 (build-system pyproject-build-system)
33045 (native-inputs
33046 (list libdrm
33047 python-poetry-core
33048 python-pytest))
33049 (home-page "https://github.com/rr-/screeninfo")
33050 (synopsis "Fetch location and size of physical screens")
33051 (description
33052 "Fetch location and size of physical screens. GNU/Linux has support on
33053following enviroments: X11 (thought Xinerama) and DRM (experimental).")
33054 (license license:expat)))
33055
33056(define-public python-screenkey
33057 (package
33058 (name "python-screenkey")
33059 (version "1.5")
33060 (source
33061 (origin
33062 (method git-fetch)
33063 (uri (git-reference
33064 (url "https://gitlab.com/screenkey/screenkey")
33065 (commit (string-append "v" version))))
33066 (file-name (git-file-name name version))
33067 (sha256
33068 (base32 "0j719kld4dr85d9lxn0d0b6156mcy09jm7arssfp2n3j6hmjssci"))))
33069 (build-system pyproject-build-system)
33070 (arguments
33071 (list
33072 #:tests? #f ; No tests.
33073 #:phases
33074 #~(modify-phases %standard-phases
33075 (add-after 'unpack 'fix-dlopen-paths
33076 (lambda* (#:key inputs #:allow-other-keys)
33077 (substitute* "Screenkey/xlib.py"
33078 (("(libXtst.so.6|libX11.so.6)" lib)
33079 (search-input-file inputs (string-append "/lib/" lib))))))
33080 (add-after 'install 'wrap-screenkey
33081 (lambda _
33082 (wrap-program (string-append #$output "/bin/screenkey")
33083 `("GUIX_PYTHONPATH" ":" prefix
33084 (,(getenv "GUIX_PYTHONPATH")))
33085 `("GI_TYPELIB_PATH" ":" prefix
33086 (,(getenv "GI_TYPELIB_PATH")))))))))
33087 (inputs (list bash-minimal
33088 gtk+
33089 libx11
33090 libxtst
33091 python-babel
33092 python-dbus
33093 python-pycairo
33094 python-pygobject
33095 slop))
33096 (native-inputs (list python-setuptools))
33097 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
33098 (synopsis "Screencast tool to display pressed keys")
33099 (description
33100 "Screenkey is a screencast tool to display your keys inspired by
33101Screenflick.")
33102 (license license:gpl3+)))
33103
33104(define-public python-jinja2-cli
33105 (package
33106 (name "python-jinja2-cli")
33107 (version "0.8.2")
33108 (source
33109 (origin
33110 (method git-fetch)
33111 (uri (git-reference
33112 (url "https://github.com/mattrobenolt/jinja2-cli")
33113 (commit version)))
33114 (file-name (git-file-name name version))
33115 (sha256
33116 (base32
33117 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
33118 (build-system pyproject-build-system)
33119 (propagated-inputs
33120 (list python-jinja2))
33121 (native-inputs
33122 (list python-jinja2
33123 python-pytest
33124 python-setuptools
33125 python-wheel))
33126 (home-page "https://github.com/mattrobenolt/jinja2-cli")
33127 (synopsis "Command-line interface to Jinja2")
33128 (description
33129 "This package provides a command-line interface (CLI) to the Jinja2
33130template engine.")
33131 (license license:bsd-3)))
33132
33133(define-public python-readability
33134 (package
33135 (name "python-readability")
33136 (version "0.3.1")
33137 (source
33138 (origin
33139 (method git-fetch)
33140 (uri (git-reference
33141 (url "https://github.com/andreasvc/readability/")
33142 (commit (string-append "v" version))))
33143 (file-name (git-file-name name version))
33144 (sha256
33145 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
33146 (build-system pyproject-build-system)
33147 (arguments (list #:tests? #f)) ; No tests.
33148 (native-inputs (list python-setuptools))
33149 (home-page "https://github.com/andreasvc/readability/")
33150 (synopsis "Measure text readability using surface characteristics")
33151 (description
33152 "This package provides a Python library that is an implementation of
33153traditional readability measures based on simple surface characteristics.
33154These measures are basically linear regressions based on the number of words,
33155syllables, and sentences.")
33156 (license license:asl2.0)))
33157
33158(define-public python-readability-lxml
33159 ;; No releases since 2020, see:
33160 ;; <https://github.com/buriy/python-readability/issues/196>.
33161 (package
33162 (name "python-readability-lxml")
33163 (version "0.8.4.1")
33164 (source
33165 (origin
33166 (method git-fetch)
33167 (uri (git-reference
33168 (url "http://github.com/buriy/python-readability")
33169 (commit version)))
33170 (file-name (git-file-name name version))
33171 (sha256
33172 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
33173 (build-system pyproject-build-system)
33174 (native-inputs
33175 (list python-poetry-core
33176 python-pytest))
33177 (propagated-inputs
33178 (list python-chardet
33179 python-cssselect
33180 python-lxml
33181 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
33182 (home-page "http://github.com/buriy/python-readability")
33183 (synopsis "HTML to text parser")
33184 (description
33185 "This package provides classes and function that strip gratuitous markup
33186from web pages to make them easier to read.")
33187 (license license:asl2.0)))
33188
33189(define-public python-listparser
33190 (package
33191 (name "python-listparser")
33192 (version "0.20")
33193 (source
33194 (origin
33195 (method git-fetch)
33196 (uri (git-reference
33197 (url "https://github.com/kurtmckee/listparser")
33198 (commit (string-append "v" version))))
33199 (file-name (git-file-name name version))
33200 (sha256
33201 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
33202 (build-system pyproject-build-system)
33203 (native-inputs (list python-pytest python-poetry-core))
33204 (home-page "https://github.com/kurtmckee/listparser")
33205 (synopsis "Parse subscription lists in Python")
33206 (description
33207 "This package provides a Python library that can parse OPML, FOAF, and
33208iGoogle subscription lists.")
33209 (license license:expat)))
33210
33211(define-public python-smartypants
33212 (package
33213 (name "python-smartypants")
33214 (version "2.0.2")
33215 (source
33216 (origin
33217 (method url-fetch)
33218 (uri (pypi-uri "smartypants" version))
33219 (sha256
33220 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
33221 (build-system pyproject-build-system)
33222 (native-inputs
33223 (list python-docutils python-pygments python-setuptools))
33224 (home-page "https://github.com/justinmayer/smartypants.py")
33225 (synopsis "Translate punctuation characters into smart quotes")
33226 (description
33227 "@command{smartpants} can perform the following transformations:
33228@enumerate
33229@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
33230@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
33231entities
33232@item Dashes (-- and ---) into en- and em-dash entities
33233@item Three consecutive dots (... or . . .) into an ellipsis entity
33234@end enumerate")
33235 (license license:bsd-3)))
33236
33237(define-public python-ld
33238 (package
33239 (name "python-ld")
33240 (version "1.9.0")
33241 (source
33242 (origin
33243 (method git-fetch)
33244 (uri (git-reference
33245 (url "https://github.com/nir0s/ld")
33246 (commit (string-append "v" version))))
33247 (file-name (git-file-name name version))
33248 (sha256
33249 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
33250 (build-system pyproject-build-system)
33251 (arguments
33252 (list
33253 ;; XXX: These tests expect ubuntu distro.
33254 #:test-flags
33255 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
33256 "test_ubuntu14nomodules_lsb_release"
33257 "test_trailingblanks_lsb_release")
33258 " and not "))))
33259 (native-inputs (list python-pytest python-setuptools))
33260 (home-page "https://github.com/nir0s/ld")
33261 (synopsis "OS platform information API")
33262 (description
33263 "The ld package provides information about the GNU/Linux distribution it
33264runs on, such as a reliable machine-readable ID, or version information.")
33265 (license license:asl2.0)))
33266
33267(define-public python-quicktions
33268 (package
33269 (name "python-quicktions")
33270 (version "1.22")
33271 (source
33272 (origin
33273 (method git-fetch)
33274 (uri (git-reference
33275 (url "https://github.com/scoder/quicktions")
33276 (commit version)))
33277 (file-name (git-file-name name version))
33278 (sha256
33279 (base32
33280 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
33281 (build-system pyproject-build-system)
33282 (native-inputs
33283 (list python-cython python-pytest python-setuptools))
33284 (home-page "https://github.com/scoder/quicktions")
33285 (synopsis "Fast fractions data type for rational numbers")
33286 (description
33287 "This package provides fast fractions data type for rational numbers. It
33288is the cythonized version of @code{fractions.Fraction}.")
33289 (license license:psfl)))
33290
33291(define-public python-pathvalidate
33292 (package
33293 (name "python-pathvalidate")
33294 (version "2.4.1")
33295 (source
33296 (origin
33297 (method git-fetch)
33298 (uri (git-reference
33299 (url "https://github.com/thombashi/pathvalidate")
33300 (commit (string-append "v" version))))
33301 (file-name (git-file-name name version))
33302 (sha256
33303 (base32 "17s9vqmws4sfji4bw6qd4rn7ahzkpj6yp2ia5p6vd8kva8n05h37"))))
33304 (build-system pyproject-build-system)
33305 (native-inputs (list python-allpairspy python-click python-faker
33306 python-pytest python-setuptools))
33307 (home-page "https://github.com/thombashi/pathvalidate")
33308 (synopsis "Sanitize strings representing paths")
33309 (description
33310 "@code{pathvalidate} is a Python library to sanitize/validate strings
33311representing paths or filenames.")
33312 (license license:expat)))
33313
33314(define-public python-escapism
33315 (package
33316 (name "python-escapism")
33317 (version "1.0.1")
33318 (source
33319 (origin
33320 (method git-fetch)
33321 (uri (git-reference
33322 (url "https://github.com/jupyterhub/escapism")
33323 (commit version)))
33324 (file-name (git-file-name name version))
33325 (sha256
33326 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
33327 (build-system pyproject-build-system)
33328 (native-inputs (list python-pytest python-setuptools))
33329 (home-page "https://github.com/jupyterhub/escapism")
33330 (synopsis "Simple, generic library for escaping strings")
33331 (description
33332 "This Python library provides a programming interface to, given a set of
33333safe characters and an escape character, escape safe strings and unescape the
33334result.")
33335 (license license:expat)))
33336
33337(define-public python-recommonmark
33338 (package
33339 (name "python-recommonmark")
33340 (version "0.7.1")
33341 (source
33342 (origin
33343 (method url-fetch)
33344 (uri (pypi-uri "recommonmark" version))
33345 (sha256
33346 (base32
33347 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
33348 (build-system pyproject-build-system)
33349 (arguments
33350 (list
33351 ;; XXX: Some of those fail for no good reason.
33352 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
33353 (native-inputs (list python-pytest python-setuptools python-wheel))
33354 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
33355 (home-page "https://github.com/readthedocs/recommonmark")
33356 (synopsis "Docutils-compatibility bridge to CommonMark")
33357 (description
33358 "This package provides a docutils-compatibility bridge to CommonMark that
33359lets you write CommonMark inside of Docutils & Sphinx projects.")
33360 (license license:expat)))
33361
33362(define-public python-rectangle-packer
33363 (package
33364 (name "python-rectangle-packer")
33365 (version "2.1.0")
33366 (source
33367 (origin
33368 (method git-fetch)
33369 (uri (git-reference
33370 (url "https://github.com/Penlect/rectangle-packer")
33371 (commit version)))
33372 (file-name (git-file-name name version))
33373 (sha256
33374 (base32 "0pwzfxpdv20v8d8lq844nm01zzgzzvm2rg2h49aj949myqkg5nmd"))))
33375 (build-system pyproject-build-system)
33376 (arguments
33377 (list
33378 #:phases
33379 #~(modify-phases %standard-phases
33380 ;; Cython extensions have to be built before running the tests.
33381 (add-before 'check 'build-ext
33382 (lambda _
33383 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
33384 (native-inputs
33385 (list python-cython python-pytest python-setuptools))
33386 (home-page "https://github.com/Penlect/rectangle-packer")
33387 (synopsis "Pack rectangles into a bounding box")
33388 (description
33389 "Rectangle-packer is a Python library for packing rectangles
33390into a bounding box with minimal wasted space. It is useful for texture
33391atlases, sprite sheets, and bin packing problems.")
33392 (license license:expat)))
33393
33394(define-public python-redo
33395 (package
33396 (name "python-redo")
33397 (version "3.0.0")
33398 (source
33399 (origin
33400 (method git-fetch)
33401 (uri (git-reference
33402 (url "https://github.com/mozilla-releng/redo")
33403 (commit version)))
33404 (file-name (git-file-name name version))
33405 (sha256
33406 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
33407 (build-system pyproject-build-system)
33408 (native-inputs
33409 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
33410 (home-page "https://github.com/mozilla-releng/redo")
33411 (synopsis "Utilities to retry Python callables")
33412 (description "Redo provides various means to add seamless ability to
33413retry to any Python callable.")
33414 (license license:mpl2.0)))
33415
33416(define-public python-opcodes
33417 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
33418 ;; version number, which is what we use here.
33419 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
33420 (package
33421 (name "python-opcodes")
33422 (version "0.3.14") ;from 'opcodes/__init__.py'
33423 (home-page "https://github.com/Maratyszcza/Opcodes")
33424 (source
33425 (origin
33426 (method git-fetch)
33427 (uri (git-reference (url home-page) (commit commit)))
33428 (file-name (git-file-name name version))
33429 (sha256
33430 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
33431 (build-system pyproject-build-system)
33432 (native-inputs (list python-pytest python-setuptools))
33433 (synopsis "Database of processor instructions and opcodes")
33434 (description
33435 "This project documents instruction sets in a format convenient for
33436tools development. An instruction set is represented by three files:
33437
33438@itemize
33439@item an XML file that describes instructions;
33440@item an XSD file that describes the structure of the XML file;
33441@item a Python module that reads the XML file and represents it as a set of
33442Python objects;
33443@end itemize
33444
33445It currently provides descriptions for most user-mode x86, x86_64, and k1om
33446instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
33447and BMI2).")
33448 (license license:bsd-2))))
33449
33450(define-public python-cart
33451 (package
33452 (name "python-cart")
33453 (version "1.2.3")
33454 (source
33455 (origin
33456 (method git-fetch)
33457 (uri (git-reference
33458 (url "https://github.com/CybercentreCanada/cart")
33459 (commit (string-append "v" version))))
33460 (file-name (git-file-name name version))
33461 (sha256
33462 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33463 (build-system pyproject-build-system)
33464 (arguments
33465 (list
33466 #:test-backend #~'unittest))
33467 (native-inputs
33468 (list python-setuptools))
33469 (propagated-inputs
33470 (list python-pycryptodome))
33471 (home-page "https://github.com/CybercentreCanada/cart")
33472 (synopsis "Library for interacting with the CaRT file format")
33473 (description
33474 "This Python library implements the CaRT file format which is commonly
33475used to store and transmit information about computer malware and associated
33476metadata.")
33477 (license license:bsd-2)))
33478
33479(define-public python-cle
33480 (package
33481 (name "python-cle")
33482 ;; Must be the same version as python-angr.
33483 (version "9.2.186")
33484 (source
33485 (origin
33486 (method git-fetch)
33487 (uri (git-reference
33488 (url "https://github.com/angr/cle")
33489 (commit (string-append "v" version))))
33490 (file-name (git-file-name name version))
33491 (sha256
33492 (base32 "1ycrqysvxgm369cwf0zcyykl1xgma71apbxkbq0z9yakpajgli1s"))))
33493 (build-system pyproject-build-system)
33494 (arguments
33495 (list
33496 ;; tests: 112 passed, 12 skipped, 1 warning
33497 #:phases
33498 #~(modify-phases %standard-phases
33499 (add-before 'check 'check-setup
33500 (lambda _
33501 (copy-recursively
33502 (string-append #$(this-package-native-input "angr-binaries") "/share")
33503 "../binaries"))))))
33504 (native-inputs
33505 (list angr-binaries
33506 python-cffi
33507 python-pytest
33508 python-setuptools))
33509 (propagated-inputs
33510 (list python-archinfo
33511 python-cart
33512 python-pefile
33513 python-pyelftools
33514 python-pyvex
33515 python-sortedcontainers))
33516 (home-page "https://github.com/angr/cle")
33517 (synopsis "Python loader for binaries and their associated libraries")
33518 (description
33519 "CLE loads binaries and their associated libraries, resolves
33520imports and provides an abstraction of process memory the same way as if
33521it was loader by the operating system's loader.")
33522 (license license:bsd-2)))
33523
33524(define-public python-pyvex
33525 (package
33526 (name "python-pyvex")
33527 ;; Must be the same version as python-angr.
33528 (version "9.2.186")
33529 (source
33530 (origin
33531 (method git-fetch)
33532 (uri (git-reference
33533 (url "https://github.com/angr/pyvex")
33534 (commit (string-append "v" version))))
33535 (file-name (git-file-name name version))
33536 (sha256
33537 (base32 "1ql6rn5n8jfmz8v2453283qdgpxvjkfgqdxwqsgs005j9lrhqa7z"))))
33538 (build-system pyproject-build-system)
33539 (arguments
33540 (list
33541 ;; tests: 57 passed
33542 #:phases
33543 #~(modify-phases %standard-phases
33544 (add-after 'unpack 'copy-submodule-package
33545 ;; XXX: ensure-no-mtimes-pre-1980 and build phases fail when using
33546 ;; symlink: "Read-only file system".
33547 (lambda _
33548 (copy-recursively
33549 #+(package-source (this-package-native-input "vex"))
33550 (string-append (getcwd) "/vex"))))
33551 (add-before 'build 'set-cc
33552 (lambda _
33553 (setenv "AR" #$(ar-for-target))
33554 (setenv "CC" #$(cc-for-target))
33555 (setenv "CC_NATIVE" "gcc"))))))
33556 (native-inputs
33557 (list cmake-minimal
33558 python-pytest
33559 python-scikit-build-core
33560 vex))
33561 (propagated-inputs
33562 (list python-bitstring
33563 python-cffi))
33564 (home-page "https://github.com/angr/pyvex")
33565 (synopsis "Python interface to libVEX and VEX IR")
33566 (description
33567 "This package provides a Python interface the libVEX and VEX IR.
33568VEX is the intermediate representation (also known as intermediate
33569language) used by the Valgrind analysis tool. As such, VEX is designed
33570to enable all kinds of binary analysis tasks.")
33571 (license (list license:bsd-2
33572 license:gpl2))))
33573
33574(define-public python-claripy
33575 (package
33576 (name "python-claripy")
33577 ;; Must be the same version as python-angr.
33578 (version "9.2.186")
33579 (source
33580 (origin
33581 (method git-fetch)
33582 (uri (git-reference
33583 (url "https://github.com/angr/claripy")
33584 (commit (string-append "v" version))))
33585 (file-name (git-file-name name version))
33586 (sha256
33587 (base32 "1vlvscjn098100i2hfcsxllj19bnzs6vagnkg0fr18ps2gvbzcnv"))))
33588 (build-system pyproject-build-system)
33589 (arguments
33590 (list
33591 ;; tests: 329 passed, 1 skipped
33592 #:phases
33593 #~(modify-phases %standard-phases
33594 (add-after 'unpack 'relax-requirements
33595 (lambda _
33596 (substitute* "pyproject.toml"
33597 ;; Current version of z3 in Guix is 4.13.0 and sanity check
33598 ;; failes to detect it (similar like OpenCV), relax the
33599 ;; version constraint, see:
33600 ;; <https://github.com/angr/claripy/commit/d1fe2df>.
33601 ((", \"z3-solver==4.13.0.0\"")
33602 "")))))))
33603 (native-inputs
33604 (list python-pytest
33605 python-setuptools))
33606 (propagated-inputs
33607 (list python-cachetools
33608 python-decorator
33609 python-pysmt
33610 z3))
33611 (home-page "https://github.com/angr/claripy")
33612 (synopsis "Abstraction layer for constraint solvers")
33613 (description
33614 "This Python module provides an abstraction layer for interacting
33615with constraint solvers. Specifically, it is intended to be used with
33616SMT solvers and is built on top of the Z3 solver.")
33617 (license license:bsd-2)))
33618
33619(define-public python-pysmt
33620 (package
33621 (name "python-pysmt")
33622 (version "0.9.6")
33623 (source
33624 (origin
33625 ;; Fetching from Git as pypi release doesn't include all test files.
33626 (method git-fetch)
33627 (uri (git-reference
33628 (url "https://github.com/pysmt/pysmt")
33629 (commit (string-append "v" version))))
33630 (file-name (git-file-name name version))
33631 (sha256
33632 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33633 (build-system pyproject-build-system)
33634 (arguments
33635 `(#:phases (modify-phases %standard-phases
33636 (add-before 'check 'set-pysmt-solver
33637 (lambda _
33638 (setenv "PYSMT_SOLVER" "z3"))))))
33639 (native-inputs (list python-pytest python-setuptools python-wheel))
33640 (propagated-inputs (list z3))
33641 (home-page "https://github.com/pysmt/pysmt")
33642 (synopsis
33643 "Solver-agnostic library for SMT formula manipulation and solving")
33644 (description
33645 "This Python module provides a solver-agnostic abstraction for
33646working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33647it allows manipulation and solving such formulas.")
33648 (license license:asl2.0)))
33649
33650(define-public python-rpyc
33651 (package
33652 (name "python-rpyc")
33653 (version "5.3.1")
33654 (source
33655 (origin
33656 ;; Fetching from Git as pypi release doesn't include all test files.
33657 (method git-fetch)
33658 (uri (git-reference
33659 (url "https://github.com/tomerfiliba-org/rpyc")
33660 (commit version)))
33661 (file-name (git-file-name name version))
33662 (sha256
33663 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33664 (snippet '(begin
33665 ;; Disable deploy tests, these rely on OpenSSH and require
33666 ;; configuring the SSH client manually to accept the host key.
33667 (delete-file "tests/test_deploy.py")
33668 ;; Disable tests requiring network access. These tests
33669 ;; presently fail with the error "Network is unreachable".
33670 (delete-file "tests/test_registry.py")))))
33671 (build-system pyproject-build-system)
33672 (arguments
33673 `(#:phases (modify-phases %standard-phases
33674 (replace 'check
33675 (lambda* (#:key tests? #:allow-other-keys)
33676 (when tests?
33677 (with-directory-excursion "tests"
33678 (invoke "python" "-m" "unittest"))))))))
33679 (propagated-inputs (list python-hatchling python-plumbum))
33680 (home-page "https://github.com/tomerfiliba-org/rpyc")
33681 (synopsis
33682 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33683 (description
33684 "This Python module enables remote procedure calls, clustering, and
33685distributed-computing. For this purpose, it makes use of object-proxying, a technique
33686that employs python's dynamic nature, to overcome the physical boundaries between
33687processes and computers, so that remote objects can be manipulated as if they
33688were local.")
33689 (license license:expat)))
33690
33691(define-public python-nampa
33692 (package
33693 (name "python-nampa")
33694 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33695 ;; has 0.1.1 as version. Latest commit is from 2024.
33696 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33697 (revision . "0")))
33698 (version (git-version "1.0.0"
33699 (assoc-ref properties 'revision)
33700 (assoc-ref properties 'commit)))
33701 (source
33702 (origin
33703 (method git-fetch)
33704 (uri (git-reference
33705 (url "https://github.com/thebabush/nampa")
33706 (commit (assoc-ref properties 'commit))))
33707 (file-name (git-file-name name version))
33708 (sha256
33709 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33710 (build-system pyproject-build-system)
33711 (arguments
33712 (list
33713 #:test-flags
33714 #~(list "-k test_random_values")
33715 #:phases
33716 #~(modify-phases %standard-phases
33717 (add-after 'unpack 'patch-tests
33718 (lambda _
33719 ;; Unclear why this top-level __init__.py is here. It seems to
33720 ;; setup a plugin for binaryninja, which Guix does not package.
33721 (delete-file "__init__.py")
33722 ;; Yields tests, which is not allowed anymore.
33723 (substitute* "tests/test_crc.py"
33724 (("yield") "#yield")))))))
33725 (propagated-inputs (list python-future))
33726 (native-inputs (list python-pytest python-setuptools))
33727 (home-page "https://github.com/thebabush/nampa")
33728 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33729 (description
33730 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33731and Recognition Technology}. This technology is useful for identifying
33732common library subroutines in disassembled binaries.")
33733 (license license:lgpl3)))
33734
33735(define-public python-mulpyplexer
33736 (package
33737 (name "python-mulpyplexer")
33738 (version "0.09")
33739 (source
33740 (origin
33741 (method url-fetch)
33742 (uri (pypi-uri "mulpyplexer" version))
33743 (sha256
33744 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33745 (build-system pyproject-build-system)
33746 (arguments
33747 (list
33748 #:phases
33749 '(modify-phases %standard-phases
33750 (replace 'check
33751 (lambda* (#:key tests? #:allow-other-keys)
33752 (when tests?
33753 (invoke "python" "mulpyplexer.py")))))))
33754 (native-inputs (list python-setuptools python-wheel))
33755 (home-page "https://github.com/zardus/mulpyplexer/")
33756 (synopsis "Multiplexes interactions with lists of Python objects")
33757 (description "This module provides utilities for multiplexing
33758interactions with lists of Python objects.")
33759 (license license:bsd-2)))
33760
33761(define-public python-itanium-demangler
33762 (package
33763 (name "python-itanium-demangler")
33764 (version "1.1")
33765 (source
33766 (origin
33767 (method git-fetch)
33768 (uri (git-reference
33769 ;; PyPI only provides wheels and no source code.
33770 (url "https://github.com/whitequark/python-itanium_demangler")
33771 (commit (string-append "v" version))))
33772 (file-name (git-file-name name version))
33773 (sha256
33774 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
33775 (build-system pyproject-build-system)
33776 (arguments
33777 (list
33778 #:phases
33779 #~(modify-phases %standard-phases
33780 (replace 'check
33781 (lambda* (#:key tests? #:allow-other-keys)
33782 (when tests?
33783 (with-directory-excursion "tests"
33784 (invoke "python" "-m" "unittest"))))))))
33785 (native-inputs (list python-setuptools python-wheel))
33786 (home-page "https://github.com/whitequark/python-itanium_demangler/")
33787 (synopsis "Pure Python Itanium C++ ABI demangler")
33788 (description
33789"This Python module provides an implementation of the Itanium C++ ABI symbol
33790mangling language. The demangler generates an abstract syntax tree from
33791mangled symbols, which can be used for directly extracting type information.")
33792 (license license:bsd-0)))
33793
33794(define-public python-angr
33795 (package
33796 (name "python-angr")
33797 (version "9.2.186")
33798 (source
33799 (origin
33800 (method git-fetch)
33801 (uri (git-reference
33802 (url "https://github.com/angr/angr")
33803 (commit (string-append "v" version))))
33804 (file-name (git-file-name name version))
33805 (sha256
33806 (base32 "1x1vnhgf1p05z2cdjc626jvvk9xqa9qzmg1yk73lq4qn7sa4cnmd"))
33807 (patches (search-patches "python-angr-fix-manyfloat-tests.patch"
33808 "python-angr-check-exec-deps.patch"))))
33809 (build-system pyproject-build-system)
33810 (arguments
33811 (list
33812 #:imported-modules `(,@%cargo-build-system-modules
33813 ,@%pyproject-build-system-modules)
33814 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
33815 (guix build pyproject-build-system)
33816 (guix build utils))
33817 #:test-flags
33818 #~(list "-x"
33819 "--dist" "load"
33820 "--numprocesses" (number->string (parallel-job-count))
33821 "-k"
33822 ;; test_mips32_missing_offset_in_instructions fails
33823 ;; with capstone 5 and passes with capstone 4. Might
33824 ;; be a capstone regressions, needs investigation.
33825 ;;
33826 ;; TODO: test_unsat_core needs investigation.
33827 ;;
33828 ;; test_decompiling_abnormal_switch_case_case3 is broken
33829 ;; when tests modifying global counters are run before it.
33830 ;; See <https://github.com/angr/angr/issues/5715>.
33831 ;;
33832 ;; test_concrete_memset is a non-deterministic benchmark.
33833 ;; test_similarity_fauxware is flaky.
33834 (string-append
33835 "not test_mips32_missing_offset_in_instructions"
33836 " and not test_unsat_core"
33837 " and not test_decompiling_abnormal_switch_case_case3"
33838 " and not test_concrete_memset"
33839 " and not test_similarity_fauxware"))
33840 #:phases
33841 #~(modify-phases %standard-phases
33842 (add-after 'unpack 'use-guix-vendored-dependencies
33843 (lambda _
33844 (substitute* "native/angr/Cargo.toml"
33845 (("^icicle-fuzzing.*$")
33846 "icicle-fuzzing = { version = \"*\" }\n")
33847 (("^icicle-vm.*$")
33848 "icicle-vm = { version = \"*\" }\n")
33849 (("^pcode.*$")
33850 "pcode = { version = \"*\" }\n"))))
33851 (add-after 'unpack 'fix-tests
33852 (lambda _
33853 (substitute* "tests/common.py"
33854 (("\\[\"cc\"\\]")
33855 "[\"gcc\"]"))))
33856 (add-after 'unpack 'relax-protobuf
33857 (lambda _
33858 ;; Relax protobuf constraint, see 'generate-protobuf-files phase below.
33859 (substitute* "pyproject.toml"
33860 (("protobuf>=6.33.0") "protobuf"))))
33861 (add-after 'use-guix-vendored-dependencies 'prepare-cargo-build-system
33862 (lambda args
33863 (for-each (lambda (phase)
33864 (format #t "Running cargo phase: ~a~%" phase)
33865 (apply (assoc-ref cargo:%standard-phases phase)
33866 #:cargo-target #$(cargo-triplet)
33867 args))
33868 '(prepare-rust-crates
33869 unpack-rust-crates
33870 configure
33871 check-for-pregenerated-files
33872 patch-cargo-checksums))))
33873 (add-before 'check 'check-setup
33874 (lambda _
33875 (copy-recursively
33876 (string-append #$(this-package-native-input "angr-binaries") "/share")
33877 "../binaries")))
33878 (add-before 'build 'generate-protobuf-files
33879 ;; Regenerate protobuf files using our utilized protobuf version.
33880 ;; This allows us to relax the version constraint on python-protobuf.
33881 (lambda _
33882 (apply invoke "protoc" "-I=." "--python_out=." (find-files "angr/protos" "\\.proto$"))))
33883 (add-before 'build 'set-cc
33884 (lambda _
33885 (setenv "CC" #$(cc-for-target)))))))
33886 (propagated-inputs (list python-archinfo ;sync version with python-angr
33887 python-cachetools
33888 python-cffi
33889 python-claripy ;sync version with python-angr
33890 python-cle ;sync version with python-angr
33891 python-cxxheaderparser
33892 python-gitpython
33893 python-msgspec
33894 python-mulpyplexer
33895 python-networkx
33896 python-protobuf
33897 python-psutil
33898 python-pycparser
33899 python-pydemumble
33900 python-pyformlang
33901 python-pypcode
33902 python-pyvex ;sync version with python-angr
33903 python-rich
33904 python-sortedcontainers
33905 python-sympy
33906 python-sqlalchemy
33907 python-keystone-engine
33908 python-typing-extensions
33909 python-unique-log-filter
33910 unicorn-2.0))
33911 (native-inputs
33912 (append
33913 (list angr-binaries
33914 protobuf
33915 python-pytest
33916 python-pytest-xdist
33917 python-setuptools
33918 python-setuptools-rust
33919 rust
33920 `(,rust "cargo"))
33921 (or (and=> (%current-target-system)
33922 (compose list make-rust-sysroot))
33923 '())))
33924 (inputs
33925 (cons* (cargo-inputs 'python-angr)))
33926 (home-page "https://github.com/angr/angr")
33927 (synopsis "Multi-architecture binary analysis toolkit")
33928 (description
33929 "This package provides a versatile binary analysis platform with the
33930ability to perform dynamic symbolic execution as well as various
33931static analyses directly on binaries. As such, it can be used for all
33932kinds of reverse engineering, vulnerability discovery, exploit
33933generation, and software testing purposes.")
33934 (license license:bsd-2)))
33935
33936(define-public python-peachpy
33937 ;; There is no tag in this repo.
33938 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
33939 (version "0.2.0") ;from 'peachpy/__init__.py'
33940 (revision "3"))
33941 (package
33942 (name "python-peachpy")
33943 (version (git-version version revision commit))
33944 (home-page "https://github.com/Maratyszcza/PeachPy")
33945 (source (origin
33946 (method git-fetch)
33947 (uri (git-reference (url home-page) (commit commit)))
33948 (file-name (git-file-name name version))
33949 (sha256
33950 (base32
33951 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
33952 (patches (search-patches "python-peachpy-determinism.patch"))))
33953 (build-system pyproject-build-system)
33954 (arguments
33955 ;; The issue is known and the test will probably never be fixed.
33956 ;; https://github.com/Maratyszcza/PeachPy/issues/131
33957 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
33958 (native-inputs
33959 (list python-pytest python-setuptools python-wheel))
33960 (propagated-inputs
33961 (list python-six python-opcodes))
33962 (synopsis "Efficient assembly code generation in Python")
33963 (description
33964 "PeachPy is a Python framework for writing high-performance assembly kernels.
33965PeachPy aims to simplify writing optimized assembly kernels while preserving
33966all optimization opportunities of traditional assembly.
33967
33968PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
33969for the Go language tool chain; it adapts to different calling conventions and
33970application binary interfaces (ABIs); it takes care of register allocation; it
33971supports x86_64 instructions up to AVX-512 and SHA.")
33972 (supported-systems '("x86_64-linux"))
33973 (license license:bsd-2))))
33974
33975(define-public python-sgmllib3k
33976 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
33977 (revision "1"))
33978 (package
33979 (name "python-sgmllib3k")
33980 (version
33981 (git-version "1.0.0" revision commit))
33982 (source
33983 (origin
33984 (method git-fetch)
33985 (uri (git-reference
33986 (url "https://github.com/hsoft/sgmllib")
33987 (commit commit)))
33988 (file-name (git-file-name name version))
33989 (sha256
33990 (base32
33991 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
33992 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
33993 (build-system pyproject-build-system)
33994 (native-inputs (list python-pytest python-setuptools))
33995 (home-page "https://github.com/hsoft/sgmllib")
33996 (synopsis "Python 3 port of sgmllib")
33997 (description "This package provides an unmaintained port of sgmllib to
33998Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
33999Generalized Mark-up Language}.")
34000 (license license:bsd-3))))
34001
34002(define-public python-cwcwidth
34003 (package
34004 (name "python-cwcwidth")
34005 (version "0.1.10")
34006 (source
34007 (origin
34008 (method url-fetch)
34009 (uri (pypi-uri "cwcwidth" version))
34010 (sha256
34011 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
34012 (build-system pyproject-build-system)
34013 (arguments
34014 (list
34015 #:phases
34016 #~(modify-phases %standard-phases
34017 (add-before 'check 'remove-local-cwcwidth
34018 (lambda _
34019 ;; This would otherwise interfere with finding the installed
34020 ;; cwcwidth when running tests.
34021 (delete-file-recursively "cwcwidth"))))))
34022 (native-inputs
34023 (list python-cython
34024 python-pytest
34025 python-setuptools
34026 python-setuptools-scm))
34027 (home-page "https://github.com/sebastinas/cwcwidth")
34028 (synopsis "Python bindings for wc(s)width")
34029 (description
34030 "This package provides bindings for wcwidth and wcswidth functions
34031defined in POSIX.1-2001 and POSIX.1-2008.")
34032 (license license:expat)))
34033
34034(define-public python-pyan3
34035 (package
34036 (name "python-pyan3")
34037 (version "1.2.0")
34038 (source
34039 (origin
34040 ;; Source tarball on PyPI lacks tests.
34041 (method git-fetch)
34042 (uri (git-reference
34043 (url "https://github.com/Technologicat/pyan")
34044 (commit (string-append "v" version))))
34045 (file-name (git-file-name name version))
34046 (sha256
34047 (base32
34048 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
34049 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
34050 "python-pyan3-fix-absolute-path-bug.patch"))))
34051 (build-system pyproject-build-system)
34052 (native-inputs
34053 (list python-pytest python-setuptools python-wheel))
34054 (propagated-inputs
34055 (list python-jinja2))
34056 (home-page "https://github.com/Technologicat/pyan")
34057 (synopsis "Offline call graph generator for Python 3")
34058 (description "Pyan takes one or more Python source files, performs
34059a (rather superficial) static analysis, and constructs a directed graph of the
34060objects in the combined source, and how they define or use each other. The
34061graph can be output for rendering by GraphViz or yEd.")
34062 (license license:gpl2)))
34063
34064(define-public python-multipledispatch
34065 (package
34066 (name "python-multipledispatch")
34067 (version "1.0.0")
34068 (source
34069 (origin
34070 (method git-fetch) ;no tests in PyPI archive
34071 (uri (git-reference
34072 (url "https://github.com/mrocklin/multipledispatch")
34073 (commit version)))
34074 (file-name (git-file-name name version))
34075 (sha256
34076 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
34077 (build-system pyproject-build-system)
34078 (native-inputs
34079 (list python-pytest
34080 python-pytest-benchmark
34081 python-setuptools))
34082 (home-page "https://github.com/mrocklin/multipledispatch/")
34083 (synopsis "Multiple dispatch for Python based on pattern matching")
34084 (description
34085 "This library provides an efficient mechanism for overloading function
34086implementations based on the types of the arguments.")
34087 (license license:bsd-3)))
34088
34089(define-public python-multimethod
34090 (package
34091 (name "python-multimethod")
34092 (version "1.10")
34093 (source
34094 (origin
34095 ;; No tests in the PyPI tarball.
34096 (method git-fetch)
34097 (uri (git-reference
34098 (url "https://github.com/coady/multimethod")
34099 (commit (string-append "v" version))))
34100 (file-name (git-file-name name version))
34101 (sha256
34102 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
34103 (build-system pyproject-build-system)
34104 (native-inputs (list python-pytest python-setuptools python-wheel))
34105 (home-page "https://github.com/coady/multimethod")
34106 (synopsis "Python support for multiple argument dispatching")
34107 (description
34108 "This package provides a decorator for adding multiple argument
34109dispatching to functions. The decorator creates a multimethod object as
34110needed and registers the function with its annotations.")
34111 (license license:asl2.0)))
34112
34113(define-public python-logical-unification
34114 (package
34115 (name "python-logical-unification")
34116 (version "0.4.7")
34117 (source
34118 (origin
34119 (method git-fetch)
34120 (uri (git-reference
34121 (url "https://github.com/pythological/unification")
34122 (commit (string-append "v" version))))
34123 (file-name (git-file-name name version))
34124 (sha256
34125 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
34126 (build-system pyproject-build-system)
34127 (native-inputs
34128 (list python-pytest
34129 python-pytest-benchmark
34130 python-setuptools
34131 python-setuptools-scm))
34132 (propagated-inputs
34133 (list python-multipledispatch
34134 python-toolz))
34135 (home-page "https://github.com/pythological/unification/")
34136 (synopsis "Logical unification in Python for solving symbolic expressions")
34137 (description "This library provides algorithms and data types for solving
34138symbolic expressions in pure Python using the technique of logical unification.")
34139 (license license:bsd-3)))
34140
34141(define-public python-looseversion
34142 (package
34143 (name "python-looseversion")
34144 (version "1.3.0")
34145 (source
34146 (origin
34147 (method url-fetch)
34148 (uri (pypi-uri "looseversion" version))
34149 (sha256
34150 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
34151 (build-system pyproject-build-system)
34152 (arguments
34153 (list
34154 ;; No tests provided.
34155 #:tests? #f))
34156 (native-inputs
34157 (list python-hatchling))
34158 (home-page "https://github.com/effigies/looseversion")
34159 (synopsis "Version numbering for anarchists and software realists")
34160 (description
34161 "This package provides a drop-in replacement for the original
34162@code{LooseVersion}. It implements an identical interface and comparison
34163logic to @code{LooseVersion}. The only major change is that a
34164@code{looseversion.LooseVersion} is comparable to a
34165@code{distutils.version.LooseVersion}, which means tools should not need to
34166worry whether all dependencies that use LooseVersion have migrated.")
34167 (license license:psfl)))
34168
34169(define-public python-cons
34170 (package
34171 (name "python-cons")
34172 (version "0.4.7")
34173 (source
34174 (origin
34175 (method git-fetch) ;no tests in PyPI archive
34176 (uri (git-reference
34177 (url "https://github.com/pythological/python-cons")
34178 (commit (string-append "v" version))))
34179 (file-name (git-file-name name version))
34180 (sha256
34181 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
34182 (build-system pyproject-build-system)
34183 (native-inputs
34184 (list python-pytest
34185 python-setuptools
34186 python-setuptools-scm
34187 python-wheel))
34188 (propagated-inputs
34189 (list python-logical-unification))
34190 (home-page "https://github.com/pythological/python-cons")
34191 (synopsis "Cons cell data structures and related algorithms for Python")
34192 (description
34193 "This library implements algorithms and data structures for Lisp-style
34194cons cells in Python.")
34195 (license license:lgpl3+)))
34196
34197(define-public python-etuples
34198 (package
34199 (name "python-etuples")
34200 (version "0.3.10")
34201 (source
34202 (origin
34203 (method url-fetch)
34204 (uri (pypi-uri "etuples" version))
34205 (sha256
34206 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
34207 (build-system pyproject-build-system)
34208 (arguments
34209 (list
34210 #:test-flags
34211 ;; assert False == {~_1: <built-in function add>}
34212 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
34213 (native-inputs
34214 (list python-pytest
34215 python-setuptools
34216 python-setuptools-scm))
34217 (propagated-inputs
34218 (list python-cons
34219 python-multipledispatch))
34220 (home-page "https://github.com/pythological/etuples")
34221 (synopsis "S-expressions in Python")
34222 (description
34223 "This library implements eval'able S-expression in Python using tuple-like objects.")
34224 (license license:asl2.0)))
34225
34226(define-public python-minikanren
34227 (package
34228 (name "python-minikanren")
34229 (version "1.0.5")
34230 (source
34231 (origin
34232 (method git-fetch)
34233 (uri (git-reference
34234 (url "https://github.com/pythological/kanren")
34235 (commit (string-append "v" version))))
34236 (file-name (git-file-name name version))
34237 (sha256
34238 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
34239 (build-system pyproject-build-system)
34240 (arguments
34241 (list
34242 ;; 60 passed, 3 skipped, 23 deselected
34243 #:test-flags
34244 #~(list "-k" (string-join
34245 ;; XXX: 16 tests fail with assertion not equal, check why.
34246 (list "not test_basics"
34247 "test_eq_assoc"
34248 "test_eq_assoccomm"
34249 "test_eq_comm"
34250 "test_map_anyo"
34251 "test_map_anyo_misc"
34252 "test_map_anyo_reverse"
34253 "test_reduceo"
34254 "test_walko"
34255 "test_walko_reverse")
34256 " and not "))))
34257 (native-inputs
34258 (list python-pytest
34259 python-setuptools))
34260 (propagated-inputs
34261 (list python-cons
34262 python-etuples
34263 python-logical-unification
34264 python-multipledispatch
34265 python-toolz
34266 python-typing-extensions))
34267 (home-page "https://github.com/pythological/kanren")
34268 (synopsis "Relational logic programming in pure Python")
34269 (description
34270 "The minikanren library provides an algorithmic core for computer algebra
34271systems in Python.")
34272 (license license:bsd-3)))
34273
34274(define-public python-dotenv
34275 (package
34276 (name "python-dotenv")
34277 (version "1.1.1")
34278 (source
34279 (origin
34280 (method url-fetch)
34281 (uri (pypi-uri "python_dotenv" version))
34282 (sha256
34283 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
34284 (build-system pyproject-build-system)
34285 (native-inputs
34286 (list python-pytest
34287 python-setuptools
34288 python-sh))
34289 (propagated-inputs
34290 (list python-click))
34291 (home-page "https://saurabh-kumar.com/python-dotenv/")
34292 (synopsis "Setup environment variables according to .env files")
34293 (description
34294 "This package provides the @code{python-dotenv} Python module to read
34295key-value pairs from a @code{.env} file and set them as environment variables.")
34296 (license license:bsd-3)))
34297
34298;; Old version just for docker-compose; remove once that is updated.
34299(define-public python-dotenv-0.13.0
34300 (package (inherit python-dotenv)
34301 (name "python-dotenv")
34302 (version "0.13.0")
34303 (source
34304 (origin
34305 (method url-fetch)
34306 (uri (pypi-uri "python-dotenv" version))
34307 (sha256
34308 (base32
34309 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
34310 (arguments
34311 `(#:phases
34312 (modify-phases %standard-phases
34313 (replace 'check
34314 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
34315 (when tests?
34316 (add-installed-pythonpath inputs outputs)
34317 (setenv "PATH" (string-append (getenv "PATH") ":"
34318 (assoc-ref outputs "out") "/bin"))
34319 ;; Skip the ipython tests.
34320 (delete-file "tests/test_ipython.py")
34321 (invoke "python" "-m" "pytest")))))))
34322 (native-inputs
34323 (modify-inputs native-inputs
34324 (append python-mock)
34325 (replace "python-sh" python-sh-1)))))
34326
34327(define-public python-braintree
34328 (package
34329 (name "python-braintree")
34330 (version "4.40.0")
34331 (source
34332 (origin
34333 (method url-fetch)
34334 (uri (pypi-uri "braintree" version))
34335 (sha256
34336 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
34337 (build-system pyproject-build-system)
34338 (arguments (list #:tests? #f)) ; No tests.
34339 (native-inputs (list python-setuptools))
34340 (propagated-inputs (list python-requests))
34341 (home-page
34342 "https://developers.braintreepayments.com/python/sdk/server/overview")
34343 (synopsis "Braintree Python Library")
34344 (description
34345 "The Braintree Python SDK provides integration access to the Braintree
34346Gateway. Braintree is a US-based payments service provider.")
34347 (license license:expat)))
34348
34349(define-public python-markuppy
34350 (package
34351 (name "python-markuppy")
34352 (version "1.18")
34353 (source
34354 (origin
34355 (method git-fetch)
34356 (uri (git-reference
34357 (url "https://github.com/tylerbakke/MarkupPy")
34358 (commit (string-append "v" version))))
34359 (file-name (git-file-name name version))
34360 (sha256
34361 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
34362 (build-system pyproject-build-system)
34363 (native-inputs (list python-pytest python-setuptools))
34364 (home-page "https://github.com/tylerbakke/MarkupPy")
34365 (synopsis "Pythonic HTML/XML generator")
34366 (description
34367 "This Python module attempts to make it easier to generate HTML/XML from
34368a Python program in an customizable and pythonic way.")
34369 (license license:expat)))
34370
34371(define-public python-csb43
34372 (package
34373 (name "python-csb43")
34374 (version "1.0.0")
34375 (source
34376 (origin
34377 (method git-fetch)
34378 (uri (git-reference
34379 (url "https://bitbucket.org/wmj/csb43")
34380 (commit version)))
34381 (file-name (git-file-name name version))
34382 (sha256
34383 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
34384 (build-system pyproject-build-system)
34385 ;; tests: 15102 passed, 36 skipped, 5489 warnings
34386 (arguments
34387 (list
34388 #:phases
34389 #~(modify-phases %standard-phases
34390 (add-after 'unpack 'relax-requirements
34391 (lambda _
34392 (substitute* "pyproject.toml"
34393 (("\"deprecated ~=.*\",")
34394 "\"deprecated\",")))))))
34395 (native-inputs
34396 (list python-lxml
34397 python-pytest
34398 python-setuptools
34399 python-setuptools-scm))
34400 (propagated-inputs
34401 (list python-deprecated
34402 python-pycountry
34403 python-pyyaml
34404 python-tablib))
34405 (home-page "https://bitbucket.org/wmj/csb43")
34406 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3440743 (CSB43)")
34408 (description
34409 "This package provides tools to convert files in the format used by
34410multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
34411Spanish Banking Association [AEB43]) to other formats.
34412
34413Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
34414spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
34415 (license license:lgpl3)))
34416
34417(define-public python-csb43-0.10
34418 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
34419 ;; homebank, i18n, ofx, and utils.
34420 (package
34421 (inherit python-csb43)
34422 (name "python-csb43")
34423 (version "0.10.1")
34424 ;; tests: 15493 passed, 37 skipped, 7447 warnings
34425 (source
34426 (origin
34427 (method git-fetch)
34428 (uri (git-reference
34429 (url "https://bitbucket.org/wmj/csb43")
34430 (commit version)))
34431 (file-name (git-file-name name version))
34432 (sha256
34433 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
34434
34435(define-public python-febelfin-coda
34436 (package
34437 (name "python-febelfin-coda")
34438 (version "0.3.0")
34439 (source
34440 (origin
34441 (method hg-fetch)
34442 (uri (hg-reference
34443 (url "https://foss.heptapod.net/tryton/coda")
34444 (changeset version)))
34445 (file-name (string-append name "-" version "-checkout"))
34446 (sha256
34447 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
34448 (build-system pyproject-build-system)
34449 (arguments
34450 (list
34451 #:test-backend #~'unittest
34452 #:phases
34453 #~(modify-phases %standard-phases
34454 (add-after 'install 'remove-installed-tests
34455 (lambda* (#:key inputs outputs #:allow-other-keys)
34456 (with-directory-excursion (site-packages inputs outputs)
34457 (for-each delete-file
34458 (list "coda/test.py"
34459 "coda/test_readme.py"))))))))
34460 (native-inputs (list python-setuptools))
34461 (home-page "https://coda.b2ck.com/")
34462 (synopsis "Module to parse Belgian CODA files")
34463 (description
34464 "This package provides a module to parse Coded statement of account
34465(CODA) files as defined be the Belgian Febelfin bank standard.")
34466 (license license:bsd-3)))
34467
34468(define-public python-ofxparse
34469 (package
34470 (name "python-ofxparse")
34471 (version "0.21")
34472 (source
34473 (origin
34474 (method url-fetch)
34475 (uri (pypi-uri "ofxparse" version))
34476 (sha256
34477 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34478 (build-system pyproject-build-system)
34479 (native-inputs (list python-pynose python-setuptools))
34480 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34481 (home-page "http://sites.google.com/site/ofxparse")
34482 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34483format")
34484 (description "@code{ofxparse} is a parser for Open Financial
34485Exchange (.ofx) format files. OFX files are available from almost any online
34486banking site, so they work well if you want to pull together your finances
34487from multiple sources. Online trading accounts also often provide account
34488statements in OFX files.")
34489 (license license:expat)))
34490
34491(define-public python-rfc3339-validator
34492 (package
34493 (name "python-rfc3339-validator")
34494 (version "0.1.4")
34495 (source
34496 (origin
34497 (method url-fetch)
34498 (uri (pypi-uri "rfc3339_validator" version))
34499 (sha256
34500 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34501 (build-system pyproject-build-system)
34502 (native-inputs
34503 (list python-pytest
34504 python-setuptools
34505 python-strict-rfc3339))
34506 (propagated-inputs
34507 (list python-six))
34508 (home-page "https://github.com/naimetti/rfc3339-validator")
34509 (synopsis "Python RFC3339 validator")
34510 (description "This package provides a pure Python RFC3339 validator.")
34511 (license license:expat)))
34512
34513(define-public python-platformdirs
34514 ;; Try to update simultaneously with the bootstrap version in
34515 ;; (gnu packages python-build).
34516 (package
34517 (name "python-platformdirs")
34518 (version "4.3.6")
34519 (source
34520 (origin
34521 (method url-fetch)
34522 (uri (pypi-uri "platformdirs" version))
34523 (sha256
34524 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34525 (build-system pyproject-build-system)
34526 (native-inputs
34527 (list python-appdirs
34528 python-hatchling
34529 python-hatch-vcs
34530 python-pytest
34531 python-pytest-mock))
34532 (home-page "https://github.com/platformdirs/platformdirs")
34533 (synopsis "Determine the appropriate platform-specific directories")
34534 (description "When writing applications, finding the right location to
34535store user data and configuration varies per platform. Even for
34536single-platform apps, there may by plenty of nuances in figuring out the right
34537location. This small Python module determines the appropriate
34538platform-specific directories, e.g. the ``user data dir''.")
34539 (license license:expat)))
34540
34541(define-public python-json2html
34542 (package
34543 (name "python-json2html")
34544 (version "1.3.0")
34545 (source
34546 (origin
34547 (method git-fetch)
34548 (uri (git-reference
34549 (url "https://github.com/softvar/json2html")
34550 (commit (string-append "v" version))))
34551 (file-name (git-file-name name version))
34552 (sha256
34553 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34554 (build-system pyproject-build-system)
34555 (arguments
34556 (list
34557 #:test-backend #~'custom
34558 #:test-flags #~(list "test/run_tests.py")))
34559 (native-inputs (list python-setuptools))
34560 (home-page "https://github.com/softvar/json2html")
34561 (synopsis "Convert JSON to HTML table")
34562 (description
34563 "@code{python-json2html} is a python module to convert JSON into a human
34564readable HTML table representation.")
34565 (license license:expat)))
34566
34567(define-public python-face
34568 (package
34569 (name "python-face")
34570 (version "24.0.0")
34571 (source
34572 (origin
34573 (method git-fetch)
34574 (uri (git-reference
34575 (url "https://github.com/mahmoud/face")
34576 (commit (string-append "v" version))))
34577 (file-name (git-file-name name version))
34578 (sha256
34579 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34580 (build-system pyproject-build-system)
34581 (native-inputs (list python-pytest python-setuptools))
34582 (propagated-inputs (list python-boltons))
34583 (home-page "https://github.com/mahmoud/face")
34584 (synopsis "CLI parsing and dispatching microframework")
34585 (description "@code{python-face} is a Pythonic microframework for building
34586command-line applications.
34587
34588@itemize
34589@item First-class subcommand support
34590@item Powerful middleware architecture
34591@item Separate parser layer
34592@item Built-in flagfile support
34593@item Handy testing utilities
34594@item Themeable help display
34595@end itemize")
34596 (license license:bsd-3)))
34597
34598(define-public python-glom
34599 (package
34600 (name "python-glom")
34601 (version "24.11.0")
34602 (source
34603 (origin
34604 (method git-fetch)
34605 (uri (git-reference
34606 (url "https://github.com/mahmoud/glom")
34607 (commit (string-append "v" version))))
34608 (file-name (git-file-name name version))
34609 (sha256
34610 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34611 (build-system pyproject-build-system)
34612 (native-inputs
34613 (list python-pytest
34614 python-pyyaml
34615 python-setuptools))
34616 (propagated-inputs
34617 (list python-attrs
34618 python-boltons
34619 python-face))
34620 (home-page "https://github.com/mahmoud/glom")
34621 (synopsis "Declaratively restructure data")
34622 (description "Real applications have real data, and real data
34623nests---objects inside of objects inside of lists of objects. glom is a new
34624and powerful way to handle real-world data, featuring:
34625
34626@itemize
34627@item Path-based access to nested data structures
34628@item Readable, meaningful error messages
34629@item Declarative data transformation, using lightweight, Pythonic specifications
34630@item Built-in data exploration and debugging features
34631@end itemize")
34632 (license license:bsd-3)))
34633
34634(define-public python-box
34635 (package
34636 (name "python-box")
34637 (version "7.3.2")
34638 (source
34639 (origin
34640 (method git-fetch)
34641 (uri
34642 (git-reference
34643 (url "https://github.com/cdgriffith/Box")
34644 (commit version)))
34645 (file-name (git-file-name name version))
34646 (sha256
34647 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34648 (build-system pyproject-build-system)
34649 (arguments
34650 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34651 (native-inputs
34652 (list python-pytest
34653 python-setuptools))
34654 (propagated-inputs
34655 (list python-msgpack
34656 python-ruamel.yaml
34657 python-tomli-w))
34658 (home-page "https://github.com/cdgriffith/Box")
34659 (synopsis "Advanced Python dictionaries with dot notation access")
34660 (description
34661 "This package provides the @code{python-box} Python module.
34662It implements advanced Python dictionaries with dot notation access.")
34663 (license license:expat)))
34664
34665(define-public python-fields
34666 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34667 (revision "0"))
34668 (package
34669 (name "python-fields")
34670 (version (git-version "5.0.0" revision commit))
34671 (source
34672 (origin
34673 (method git-fetch)
34674 (uri (git-reference
34675 (url "https://github.com/ionelmc/python-fields")
34676 (commit commit)))
34677 (file-name (git-file-name name version))
34678 (sha256
34679 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34680 (build-system pyproject-build-system)
34681 (arguments
34682 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34683 (native-inputs (list python-pytest-8
34684 python-pytest-benchmark
34685 python-setuptools
34686 python-wheel))
34687 (home-page "https://python-fields.readthedocs.io/")
34688 (synopsis "Python container class boilerplate killer")
34689 (description "Avoid repetitive boilerplate code in Python classes.")
34690 (license license:bsd-3))))
34691
34692(define-public python-aspectlib
34693 (package
34694 (name "python-aspectlib")
34695 (version "2.0.0")
34696 (source
34697 (origin
34698 (method git-fetch)
34699 (uri (git-reference
34700 (url "https://github.com/ionelmc/python-aspectlib")
34701 (commit (string-append "v" version))))
34702 (file-name (git-file-name name version))
34703 (sha256
34704 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
34705 (build-system pyproject-build-system)
34706 (arguments
34707 (list
34708 #:test-flags
34709 #~(list ;; XXX: Require more dependencies.
34710 "--ignore=tests/test_integrations.py"
34711 "--ignore=tests/test_integrations_py3.py")
34712 #:phases
34713 #~(modify-phases %standard-phases
34714 (add-after 'unpack 'fix-pytest-config
34715 (lambda _
34716 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
34717 ;; The (path: py.path.local) argument is deprecated, please
34718 ;; use (collection_path: pathlib.Path).
34719 (delete-file "pytest.ini"))))))
34720 (native-inputs
34721 (list python-pytest-8
34722 python-setuptools
34723 python-tornado))
34724 (propagated-inputs
34725 (list python-fields))
34726 (home-page "https://github.com/ionelmc/python-aspectlib")
34727 (synopsis "Python monkey-patching and decorators")
34728 (description
34729 "This package provides an aspect-oriented programming, monkey-patch
34730and decorators library. It is useful when changing behavior in existing
34731code is desired. It includes tools for debugging and testing:
34732simple mock/record and a complete capture/replay framework.")
34733 (license license:bsd-2)))
34734
34735(define-public python-ijson
34736 (package
34737 (name "python-ijson")
34738 (version "3.5.0")
34739 (source
34740 (origin
34741 (method url-fetch)
34742 (uri (pypi-uri "ijson" version))
34743 (sha256
34744 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
34745 (inputs
34746 ;; yajl is optional, but compiling with it makes faster
34747 ;; backends available to ijson:
34748 (list yajl))
34749 (native-inputs
34750 (list python-pytest
34751 python-setuptools))
34752 (build-system pyproject-build-system)
34753 (home-page "https://github.com/ICRAR/ijson")
34754 (synopsis "Iterative JSON parser with Python iterator interfaces")
34755 (description
34756 "Ijson is an iterative JSON parser with standard Python iterator
34757interfaces.")
34758 (license license:bsd-3)))
34759
34760(define-public python-ordered-set
34761 (package
34762 (name "python-ordered-set")
34763 (version "4.1.0")
34764 (source
34765 (origin
34766 (method url-fetch)
34767 (uri (pypi-uri "ordered-set" version))
34768 (sha256
34769 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
34770 (build-system pyproject-build-system)
34771 (native-inputs (list python-cython python-flit-core python-pytest))
34772 (home-page "https://github.com/simonpercivall/orderedset")
34773 (synopsis "Ordered Set implementation in Cython")
34774 (description "This library provides an @code{OrderedSet} data type that
34775works like a regular set, but remembers insertion order. It supports the full
34776Python @code{set} interface.")
34777 (license license:asl2.0)))
34778
34779(define-public python-orgparse
34780 (package
34781 (name "python-orgparse")
34782 (version "0.4.20251020")
34783 (source
34784 (origin
34785 (method git-fetch)
34786 (uri (git-reference
34787 (url "https://github.com/karlicoss/orgparse")
34788 (commit (string-append "v" version))))
34789 (file-name (git-file-name name version))
34790 (sha256
34791 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
34792 (build-system pyproject-build-system)
34793 (arguments
34794 (list
34795 #:test-flags
34796 #~(list "--ignore-glob=doc/*"
34797 ;; XXX: Unclear why those tests fail.
34798 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
34799 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
34800 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
34801 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
34802 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
34803 (home-page "https://github.com/karlicoss/orgparse")
34804 (synopsis "Emacs Org mode parser in Python")
34805 (description
34806 "This package is a Python module for reading Emacs Org mode files.")
34807 (license license:bsd-3)))
34808
34809(define-public dynaconf
34810 (package
34811 (name "dynaconf")
34812 (version "3.2.11")
34813 (source
34814 (origin
34815 (method git-fetch)
34816 (uri
34817 (git-reference
34818 (url "https://github.com/dynaconf/dynaconf")
34819 (commit version)))
34820 (file-name (git-file-name name version))
34821 (sha256
34822 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
34823 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
34824 (modules '((guix build utils)))
34825 ;; Remove vendored dependencies
34826 (snippet
34827 #~(let ((unvendor '("click" "ruamel" "toml")))
34828 (with-directory-excursion "dynaconf/vendor"
34829 (for-each delete-file-recursively unvendor))
34830 (substitute* (find-files "." "\\.py$")
34831 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
34832 _ target rest)
34833 (string-append "import " target rest))
34834 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
34835 target))))))
34836 (build-system pyproject-build-system)
34837 (arguments
34838 (list
34839 #:test-flags
34840 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
34841 "-k" #$(let ((click-tests '("test_negative_get"
34842 "test_not_found_key_exit_error[get]"
34843 "test_inspect_invalid_format")))
34844 ;; Disable integration tests
34845 (string-append "not integration and not "
34846 ;; These tests fail because we use
34847 ;; Click 8.* instead of Click 7
34848 (string-join click-tests " and not ")))
34849 "tests")
34850 #:phases
34851 #~(modify-phases %standard-phases
34852 (add-after 'unpack 'patch-for-click-8
34853 (lambda _
34854 (substitute* "dynaconf/cli.py"
34855 (("click.get_os_args\\()") ;deprecated from Click 8.1+
34856 "sys.argv[1:]")))))))
34857 (propagated-inputs
34858 (list python-click python-configobj python-ruamel.yaml-0.16
34859 python-toml python-tomli))
34860 (native-inputs
34861 (list python-django
34862 python-flask
34863 python-pytest
34864 python-pytest-mock
34865 python-setuptools))
34866 (home-page "https://www.dynaconf.com/")
34867 (synopsis "The dynamic configurator for your Python project")
34868 (description
34869 "This package provides @code{dynaconf} the dynamic configurator manager for
34870your Python project. It provides features such as:
34871
34872@itemize
34873@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
34874@item Settings management (default values, validation, parsing, templating);
34875@item Protection of sensitive information (passwords/tokens);
34876@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
34877loaders;
34878@item Full support for environment variables to override existing settings
34879(dotenv support included);
34880@item Optional layered system for multiple environments @code{[default,
34881development, testing, production]};
34882@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
34883@item Built-in extensions for Django and Flask web frameworks;
34884@item CLI for common operations such as @code{init, list, write, validate, export}.
34885@end itemize")
34886 (license license:expat)))
34887
34888(define-public python-pudb
34889 ;; TODO: Rename to pudb as it's a final program.
34890 (package
34891 (name "python-pudb")
34892 (version "2025.1.3")
34893 (source
34894 (origin
34895 (method url-fetch)
34896 (uri (pypi-uri "pudb" version))
34897 (sha256
34898 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
34899 (build-system pyproject-build-system)
34900 (arguments
34901 (list
34902 #:phases
34903 #~(modify-phases %standard-phases
34904 (add-before 'check 'pre-check
34905 (lambda _
34906 (setenv "HOME" "/tmp"))))))
34907 (native-inputs
34908 (list python-hatchling
34909 python-pytest
34910 python-pytest-mock
34911 python-numpy))
34912 (propagated-inputs
34913 (list python-jedi
34914 python-packaging
34915 python-pygments
34916 python-typing-extensions
34917 python-urwid
34918 python-urwid-readline))
34919 (home-page "https://documen.tician.de/pudb/")
34920 (synopsis "Console-based Python debugger")
34921 (description
34922 "@command{pudb} is a full-screen, console-based Python debugger providing
34923all the niceties of modern GUI-based debuggers in a more lightweight and
34924keyboard-friendly package.")
34925 (license license:expat)))
34926
34927(define-public python-iwlib
34928 (package
34929 (name "python-iwlib")
34930 (version "1.7.0")
34931 (source
34932 (origin
34933 (method git-fetch)
34934 (uri (git-reference
34935 (url "https://github.com/nhoad/python-iwlib")
34936 (commit version)))
34937 (file-name (git-file-name name version))
34938 (sha256
34939 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
34940 (build-system pyproject-build-system)
34941 (arguments
34942 (list
34943 #:phases
34944 #~(modify-phases %standard-phases
34945 (add-before 'check 'cleanup
34946 (lambda _
34947 (delete-file-recursively "iwlib"))))))
34948 (native-inputs (list python-pytest python-setuptools))
34949 (inputs (list wireless-tools))
34950 (propagated-inputs (list python-cffi))
34951 (home-page "https://github.com/nhoad/python-iwlib")
34952 (synopsis "Python module to interface with iwlib")
34953 (description
34954 "This package provides a Python interface to iw wireless tools.")
34955 (license license:gpl2)))
34956
34957(define-public python-pdoc3
34958 (package
34959 (name "python-pdoc3")
34960 (version "0.11.6")
34961 (source
34962 (origin
34963 (method url-fetch)
34964 (uri (pypi-uri "pdoc3" version))
34965 (sha256
34966 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
34967 (build-system pyproject-build-system)
34968 (arguments
34969 (list #:test-backend #~'unittest
34970 #:test-flags #~(list "-v" "pdoc.test")))
34971 (native-inputs
34972 (list python-setuptools-git
34973 python-setuptools
34974 python-setuptools-scm))
34975 (propagated-inputs
34976 (list python-mako
34977 python-markdown))
34978 (home-page "https://pdoc3.github.io/pdoc/")
34979 (synopsis "Auto-generate API documentation for Python projects")
34980 (description
34981 "This package auto-generates API documentation from Python projects
34982already existing modules and objects docstrings.")
34983 (license license:agpl3+)))
34984
34985(define-public python-piexif
34986 (package
34987 (name "python-piexif")
34988 (version "1.1.3")
34989 (source
34990 (origin
34991 (method git-fetch)
34992 (uri (git-reference
34993 (url "https://github.com/hMatoba/Piexif")
34994 (commit version)))
34995 (file-name (git-file-name name version))
34996 (sha256
34997 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
34998 (patches
34999 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
35000 (build-system pyproject-build-system)
35001 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
35002 (home-page "https://github.com/hMatoba/Piexif")
35003 (synopsis "Simplify exif manipulations with Python")
35004 (description
35005 "Piexif simplifies interacting with EXIF data in Python. It includes the
35006tools necessary for extracting, creating, manipulating, converting and writing
35007EXIF data to JPEG, WebP and TIFF files.")
35008 (license license:expat)))
35009
35010(define-public python-pyrss2gen
35011 (package
35012 (name "python-pyrss2gen")
35013 (version "1.1")
35014 (source
35015 (origin
35016 (method url-fetch)
35017 (uri (pypi-uri "PyRSS2Gen" version))
35018 (sha256
35019 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
35020 (build-system pyproject-build-system)
35021 (arguments (list #:tests? #f)) ; No tests.
35022 (native-inputs (list python-setuptools))
35023 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
35024 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
35025 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
35026PyRSS2Gen builds the feed up by using a XML generator.")
35027 (license license:bsd-3)))
35028
35029(define-public python-doit
35030 (package
35031 (name "python-doit")
35032 (version "0.36.0")
35033 (source
35034 (origin
35035 (method url-fetch)
35036 (uri (pypi-uri "doit" version))
35037 (sha256
35038 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
35039 (build-system pyproject-build-system)
35040 ;; This is not a serious test failure. It's probably due to the load path
35041 ;; at test time.
35042 (arguments (list #:test-flags '(list "-k" "not test_execute")))
35043 (propagated-inputs
35044 (list python-cloudpickle python-importlib-metadata))
35045 (native-inputs (list python-pytest python-setuptools python-wheel))
35046 (home-page "https://pydoit.org")
35047 (synopsis "Automation tool to execute any kind of task in a build-tools
35048fashion")
35049 (description "doit is an automation tool that brings the power of
35050build-tools to execute any kind of task.
35051
35052A task describes some computation to be done (actions), and contains some
35053extra meta-data. The actions can be external programs or Python functions. A
35054single task may define more than one action. doit uses the task’s meta-data
35055to:
35056
35057@itemize
35058@item cache task results
35059@item correct execution order
35060@item parallel execution
35061@item powerful dependency system
35062@end itemize")
35063 (license license:expat)))
35064
35065(define-public python-phpserialize
35066 (package
35067 (name "python-phpserialize")
35068 (version "1.3")
35069 (source
35070 (origin
35071 (method git-fetch)
35072 (uri (git-reference
35073 (url "https://github.com/mitsuhiko/phpserialize")
35074 (commit version)))
35075 (file-name (git-file-name name version))
35076 (sha256
35077 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
35078 (build-system pyproject-build-system)
35079 (arguments
35080 (list
35081 ;; XXX: Unclear why this test fails.
35082 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
35083 #:phases
35084 #~(modify-phases %standard-phases
35085 (add-after 'unpack 'patch-tests
35086 (lambda _
35087 (substitute* "tests.py"
35088 (("assert_\\(b'WP_User' in x\\)")
35089 "assertIn(b'WP_User', x)")))))))
35090 (native-inputs (list python-pytest python-setuptools))
35091 (home-page "https://github.com/mitsuhiko/phpserialize")
35092 (synopsis "Python port of the serialize and unserialize functions of PHP")
35093 (description
35094 "This package provides a port of the @code{serialize} and
35095@code{unserialize} functions of PHP for Python.")
35096 (license license:bsd-3)))
35097
35098(define-public python-pycapnp
35099 (package
35100 (name "python-pycapnp")
35101 (version "2.2.4")
35102 (source
35103 (origin
35104 (method git-fetch)
35105 (uri (git-reference
35106 (url "https://github.com/capnproto/pycapnp")
35107 (commit (string-append "v" version))))
35108 (file-name (git-file-name name version))
35109 (sha256
35110 (base32 "0vzz1s7zrp27dnsrppshrisbn054w56qbva3shbnwpkdcckw411j"))))
35111 (build-system pyproject-build-system)
35112 (arguments
35113 (list
35114 #:phases
35115 #~(modify-phases %standard-phases
35116 (add-before 'build 'set-force-system-capnp
35117 (lambda _
35118 (setenv "PIP_CONFIG_SETTINGS" "force-system-libcapnp=True")))
35119 (add-after 'install 'copy-missing-schemas
35120 (lambda _
35121 (let* ((out #$output)
35122 (capnp-clang #$(this-package-input "capnproto-clang"))
35123 (site-pkgs (car (find-files (string-append out "/lib")
35124 "^site-packages$"
35125 #:directories? #t)))
35126 (target-dir (string-append site-pkgs "/capnp"))
35127 (schema-files (find-files
35128 (string-append capnp-clang
35129 "/include/capnp")
35130 "\\.capnp$")))
35131 (for-each (lambda (file)
35132 (install-file file target-dir)) schema-files))))
35133 ;; The 'sanity-check' phase fails with "ModuleNotFoundError: No
35134 ;; module named 'schema_capnp'". This module is generated
35135 ;; dynamically via import hooks at runtime
35136 (delete 'sanity-check))))
35137 (native-inputs (list pkg-config
35138 python-cython
35139 python-jinja2
35140 python-pkgconfig
35141 python-pytest
35142 python-pytest-asyncio
35143 python-setuptools))
35144 (inputs (list capnproto-clang))
35145 (home-page "https://github.com/capnproto/pycapnp")
35146 (synopsis "Cython wrapping of the C++ Cap'n Proto library")
35147 (description
35148 "This package provides a cython wrapping of the C++ Cap'n Proto library.")
35149 (license license:bsd-2)))
35150
35151(define-public python-pydevtool
35152 (package
35153 (name "python-pydevtool")
35154 (version "0.3.0")
35155 (source
35156 (origin
35157 (method url-fetch)
35158 (uri (pypi-uri "pydevtool" version))
35159 (sha256
35160 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
35161 (build-system pyproject-build-system)
35162 (arguments (list #:tests? #false)) ;no tests
35163 (propagated-inputs (list python-doit python-rich-click))
35164 (native-inputs (list python-setuptools python-wheel))
35165 (home-page "https://github.com/pydoit/pydevtool")
35166 (synopsis "CLI dev tools powered by pydoit")
35167 (description "This package provides command line tools, powered by pydoit.
35168It offers integration with @code{click} and @code{rich} for custom CLI and
35169these linters: @code{pycodestlye}, @code{pyflakes}")
35170 (license license:expat)))
35171
35172(define-public nikola
35173 (package
35174 (name "nikola")
35175 (version "8.3.3")
35176 (source
35177 (origin
35178 (method url-fetch)
35179 (uri (pypi-uri "nikola" version))
35180 (sha256
35181 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
35182 (build-system pyproject-build-system)
35183 (arguments
35184 (list
35185 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
35186 #:test-flags
35187 #~(list "--durations=10"
35188 "--ignore=tests/integration/test_dev_server.py"
35189 "-k" (string-join
35190 ;; Some time difference in example tests.
35191 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
35192 "test_serves_root_dir[https://example.org:1234/blog]"
35193 "test_serves_root_dir[https://example.org:3456/blog/]"
35194 "test_serves_root_dir[https://example.org]"
35195 ;; AssertionError: Calls not found.
35196 "test_write_content_does_not_detroy_text"
35197 ;; AssertionError: assert 'January 10, 2006,
35198 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
35199 ;; 12:34:56\u202fPM EST'
35200 "test_format_date_timezone")
35201 " and not "))))
35202 (native-inputs
35203 (list nss-certs-for-test
35204 python-feedparser
35205 python-freezegun
35206 python-pytest
35207 python-setuptools))
35208 (inputs
35209 (list python-babel
35210 python-blinker
35211 python-dateutil
35212 python-docutils
35213 python-doit
35214 python-jinja2 ;; for themes
35215 python-lxml
35216 python-mako
35217 python-markdown
35218 python-natsort
35219 python-notebook ;; for ipynb
35220 python-phpserialize ;; for wordpress import
35221 python-piexif
35222 python-pillow
35223 python-pygments
35224 python-pyrss2gen
35225 python-requests
35226 python-ruamel.yaml ;; for YAML metadata
35227 python-toml
35228 python-unidecode
35229 python-yapsy))
35230 (home-page "https://getnikola.com/")
35231 (synopsis "Modular, fast and simple static website and blog generator")
35232 (description "Nikola generates static websites and blogs. Out of the box,
35233it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
35234and has plugins for many other formats.")
35235 (license license:expat)))
35236
35237(define-public nbss-upload
35238 (package
35239 (name "nbss-upload")
35240 (version "0.1")
35241 (source
35242 (origin
35243 (method git-fetch)
35244 (uri (git-reference
35245 (url "https://github.com/notebook-sharing-space/nbss-upload")
35246 (commit (string-append "v" version))))
35247 (file-name (git-file-name name version))
35248 (sha256
35249 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
35250 (build-system pyproject-build-system)
35251 (arguments (list #:tests? #f)) ;no tests
35252 (native-inputs (list python-setuptools))
35253 (propagated-inputs (list python-requests))
35254 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
35255 (synopsis "Upload notebooks to a notebooksharing.space instance")
35256 (description
35257 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
35258notebooksharing.space instance.")
35259 (license license:bsd-3)))
35260
35261(define-public python-reedsolo
35262 (package
35263 (name "python-reedsolo")
35264 (version "1.7.0")
35265 (source
35266 (origin
35267 (method git-fetch)
35268 (uri (git-reference
35269 (url "https://github.com/tomerfiliba/reedsolomon")
35270 (commit (string-append "v" version))))
35271 (file-name (git-file-name name version))
35272 (sha256
35273 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
35274 (build-system pyproject-build-system)
35275 (native-inputs (list python-pytest python-setuptools))
35276 (home-page "https://github.com/tomerfiliba/reedsolomon")
35277 (synopsis "Pure-Python Reed Solomon encoder/decoder")
35278 (description
35279 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
35280the tutorial at Wikiversity. This is a burst-type implementation, so that it
35281supports any Galois field higher than 2^3, but not binary streams.")
35282 (license license:public-domain)))
35283
35284(define-public python-esprima
35285 (package
35286 (name "python-esprima")
35287 (version "4.0.1")
35288 (source
35289 (origin
35290 (method git-fetch)
35291 (uri (git-reference
35292 (url "https://github.com/Kronuz/esprima-python")
35293 (commit (string-append "v" version))))
35294 (file-name (git-file-name name version))
35295 (sha256
35296 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
35297 (build-system pyproject-build-system)
35298 (arguments
35299 (list
35300 ;; XXX: pytest fails to collect tests, and a few tests are failing
35301 ;; using unittest backend. In particular, offsets with math characters
35302 ;; and uncompiled regexps.
35303 #:tests? #f
35304 #:test-backend #~'unittest
35305 #:test-flags
35306 #~(list "-k"
35307 (string-join (list
35308 ;; XXX: Character offsets with maths.
35309 "not test_math_alef"
35310 "test_math_dal_part"
35311 "test_math_kaf_lam"
35312 "test_math_zain_start"
35313 ;; XXX: Uncompiled regexps.
35314 "test_yield_arg_regexp1"
35315 "test_yield_arg_regexp2"
35316 "test_migrated_0005_source"
35317 "test_u_flag_valid_range"
35318 "test_migrated_0049"
35319 "test_migrated_0050_source")
35320 " and not "))))
35321 (native-inputs (list python-setuptools))
35322 (home-page "https://github.com/Kronuz/esprima-python")
35323 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
35324 (description
35325 "This package provides ECMAScript parsing infrastructure for
35326multipurpose analysis in Python.")
35327 (license license:bsd-3)))
35328
35329(define-public python-psycopg2-binary
35330 (package
35331 (name "python-psycopg2-binary")
35332 (version "2.9.10")
35333 (source
35334 (origin
35335 (method url-fetch)
35336 (uri (pypi-uri "psycopg2-binary" version))
35337 (sha256
35338 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
35339 (build-system pyproject-build-system)
35340 (arguments
35341 ;; Tests are disable because they need a live instance of PostgreSQL.
35342 '(#:tests? #f))
35343 (native-inputs (list python-setuptools python-wheel))
35344 (inputs (list postgresql))
35345 (home-page "https://psycopg.org/")
35346 (synopsis "PostgreSQL database adapter for Python")
35347 (description
35348 "Psycopg is a PostgreSQL database adapter for the Python programming
35349language. Its main features are the complete implementation of the Python DB
35350API 2.0 specification and the thread safety (several threads can share the
35351same connection). It was designed for heavily multi-threaded applications
35352that create and destroy lots of cursors and make a large number of concurrent
35353@code{INSERT}s or @code{UPDATE}s.
35354
35355Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
35356being both efficient and secure. It features client-side and
35357server-side cursors, asynchronous communication and notifications,
35358@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
35359out-of-the-box and adapted to matching PostgreSQL data types;
35360adaptation can be extended and customized thanks to a flexible objects
35361adaptation system.
35362
35363Psycopg 2 is both Unicode and Python 3 friendly.")
35364 (license license:lgpl3+)))
35365
35366(define-public python-pyfuse3
35367 (package
35368 (name "python-pyfuse3")
35369 (version "3.4.2")
35370 (source
35371 (origin
35372 (method git-fetch)
35373 (uri (git-reference
35374 (url "https://github.com/libfuse/pyfuse3")
35375 (commit (string-append "v" version))))
35376 (file-name (git-file-name name version))
35377 (sha256
35378 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
35379 (build-system pyproject-build-system)
35380 (arguments
35381 (list
35382 #:test-flags
35383 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
35384 #~(list "--deselect=test/test_api.py::test_listdir")))
35385 (native-inputs
35386 (list pkg-config
35387 python-cython
35388 python-pytest
35389 python-setuptools
35390 python-setuptools-scm))
35391 (inputs
35392 (list fuse))
35393 (propagated-inputs
35394 (list python-trio))
35395 (home-page "https://github.com/libfuse/pyfuse3")
35396 (synopsis "Python bindings to FUSE 3")
35397 (description "This package provides Python 3 bindings for libfuse 3 with
35398async I/O support.")
35399 (license license:gpl2+)))
35400
35401(define-public python-ansi-styles
35402 ;; Releases are not tagged in Git:
35403 ;; https://github.com/shawwn/ansi-styles-python/issues/2
35404 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
35405 (revision "0"))
35406 (package
35407 (name "python-ansi-styles")
35408 (version (git-version "0.2.2" revision commit))
35409 (source
35410 (origin
35411 (method git-fetch)
35412 (uri (git-reference
35413 (url "https://github.com/shawwn/ansi-styles-python")
35414 (commit commit)))
35415 (file-name (git-file-name name version))
35416 (sha256
35417 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
35418 (build-system pyproject-build-system)
35419 (native-inputs (list python-poetry-core python-pytest))
35420 (home-page "https://github.com/shawwn/ansi-styles-python")
35421 (synopsis "ANSI escape codes for styling strings in the terminal")
35422 (description
35423 "This Python package provide ANSI escape codes
35424for styling strings in the terminal.")
35425 (license license:expat))))
35426
35427(define-public python-multipart
35428 (package
35429 (name "python-multipart")
35430 (version "0.0.20")
35431 (source (origin
35432 (method url-fetch)
35433 (uri (pypi-uri "python_multipart" version))
35434 (sha256
35435 (base32
35436 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
35437 (build-system pyproject-build-system)
35438 (native-inputs
35439 (list python-hatchling
35440 python-pytest
35441 python-pyyaml))
35442 (home-page "https://github.com/andrew-d/python-multipart")
35443 (synopsis "Streaming multipart parser for Python")
35444 (description
35445 "This package provides a streaming multipart parser for Python.")
35446 (license license:asl2.0)))
35447
35448(define-public python-aiopg
35449 (package
35450 (name "python-aiopg")
35451 (version "1.4.0")
35452 (source
35453 (origin
35454 (method git-fetch)
35455 (uri (git-reference
35456 (url "https://github.com/aio-libs/aiopg")
35457 (commit (string-append "v" version))))
35458 (file-name (git-file-name name version))
35459 (sha256
35460 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
35461 (build-system pyproject-build-system)
35462 (arguments
35463 (list
35464 #:tests? #f ;they need Docker
35465 #:phases
35466 #~(modify-phases %standard-phases
35467 (add-after 'unpack 'use-default-asyncio
35468 ;; async_timeout is deprecated, upstream recommends to use
35469 ;; asyncio, available since Python 3.11.
35470 (lambda _
35471 (substitute* "aiopg/pool.py"
35472 (("async_timeout") "asyncio"))))
35473 (add-after 'unpack 'relax-requirements
35474 (lambda _
35475 (substitute* "setup.py"
35476 (("psycopg2-binary") "psycopg2")
35477 ;; It's a part of Python 3.11+.
35478 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
35479 (native-inputs
35480 (list python-setuptools))
35481 (propagated-inputs
35482 (list python-psycopg2))
35483 (home-page "https://aiopg.readthedocs.io")
35484 (synopsis "Postgres integration with asyncio")
35485 (description
35486 "aiopg is a library for accessing a PostgreSQL database from the
35487asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
35488Psycopg database driver.")
35489 (license license:bsd-3)))
35490
35491(define-public python-shtab
35492 (package
35493 (name "python-shtab")
35494 (version "1.7.1")
35495 (source
35496 (origin
35497 (method url-fetch)
35498 (uri (pypi-uri "shtab" version))
35499 (sha256
35500 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
35501 (build-system pyproject-build-system)
35502 (native-inputs
35503 (list bash
35504 python-pytest
35505 python-pytest-timeout
35506 python-setuptools
35507 python-setuptools-scm
35508 python-wheel))
35509 (home-page "https://github.com/iterative/shtab")
35510 (synopsis "Automagic shell tab completion for Python CLI applications")
35511 (description
35512 "This package automatically generates shell tab completion scripts for
35513Python CLI apps.")
35514 (license license:asl2.0)))
35515
35516(define-public python-pyperf
35517 (package
35518 (name "python-pyperf")
35519 (version "2.10.0")
35520 (source
35521 (origin
35522 (method git-fetch)
35523 (uri (git-reference
35524 (url "https://github.com/psf/pyperf")
35525 (commit version)))
35526 (file-name (git-file-name name version))
35527 (sha256
35528 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
35529 (build-system pyproject-build-system)
35530 (arguments
35531 (list
35532 #:test-flags
35533 #~(list "--ignore=pyperf/tests/test_examples.py")))
35534 (native-inputs
35535 (list python-psutil-bootstrap
35536 python-pytest
35537 python-setuptools))
35538 (home-page "https://github.com/psf/pyperf")
35539 (synopsis "Toolkit for running Python benchmarks")
35540 (description
35541 "The Python @code{pyperf} module is a toolkit for writing, running and
35542analyzing benchmarks. It features a simple API that can:
35543
35544@itemize
35545@item automatically calibrate a benchmark for a time budget;
35546@item spawn multiple worker processes;
35547@item compute the mean and standard deviation;
35548@item detect if a benchmark result seems unstable;
35549@item store benchmark results in JSON format;
35550@item support multiple units: seconds, bytes and integer.
35551@end itemize")
35552 (license license:expat)))
35553
35554(define-public python-pydispatcher
35555 (package
35556 (name "python-pydispatcher")
35557 (version "2.0.7")
35558 (source
35559 (origin
35560 (method url-fetch)
35561 (uri (pypi-uri "PyDispatcher" version))
35562 (sha256
35563 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35564 (build-system pyproject-build-system)
35565 (native-inputs (list python-pytest python-setuptools))
35566 (home-page "https://pydispatcher.sourceforge.net")
35567 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35568 (description
35569 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35570@code{dispatcher.py} module. It provides the Python programmer with a robust
35571mechanism for event routing within various application contexts.
35572
35573Included in the package are the robustapply and saferef modules, which
35574provide the ability to selectively apply arguments to callable objects
35575and to reference instance methods using weak-references.")
35576 (license license:bsd-3)))
35577
35578(define-public python-pyee
35579 (package
35580 (name "python-pyee")
35581 (version "13.0.1")
35582 (source
35583 (origin
35584 (method git-fetch)
35585 (uri (git-reference
35586 (url "https://github.com/jfhbrook/pyee")
35587 (commit (string-append "v" version))))
35588 (file-name (git-file-name name version))
35589 (sha256
35590 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
35591 (build-system pyproject-build-system)
35592 (propagated-inputs (list python-typing-extensions))
35593 (native-inputs
35594 (list python-mock
35595 python-pytest
35596 python-pytest-asyncio
35597 python-pytest-trio
35598 python-setuptools
35599 python-trio
35600 python-twisted))
35601 (home-page "https://github.com/jfhbrook/pyee")
35602 (synopsis "Emit events with Python")
35603 (description
35604 "This package provides a port of node.js's EventEmitter to
35605python. Additionally, it includes a number of subclasses useful for
35606implementing async and threaded programming in python, such as async/await.")
35607 (license license:expat)))
35608
35609(define-public python-pypubsub
35610 (package
35611 (name "python-pypubsub")
35612 (version "4.0.3")
35613 (source
35614 (origin
35615 (method git-fetch)
35616 (uri (git-reference
35617 (url "https://github.com/schollii/pypubsub")
35618 (commit (string-append "v" version))))
35619 (file-name (git-file-name name version))
35620 (sha256
35621 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35622 (build-system pyproject-build-system)
35623 (arguments
35624 (list
35625 #:phases
35626 #~(modify-phases %standard-phases
35627 (replace 'check
35628 (lambda* (#:key tests? #:allow-other-keys)
35629 (when tests?
35630 (with-directory-excursion "tests/suite"
35631 (invoke "py.test"))))))))
35632 (native-inputs
35633 (list python-pytest
35634 python-setuptools
35635 python-wheel))
35636 (home-page "https://github.com/schollii/pypubsub")
35637 (synopsis "Python publish-subcribe library")
35638 (description
35639 "This library provides a publish-subscribe API to facilitate event-based
35640or message-based architecture in a single-process application. It is centered
35641on the notion of a topic - senders publish messages of a given topic, and
35642listeners subscribe to messages of a given topic, all inside the same
35643process.")
35644 (license license:bsd-2)))
35645
35646(define-public python-queuelib
35647 (package
35648 (name "python-queuelib")
35649 (version "1.8.0")
35650 (source
35651 (origin
35652 (method git-fetch)
35653 (uri (git-reference
35654 (url "https://github.com/scrapy/queuelib")
35655 (commit (string-append "v" version))))
35656 (file-name (git-file-name name version))
35657 (sha256
35658 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
35659 (build-system pyproject-build-system)
35660 (native-inputs (list python-hatchling python-pytest))
35661 (home-page "https://github.com/scrapy/queuelib")
35662 (synopsis "Collection of queues for Python")
35663 (description
35664 "Queuelib is a Python library that implements object collections which
35665are stored in memory or persisted to disk, provide a simple API, and run fast.
35666
35667Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
35668by priority and queues that are emptied in a round-robin fashion.")
35669 (license license:bsd-3)))
35670
35671(define-public python-posix-ipc
35672 (package
35673 (name "python-posix-ipc")
35674 (version "1.3.2")
35675 (source
35676 (origin
35677 (method git-fetch)
35678 (uri (git-reference
35679 (url "https://github.com/osvenskan/posix_ipc")
35680 (commit (string-append "rel" version))))
35681 (file-name (git-file-name name version))
35682 (sha256
35683 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35684 (build-system pyproject-build-system)
35685 (arguments
35686 (list
35687 #:test-flags
35688 ;; XXX: Collection fails due to stdin configuration.
35689 #~(list "--ignore=tests/test_memory.py")
35690 #:phases
35691 #~(modify-phases %standard-phases
35692 (add-after 'unpack 'set-cc-path
35693 (lambda _
35694 (setenv "CC" #$(cc-for-target)))))))
35695 (native-inputs (list python-pytest python-setuptools))
35696 (home-page "https://semanchuk.com/philip/posix_ipc/")
35697 (synopsis "POSIX IPC primitives for Python")
35698 (description
35699 "This package provides POSIX IPC primitives - semaphores, shared memory and
35700message queues for Python.")
35701 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35702
35703(define-public python-itemadapter
35704 (package
35705 (name "python-itemadapter")
35706 (version "0.12.0")
35707 (source
35708 (origin
35709 (method git-fetch)
35710 (uri (git-reference
35711 (url "https://github.com/scrapy/itemadapter")
35712 (commit (string-append "v" version))))
35713 (file-name (git-file-name name version))
35714 (sha256
35715 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35716 (build-system pyproject-build-system)
35717 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35718 (native-inputs (list python-hatchling))
35719 (home-page "https://github.com/scrapy/itemadapter")
35720 (synopsis "Common interface for data container classes")
35721 (description
35722 "The ItemAdapter class is a wrapper for data container objects, providing
35723a common interface to handle objects of different types in an uniform manner,
35724regardless of their underlying implementation.
35725
35726Currently supported types are:
35727@itemize
35728@item scrapy.item.Item
35729@item dict
35730@item dataclass-based classes
35731@item attrs-based classes
35732@item pydantic-based classes
35733@end itemize
35734
35735Additionally, interaction with arbitrary types is supported by
35736implementing a pre-defined interface.")
35737 (license license:bsd-3)))
35738
35739(define-public python-itemloaders
35740 (package
35741 (name "python-itemloaders")
35742 (version "1.3.2")
35743 (source
35744 (origin
35745 (method url-fetch)
35746 (uri (pypi-uri "itemloaders" version))
35747 (sha256
35748 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35749 (build-system pyproject-build-system)
35750 (native-inputs
35751 (list python-packaging
35752 python-pytest
35753 python-setuptools
35754 python-wheel))
35755 (propagated-inputs
35756 (list python-itemadapter python-jmespath python-parsel))
35757 (home-page "https://github.com/scrapy/itemloaders")
35758 (synopsis "Base library for scrapy's ItemLoader")
35759 (description "Itemloaders is a library that helps you collect data
35760from HTML and XML sources. It comes in handy to extract data from web
35761pages, as it supports data extraction using CSS and XPath Selectors.
35762
35763It’s specially useful when you need to standardize the data from many
35764sources. For example, it allows you to have all your casting and
35765parsing rules in a single place.")
35766 (license license:bsd-3)))
35767
35768(define-public python-iterable-io
35769 (package
35770 (name "python-iterable-io")
35771 (version "1.0.0")
35772 (source
35773 (origin
35774 (method url-fetch)
35775 (uri (pypi-uri "iterable-io" version))
35776 (sha256
35777 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
35778 (build-system pyproject-build-system)
35779 (native-inputs (list python-setuptools python-pytest))
35780 (home-page "https://github.com/pR0Ps/iterable-io")
35781 (synopsis "Adapt generators and other iterables to a file-like interface")
35782 (description
35783 "@code{iterable-io} is a small Python library that provides an adapter so
35784that it's possible to read from
35785@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
35786in the same way as
35787@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
35788objects.")
35789 (license license:lgpl3)))
35790
35791(define-public python-iteround
35792 (package
35793 (name "python-iteround")
35794 (version "1.0.4")
35795 ;; PyPI only has wheels.
35796 (source (origin
35797 (method git-fetch)
35798 (uri (git-reference
35799 (url "https://github.com/cgdeboer/iteround")
35800 (commit (string-append "v" version))))
35801 (file-name (git-file-name name version))
35802 (sha256
35803 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
35804 (build-system pyproject-build-system)
35805 (native-inputs
35806 (list python-pytest python-setuptools python-wheel))
35807 (home-page "https://github.com/cgdeboer/iteround")
35808 (synopsis "Sum-safe rounding for Iterables")
35809 (description "Iteround is a standard library sum-safe rounding library for
35810Python iterables (lists, tuples, dicts).")
35811 (license license:expat)))
35812
35813(define-public python-hypy-utils
35814 (package
35815 (name "python-hypy-utils")
35816 (version "1.0.29")
35817 (source
35818 (origin
35819 (method url-fetch)
35820 (uri (pypi-uri "hypy_utils" version))
35821 (sha256
35822 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
35823 (build-system pyproject-build-system)
35824 (arguments (list #:tests? #f)) ; No tests upstream.
35825 (native-inputs (list python-setuptools))
35826 (home-page "https://github.com/hykilpikonna/HyPyUtils")
35827 (synopsis "Python utility functions for HyDEV")
35828 (description "This module provides Python utility functions for modifying
35829and setting the color of terminal output, via HyDEV.")
35830 (license license:expat)))
35831
35832(define-public python-mike
35833 (package
35834 (name "python-mike")
35835 (version "2.1.3")
35836 (source
35837 (origin
35838 (method git-fetch) ; no tests data in PyPi package
35839 (uri (git-reference
35840 (url "https://github.com/jimporter/mike")
35841 (commit (string-append "v" version))))
35842 (file-name (git-file-name name version))
35843 (sha256
35844 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
35845 (build-system pyproject-build-system)
35846 (arguments
35847 (list
35848 #:test-flags
35849 ;; Most of integration tests hang or fail.
35850 #~(list "--ignore=test/integration/"
35851 ;; AttributeError: 'NoneType' object has no attribute 'group'
35852 "--ignore=test/unit/test_commands.py"
35853 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
35854 (native-inputs
35855 (list git-minimal/pinned
35856 python-pytest
35857 python-setuptools
35858 python-shtab
35859 python-wheel))
35860 (propagated-inputs
35861 (list python-importlib-metadata
35862 python-importlib-resources
35863 python-jinja2
35864 python-mkdocs
35865 python-pyparsing
35866 python-pyyaml
35867 python-pyyaml-env-tag
35868 python-verspec))
35869 (home-page "https://github.com/jimporter/mike")
35870 (synopsis "Manage multiple versions of MkDocs-powered documentation")
35871 (description
35872 "This package provides a Python utility to easily deploy multiple
35873versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
35874to Github via gh-pages.")
35875 (license license:bsd-3)))
35876
35877(define-public python-arpeggio
35878 (package
35879 (name "python-arpeggio")
35880 (version "2.0.2")
35881 (source
35882 (origin
35883 (method url-fetch)
35884 (uri (pypi-uri "Arpeggio" version))
35885 (sha256
35886 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
35887 (build-system pyproject-build-system)
35888 (native-inputs
35889 (list python-pytest
35890 python-setuptools
35891 python-wheel))
35892 (home-page "https://github.com/textX/Arpeggio")
35893 (synopsis "Packrat parser interpreter for Python")
35894 (description
35895 "This Python library provides a recursive descent parser with
35896backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
35897based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
35898for DSL development but it can be used for all sorts of general purpose
35899parsing.")
35900 (license license:expat)))
35901
35902(define-public python-flatten-json
35903 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
35904 ;; the commit associated with 0.1.14 version.
35905 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
35906 (revision "0"))
35907 (package
35908 (name "python-flatten-json")
35909 (version (git-version "0.1.14" revision commit))
35910 (source
35911 (origin
35912 (method git-fetch) ; no tests in PyPI release
35913 (uri (git-reference
35914 (url "https://github.com/amirziai/flatten")
35915 (commit commit)))
35916 (file-name (git-file-name name version))
35917 (sha256
35918 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
35919 (build-system pyproject-build-system)
35920 (native-inputs
35921 (list python-pytest
35922 python-setuptools
35923 python-wheel))
35924 (propagated-inputs
35925 (list python-six))
35926 (home-page "https://github.com/amirziai/flatten")
35927 (synopsis "Flatten JSON objects")
35928 (description
35929 "The @code{flatten_json} Python library flattens the hierarchy in your
35930object, which can be useful if you want to force your objects into a table.")
35931 (license license:expat))))
35932
35933(define-public python-deepdiff
35934 (package
35935 (name "python-deepdiff")
35936 (version "8.6.1")
35937 (source (origin
35938 (method url-fetch)
35939 (uri (pypi-uri "deepdiff" version))
35940 (sha256
35941 (base32
35942 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
35943 (build-system pyproject-build-system)
35944 (arguments
35945 ;; tests: 1028 passed, 10 skipped, 1 deselected
35946 ;; Ignore Polars test (not packaged).
35947 (list #:test-flags #~(list "-k" "not test_polars")))
35948 (propagated-inputs (list python-click ; for CLI
35949 python-pyyaml ; for CLI
35950 python-orderly-set
35951 python-orjson)) ; for optimization
35952 (native-inputs
35953 (list python-flit-core
35954 python-jsonpickle
35955 python-numpy
35956 python-pandas
35957 python-pydantic
35958 python-pytest
35959 python-pytest-benchmark
35960 python-pytz
35961 python-uuid6
35962 python-tomli-w))
35963 (home-page "https://github.com/seperman/deepdiff")
35964 (synopsis "Deep difference and search of any Python object/data")
35965 (description
35966 "This package provides tools for computing deep differences and searching
35967of any Python object/data. Recreate objects by adding adding deltas to each
35968other.")
35969 (license license:expat)))
35970
35971(define-public python-deepmerge
35972 (package
35973 (name "python-deepmerge")
35974 (version "1.0.1")
35975 (source
35976 (origin
35977 (method url-fetch)
35978 (uri (pypi-uri "deepmerge" version))
35979 (sha256
35980 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
35981 (build-system pyproject-build-system)
35982 (native-inputs
35983 (list python-setuptools-scm
35984 python-pytest
35985 python-setuptools
35986 python-wheel))
35987 (home-page "https://deepmerge.readthedocs.io/en/latest/")
35988 (synopsis "Merge nested data structures")
35989 (description
35990 "The @code{deep-merge} Python library provides a toolset to deeply merge
35991nested data structures in Python like lists and dictionaries.")
35992 (license license:expat)))
35993
35994(define-public python-durationpy
35995 (package
35996 (name "python-durationpy")
35997 (version "0.10")
35998 (source
35999 (origin
36000 (method git-fetch)
36001 (uri (git-reference
36002 (url "https://github.com/icholy/durationpy")
36003 (commit version)))
36004 (file-name (git-file-name name version))
36005 (sha256
36006 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
36007 (build-system pyproject-build-system)
36008 (arguments
36009 (list #:test-backend #~'custom
36010 #:test-flags #~(list "test.py")))
36011 (native-inputs (list python-setuptools))
36012 (home-page "https://github.com/icholy/durationpy")
36013 (synopsis "Python <-> Golang time duration formats converter")
36014 (description
36015 "This package implements a functionality to convert between
36016Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
36017 (license license:expat)))
36018
36019(define-public python-murmurhash3
36020 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
36021 (revision "0"))
36022 (package
36023 (name "python-murmurhash3")
36024 (version (git-version "2.3.5" revision commit))
36025 (source
36026 (origin
36027 (method git-fetch)
36028 (uri (git-reference
36029 (url "https://github.com/veegee/mmh3")
36030 (commit commit)))
36031 (file-name (git-file-name name version))
36032 (sha256
36033 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
36034 (build-system pyproject-build-system)
36035 (arguments
36036 (list
36037 #:phases
36038 #~(modify-phases %standard-phases
36039 (add-after 'unpack 'fix-package
36040 (lambda _
36041 (substitute* "mmh3module.cpp"
36042 (("#include <stdio\\.h>")
36043 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
36044 (native-inputs
36045 (list python-cython python-pytest python-setuptools python-wheel))
36046 (home-page "https://github.com/veegee/mmh3")
36047 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
36048 (description
36049 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
36050of fast and robust hash functions. This library is a Python extension module
36051written in C.")
36052 (license license:public-domain))))
36053
36054(define-public python-scooby
36055 (package
36056 (name "python-scooby")
36057 (version "0.11.0")
36058 (source
36059 (origin
36060 (method git-fetch)
36061 (uri (git-reference
36062 (url "https://github.com/banesullivan/scooby")
36063 (commit (string-append "v" version))))
36064 (file-name (git-file-name name version))
36065 (sha256
36066 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
36067 (build-system pyproject-build-system)
36068 (arguments
36069 (list
36070 ;; tests: 19 passed, 5 deselected, 1 warning
36071 #:test-flags
36072 ;; AssertionError: assert 'Module not found' == '0.1.0'
36073 #~(list "--deselect=tests/test_scooby.py::test_get_version"
36074 ;; ModuleNotFoundError: No module named 'no_version'
36075 "--deselect=tests/test_scooby.py::test_tracking"
36076 ;; Failed: DID NOT RAISE <class 'OSError'>
36077 "--deselect=tests/test_scooby.py::test_import_os_error"
36078 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
36079 "--deselect=tests/test_scooby.py::test_import_time"
36080 ;; Errored
36081 "--deselect=tests/test_scooby.py::test_cli")))
36082 (native-inputs
36083 (list python-beautifulsoup4
36084 python-numpy
36085 python-pytest
36086 python-pyvips
36087 python-scipy
36088 python-setuptools
36089 python-setuptools-scm))
36090 (propagated-inputs
36091 (list python-psutil))
36092 (home-page "https://github.com/banesullivan/scooby")
36093 (synopsis "Report hardware information and Python package versions")
36094 (description
36095 "The Scooby package reports the following information about the currently
36096running system:
36097
36098@itemize
36099@item operating system name;
36100@item hardware information including machine type (e.g., @samp{i386},
36101@samp{x86_64}, etc.), CPU count and total RAM;
36102@item Python environment (e.g., Python, IPython, etc.);
36103@item file system name;
36104@item Python version;
36105@item versions of specified Python packages.
36106@end itemize
36107
36108It can generate reports as HTML tables or plain text lists.
36109
36110Scooby has no required dependencies, and only few optional dependencies.")
36111 (license license:expat)))
36112
36113(define-public python-cymem
36114 (package
36115 (name "python-cymem")
36116 (version "2.0.6")
36117 (source
36118 (origin
36119 (method git-fetch)
36120 (uri (git-reference
36121 (url "https://github.com/explosion/cymem")
36122 (commit (string-append "v" version))))
36123 (file-name (git-file-name name version))
36124 (sha256
36125 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
36126 (build-system pyproject-build-system)
36127 (native-inputs (list python-cython python-pytest python-setuptools))
36128 (inputs (list python))
36129 (home-page "https://github.com/explosion/cymem")
36130 (synopsis "Cython memory pool for RAII-style memory management")
36131 (description
36132 "Cymem provides two small memory-management helpers for Cython. They make it
36133easy to tie memory to a Python object's life-cycle, so that the memory is freed
36134when the object is garbage collected.")
36135 (license license:expat)))
36136
36137(define-public python-preshed
36138 (package
36139 (name "python-preshed")
36140 (version "3.0.6")
36141 (source
36142 (origin
36143 (method git-fetch)
36144 (uri (git-reference
36145 (url "https://github.com/explosion/preshed")
36146 (commit (string-append "v" version))))
36147 (file-name (git-file-name name version))
36148 (sha256
36149 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
36150 (build-system pyproject-build-system)
36151 (arguments
36152 (list
36153 #:phases
36154 #~(modify-phases %standard-phases
36155 (add-after 'unpack 'patch-msvccompiler
36156 (lambda _
36157 (substitute* "setup.py"
36158 (("from distutils import ccompiler, msvccompiler")
36159 "from distutils import ccompiler")
36160 (("and msvccompiler.*")
36161 ""))))
36162 (replace 'check
36163 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
36164 (with-directory-excursion (site-packages inputs outputs)
36165 (for-each delete-file (find-files "." "\\.pyx$"))
36166 (apply (assoc-ref %standard-phases 'check) args)
36167 (delete-file-recursively "preshed/tests")))))))
36168 (native-inputs
36169 (list python-cython python-cymem python-pytest python-setuptools))
36170 (inputs (list python python-cymem python-murmurhash))
36171 (home-page "https://github.com/explosion/preshed")
36172 (synopsis "Cython hash tables that assume keys are pre-hashed")
36173 (description
36174 "Simple but high performance Cython hash table mapping pre-randomized keys
36175to void* values.")
36176 (license license:expat)))
36177
36178(define-public python-catalogue
36179 (package
36180 (name "python-catalogue")
36181 (version "2.0.10")
36182 (source
36183 (origin
36184 (method git-fetch)
36185 (uri (git-reference
36186 (url "https://github.com/explosion/catalogue")
36187 (commit (string-append "v" version))))
36188 (file-name (git-file-name name version))
36189 (sha256
36190 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
36191 (build-system pyproject-build-system)
36192 (native-inputs (list python-pytest python-setuptools))
36193 (home-page "https://github.com/explosion/catalogue")
36194 (synopsis "Lightweight function registries for your library")
36195 (description
36196 "This package is a tiny, zero-dependencies library that makes it easy to
36197add function (or object) registries to your code. Function registries are
36198helpful when you have objects that need to be both easily serializable and
36199fully customizable. Instead of passing a function into your object, you pass
36200in an identifier name, which the object can use to lookup the function from
36201the registry. This makes the object easy to serialize, because the name is a
36202simple string. If you instead saved the function, you'd have to use Pickle
36203for serialization, which has many drawbacks.")
36204 (license license:expat)))
36205
36206(define-public python-gatt
36207 (package
36208 (name "python-gatt")
36209 (version "0.2.7")
36210 (source (origin
36211 (method url-fetch)
36212 (uri (pypi-uri "gatt" version))
36213 (sha256
36214 (base32
36215 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
36216 (build-system pyproject-build-system)
36217 (arguments (list #:tests? #f)) ; No tests upstream.
36218 (propagated-inputs (list python-dbus-1.2 python-pygobject))
36219 (native-inputs (list python-setuptools))
36220 (home-page "https://github.com/getsenic/gatt-python")
36221 (synopsis "Bluetooth GATT SDK for Python")
36222 (description
36223 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
36224Software Development Kit} for Python helps you implement and communicate with
36225any Bluetooth Low Energy device that has a GATT profile. It supports:
36226
36227@itemize @bullet
36228@item Discovering nearby Bluetooth Low Energy devices
36229@item Connecting and disconnecting devices
36230@item Implementing your custom GATT profile
36231@item Accessing all GATT services
36232@item Accessing all GATT characteristics
36233@item Reading characteristic values
36234@item Writing characteristic values
36235@item Subscribing for characteristic value change notifications
36236@end itemize
36237
36238Currently, Linux is the only platform supported by this library.")
36239 (license license:expat)))
36240
36241(define-public python-dbus-fast
36242 (package
36243 (name "python-dbus-fast")
36244 (version "2.44.3")
36245 (source
36246 (origin
36247 (method git-fetch) ;No tests in PyPI package.
36248 (uri (git-reference
36249 (url "https://github.com/Bluetooth-Devices/dbus-fast")
36250 (commit (string-append "v" version))))
36251 (file-name (git-file-name name version))
36252 (sha256
36253 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
36254 (build-system pyproject-build-system)
36255 (arguments
36256 (list
36257 #:test-flags
36258 '(list
36259 ;; These tests need pytest_codspeed.
36260 "--ignore-glob=tests/benchmarks/test_*marshall.py"
36261 ;; These tests all fail with:
36262 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
36263 ;; set and could not get DISPLAY environment variable to get bus address
36264 "-m" "not asyncio")))
36265 (native-inputs (list python-cython
36266 python-poetry-core
36267 python-setuptools
36268 python-pytest
36269 python-pytest-asyncio
36270 python-covdefaults))
36271 (home-page "https://github.com/bluetooth-devices/dbus-fast")
36272 (synopsis "Faster version of dbus-next")
36273 (description "This package provides a faster version of dbus-next.")
36274 (license license:expat)))
36275
36276(define-public python-bleak
36277 (package
36278 (name "python-bleak")
36279 (version "2.1.1")
36280 (source
36281 (origin
36282 (method git-fetch)
36283 (uri (git-reference
36284 (url "https://github.com/hbldh/bleak")
36285 (commit (string-append "v" version))))
36286 (file-name (git-file-name name version))
36287 (sha256
36288 (base32 "0vdzx6s5fsgnl3j2k0kn6w1v8mqhb2jjpmpq6vdk9i0bdp1456ff"))))
36289 (build-system pyproject-build-system)
36290 (arguments
36291 (list
36292 ;; Integration tests require unpackaged dependencies.
36293 #:test-flags #~(list "--ignore=tests/integration")))
36294 (propagated-inputs
36295 (list python-async-timeout
36296 python-dbus-fast
36297 python-typing-extensions))
36298 (native-inputs
36299 (list python-coverage
36300 python-packaging
36301 python-poetry-core
36302 python-pytest
36303 python-pytest-asyncio))
36304 (home-page "https://github.com/hbldh/bleak")
36305 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
36306 (description "This package provides a Bluetooth Low Energy platform-agnostic
36307client library.")
36308 (license license:expat)))
36309
36310(define-public python-ndeflib
36311 (package
36312 (name "python-ndeflib")
36313 (version "0.3.3")
36314 (source
36315 (origin
36316 (method url-fetch)
36317 (uri (pypi-uri "ndeflib" version))
36318 (sha256
36319 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
36320 (build-system pyproject-build-system)
36321 (arguments
36322 (list
36323 ;; tests: 1571 passed, 37 deselected, 1 warning
36324 ;;
36325 ;; Three test fail with assertion not equal:
36326 ;;
36327 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
36328 ;; bytes] - AssertionError
36329 ;;
36330 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
36331 ;; 1 bytes] - AssertionError
36332 ;;
36333 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
36334 ;; AssertionError
36335 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
36336 "test_encode_error"))))
36337 (native-inputs (list python-pytest-8 python-setuptools))
36338 (home-page "https://ndeflib.readthedocs.io/")
36339 (synopsis "NFC Data Exchange Format decoder and encoder.")
36340 (description "This package provides a NFC (Near-Field Communication)
36341Data Exchange Format decoder and encoder.")
36342 (license license:isc)))
36343
36344(define-public python-nfcpy
36345 (package
36346 (name "python-nfcpy")
36347 (version "1.0.4")
36348 (source
36349 (origin
36350 (method url-fetch)
36351 (uri (pypi-uri "nfcpy" version))
36352 (sha256
36353 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
36354 (build-system pyproject-build-system)
36355 (arguments
36356 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
36357 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
36358 python-pyserial))
36359 (native-inputs (list python-setuptools python-wheel))
36360 (home-page "https://github.com/nfcpy/nfcpy")
36361 (synopsis "Python module for Near-Field Communication.")
36362 (description "This package provides a Python module for Near-Field
36363Communication.")
36364 (license license:eupl1.1)))
36365
36366(define-public python-clrprint
36367 (package
36368 (name "python-clrprint")
36369 (version "2.0.1")
36370 (source (origin
36371 (method url-fetch)
36372 (uri (pypi-uri "clrprint" version))
36373 (sha256
36374 (base32
36375 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
36376 (build-system pyproject-build-system)
36377 (arguments '(#:tests? #f)) ;there are no tests
36378 (native-inputs
36379 (list python-setuptools))
36380 (propagated-inputs (list python-colorama python-termcolor))
36381 (home-page "https://github.com/AbhijithAJ/clrprint")
36382 (synopsis "Print colorful output in the terminal")
36383 (description "@code{clrprint} is developed to print colorful output in the
36384terminal. It has red, blue, green, yellow, purple and black/white (default)
36385colors.")
36386 (license license:expat)))
36387
36388(define-public python-mido
36389 (package
36390 (name "python-mido")
36391 (version "1.3.2")
36392 (source (origin
36393 (method url-fetch)
36394 (uri (pypi-uri "mido" version))
36395 (sha256
36396 (base32
36397 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
36398 (build-system pyproject-build-system)
36399 (arguments
36400 (list #:phases
36401 #~(modify-phases %standard-phases
36402 ;; This package requires python-packaging~=23.1 which is not yet
36403 ;; updated to. As per pyproject.toml, it is required to provide
36404 ;; a nice version_info object.
36405 ;; TODO: After updating python-packaging, fix this.
36406 (delete 'sanity-check))))
36407 (propagated-inputs (list python-importlib-metadata python-packaging))
36408 (native-inputs (list python-pytest python-setuptools python-wheel))
36409 (home-page "https://mido.readthedocs.io/en/stable/")
36410 (synopsis "MIDI Objects for Python")
36411 (description "This library is for working with MIDI 1.0 ports, messages and
36412files.")
36413 (license license:expat)))
36414
36415(define-public python-musical-scales
36416 (package
36417 (name "python-musical-scales")
36418 (version "1.0.1")
36419 (source (origin
36420 (method url-fetch)
36421 (uri (pypi-uri "musical-scales" version))
36422 (sha256
36423 (base32
36424 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
36425 (build-system pyproject-build-system)
36426 (arguments (list #:tests? #f)) ;no tests
36427 (native-inputs (list python-setuptools))
36428 (home-page "https://github.com/hmillerbakewell/musical-scales")
36429 (synopsis "Retrieve a scale based on a given mode and starting note")
36430 (description
36431 "Retrieve a scale based on a given mode and starting note.
36432Information about these scales can be
36433@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
36434Wikipedia}.")
36435 (license license:expat)))
36436
36437(define-public python-langcodes
36438 (package
36439 (name "python-langcodes")
36440 (version "3.5.0")
36441 (source (origin
36442 (method url-fetch)
36443 (uri (pypi-uri "langcodes" version))
36444 (sha256
36445 (base32
36446 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
36447 (build-system pyproject-build-system)
36448 (native-inputs
36449 (list python-pytest
36450 python-setuptools
36451 python-setuptools-scm))
36452 (propagated-inputs
36453 ;; [optional:data]
36454 (list python-language-data))
36455 (home-page "https://github.com/rspeer/langcodes")
36456 (synopsis "Python library for working with language codes")
36457 (description
36458 "This package provides a Python library for working with and comparing
36459language codes.
36460
36461@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3646247}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3646347 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
36464with it, and it also implements recommendations from the
36465@url{http://cldr.unicode.org/, Unicode CLDR}.
36466
36467@code{python-langcodes} can also refer to a database of language properties
36468and names, built from Unicode CLDR and the IANA subtag registry, if you
36469install @code{python-language-data}.")
36470 (license license:expat)))
36471
36472(define-public python-anyascii
36473 (package
36474 (name "python-anyascii")
36475 (version "0.3.3")
36476 (source (origin
36477 (method url-fetch)
36478 (uri (pypi-uri "anyascii" version))
36479 (sha256
36480 (base32
36481 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
36482 (build-system pyproject-build-system)
36483 (native-inputs (list python-pytest python-flit-core))
36484 (home-page "https://anyascii.com")
36485 (synopsis "Unicode to ASCII transliteration")
36486 (description "@code{anyascii} converts Unicode characters to their best
36487ASCII representation.")
36488 (license license:isc)))
36489
36490(define-public python-geomet
36491 (package
36492 (name "python-geomet")
36493 (version "1.1.0")
36494 (source
36495 (origin
36496 (method git-fetch)
36497 (uri (git-reference
36498 (url "https://github.com/geomet/geomet")
36499 (commit version)))
36500 (file-name (git-file-name name version))
36501 (sha256
36502 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
36503 (build-system pyproject-build-system)
36504 (native-inputs (list python-pytest python-setuptools))
36505 (propagated-inputs (list python-click python-six))
36506 (home-page "https://github.com/geomet/geomet")
36507 (synopsis
36508 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
36509 (description
36510 "This package provides utilities and functions for converting
36511GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
36512versa. Extended WKB/WKT are also supported.")
36513 (license license:asl2.0)))
36514
36515(define-public python-cogapp
36516 (package
36517 (name "python-cogapp")
36518 (version "3.3.0")
36519 (source (origin
36520 (method url-fetch)
36521 (uri (pypi-uri "cogapp" version))
36522 (sha256
36523 (base32
36524 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
36525 (build-system pyproject-build-system)
36526 (native-inputs (list python-pytest python-setuptools python-wheel))
36527 (home-page "https://nedbatchelder.com/code/cog")
36528 (synopsis "Content generation tool that leverages Python")
36529 (description "Cog is a file generation tool. It allows using pieces of
36530Python code as generators in your source files to generate arbitrary text.")
36531 (license license:expat)))
36532
36533(define-public python-cxxheaderparser
36534 (package
36535 (name "python-cxxheaderparser")
36536 (version "1.7.0")
36537 (source
36538 (origin
36539 (method git-fetch)
36540 (uri (git-reference
36541 (url "https://github.com/robotpy/cxxheaderparser")
36542 (commit version)))
36543 (file-name (git-file-name name version))
36544 (sha256
36545 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
36546 (build-system pyproject-build-system)
36547 (native-inputs
36548 (list python-hatch-vcs python-pytest))
36549 (home-page "https://github.com/robotpy/cxxheaderparser/")
36550 (synopsis "Python C++ header parser")
36551 (description "Pure python C++ header parser that parses C++ headers in a
36552mildly naive manner that allows it to handle many C constructs, including
36553many (C++11 and beyond) features.")
36554 (license license:bsd-3)))
36555
36556(define-public python-bsdiff4
36557 (package
36558 (name "python-bsdiff4")
36559 (version "1.2.6")
36560 (source
36561 (origin
36562 (method git-fetch)
36563 (uri (git-reference
36564 (url "https://github.com/ilanschnell/bsdiff4")
36565 (commit version)))
36566 (file-name (git-file-name name version))
36567 (sha256
36568 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
36569 (build-system pyproject-build-system)
36570 (arguments
36571 (list
36572 #:test-flags #~(list "--pyargs" "bsdiff4")))
36573 (native-inputs
36574 (list python-pytest
36575 python-setuptools
36576 python-wheel))
36577 (home-page "https://github.com/ilanschnell/bsdiff4")
36578 (synopsis "Binary diff and patch using the BSDIFF4 format")
36579 (description
36580 "This package provides a Python library for the @code{bsdiff} binary diff
36581utility. It also provides two command-line tools, @code{bsdiff4} and
36582@code{bspatch4}.")
36583 (license license:bsd-2)))
36584
36585(define-public python-mpv
36586 (package
36587 (name "python-mpv")
36588 (version "1.0.8")
36589 (source
36590 (origin
36591 (method git-fetch)
36592 (uri (git-reference
36593 (url "https://github.com/jaseg/python-mpv")
36594 (commit (string-append "v" version))))
36595 (file-name (git-file-name name version))
36596 (sha256
36597 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
36598 (build-system pyproject-build-system)
36599 (arguments
36600 (list #:phases
36601 #~(modify-phases %standard-phases
36602 (add-before 'build 'patch-reference-to-mpv
36603 (lambda* (#:key inputs #:allow-other-keys)
36604 ;; Without an absolute path it is not able find and load libmpv.
36605 (substitute* "mpv.py"
36606 (("sofile = .*")
36607 (format #f "sofile = '~a/lib/libmpv.so'~%"
36608 #$(this-package-input "mpv"))))))
36609 (add-before 'check 'prepare-for-tests
36610 (lambda _
36611 ;; Fontconfig throws errors when it has no cache dir to use.
36612 (setenv "XDG_CACHE_HOME" (getcwd))
36613 ;; Some tests fail without a writable and readable HOME.
36614 (setenv "HOME" (getcwd))
36615 (setenv "PY_MPV_SKIP_TESTS"
36616 "test_wait_for_property_event_overflow"))))))
36617 (native-inputs
36618 (list python-pytest
36619 python-pyvirtualdisplay
36620 python-setuptools
36621 xorg-server-for-tests))
36622 (inputs (list mpv))
36623 (propagated-inputs (list python-pillow)) ;for raw screenshots
36624 (home-page "https://github.com/jaseg/python-mpv")
36625 (synopsis "Python interface to the mpv media player")
36626 (description
36627 "python-mpv is a ctypes-based python interface to the mpv media player.
36628It gives you more or less full control of all features of the player, just
36629as the lua interface does.")
36630 ;; From the project's README:
36631 ;; python-mpv inherits the underlying libmpv's license, which can be either
36632 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
36633 ;; copyright page.
36634 (license license:gpl2+)))
36635
36636(define-public python-biblib
36637 (let ((upstream-version "0.1.0")
36638 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
36639 (revision "1"))
36640 (package
36641 (name "python-biblib")
36642 (version (git-version upstream-version revision commit))
36643 (source
36644 (origin
36645 (method git-fetch)
36646 (uri (git-reference
36647 (url "https://github.com/aclements/biblib")
36648 (commit commit)))
36649 (sha256
36650 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
36651 (file-name (git-file-name name version))))
36652 (build-system pyproject-build-system)
36653 (arguments (list #:tests? #f)) ; No tests upstream.
36654 (native-inputs (list python-setuptools))
36655 (home-page "https://github.com/aclements/biblib")
36656 (synopsis "BibTeX parsing and transformation library")
36657 (description
36658 "Biblib provides a simple, standalone Python 3 package for parsing
36659BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
36660entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
36661source code for BibTeX and hence (barring bugs in translation) should be fully
36662compatible with BibTeX's own parser.")
36663 ;; N.B. It seems the parser was translated from WEB by hand: this
36664 ;; package does not contain any generated files.
36665 (license license:expat))))
36666
36667(define-public python-cyclic
36668 (package
36669 (name "python-cyclic")
36670 (version "1.0.0")
36671 (source
36672 (origin
36673 (method git-fetch)
36674 (uri (git-reference
36675 (url "https://github.com/neurobin/cyclic")
36676 ;; Release is not tagged on github, see
36677 ;; https://github.com/neurobin/cyclic/issues/2
36678 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
36679 (file-name (git-file-name name version))
36680 (sha256
36681 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
36682 (build-system pyproject-build-system)
36683 (arguments (list #:test-backend #~'unittest))
36684 (native-inputs (list python-setuptools))
36685 (home-page "https://github.com/neurobin/cyclic")
36686 (synopsis "Handle cyclic relations")
36687 (description "This package handles cyclic relations compared by value.")
36688 (license license:bsd-3)))
36689
36690(define-public python-rcslice
36691 (package
36692 (name "python-rcslice")
36693 (version "1.1.0")
36694 (source
36695 (origin
36696 (method git-fetch)
36697 (uri (git-reference
36698 (url "https://github.com/neurobin/rcslice")
36699 ;; Releases are not tagged on github, see
36700 ;; https://github.com/neurobin/rcslice/issues/2
36701 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
36702 (file-name (git-file-name name version))
36703 (sha256
36704 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
36705 (build-system pyproject-build-system)
36706 (arguments (list #:test-backend #~'unittest))
36707 (native-inputs (list python-setuptools))
36708 (home-page "https://github.com/neurobin/rcslice")
36709 (synopsis "Slice a list of sliceables")
36710 (description
36711 "This package provides Python module to slice a list of sliceables (1
36712indexed, both start and end index are inclusive). Helps to slice file content
36713line by line or column by column or a combination of both.")
36714 (license license:bsd-3)))
36715
36716(define-public python-rpds-py
36717 (package
36718 (name "python-rpds-py")
36719 (version "0.10.6")
36720 (source (origin
36721 (method url-fetch)
36722 (uri (pypi-uri "rpds_py" version))
36723 (sha256
36724 (base32
36725 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
36726 (build-system cargo-build-system)
36727 (arguments
36728 (list
36729 #:imported-modules `(,@%cargo-build-system-modules
36730 ,@%pyproject-build-system-modules)
36731 #:modules '((guix build cargo-build-system)
36732 ((guix build pyproject-build-system) #:prefix py:)
36733 (guix build utils))
36734 #:phases
36735 #~(modify-phases %standard-phases
36736 (add-after 'build 'build-python-module
36737 (assoc-ref py:%standard-phases 'build))
36738 (add-after 'build-python-module 'install-python-module
36739 (assoc-ref py:%standard-phases 'install)))
36740 #:install-source? #false))
36741 (inputs
36742 (cons maturin (cargo-inputs 'python-rpds-py)))
36743 (native-inputs
36744 (list python-wrapper))
36745 (home-page "https://github.com/crate-py/rpds")
36746 (synopsis "Bindings to Rust rpds for persistent data structures")
36747 (description "This package provides Python bindings to the Rust rpds crate
36748for persistent data structures. It was written initially to support replacing
36749@code{python-pyrsistent}.")
36750 (license license:expat)))
36751
36752(define-public python-nanoid
36753 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36754 (revision "0"))
36755 (package
36756 (name "python-nanoid")
36757 (version "2.0.0")
36758 (source
36759 (origin
36760 (method git-fetch)
36761 (uri
36762 (git-reference
36763 (url "https://github.com/puyuan/py-nanoid")
36764 (commit commit)))
36765 (file-name (git-file-name name commit))
36766 (sha256
36767 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36768 (build-system pyproject-build-system)
36769 (native-inputs (list python-pytest python-setuptools))
36770 (home-page "https://github.com/puyuan/py-nanoid")
36771 (synopsis "Unique string ID generator")
36772 (description
36773 "This package provides a tiny, secure, URL-friendly, unique string ID
36774generator for Python.")
36775 (license license:expat))))
36776
36777(define-public python-misc-utils
36778 (package
36779 (name "python-misc-utils")
36780 (version "0.28")
36781 (source
36782 (origin
36783 (method git-fetch)
36784 (uri (git-reference
36785 (url "https://github.com/davidel/py_misc_utils")
36786 (commit version)))
36787 (file-name (git-file-name name version))
36788 (sha256
36789 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
36790 (build-system pyproject-build-system)
36791 (arguments
36792 (list
36793 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
36794 #:test-backend #~'custom
36795 #:test-flags #~(list "test/test_runner.py")))
36796 (propagated-inputs
36797 (list python-numpy python-pandas python-psutil python-pyyaml))
36798 (native-inputs (list python-setuptools))
36799 (home-page "https://github.com/davidel/py_misc_utils")
36800 (synopsis "Collection of Python utilities")
36801 (description "This package provides a collection of Python miscellaneous
36802utility tools mainly used by other projects of the same author.")
36803 (license license:asl2.0)))
36804
36805(define-public python-misskey
36806 (package
36807 (name "python-misskey")
36808 (version "4.1.0")
36809 (source (origin
36810 (method git-fetch)
36811 (uri (git-reference
36812 (url "https://github.com/YuzuRyo61/Misskey.py")
36813 (commit (string-append "v" version))))
36814 (file-name (git-file-name name version))
36815 (sha256
36816 (base32
36817 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
36818 (build-system pyproject-build-system)
36819 (arguments (list #:tests? #f)) ;needs network
36820 (native-inputs (list python-setuptools))
36821 (propagated-inputs (list python-requests))
36822 (home-page "https://misskeypy.readthedocs.io")
36823 (synopsis "Python bindings for Misskey's API")
36824 (description
36825 "This package provides access to Misskey's API. Misskey is a SNS
36826platform using the ActivityPub protocol.")
36827 (license license:expat)))
36828
36829(define-public python-lief
36830 (package
36831 (name "python-lief")
36832 (version "1.0.0")
36833 (source
36834 (origin
36835 (method git-fetch)
36836 (uri (git-reference
36837 (url "https://github.com/lief-project/LIEF")
36838 (commit version)))
36839 (file-name (git-file-name name version))
36840 (sha256
36841 (base32 "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2"))))
36842 (build-system pyproject-build-system)
36843 (arguments
36844 (list
36845 ;; TODO: Tests neeed some setup, see:
36846 ;; <.github/workflows/linux-x86-64.yml>.
36847 #:tests? #f
36848 #:phases
36849 #~(modify-phases %standard-phases
36850 (add-before 'build 'change-directory
36851 (lambda _
36852 (chdir "api/python"))))))
36853 (native-inputs
36854 (list ninja
36855 python-pydantic
36856 python-scikit-build-core
36857 python-tomli))
36858 (home-page "https://github.com/lief-project/LIEF")
36859 (synopsis "Library to instrument executable formats")
36860 (description
36861 "@code{python-lief} is a cross platform library which can parse, modify
36862and abstract ELF, PE and MachO formats.")
36863 (license license:asl2.0)))
36864
36865(define-public python-eris
36866 (package
36867 (name "python-eris")
36868 (version "1.0.0")
36869 (source
36870 (origin
36871 (method url-fetch)
36872 (uri (pypi-uri "eris" version))
36873 (sha256
36874 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
36875 (build-system pyproject-build-system)
36876 (arguments
36877 ;; No tests in PyPI, tests miss data files in Git:
36878 ;; - tests/test-vectors/test_encode
36879 ;; - tests/test-vectors/test_decode
36880 (list #:tests? #f))
36881 (native-inputs
36882 (list python-setuptools
36883 python-wheel))
36884 (propagated-inputs
36885 (list python-aiocoap
36886 python-pycryptodome))
36887 (home-page "https://codeberg.org/eris/python-eris")
36888 (synopsis "Python implementation of ERIS")
36889 (description
36890 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
36891Storage}.")
36892 (license license:lgpl3+)))
36893
36894(define-public python-pymonad
36895 (package
36896 (name "python-pymonad")
36897 (version "2.4.0")
36898 (source
36899 (origin
36900 (method git-fetch)
36901 (uri (git-reference
36902 (url "https://github.com/jasondelaat/pymonad")
36903 (commit (string-append "v" version))))
36904 (file-name (git-file-name name version))
36905 (sha256
36906 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
36907 (build-system pyproject-build-system)
36908 (arguments
36909 (list
36910 #:phases
36911 #~(modify-phases %standard-phases
36912 (replace 'check
36913 (lambda* (#:key tests? #:allow-other-keys)
36914 (when tests?
36915 (invoke "./run_tests.sh")))))))
36916 (native-inputs (list python-setuptools))
36917 (home-page "https://github.com/jasondelaat/pymonad")
36918 (synopsis "Monadic style functional programming for Python")
36919 (description "@code{python-pymonad} implements data structures typically
36920available in purely functional or functional first programming languages such
36921as Haskell and F#. Included are
36922
36923@itemize
36924@item Monad and Monoid data types with several common monads such as Maybe and
36925State
36926@item Useful tools such as the @code{@@curry} decorator for defining curried
36927functions
36928@item Type annotations to help ensure correct usage
36929@end itemize")
36930 (license license:bsd-3)))
36931
36932(define-public python-markdown-strings
36933 (package
36934 (name "python-markdown-strings")
36935 (version "3.3.0")
36936 (source
36937 (origin
36938 (method git-fetch)
36939 (uri (git-reference
36940 (url "https://github.com/awesmubarak/markdown_strings.git")
36941 (commit (string-append "v" version))))
36942 (file-name (git-file-name name version))
36943 (sha256
36944 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
36945 (build-system pyproject-build-system)
36946 (arguments
36947 (list
36948 #:test-backend #~'custom
36949 #:test-flags #~(list "test.py")))
36950 (native-inputs (list python-setuptools))
36951 (propagated-inputs (list python-lxml python-six))
36952 (home-page "https://github.com/awesmubarak/markdown_strings")
36953 (synopsis "Python library to create markdown-formatted text")
36954 (description "This package allows the programmatic creation of
36955markdown-compliant strings.")
36956 (license license:expat)))
36957
36958(define-public python-icecream
36959 (package
36960 (name "python-icecream")
36961 (version "2.1.9")
36962 (source
36963 (origin
36964 (method git-fetch)
36965 (uri (git-reference
36966 (url "https://github.com/gruns/icecream")
36967 (commit (string-append "v" version))))
36968 (file-name (git-file-name name version))
36969 (sha256
36970 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
36971 (build-system pyproject-build-system)
36972 (native-inputs
36973 (list python-hypothesis
36974 python-pytest
36975 python-setuptools))
36976 (propagated-inputs
36977 (list python-asttokens
36978 python-colorama
36979 python-executing
36980 python-pygments))
36981 (home-page "https://github.com/gruns/icecream")
36982 (synopsis
36983 "Single function call to debug variables, expressions, and program execution")
36984 (description
36985 "This tool lets you debug variables, expressions, and program execution
36986with one function call. IceCream makes print debugging a little sweeter.")
36987 (license license:expat)))
36988
36989;; XXX: Deprecated on <2026-07-12>.
36990(define-deprecated/public-alias python-icegrams
36991 (@ (gnu packages language) python-icegrams))
36992
36993(define-public python-sbsv
36994 (package
36995 (name "python-sbsv")
36996 (version "0.2.3")
36997 (source
36998 (origin
36999 (method git-fetch)
37000 (uri (git-reference
37001 (url "https://github.com/hsh814/sbsv")
37002 (commit (string-append "v" version))))
37003 (file-name (git-file-name name version))
37004 (sha256
37005 (base32 "1xzx0xhikwqvmzdbhprzljfvnxznr3an3jf0v07hwkixvh80s4f5"))
37006 (modules '((guix build utils)))
37007 (snippet #~(delete-file-recursively "libsbsv")))) ;separate C library
37008 (build-system pyproject-build-system)
37009 (native-inputs (list python-hatchling python-pytest))
37010 (home-page "https://github.com/hsh814/sbsv")
37011 (synopsis "Square bracket separated values")
37012 (description
37013 "This Python package provides a schema-driven structured log data format
37014for the ease of writing and parsing.")
37015 (license license:expat)))
37016
37017(define-public python-sqlglot
37018 (package
37019 (name "python-sqlglot")
37020 (version "26.33.0")
37021 (source
37022 (origin
37023 (method url-fetch)
37024 (uri (pypi-uri "sqlglot" version))
37025 (sha256
37026 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
37027 (build-system pyproject-build-system)
37028 (arguments
37029 (list
37030 #:test-backend #~'unittest
37031 #:phases
37032 #~(modify-phases %standard-phases
37033 (add-before 'check 'pre-check
37034 (lambda _
37035 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
37036 (native-inputs
37037 (list python-duckdb
37038 python-pytz
37039 python-pandas
37040 python-setuptools
37041 python-setuptools-scm
37042 python-tzdata))
37043 (home-page "https://sqlglot.com/")
37044 (synopsis "Python SQL Parser and Transpiler")
37045 (description
37046 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
37047engine. It can be used to format SQL or translate between 31 different
37048dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
37049BigQuery. It aims to read a wide variety of SQL inputs and output
37050syntactically and semantically correct SQL in the targeted dialects.")
37051 (license license:expat)))
37052
37053(define-public python-sqlglotrs
37054 (package
37055 (inherit python-sqlglot)
37056 (name "python-sqlglotrs")
37057 (version "0.6.1")
37058 (source
37059 (origin
37060 (method url-fetch)
37061 (uri (pypi-uri "sqlglotrs" version))
37062 (sha256
37063 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
37064 (build-system cargo-build-system)
37065 (arguments
37066 (list
37067 #:install-source? #false
37068 #:tests? #f ;no tests
37069 #:imported-modules `(,@%cargo-build-system-modules
37070 ,@%pyproject-build-system-modules)
37071 #:modules '((guix build cargo-build-system)
37072 ((guix build pyproject-build-system) #:prefix py:)
37073 (guix build utils))
37074 #:phases
37075 #~(modify-phases %standard-phases
37076 (add-after 'build 'build-python-module
37077 (assoc-ref py:%standard-phases 'build))
37078 (add-after 'build-python-module 'install-python-module
37079 (assoc-ref py:%standard-phases 'install))
37080 (add-after 'install-python-module 'add-install-to-pythonpath
37081 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
37082 (native-inputs
37083 (list maturin
37084 python-wrapper))
37085 (inputs
37086 (cargo-inputs 'python-sqlglotrs))))
37087
37088(define-public python-sqltrie
37089 (package
37090 (name "python-sqltrie")
37091 (version "0.11.2")
37092 (home-page "https://github.com/iterative/sqltrie/")
37093 (source
37094 (origin
37095 (method url-fetch)
37096 (uri (pypi-uri "sqltrie" version))
37097 (sha256
37098 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
37099 (build-system pyproject-build-system)
37100 (arguments
37101 (list
37102 #:test-flags
37103 #~(list "--ignore=tests/benchmarks/"
37104 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
37105 ;; yet in Guix.
37106 "--ignore=src/sqltrie/__pyinstaller")))
37107 (native-inputs
37108 (list python-pytest
37109 python-pytest-mock
37110 python-pytest-sugar
37111 python-setuptools
37112 python-setuptools-scm))
37113 (propagated-inputs
37114 (list python-attrs
37115 python-orjson
37116 python-pygtrie))
37117 (synopsis "SQL-based prefix tree for Python")
37118 (description
37119 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
37120python-diskcache.")
37121 (license license:asl2.0)))
37122
37123(define-public python-socksipy-branch
37124 (package
37125 (name "python-socksipy-branch")
37126 (version "1.01")
37127 (source
37128 (origin
37129 (method url-fetch)
37130 (uri (pypi-uri "SocksiPy-branch" version))
37131 (sha256
37132 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
37133 (build-system pyproject-build-system)
37134 (arguments (list #:tests? #f)) ; There are no tests
37135 (native-inputs (list python-setuptools))
37136 (home-page "https://code.google.com/archive/p/socksipy-branch/")
37137 (synopsis "Python SOCKS module")
37138 (description
37139 "SocksiPy - A Python SOCKS client module. It provides a socket-like
37140interface that supports connections to any TCP service through the use of a
37141SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
37142this is a branch created by Mario Vilas to address some open issues,as the
37143original project seems to have been abandoned circa 2007.")
37144 (license license:bsd-3)))
37145
37146(define-public python-socksipychain
37147 (package
37148 (name "python-socksipychain")
37149 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
37150 (revision . "0")))
37151 (version (git-version "2.1.3"
37152 (assoc-ref properties 'revision)
37153 (assoc-ref properties 'commit)))
37154 (source
37155 (origin
37156 (method git-fetch)
37157 (uri (git-reference
37158 (url "https://github.com/pagekite/PySocksipyChain")
37159 (commit (assoc-ref properties 'commit))))
37160 (file-name (git-file-name name version))
37161 (sha256
37162 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
37163 (build-system pyproject-build-system)
37164 (arguments (list #:tests? #f)) ; Tests try to access the network.
37165 (native-inputs (list python-setuptools))
37166 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
37167 (synopsis "Python SOCKS module with chained proxies support")
37168 (description
37169 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
37170adds support for arbitrary chaining of proxy servers and various modes of
37171TLS/SSL encryption. It was developed for use in PageKite, and also includes
37172a simple netcat replacement with chaining support.")
37173 (license license:bsd-3)))
37174
37175(define-public python-sortedcollections
37176 (package
37177 (name "python-sortedcollections")
37178 (version "2.1.0")
37179 (source
37180 (origin
37181 (method git-fetch)
37182 (uri (git-reference
37183 (url "https://github.com/grantjenks/python-sortedcollections")
37184 (commit (string-append "v" version))))
37185 (file-name (git-file-name name version))
37186 (sha256
37187 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
37188 (build-system pyproject-build-system)
37189 (native-inputs (list python-setuptools python-pytest python-wheel))
37190 (propagated-inputs (list python-sortedcontainers))
37191 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
37192 (synopsis "Python Sorted Collections")
37193 (description "Sorted Collections is a Python sorted collections library.")
37194 (license license:asl2.0)))
37195
37196(define-public python-sortedcontainers
37197 (package
37198 (name "python-sortedcontainers")
37199 (version "2.4.0")
37200 (source
37201 (origin
37202 (method git-fetch) ;no tests in PyPI archive
37203 (uri (git-reference
37204 (url "https://github.com/grantjenks/python-sortedcontainers")
37205 (commit (string-append "v" version))))
37206 (file-name (git-file-name name version))
37207 (sha256
37208 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
37209 (build-system pyproject-build-system)
37210 (arguments
37211 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
37212 (native-inputs
37213 (list python-pytest-bootstrap python-setuptools))
37214 (home-page "https://grantjenks.com/docs/sortedcontainers/")
37215 (synopsis "Sorted List, Sorted Dict, Sorted Set")
37216 (description
37217 "This package provides a sorted collections library, written in
37218pure-Python.")
37219 (license license:asl2.0)))
37220
37221(define-public python-soupsieve
37222 (package
37223 (name "python-soupsieve")
37224 (version "2.7")
37225 (source
37226 (origin
37227 (method url-fetch)
37228 (uri (pypi-uri "soupsieve" version))
37229 (sha256
37230 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
37231 (build-system pyproject-build-system)
37232 (native-inputs
37233 (list python-beautifulsoup4-bootstrap
37234 python-hatchling
37235 python-pytest))
37236 (home-page "https://github.com/facelessuser/soupsieve")
37237 (synopsis "CSS selector library")
37238 (description
37239 "Soup Sieve is a CSS selector library designed to be used with Beautiful
37240Soup 4. It aims to provide selecting, matching, and filtering using modern
37241CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
37242specifications up through the latest CSS level 4 drafts and beyond (though
37243some are not yet implemented).")
37244 (license license:expat)))
37245
37246(define-public python-spectra
37247 (package
37248 (name "python-spectra")
37249 (version "0.1.0")
37250 (source
37251 (origin
37252 (method url-fetch)
37253 (uri (pypi-uri "spectra" version))
37254 (sha256
37255 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
37256 (build-system pyproject-build-system)
37257 (propagated-inputs
37258 (list python-colormath2))
37259 (native-inputs
37260 (list python-pytest python-setuptools python-wheel))
37261 (home-page "https://github.com/jsvine/spectra")
37262 (synopsis "Color scales and color conversion")
37263 (description
37264 "This package provides a Python library intended to make color math,
37265color scales, and color space conversion easy. It has support for:
37266
37267@enumerate
37268@item Color scales
37269@item Color ranges
37270@item Color blending
37271@item Brightening/darkening colors
37272@item Saturating/desaturating colors
37273@item Conversion to/from multiple color spaces.
37274@end enumerate\n")
37275 (license license:expat)))
37276
37277(define-public python-speedy-antlr-tool
37278 (package
37279 (name "python-speedy-antlr-tool")
37280 (version "1.4.3")
37281 (source
37282 (origin
37283 (method git-fetch)
37284 (uri (git-reference
37285 (url "https://github.com/amykyta3/speedy-antlr-tool")
37286 (commit (string-append "v" version))))
37287 (file-name (git-file-name name version))
37288 (sha256
37289 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
37290 (build-system pyproject-build-system)
37291 (arguments '(#:tests? #f)) ;no test
37292 (native-inputs (list python-setuptools python-setuptools-scm))
37293 (propagated-inputs (list python-antlr4-runtime python-jinja2))
37294 (home-page "https://speedy-antlr-tool.readthedocs.io")
37295 (synopsis "Generate ANTLR parser as Python extension module")
37296 (description
37297 "This tool generates a Python extension that runs your parser
37298using ANTLR's C++ target, and then translates the parsed tree
37299back into Python.")
37300 (license license:bsd-3)))
37301
37302(define-public python-speg
37303 (package
37304 (name "python-speg")
37305 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
37306 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
37307 (revision . "0")))
37308 (version (git-version "0.3"
37309 (assoc-ref properties 'revision)
37310 (assoc-ref properties 'commit)))
37311 (source
37312 (origin
37313 (method git-fetch)
37314 (uri (git-reference
37315 (url "https://github.com/avakar/speg")
37316 (commit (assoc-ref properties 'commit))))
37317 (file-name (git-file-name name version))
37318 (sha256
37319 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
37320 (build-system pyproject-build-system)
37321 (native-inputs
37322 (list python-pytest
37323 python-setuptools))
37324 (propagated-inputs
37325 (list python-six))
37326 (home-page "https://github.com/avakar/speg")
37327 (synopsis "PEG-based parser interpreter with memoization")
37328 (description "This package is a PEG-based parser and interpreter with
37329memoization.")
37330 (license license:expat)))
37331
37332(define-public python-spinners
37333 (package
37334 (name "python-spinners")
37335 (version "0.0.24")
37336 (source
37337 (origin
37338 (method url-fetch)
37339 (uri (pypi-uri "spinners" version))
37340 (sha256
37341 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
37342 (build-system pyproject-build-system)
37343 (arguments
37344 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
37345 (native-inputs
37346 (list python-setuptools))
37347 (home-page "https://github.com/manrajgrover/py-spinners")
37348 (synopsis "Python library with graphical spinners for the terminal")
37349 (description
37350 "Spinners is a Python library that contains graphical spinners that can
37351be displayed terminal.")
37352 (license license:expat)))
37353
37354(define-public python-sre-yield
37355 (package
37356 (name "python-sre-yield")
37357 (version "1.2")
37358 (source
37359 (origin
37360 (method url-fetch)
37361 (uri (pypi-uri "sre_yield" version))
37362 (sha256
37363 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
37364 (build-system pyproject-build-system)
37365 (arguments
37366 (list #:test-backend #~'unittest))
37367 (native-inputs
37368 (list python-setuptools))
37369 (home-page "https://github.com/google/sre_yield")
37370 (synopsis "Expands a regular expression to its possible matches")
37371 (description
37372 "The goal of sre_yield is to efficiently generate all values that can
37373match a given regular expression, or count possible matches efficiently. It
37374uses the parsed regular expression, so you get a much more accurate result
37375than trying to just split strings.")
37376 (license license:asl2.0)))
37377
37378(define-public python-srsly
37379 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
37380 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
37381 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
37382 (package
37383 (name "python-srsly")
37384 (version "2.5.3")
37385 (source
37386 (origin
37387 (method git-fetch)
37388 (uri (git-reference
37389 (url "https://github.com/explosion/srsly")
37390 (commit (string-append "release-v" version))))
37391 (file-name (git-file-name name version))
37392 (sha256
37393 (base32 "1fjd6j540k5i2yrib41k99j05qpa281470birqgcn82dxg9v16vm"))))
37394 (build-system pyproject-build-system)
37395 (arguments
37396 (list
37397 ;; tests: 741 passed, 4 skipped, 22 xfailed
37398 #:test-flags
37399 #~(list "--pyargs" "srsly")
37400 #:phases
37401 #~(modify-phases %standard-phases
37402 (add-after 'unpack 'remove-broken-tests
37403 (lambda _
37404 ;; Tests depend on removed in 2.5.3 module
37405 ;; "srsly/cloudpickle/compat.py".
37406 ;; See: <https://github.com/explosion/srsly/issues/121>.
37407 (delete-file "srsly/tests/cloudpickle/cloudpickle_file_test.py")
37408 (delete-file "srsly/tests/cloudpickle/cloudpickle_test.py")))
37409 (add-before 'check 'remove-local-source
37410 (lambda _
37411 (delete-file-recursively "srsly"))))))
37412 (native-inputs
37413 (list python-cython
37414 python-mock
37415 python-numpy
37416 python-psutil
37417 python-pytest
37418 python-pytest-timeout
37419 python-setuptools))
37420 (propagated-inputs
37421 (list python-catalogue))
37422 (home-page "https://github.com/explosion/srsly")
37423 (synopsis "Serialization utilities for Python")
37424 (description "This package bundles some of the best Python serialization
37425libraries into one standalone package, with a high-level API that makes it
37426easy to write code that's correct across platforms and Pythons.")
37427 (license license:expat)))
37428
37429(define-public python-srt
37430 (package
37431 (name "python-srt")
37432 (version "3.5.3")
37433 (source
37434 (origin
37435 (method url-fetch)
37436 (uri (pypi-uri "srt" version))
37437 (sha256
37438 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
37439 (build-system pyproject-build-system)
37440 (native-inputs
37441 (list python-pytest
37442 python-setuptools
37443 python-wheel))
37444 (home-page "https://github.com/cdown/srt")
37445 (synopsis "SRT parsing library")
37446 (description
37447 "This package provides a Python library for parsing, modifying, and
37448composing subtitles in the SRT file format.")
37449 (license license:expat)))
37450
37451(define-public python-sshpubkeys
37452 (package
37453 (name "python-sshpubkeys")
37454 (version "3.2.0")
37455 (source
37456 (origin
37457 (method git-fetch)
37458 (uri (git-reference
37459 (url "https://github.com/ojarva/python-sshpubkeys")
37460 (commit (string-append "v" version))))
37461 (file-name (git-file-name name version))
37462 (sha256
37463 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
37464 (build-system pyproject-build-system)
37465 (arguments
37466 (list #:tests? #f)) ; XXX: All tests fail
37467 (native-inputs
37468 (list python-setuptools
37469 python-wheel))
37470 (propagated-inputs
37471 (list python-cryptography
37472 python-ecdsa))
37473 (home-page "https://github.com/ojarva/python-sshpubkeys")
37474 (synopsis "OpenSSH public key parser")
37475 (description
37476 "This package provides a library for parsing and validating OpenSSH
37477public key files.")
37478 (license license:bsd-3)))
37479
37480(define-public python-sshtunnel
37481 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
37482 (revision "0"))
37483 (package
37484 (name "python-sshtunnel")
37485 (version (git-version "0.4.0" revision commit))
37486 (source
37487 (origin
37488 (method git-fetch)
37489 (uri (git-reference
37490 (url "https://github.com/pahaz/sshtunnel")
37491 (commit commit)))
37492 (file-name (git-file-name name version))
37493 (sha256
37494 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
37495 (patches (search-patches "python-sshtunnel-pep518.patch"))))
37496 (build-system pyproject-build-system)
37497 (arguments
37498 (list
37499 #:phases
37500 #~(modify-phases %standard-phases
37501 (add-after 'unpack 'remove-deprecated-dsskey
37502 (lambda _
37503 (substitute* "sshtunnel.py"
37504 (("'dsa': paramiko\\.DSSKey,")
37505 "")
37506 (("paramiko\\.DSSKey, ")
37507 "")))))))
37508 (propagated-inputs (list python-paramiko))
37509 (native-inputs
37510 (list openssh python-mock python-pytest python-setuptools))
37511 (home-page "https://github.com/pahaz/sshtunnel")
37512 (synopsis "Python SSH tunnels library")
37513 (description
37514 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
37515in the background, using Python.")
37516 (license license:expat))))
37517
37518(define-public python-stack-data
37519 (package
37520 (name "python-stack-data")
37521 (version "0.6.3")
37522 (source
37523 (origin
37524 (method url-fetch)
37525 (uri (pypi-uri "stack_data" version))
37526 (sha256
37527 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
37528 (build-system pyproject-build-system)
37529 (arguments
37530 (list
37531 #:test-flags
37532 #~(list "-k" (string-join
37533 ;; XXX: Tests fail with HTML diff.
37534 (list "not test_executing_style_defs"
37535 "test_pygments_example"
37536 "test_example")
37537 " and not "))
37538 #:phases
37539 #~(modify-phases %standard-phases
37540 (add-after 'unpack 'set-home-env
37541 (lambda _
37542 (setenv "HOME" "/tmp"))))))
37543 (native-inputs
37544 (list python-cython
37545 python-littleutils
37546 python-pygments
37547 python-pytest
37548 python-setuptools
37549 python-setuptools-scm
37550 python-typeguard
37551 python-wheel))
37552 (propagated-inputs
37553 (list python-asttokens
37554 python-executing
37555 python-pure-eval))
37556 (home-page "https://github.com/alexmojaki/stack_data")
37557 (synopsis "Python stack frame and traceback manipulation library")
37558 (description
37559 "The @code{stack_data} Python library extracts data from stack frames and
37560tracebacks. Is can be used to display more useful tracebacks
37561than the default.")
37562 (license license:expat)))
37563
37564;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
37565;; from the standard library, <https://peps.python.org/pep-0594/>.
37566(define %python-standard-pep-594-version "3.13.0")
37567(define %python-standard-pep-594-source
37568 (origin
37569 (method git-fetch)
37570 (uri (git-reference
37571 (url "https://github.com/youknowone/python-deadlib")
37572 (commit (string-append "v" %python-standard-pep-594-version))))
37573 (file-name (git-file-name "python-standard-pep-594"
37574 %python-standard-pep-594-version))
37575 (sha256
37576 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
37577
37578(define-public python-standard-asynchat
37579 (package
37580 (name "python-standard-asynchat")
37581 (version %python-standard-pep-594-version)
37582 (source %python-standard-pep-594-source)
37583 (build-system pyproject-build-system)
37584 (arguments
37585 (list
37586 #:phases
37587 #~(modify-phases %standard-phases
37588 (add-after 'unpack 'chdir
37589 (lambda _
37590 (chdir "asynchat"))))))
37591 (native-inputs
37592 (list python-setuptools))
37593 (propagated-inputs
37594 (list python-standard-asyncore))
37595 (home-page "https://github.com/youknowone/python-deadlib")
37596 (synopsis "Backport of asynchat from Python 3.11")
37597 (description
37598 "Standard library @code{asynchat} redistribution. Deprecated since
37599version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37600@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37601standard library}.")
37602 (license license:psfl)))
37603
37604(define-public python-standard-asyncore
37605 (package
37606 (name "python-standard-asyncore")
37607 (version %python-standard-pep-594-version)
37608 (source %python-standard-pep-594-source)
37609 (build-system pyproject-build-system)
37610 (arguments
37611 (list
37612 #:phases
37613 #~(modify-phases %standard-phases
37614 (add-after 'unpack 'chdir
37615 (lambda _
37616 (chdir "asyncore"))))))
37617 (native-inputs
37618 (list python-setuptools))
37619 (home-page "https://github.com/youknowone/python-deadlib")
37620 (synopsis "Backport of asyncore from Python 3.11")
37621 (description
37622 "Standard library @code{asyncore} redistribution. Deprecated since
37623version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37624@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37625standard library}.")
37626 (license license:psfl)))
37627
37628(define-public python-standard-smtpd
37629 (package
37630 (name "python-standard-smtpd")
37631 (version %python-standard-pep-594-version)
37632 (source %python-standard-pep-594-source)
37633 (build-system pyproject-build-system)
37634 (arguments
37635 (list
37636 ;; ImportError: cannot import name 'mock_socket' from 'test'
37637 #:tests? #f
37638 #:phases
37639 #~(modify-phases %standard-phases
37640 (add-after 'unpack 'chdir
37641 (lambda _
37642 (chdir "smtpd"))))))
37643 (native-inputs
37644 (list python-setuptools))
37645 (propagated-inputs
37646 (list
37647 python-standard-asynchat
37648 python-standard-asyncore))
37649 (home-page "https://github.com/youknowone/python-deadlib")
37650 (synopsis "Backport of smtpd from Python 3.11")
37651 (description
37652 "Standard library @code{smtpd} redistribution. Deprecated since version
376533.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
37654replacement for this module, based on @code{asyncio}. See:
37655@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37656standard library}.")
37657 (license license:psfl)))
37658
37659(define-public python-stdio-mgr
37660 (package
37661 (name "python-stdio-mgr")
37662 (version "1.0.1")
37663 (source
37664 (origin
37665 (method git-fetch)
37666 (uri (git-reference
37667 (url "https://github.com/bskinn/stdio-mgr")
37668 (commit (string-append "v" version))))
37669 (file-name (git-file-name name version))
37670 (sha256
37671 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
37672 (build-system pyproject-build-system)
37673 (arguments
37674 (list
37675 ;; Do not run doctests requiring sphinx.
37676 #:test-flags #~(list "--ignore=README.rst")))
37677 (native-inputs
37678 (list python-pytest
37679 python-setuptools
37680 python-wheel))
37681 (propagated-inputs
37682 (list python-attrs))
37683 (home-page "https://github.com/bskinn/stdio-mgr")
37684 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
37685 (description
37686 "This package contains a context manager for mocking/wrapping
37687stdin/stdout/stderr.")
37688 (license license:expat)))
37689
37690;; TODO: This package is not necessary in Guix. It should be replaced by a
37691;; trivial python package providing the same functionality.
37692(define-public python-stdlib-list
37693 (package
37694 (name "python-stdlib-list")
37695 (version "0.11.1")
37696 (source
37697 (origin
37698 (method git-fetch)
37699 (uri (git-reference
37700 (url "https://github.com/jackmaney/python-stdlib-list")
37701 (commit (string-append "v" version))))
37702 (file-name (git-file-name name version))
37703 (sha256
37704 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
37705 (build-system pyproject-build-system)
37706 (native-inputs
37707 (list python-flit-core
37708 python-pytest
37709 python-sphinx))
37710 (home-page "https://github.com/jackmaney/python-stdlib-list")
37711 (synopsis "Python Standard Libraries")
37712 (description
37713 "This package contains a list of Python Standard Libraries.")
37714 (license license:expat)))
37715
37716(define-public python-stem
37717 ;; python-stem is mostly unmaintained, but still has occasional commits
37718 ;; added.
37719 (package
37720 (name "python-stem")
37721 (version "1.8.3")
37722 (source
37723 (origin
37724 (method git-fetch)
37725 (uri (git-reference
37726 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
37727 (commit version)))
37728 (file-name (git-file-name name version))
37729 (sha256
37730 (base32
37731 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
37732 (build-system pyproject-build-system)
37733 (arguments
37734 (list
37735 #:test-backend #~'custom
37736 #:test-flags #~(list "run_tests.py" "--unit")
37737 #:phases
37738 #~(modify-phases %standard-phases
37739 (add-after 'unpack 'fix-python-312
37740 (lambda _
37741 (substitute* (find-files "." "\\.py$")
37742 (("assertRaisesRegexp") "assertRaisesRegex")))))))
37743 (native-inputs
37744 (list python-setuptools
37745 python-wheel))
37746 (home-page "https://stem.torproject.org/")
37747 (synopsis
37748 "Python controller library that allows applications to interact with Tor")
37749 (description
37750 "Stem is a Python controller library for Tor. With it you can use Tor's
37751 control protocol to script against the Tor process and read descriptor data
37752 relays publish about themselves.")
37753 (license license:lgpl3)))
37754
37755(define-public python-stltools
37756 (package
37757 (name "python-stltools")
37758 (version "2022.01.20")
37759 (source
37760 (origin
37761 (method git-fetch)
37762 (uri (git-reference
37763 (url "https://github.com/rsmith-nl/stltools")
37764 (commit version)))
37765 (file-name (git-file-name name version))
37766 (sha256
37767 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
37768 (build-system pyproject-build-system)
37769 (arguments
37770 (list
37771 #:phases
37772 #~(modify-phases %standard-phases
37773 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
37774 (delete 'build)
37775 (replace 'install
37776 (lambda* (#:key inputs outputs #:allow-other-keys)
37777 (let ((moddir (string-append (site-packages inputs outputs)
37778 "/stltools"))
37779 (bindir (string-append #$output "/bin")))
37780 (copy-recursively "stltools" moddir)
37781 (mkdir-p bindir)
37782 (for-each
37783 (lambda (script)
37784 (let ((source (string-append script ".py"))
37785 (target (string-append bindir "/" script)))
37786 (copy-file source target)
37787 (chmod target #o555)))
37788 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
37789 (native-inputs
37790 (list python-pytest
37791 python-setuptools))
37792 (propagated-inputs
37793 (list python-pycairo))
37794 (home-page "https://github.com/rsmith-nl/stltools")
37795 (synopsis "Python modules and scripts for handling STL files")
37796 (description
37797 "This package consists of Python modules and scripts for manipulating
37798stereolithography (STL) files. It can convert STL files into POV-ray meshes,
37799PDF and PostScript. The Python modules allow for reading and writing STL
37800files. It supports both the text and binary forms of STL.")
37801 (license license:expat)))
37802
37803(define-public python-stone
37804 (package
37805 (name "python-stone")
37806 (version "3.3.9")
37807 (source
37808 (origin
37809 (method git-fetch)
37810 (uri (git-reference
37811 (url "https://github.com/dropbox/stone")
37812 (commit (string-append "v" version))))
37813 (file-name (git-file-name name version))
37814 (sha256
37815 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
37816 (build-system pyproject-build-system)
37817 (native-inputs
37818 (list python-pytest
37819 python-setuptools))
37820 (propagated-inputs
37821 (list python-jinja2
37822 python-packaging
37823 python-ply
37824 python-six)) ;hard requirement, still
37825 (home-page "https://github.com/dropbox/stone")
37826 (synopsis "Official Api Spec Language for Dropbox")
37827 (description
37828 "Stone is an interface description language (IDL) for APIs.")
37829 (license license:expat)))
37830
37831(define-public python-stopit
37832 (package
37833 (name "python-stopit")
37834 (version "1.1.2")
37835 (source
37836 (origin
37837 (method git-fetch)
37838 (uri (git-reference
37839 (url "https://github.com/glenfant/stopit")
37840 (commit version)))
37841 (file-name (git-file-name name version))
37842 (sha256
37843 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
37844 (build-system pyproject-build-system)
37845 (arguments
37846 (list #:test-backend #~'custom
37847 #:test-flags #~(list "tests.py")))
37848 (native-inputs (list python-setuptools))
37849 (home-page "https://pypi.python.org/pypi/stopit")
37850 (synopsis "Timeout control decorator and context managers")
37851 (description
37852 "Raise asynchronous exceptions in other threads, control the timeout of
37853blocks or callables with two context managers and two decorators.")
37854 (license license:expat)))
37855
37856(define-public python-straight-plugin
37857 (package
37858 (name "python-straight-plugin")
37859 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
37860 (revision . "0")))
37861 (version (git-version "1.4.1"
37862 (assoc-ref properties 'revision)
37863 (assoc-ref properties 'commit)))
37864 (source
37865 (origin
37866 (method git-fetch)
37867 (uri (git-reference
37868 (url "https://github.com/ironfroggy/straight.plugin")
37869 (commit (assoc-ref properties 'commit))))
37870 (file-name (git-file-name name version))
37871 (sha256
37872 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
37873 (build-system pyproject-build-system)
37874 (arguments
37875 (list
37876 ;; XXX: Some tests started failing with the move to [email protected].
37877 ;; Consider removing this leaf unmaintained package.
37878 #:tests? #f
37879 #:test-backend #~'custom
37880 #:test-flags #~(list "tests.py")
37881 #:phases
37882 #~(modify-phases %standard-phases
37883 (add-after 'unpack 'fix-python-3.12-incompatibility
37884 (lambda _
37885 (substitute* "straight/plugin/loaders.py"
37886 (("from imp import find_module")
37887 "")))))))
37888 (native-inputs (list python-mock python-setuptools))
37889 (home-page "https://github.com/ironfroggy/straight.plugin")
37890 (synopsis "Simple namespaced plugin facility")
37891 (description
37892 "Straight Plugin provides a type of plugin you can create from almost any
37893existing Python modules, and an easy way for outside developers to add
37894functionality and customization to your projects with their own plugins.")
37895 (license license:expat)))
37896
37897(define-public python-streamtracer
37898 (package
37899 (name "python-streamtracer")
37900 (version "2.4.0")
37901 (source
37902 (origin
37903 (method url-fetch)
37904 (uri (pypi-uri "streamtracer" version))
37905 (sha256
37906 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
37907 (build-system pyproject-build-system)
37908 (arguments
37909 (list
37910 #:imported-modules `(,@%cargo-build-system-modules
37911 ,@%pyproject-build-system-modules)
37912 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
37913 (guix build pyproject-build-system)
37914 (guix build utils))
37915 #:test-flags
37916 #~(list "--pyargs" "streamtracer")
37917 #:phases
37918 #~(modify-phases %standard-phases
37919 (add-after 'unpack 'prepare-cargo-build-system
37920 (lambda args
37921 (for-each (lambda (phase)
37922 (format #t "Running cargo phase: ~a~%" phase)
37923 (apply (assoc-ref cargo:%standard-phases phase)
37924 #:cargo-target #$(cargo-triplet)
37925 args))
37926 '(unpack-rust-crates
37927 configure
37928 check-for-pregenerated-files
37929 patch-cargo-checksums)))))))
37930 (native-inputs
37931 (append
37932 (list maturin
37933 python-pytest
37934 python-pytest-doctestplus
37935 rust
37936 `(,rust "cargo"))
37937 (or (and=> (%current-target-system)
37938 (compose list make-rust-sysroot))
37939 '())))
37940 (propagated-inputs
37941 (list python-numpy
37942 python-packaging))
37943 (inputs (cargo-inputs 'python-streamtracer))
37944 (home-page "https://github.com/sunpy/streamtracer")
37945 (synopsis "Rapid streamline tracing in Python")
37946 (description
37947 "streamtracer is a Python package for rapid streamline tracing on
37948regularly spaced grids. The actual streamline tracing is done at a low level
37949in Rust, with a nice Python API provided on top.")
37950 (license license:gpl3+)))
37951
37952(define-public python-strenum
37953 (package
37954 (name "python-strenum")
37955 (version "0.4.15")
37956 (source
37957 (origin
37958 (method git-fetch)
37959 (uri (git-reference
37960 (url "https://github.com/irgeek/StrEnum")
37961 (commit (string-append "v" version))))
37962 (file-name (git-file-name name version))
37963 (sha256
37964 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
37965 (snippet #~(delete-file "versioneer.py"))))
37966 (build-system pyproject-build-system)
37967 (arguments
37968 (list #:test-flags #~(list "tests")))
37969 (native-inputs
37970 (list python-pytest
37971 python-pytest-pylint
37972 python-setuptools
37973 python-versioneer))
37974 (home-page "https://github.com/irgeek/StrEnum")
37975 (synopsis "Enum that inherits from str")
37976 (description "StrEnum is a Python @code{enum.Enum} that inherits from
37977@code{str} to complement @code{enum.IntEnum} in the standard library.")
37978 (license license:expat)))
37979
37980(define-public python-structlog
37981 (package
37982 (name "python-structlog")
37983 (version "25.5.0")
37984 (source
37985 (origin
37986 (method url-fetch)
37987 (uri (pypi-uri "structlog" version))
37988 (sha256
37989 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
37990 (build-system pyproject-build-system)
37991 (native-inputs
37992 (list python-hatch-fancy-pypi-readme
37993 python-hatch-vcs
37994 python-hatchling
37995 python-pytest
37996 python-pytest-asyncio
37997 python-time-machine))
37998 (home-page "https://www.structlog.org/")
37999 (synopsis "Structured Logging for Python")
38000 (description "@code{structlog} changes logging in Python by adding structure
38001to your log entries.")
38002 (license (list license:asl2.0 license:expat))))
38003
38004(define-public python-style
38005 (package
38006 (name "python-style")
38007 (version "1.1.6")
38008 (source
38009 (origin
38010 (method url-fetch)
38011 (uri (pypi-uri "style" version))
38012 (sha256
38013 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
38014 (build-system pyproject-build-system)
38015 (arguments
38016 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
38017 (native-inputs
38018 (list python-setuptools))
38019 (home-page "https://github.com/lmittmann/style")
38020 (synopsis "Terminal string styling")
38021 (description
38022"@code{python-style} is a simple terminal string styling package. Its API is
38023a port of the chalk package for javascript.")
38024 (license license:expat)))
38025
38026(define-public python-svgelements
38027 (package
38028 (name "python-svgelements")
38029 (version "1.9.6")
38030 (source
38031 (origin
38032 (method git-fetch)
38033 (uri (git-reference
38034 (url "https://github.com/meerk40t/svgelements")
38035 (commit version)))
38036 (file-name (git-file-name name version))
38037 (sha256
38038 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
38039 (build-system pyproject-build-system)
38040 (arguments
38041 (list
38042 #:phases
38043 #~(modify-phases %standard-phases
38044 (add-after 'unpack 'fix-python-incompatibilities
38045 (lambda _
38046 (substitute* (find-files "test" "\\.py$")
38047 (("(assert(|NotAlmost)Equal)s" all out in)
38048 out)))))))
38049 (native-inputs
38050 (list python-anyio
38051 python-pytest
38052 python-numpy
38053 python-pillow
38054 python-scipy
38055 python-setuptools))
38056 (home-page "https://github.com/meerk40t/svgelements")
38057 (synopsis "SVG parsing for elements, paths, and other SVG objects")
38058 (description
38059 "This module does high fidelity SVG parsing and geometric rendering.
38060The goal is to successfully and correctly process SVG for use with any scripts
38061that may need or want to use SVG files as geometric data.")
38062 (license license:expat)))
38063
38064(define-public python-svgutils
38065 (package
38066 (name "python-svgutils")
38067 (version "0.3.4")
38068 (source
38069 (origin
38070 (method url-fetch)
38071 (uri (pypi-uri "svgutils" version))
38072 (sha256
38073 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
38074 (build-system pyproject-build-system)
38075 (arguments
38076 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
38077 (native-inputs
38078 (list python-setuptools))
38079 (propagated-inputs
38080 (list python-lxml))
38081 (home-page "https://svgutils.readthedocs.io")
38082 (synopsis "Python SVG editor")
38083 (description "This is an utility package that helps with editing and
38084concatenating SVG files. It is especially directed at scientists preparing
38085final figures for submission to journals. So far it supports arbitrary
38086placement and scaling of SVG figures and adding markers, such as labels.")
38087 (license license:expat)))
38088
38089(define-public python-swagger-spec-validator
38090 (package
38091 (name "python-swagger-spec-validator")
38092 (version "3.0.4")
38093 (source
38094 (origin
38095 (method git-fetch)
38096 (uri (git-reference
38097 (url "https://github.com/Yelp/swagger_spec_validator")
38098 (commit (string-append "v" version))))
38099 (file-name (git-file-name name version))
38100 (sha256
38101 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
38102 (build-system pyproject-build-system)
38103 (native-inputs
38104 (list python-pytest
38105 python-setuptools))
38106 (propagated-inputs
38107 (list python-importlib-resources
38108 python-jsonschema
38109 python-pyyaml
38110 python-typing-extensions))
38111 (home-page "https://github.com/Yelp/swagger_spec_validator")
38112 (synopsis "Validation of Swagger specifications")
38113 (description
38114 "@code{swagger_spec_validator} provides a library for validating Swagger
38115API specifications.")
38116 (license license:asl2.0)))
38117
38118(define-public python-syllables
38119 (package
38120 (name "python-syllables")
38121 (version "1.0.3")
38122 (source
38123 (origin
38124 (method git-fetch)
38125 (uri (git-reference
38126 (url "https://github.com/prosegrinder/python-syllables")
38127 (commit (string-append "v" version))))
38128 (file-name (git-file-name name version))
38129 (sha256
38130 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
38131 (build-system pyproject-build-system)
38132 (native-inputs
38133 (list python-cmudict
38134 python-pytest
38135 python-setuptools))
38136 (home-page "https://github.com/prosegrinder/python-syllables")
38137 (synopsis "Package for estimating the number of syllables in a word")
38138 (description
38139 "This package provides a Python package for estimating the number of
38140syllables in a word.")
38141 (license license:gpl3)))
38142
38143(define-public python-sympy
38144 (package
38145 (name "python-sympy")
38146 (version "1.13.3")
38147 (source
38148 (origin
38149 (method url-fetch)
38150 (uri (pypi-uri "sympy" version))
38151 (sha256
38152 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
38153 (build-system pyproject-build-system)
38154 (arguments
38155 '(#:phases
38156 (modify-phases %standard-phases
38157 (replace 'check
38158 (lambda* (#:key tests? #:allow-other-keys)
38159 (if tests?
38160 (invoke "python3" "-c"
38161 "import sympy; sympy.test(\"/core\")")))))))
38162 (propagated-inputs (list python-mpmath))
38163 (native-inputs
38164 (list python-hypothesis
38165 python-pytest
38166 python-setuptools
38167 python-wheel))
38168 (home-page "https://www.sympy.org/")
38169 (synopsis "Python library for symbolic mathematics")
38170 (description
38171 "SymPy is a Python library for symbolic mathematics. It aims to become a
38172full-featured computer algebra system (CAS) while keeping the code as simple
38173as possible in order to be comprehensible and easily extensible.")
38174 (license license:bsd-3)))
38175
38176(define-public python-tables
38177 (package
38178 (name "python-tables")
38179 ;; XXX: Compatibility fix for numexpr 2.13.0, see:
38180 ;; <https://github.com/PyTables/PyTables/pull/1256>.
38181 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
38182 (revision . "0")))
38183 (version (git-version "3.10.2"
38184 (assoc-ref properties 'revision)
38185 (assoc-ref properties 'commit)))
38186 (source
38187 (origin
38188 (method git-fetch)
38189 (uri (git-reference
38190 (url "https://github.com/PyTables/PyTables")
38191 (commit (assoc-ref properties 'commit))))
38192 (file-name (git-file-name name version))
38193 (sha256
38194 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
38195 (snippet '(begin
38196 (use-modules (guix build utils))
38197 (delete-file-recursively "hdf5-blosc")
38198 (delete-file-recursively "c-blosc")))))
38199 (build-system pyproject-build-system)
38200 (arguments
38201 (list
38202 #:phases
38203 #~(modify-phases %standard-phases
38204 (add-after 'unpack 'disable-tuning
38205 (lambda _
38206 (substitute* "setup.py"
38207 (("cpu_flags = .*")
38208 "cpu_flags = ['sse2']\n"))))
38209 (add-after 'unpack 'fix-reference-to-blosc2
38210 (lambda* (#:key inputs #:allow-other-keys)
38211 (substitute* "tables/__init__.py"
38212 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
38213 m indent)
38214 (string-append indent
38215 "\""
38216 (search-input-file inputs "/lib/libblosc2.so")
38217 "\",\n" m)))))
38218 (add-before 'build 'pre-build
38219 (lambda _
38220 (substitute* "setup.py"
38221 (("hdf5-blosc/src")
38222 (format #f "~a/src"
38223 #$(package-source (this-package-input "hdf5-blosc")))))
38224 (invoke "make" "distclean") ;Regenerate C code with Cython
38225 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
38226 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
38227 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
38228 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
38229 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
38230 (add-before 'check 'pre-check
38231 (lambda _
38232 (setenv "HOME" "/tmp")))
38233 (replace 'check
38234 (lambda* (#:key tests? #:allow-other-keys)
38235 (when tests?
38236 (with-directory-excursion "/tmp"
38237 ;; Performing only a light (yet comprehensive) subset of the
38238 ;; test suite. If you want a more complete test, try
38239 ;; passing the --heavy flag to this script (or set the
38240 ;; 'heavy' parameter in case you are using tables.test()
38241 ;; call). The whole suite will take more than 4 hours to
38242 ;; complete on a relatively modern CPU and around 512 MB of
38243 ;; main memory.
38244 (invoke "python" "-m" "tables.tests.test_all"))))))))
38245 (native-inputs
38246 (list pkg-config
38247 python-cython
38248 python-pytest
38249 python-setuptools
38250 python-sphinx))
38251 (inputs
38252 (list bzip2
38253 c-blosc
38254 c-blosc2
38255 hdf5
38256 hdf5-blosc
38257 lzo))
38258 (propagated-inputs
38259 (list python-blosc2
38260 python-numexpr
38261 python-numpy
38262 python-packaging
38263 python-py-cpuinfo
38264 python-typing-extensions))
38265 (home-page "https://www.pytables.org/")
38266 (synopsis "Hierarchical datasets for Python")
38267 (description "PyTables is a package for managing hierarchical datasets and
38268designed to efficiently cope with extremely large amounts of data.")
38269 (license license:bsd-3)))
38270
38271(define-public python-tablib
38272 (package
38273 (name "python-tablib")
38274 (version "3.9.0")
38275 (source
38276 (origin
38277 (method url-fetch)
38278 (uri (pypi-uri "tablib" version))
38279 (sha256
38280 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
38281 (build-system pyproject-build-system)
38282 (native-inputs
38283 (list python-pytest python-setuptools python-setuptools-scm))
38284 (inputs ;; [cli]
38285 (list python-tabulate))
38286 (propagated-inputs
38287 (list python-markuppy
38288 python-odfpy
38289 python-openpyxl
38290 python-pyyaml
38291 python-xlrd
38292 python-xlwt))
38293 (home-page "https://tablib.readthedocs.io")
38294 (synopsis "Format agnostic tabular data library")
38295 (description
38296 "@code{tablib} is a format-agnostic tabular dataset library,
38297written in Python. Supported output formats are Excel (Sets + Books),
38298JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
38299TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
38300
38301@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
38302quite huge, this Guix package doesn't depend on pandas. In case, just also
38303install @code{python-pandas}.")
38304 (license license:expat)))
38305
38306(define-public python-tabulate
38307 (package
38308 (name "python-tabulate")
38309 (version "0.9.0")
38310 (source
38311 (origin
38312 (method url-fetch)
38313 (uri (pypi-uri "tabulate" version))
38314 (sha256
38315 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
38316 (build-system pyproject-build-system)
38317 (native-inputs
38318 (list python-pytest
38319 python-setuptools-scm
38320 python-setuptools))
38321 (propagated-inputs
38322 (list python-wcwidth))
38323 (home-page "https://github.com/astanin/python-tabulate")
38324 (synopsis "Pretty-print tabular data")
38325 (description
38326 "Tabulate is a library and command-line utility to pretty-print tabular
38327data in Python.")
38328 (license license:expat)))
38329
38330(define-public python-takethetime
38331 (package
38332 (name "python-takethetime")
38333 (version "0.3.1")
38334 (source
38335 (origin
38336 (method url-fetch)
38337 (uri (pypi-uri "TakeTheTime" version))
38338 (sha256
38339 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
38340 (build-system pyproject-build-system)
38341 (arguments
38342 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
38343 (native-inputs
38344 (list python-setuptools
38345 python-wheel))
38346 (home-page "https://github.com/ErikBjare/TakeTheTime")
38347 (synopsis "Timing chunks of code")
38348 (description
38349 "This package implements a functionality for time taking using context
38350managers.")
38351 (license license:expat)))
38352
38353(define-public python-targ
38354 (package
38355 (name "python-targ")
38356 (version "0.6.0")
38357 (source
38358 (origin
38359 (method git-fetch)
38360 (uri (git-reference
38361 (url "https://github.com/piccolo-orm/targ/")
38362 (commit version)))
38363 (file-name (git-file-name name version))
38364 (sha256
38365 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
38366 (build-system pyproject-build-system)
38367 (native-inputs
38368 (list python-pytest
38369 python-setuptools))
38370 (propagated-inputs
38371 (list python-colorama
38372 python-docstring-parser))
38373 (home-page "https://github.com/piccolo-orm/targ/")
38374 (synopsis "Python CLI builder using type hints and docstrings")
38375 (description
38376 "Targ is a package to build a Python @acronym{Command Line Interface,
38377CLI} for applications by using type hints and docstrings.")
38378 (license license:expat)))
38379
38380(define-public python-tasklib
38381 (package
38382 (name "python-tasklib")
38383 (version "2.5.1")
38384 (source
38385 (origin
38386 (method git-fetch)
38387 (uri (git-reference
38388 (url "https://github.com/GothenburgBitFactory/tasklib")
38389 (commit version)))
38390 (file-name (git-file-name name version))
38391 (sha256
38392 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
38393 (build-system pyproject-build-system)
38394 (arguments
38395 (list
38396 #:test-backend
38397 #~'unittest))
38398 (inputs (list taskwarrior))
38399 (native-inputs (list python-setuptools tzdata-for-tests))
38400 (home-page "https://github.com/GothenburgBitFactory/tasklib")
38401 (synopsis "Official Taskwarrior library for Python")
38402 (description "@code{tasklib} is a Python library for interacting with
38403Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
38404 (license license:bsd-3)))
38405
38406(define-public python-tasklogger
38407 (package
38408 (name "python-tasklogger")
38409 (version "1.2.0")
38410 (source
38411 (origin
38412 (method url-fetch)
38413 (uri (pypi-uri "tasklogger" version))
38414 (sha256
38415 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
38416 (build-system pyproject-build-system)
38417 (native-inputs
38418 (list python-pytest
38419 python-numpy
38420 python-setuptools))
38421 (propagated-inputs
38422 (list python-deprecated))
38423 (home-page "https://github.com/scottgigante/tasklogger")
38424 (synopsis "Extension to the core Python logging library")
38425 (description "This package provides an extension to the core Python
38426logging library for logging the beginning and completion of tasks and
38427subtasks.")
38428 (license license:gpl2)))
38429
38430(define-public python-tatsu
38431 (package
38432 (name "python-tatsu")
38433 (version "5.13.2")
38434 (source
38435 (origin
38436 (method git-fetch)
38437 (uri (git-reference
38438 (url "https://github.com/neogeny/TatSu")
38439 (commit (string-append "v" version))))
38440 (file-name (git-file-name name version))
38441 (sha256
38442 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
38443 (build-system pyproject-build-system)
38444 (native-inputs
38445 (list python-pytest
38446 python-setuptools))
38447 (home-page "https://tatsu.readthedocs.io/en/stable/")
38448 (synopsis "PEG/Packrat Parser generator for Python")
38449 (description
38450 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
38451Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
38452or Packrat parser in Python.")
38453 (license license:bsd-2)))
38454
38455(define-public python-tblib
38456 (package
38457 (name "python-tblib")
38458 (version "3.1.0")
38459 (source
38460 (origin
38461 (method url-fetch)
38462 (uri (pypi-uri "tblib" version))
38463 (sha256
38464 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
38465 (build-system pyproject-build-system)
38466 (arguments
38467 (list
38468 ;; Don't run benchmark tests.
38469 #:test-flags #~(list "--ignore=tests/test_perf.py")
38470 #:phases
38471 #~(modify-phases %standard-phases
38472 (add-after 'unpack 'fix-pytest-config
38473 (lambda _
38474 (substitute* "pytest.ini"
38475 (("--benchmark-disable") "")))))))
38476 (native-inputs
38477 (list python-pytest
38478 python-setuptools))
38479 (home-page "https://github.com/ionelmc/python-tblib")
38480 (synopsis "Traceback serialization library")
38481 (description
38482 "Traceback serialization allows you to:
38483
38484@enumerate
38485@item Pickle tracebacks and raise exceptions with pickled tracebacks in
38486different processes. This allows better error handling when running code over
38487multiple processes (imagine multiprocessing, billiard, futures, celery etc).
38488
38489@item Parse traceback strings and raise with the parsed tracebacks.
38490@end enumerate\n")
38491 (license license:bsd-3)))
38492
38493(define-public python-telethon
38494 (package
38495 (name "python-telethon")
38496 (version "1.42.0")
38497 (source
38498 (origin
38499 (method git-fetch)
38500 (uri (git-reference
38501 (url "https://codeberg.org/Lonami/Telethon")
38502 (commit (string-append "v" version))))
38503 (file-name (git-file-name name version))
38504 (sha256
38505 (base32 "16xp5cwfv1ly25zcnnn0jgrmzpsl3yqzf92dfbnpyiy64j8wkh9l"))))
38506 (build-system pyproject-build-system)
38507 (native-inputs
38508 (list python-pytest
38509 python-pytest-asyncio
38510 python-pytest-trio
38511 python-setuptools))
38512 (propagated-inputs
38513 (list python-rsa python-pyaes))
38514 (home-page "https://docs.telethon.dev")
38515 (synopsis "Full-featured Telegram client library for Python 3")
38516 (description "This library is designed to make it easy to write Python
38517programs that can interact with Telegram.")
38518 (license license:expat)))
38519
38520(define-public python-tempdir
38521 (package
38522 (name "python-tempdir")
38523 (version "0.7.1")
38524 (source
38525 (origin
38526 (method url-fetch)
38527 (uri (pypi-uri "tempdir" version))
38528 (sha256
38529 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
38530 (build-system pyproject-build-system)
38531 (arguments (list #:tests? #f)) ; No tests.
38532 (native-inputs (list python-setuptools))
38533 (home-page "https://pypi.org/project/tempdir/")
38534 (synopsis "Python library for managing temporary directories")
38535 (description
38536 "This library manages temporary directories that are automatically
38537deleted with all their contents when they are no longer needed. It is
38538particularly convenient for use in tests.")
38539 (license license:expat)))
38540
38541(define-public python-tempora
38542 (package
38543 (name "python-tempora")
38544 (version "5.8.1")
38545 (source
38546 (origin
38547 (method url-fetch)
38548 (uri (pypi-uri "tempora" version))
38549 (sha256
38550 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
38551 (build-system pyproject-build-system)
38552 (arguments
38553 (list
38554 ;; Do not test the myproject.toml build as it tries to pull dependencies
38555 ;; from the Internet.
38556 #:test-flags #~(list "-k" "not project"
38557 "tests")))
38558 (native-inputs
38559 (list python-freezegun
38560 python-pytest
38561 python-setuptools
38562 python-setuptools-scm
38563 python-tzdata))
38564 (propagated-inputs (list python-dateutil python-jaraco-functools))
38565 (home-page "https://github.com/jaraco/tempora")
38566 (synopsis "Python date and time objects and routines")
38567 (description
38568 "The @code{tempora} Python library contains miscellaneous date and time
38569related utilities and constants, routines for measuring, profiling, and
38570getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
38571well as an event scheduler.")
38572 (license license:expat)))
38573
38574(define-public python-tenacity
38575 (package
38576 (name "python-tenacity")
38577 (version "9.0.0")
38578 (source
38579 (origin
38580 (method url-fetch)
38581 (uri (pypi-uri "tenacity" version))
38582 (sha256
38583 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
38584 (build-system pyproject-build-system)
38585 (native-inputs
38586 (list python-pytest
38587 python-setuptools
38588 python-setuptools-scm
38589 python-tornado
38590 python-typeguard
38591 python-wheel))
38592 (home-page "https://github.com/jd/tenacity")
38593 (synopsis "Retrying library for python")
38594 (description
38595 "Tenacity is a general-purpose python library to simplify the task of
38596adding retry behavior to just about anything.")
38597 (license license:asl2.0)))
38598
38599(define-public python-term-background
38600 (package
38601 (name "python-term-background")
38602 (version "1.0.2")
38603 (source
38604 (origin
38605 (method url-fetch)
38606 (uri (pypi-uri "term_background" version))
38607 (sha256
38608 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
38609 (arguments
38610 (list
38611 #:phases
38612 '(modify-phases %standard-phases
38613 (add-after 'unpack 'fix-build
38614 (lambda _ (delete-file "setup.py"))))))
38615 (build-system pyproject-build-system)
38616 (native-inputs
38617 (list python-pytest
38618 python-setuptools
38619 python-setuptools-scm
38620 python-wrapper
38621 python-wheel))
38622 (home-page "http://github.com/rocky/shell-term-background")
38623 (synopsis "Determine if shell has a light or dark background")
38624 (description "This package determines if shell has a light or dark
38625background.")
38626 (license license:gpl2+)))
38627
38628(define-public python-term-image
38629 (package
38630 (name "python-term-image")
38631 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
38632 (revision . "0")))
38633 (version (git-version "0.7.2"
38634 (assoc-ref properties 'revision)
38635 (assoc-ref properties 'commit)))
38636 (source
38637 (origin
38638 (method git-fetch)
38639 (uri (git-reference
38640 (url "https://github.com/AnonymouX47/term-image")
38641 (commit (assoc-ref properties 'commit))))
38642 (file-name (git-file-name name version))
38643 (sha256
38644 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
38645 (build-system pyproject-build-system)
38646 (arguments
38647 (list
38648 #:test-flags
38649 #~(list "tests"
38650 ;; These tests require network access.
38651 "-k" (string-append "not test_from_url"
38652 " and not test_source"
38653 " and not test_close"))
38654 #:phases
38655 #~(modify-phases %standard-phases
38656 (add-after 'unpack 'bump-pillow-requirement
38657 (lambda _
38658 (substitute* "src/term_image/image/common.py"
38659 (("\\.getdata")
38660 ".get_flattened_data"))
38661 (let* ((major #$(version-major
38662 (package-version
38663 (this-package-input "python-pillow"))))
38664 (next (number->string (+ 1 (string->number major)))))
38665 (substitute* "pyproject.toml"
38666 (("pillow>=9.1,<12")
38667 (string-append "pillow>=9.1,<" next)))))))))
38668 (propagated-inputs (list python-pillow python-requests))
38669 (native-inputs
38670 (list python-pytest
38671 python-setuptools
38672 python-urwid))
38673 (home-page "https://github.com/AnonymouX47/term-image")
38674 (synopsis "Display images in the terminal")
38675 (description "term-image is a library and program to display images on
38676compatible terminals.
38677
38678Features:
38679@enumerate
38680@item Multiple image formats (basically all formats supported by
38681@code{PIL.Image.open()})
38682@item Multiple image source types: PIL image instance, local file, URL
38683@item Multiple image render styles (with automatic support detection)
38684@item Support for multiple terminal graphics protocols, including Kitty
38685@item Transparency support (with multiple options)
38686@item Animated image support (including transparent ones)
38687@item Integration into various TUI / terminal-based output libraries
38688@item Terminal size awareness
38689@item Automatic and manual image sizing
38690@item Horizontal and vertical alignment
38691@item Automatic and manual font ratio adjustment (to preserve image aspect
38692ratio)
38693@end enumerate")
38694 (license license:expat)))
38695
38696(define-public python-termcolor
38697 (package
38698 (name "python-termcolor")
38699 (version "2.5.0")
38700 (source
38701 (origin
38702 (method url-fetch)
38703 (uri (pypi-uri "termcolor" version))
38704 (sha256
38705 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
38706 (build-system pyproject-build-system)
38707 (arguments
38708 (list
38709 #:phases
38710 #~(modify-phases %standard-phases
38711 (add-after 'unpack 'relax-coverage-requirements
38712 (lambda _
38713 (substitute* "pyproject.toml"
38714 ((".*coverage.*") "")))))))
38715 (native-inputs
38716 (list python-hatch-vcs python-hatchling python-pytest))
38717 (home-page "https://pypi.org/project/termcolor/")
38718 (synopsis "ANSII Color formatting for terminal output")
38719 (description
38720 "This package provides ANSII Color formatting for output in terminals.")
38721 (license license:expat)))
38722
38723(define-public python-termcolor-1
38724 (package
38725 (inherit python-termcolor)
38726 (version "1.1.0")
38727 (source
38728 (origin
38729 (method url-fetch)
38730 (uri (pypi-uri "termcolor" version))
38731 (sha256
38732 (base32
38733 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
38734 ;; There are no tests
38735 (arguments (list #:tests? #false))
38736 (native-inputs
38737 (list python-setuptools
38738 python-wheel))))
38739
38740(define-public python-termcolor-next
38741 (package
38742 (inherit python-termcolor)
38743 (name "python-termcolor-next")
38744 (version "3.1.0")
38745 (source
38746 (origin
38747 (method url-fetch)
38748 (uri (pypi-uri "termcolor" version))
38749 (sha256
38750 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
38751 (arguments '())))
38752
38753(define-public python-terminaltables
38754 (package
38755 (name "python-terminaltables")
38756 (version "3.1.0")
38757 (source
38758 (origin
38759 (method git-fetch)
38760 (uri (git-reference
38761 (url "https://github.com/Robpol86/terminaltables")
38762 (commit (string-append "v" version))))
38763 (file-name (git-file-name name version))
38764 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
38765 (build-system pyproject-build-system)
38766 ;; XXX: A lot of test fail with flaky behavior.
38767 (arguments (list #:tests? #f))
38768 (native-inputs
38769 (list python-colorclass
38770 python-colorama
38771 python-pytest
38772 python-setuptools
38773 python-termcolor))
38774 (home-page "https://github.com/Robpol86/terminaltables")
38775 (synopsis
38776 "Generate simple tables in terminals from a nested list of strings")
38777 (description
38778 "This package makes it easy to draw tables in terminal/console
38779applications from a list of lists of strings. It supports multi-line rows.")
38780 (license license:expat)))
38781
38782(define-public python-termstyle
38783 (package
38784 (name "python-termstyle")
38785 (version "0.1.11")
38786 (source
38787 (origin
38788 (method url-fetch)
38789 (uri (pypi-uri "termstyle" version))
38790 (sha256
38791 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
38792 (build-system pyproject-build-system)
38793 (arguments
38794 (list #:test-backend #~'custom
38795 #:test-flags #~(list "test3.py")))
38796 (native-inputs
38797 (list python-setuptools))
38798 (home-page "https://github.com/gfxmonk/termstyle")
38799 (synopsis "Console text coloring for Python")
38800 (description "This package provides console text coloring for Python.")
38801 (license license:bsd-3)))
38802
38803(define-public python-text-unidecode
38804 (package
38805 (name "python-text-unidecode")
38806 (version "1.3")
38807 (source
38808 (origin
38809 (method url-fetch)
38810 (uri (pypi-uri "text-unidecode" version))
38811 (sha256
38812 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
38813 (build-system pyproject-build-system)
38814 (native-inputs
38815 (list python-pytest
38816 python-setuptools))
38817 (home-page "https://github.com/kmike/text-unidecode/")
38818 (synopsis "Decode Unicode data")
38819 (description
38820 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
38821Perl library. It can create ASCII representations of Unicode data. In general
38822users should prefer the @code{python-unidecode} package which offers better
38823memory usage and transliteration quality.")
38824 ;; The user can choose either license.
38825 (license (list license:clarified-artistic license:gpl2+))))
38826
38827(define-public python-textdistance
38828 (package
38829 (name "python-textdistance")
38830 (version "4.6.3")
38831 (source
38832 (origin
38833 (method git-fetch)
38834 (uri (git-reference
38835 (url "https://github.com/life4/textdistance")
38836 (commit version)))
38837 (file-name (git-file-name name version))
38838 (sha256
38839 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
38840 (build-system pyproject-build-system)
38841 ;; tests: 430 passed, 1446 warnings
38842 (native-inputs
38843 (list python-numpy
38844 python-pytest
38845 python-setuptools))
38846 (propagated-inputs
38847 (list python-jellyfish
38848 python-distance
38849 python-levenshtein
38850 python-pylev
38851 python-pyxdameraulevenshtein
38852 python-rapidfuzz))
38853 (home-page "https://github.com/life4/textdistance")
38854 (synopsis "Compute distance between the two texts")
38855 (description "@code{textdistance} is a pure Python library for comparing
38856distance between two or more sequences by many algorithms.")
38857 (license license:expat)))
38858
38859(define-public python-textparser
38860 (package
38861 (name "python-textparser")
38862 (version "0.24.0")
38863 (source
38864 (origin
38865 (method url-fetch)
38866 (uri (pypi-uri "textparser" version))
38867 (sha256
38868 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
38869 (build-system pyproject-build-system)
38870 (arguments
38871 (list #:test-backend #~'unittest))
38872 (native-inputs (list python-setuptools))
38873 (home-page "https://github.com/eerimoq/textparser")
38874 (synopsis "Fast text parser for Python")
38875 (description "This library provides a text parser written in the Python
38876language. It aims to be fast.")
38877 (license license:expat)))
38878
38879(define-public python-texttable
38880 (package
38881 (name "python-texttable")
38882 (version "1.7.0")
38883 (source
38884 (origin
38885 (method git-fetch)
38886 (uri (git-reference
38887 (url "https://github.com/foutaise/texttable/")
38888 (commit (string-append "v" version))))
38889 (file-name (git-file-name name version))
38890 (sha256
38891 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
38892 (build-system pyproject-build-system)
38893 (arguments (list #:test-flags #~(list "tests.py")))
38894 (native-inputs (list python-pytest python-setuptools))
38895 (home-page "https://github.com/foutaise/texttable/")
38896 (synopsis "Create simple ASCII tables in Python")
38897 (description
38898 "This package provides a Python module for creating simple ASCII
38899tables.")
38900 (license license:expat)))
38901
38902(define-public python-textual
38903 (package
38904 (name "python-textual")
38905 (version "7.4.0")
38906 (source
38907 (origin
38908 (method git-fetch)
38909 (uri (git-reference
38910 (url "https://github.com/Textualize/textual")
38911 (commit (string-append "v" version))))
38912 (file-name (git-file-name name version))
38913 (sha256
38914 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
38915 (build-system pyproject-build-system)
38916 (arguments
38917 (list
38918 #:test-flags
38919 ;; Snapshot tests require python-pytest-textual-snapshot which
38920 ;; in turn depends on python-textual.
38921 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
38922 "-k" (string-append
38923 ;; Broken for unknown reason.
38924 "not test_textual_env_var"
38925 ;; Tests that require python-treesitter-languages.
38926 " and not test_widget_construct"
38927 " and not test_setting_builtin_language_via_constructor"
38928 " and not test_setting_builtin_language_via_attribute"
38929 " and not test_setting_language_to_none"
38930 " and not test_setting_unknown_language"
38931 " and not test_register_language"
38932 " and not test_update_highlight_query"
38933 " and not test_default_theme"
38934 " and not test_setting_builtin_themes"
38935 " and not test_setting_unknown_theme_raises_exception"
38936 " and not test_registering_and_setting_theme"
38937 " and not test_progress_bar_width_1fr"))
38938 #:phases
38939 #~(modify-phases %standard-phases
38940 (add-after 'unpack 'relax-requirements
38941 (lambda _
38942 (substitute* "pyproject.toml"
38943 (("pygments =.*")
38944 "pygments = \"*\"\n")))))))
38945 (propagated-inputs
38946 (list python-markdown-it-py
38947 python-mdit-py-plugins
38948 python-platformdirs
38949 python-rich
38950 python-tree-sitter
38951 ;; python-tree-sitter-languages ; optional, not packed yet
38952 python-typing-extensions))
38953 (native-inputs
38954 (list python-poetry-core
38955 python-pytest
38956 python-pytest-asyncio
38957 python-pytest-xdist))
38958 (home-page "https://github.com/Textualize/textual")
38959 (synopsis "Build text user interfaces in Python")
38960 (description "Textual is a @acronym{TUI, Text User Interface} framework
38961for Python inspired by modern web development.")
38962 (license license:expat)))
38963
38964(define-public python-tftpy
38965 (package
38966 (name "python-tftpy")
38967 (version "0.8.6")
38968 (source
38969 (origin
38970 (method git-fetch)
38971 (uri (git-reference
38972 (url "https://github.com/msoulier/tftpy")
38973 (commit version)))
38974 (file-name (git-file-name name version))
38975 (sha256
38976 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
38977 (build-system pyproject-build-system)
38978 (arguments
38979 (list
38980 #:test-backend #~'unittest
38981 #:test-flags #~(list "tests/test.py")
38982 #:phases
38983 #~(modify-phases %standard-phases
38984 (add-before 'check 'configure-tests
38985 (lambda* (#:key tests? #:allow-other-keys)
38986 (when tests?
38987 ;; The default DEBUG logging level is way too verbose.
38988 (substitute* "tests/test.py"
38989 (("logging\\.DEBUG")
38990 "logging.INFO"))))))))
38991 (native-inputs (list python-setuptools))
38992 (home-page "https://tftpy.sourceforge.net/")
38993 (synopsis "Python trivial file transfer protocol (TFTP) library")
38994 (description
38995 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
38996be used to act both as a TFTP client or TFTP server.")
38997 (license license:expat)))
38998
38999(define-public python-thefuzz
39000 (package
39001 (name "python-thefuzz")
39002 (version "0.22.1")
39003 (source
39004 (origin
39005 (method git-fetch)
39006 (uri (git-reference
39007 (url "https://github.com/seatgeek/thefuzz")
39008 (commit version)))
39009 (file-name (git-file-name name version))
39010 (sha256
39011 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
39012 (build-system pyproject-build-system)
39013 (arguments
39014 (list #:test-flags #~'("-k" "not TestCodeFormat")
39015 #:phases #~(modify-phases %standard-phases
39016 ;; pycodestyle is only used in TestCodeFormat.
39017 (add-after 'unpack 'unrequire-pycodestyle
39018 (lambda _
39019 (substitute* "test_thefuzz.py"
39020 (("import pycodestyle.*") "")))))))
39021 (propagated-inputs (list python-rapidfuzz))
39022 (native-inputs (list python-hypothesis
39023 python-pytest
39024 python-setuptools))
39025 (home-page "https://github.com/seatgeek/thefuzz")
39026 (synopsis "Fuzzy string matching in Python")
39027 (description
39028 "This Python package implements fuzzing string matching
39029using Levenshtein distance.")
39030 (license license:expat)))
39031
39032(define-public python-three-merge
39033 (package
39034 (name "python-three-merge")
39035 (version "0.1.1")
39036 (source
39037 (origin
39038 ;; There are no tests in the PyPI tarball.
39039 (method git-fetch)
39040 (uri (git-reference
39041 (url "https://github.com/spyder-ide/three-merge")
39042 (commit (string-append "v" version))))
39043 (file-name (git-file-name name version))
39044 (sha256
39045 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
39046 (build-system pyproject-build-system)
39047 (propagated-inputs
39048 (list python-diff-match-patch))
39049 (native-inputs
39050 (list python-pytest python-setuptools python-wheel))
39051 (home-page "https://github.com/spyder-ide/three-merge")
39052 (synopsis "Library for merging two strings with respect to a base one")
39053 (description
39054 "This package provides a Python library to perform a 3-way merge between
39055strings, based on @code{diff-match-patch}. This library performs merges at a
39056character level, as opposed to most VCS systems, which opt for a line-based
39057approach.")
39058 (license license:expat)))
39059
39060(define-public python-throttler
39061 (package
39062 (name "python-throttler")
39063 (version "1.2.2")
39064 (source
39065 (origin
39066 (method git-fetch)
39067 (uri (git-reference
39068 (url "https://github.com/uburuntu/throttler")
39069 (commit (string-append "v" version))))
39070 (sha256
39071 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
39072 (build-system pyproject-build-system)
39073 (native-inputs
39074 (list python-aiohttp
39075 python-codecov
39076 python-flake8
39077 python-pytest
39078 python-pytest-asyncio
39079 python-setuptools
39080 python-wheel))
39081 (home-page "https://github.com/uburuntu/throttler")
39082 (synopsis "Throttling with asyncio support")
39083 (description
39084 "This is a Python package for easy throttling with asyncio support.")
39085 (license license:expat)))
39086
39087(define-public python-tifffile
39088 (package
39089 (name "python-tifffile")
39090 (version "2025.10.4")
39091 (source
39092 (origin
39093 (method url-fetch)
39094 (uri (pypi-uri "tifffile" version))
39095 (sha256
39096 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
39097 (build-system pyproject-build-system)
39098 ;; Tests require lfdfiles, which depends on tifffile
39099 (arguments (list #:tests? #f))
39100 (propagated-inputs
39101 (list python-numpy))
39102 (native-inputs
39103 (list python-setuptools))
39104 (home-page "https://www.lfd.uci.edu/~gohlke/")
39105 (synopsis "Read and write TIFF(r) files")
39106 (description
39107 "This package lets you read image and metadata from many bio-scientific
39108formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
39109MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
39110to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
39111 (license license:bsd-3)))
39112
39113(define-public python-tiktoken
39114 (package
39115 (name "python-tiktoken")
39116 (version "0.9.0")
39117 (source
39118 (origin
39119 (method url-fetch)
39120 (uri (pypi-uri "tiktoken" version))
39121 (sha256
39122 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
39123 (build-system cargo-build-system)
39124 (arguments
39125 (list
39126 #:install-source? #false
39127 #:imported-modules
39128 (append %pyproject-build-system-modules
39129 %cargo-build-system-modules)
39130 #:modules
39131 '((guix build cargo-build-system)
39132 ((guix build pyproject-build-system) #:prefix py:)
39133 (guix build utils))
39134 #:phases
39135 #~(modify-phases %standard-phases
39136 (replace 'build
39137 (assoc-ref py:%standard-phases 'build))
39138 (add-after 'install 'wrap
39139 (lambda _
39140 ;; Collection of python- and pyproject-build-system phases
39141 ;; between 'install and 'check.
39142 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
39143 (assoc-ref py:%standard-phases 'add-install-to-path)
39144 (assoc-ref py:%standard-phases 'wrap)
39145 (assoc-ref py:%standard-phases 'create-entrypoints)
39146 (assoc-ref py:%standard-phases 'compile-bytecode)))
39147 (replace 'install
39148 (assoc-ref py:%standard-phases 'install)))))
39149 (propagated-inputs (list python-regex python-requests))
39150 (inputs (cargo-inputs 'python-tiktoken))
39151 (native-inputs
39152 (list python-setuptools
39153 python-setuptools-rust
39154 python-wheel
39155 python-wrapper))
39156 (home-page "https://github.com/openai/tiktoken/")
39157 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
39158 (description
39159 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
39160@code{OpenAI's} models.")
39161 (license license:expat)))
39162
39163(define-public python-timeout-decorator
39164 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
39165 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
39166 (package
39167 (name "python-timeout-decorator")
39168 (version "0.5.0")
39169 (source
39170 (origin
39171 (method url-fetch)
39172 (uri (pypi-uri "timeout-decorator" version))
39173 (sha256
39174 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
39175 (build-system pyproject-build-system)
39176 (arguments (list #:tests? #f))
39177 (native-inputs (list python-setuptools python-wheel))
39178 (home-page "https://github.com/pnpnpn/timeout-decorator")
39179 (synopsis "Timeout decorator")
39180 (description "This package provides a decorator that raises an error
39181when an operation takes longer than expected.")
39182 (license license:expat)))
39183
39184(define-public python-titlecase
39185 (package
39186 (name "python-titlecase")
39187 (version "2.4.1")
39188 (source
39189 (origin
39190 (method url-fetch)
39191 (uri (pypi-uri "titlecase" version))
39192 (sha256
39193 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
39194 (build-system pyproject-build-system)
39195 (arguments
39196 (list
39197 #:test-backend #~'unittest))
39198 (native-inputs
39199 (list python-setuptools))
39200 (home-page "https://github.com/ppannuto/python-titlecase")
39201 (synopsis "Capitalize strings similar to book titles")
39202 (description
39203 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
39204It capitalizes (predominantly English) strings in a way that is similar to
39205book titles, using the New York Times Manual of Style to leave certain words
39206lowercase.")
39207 (license license:expat)))
39208
39209(define-public python-tlsh
39210 (package
39211 (name "python-tlsh")
39212 (version "4.11.2")
39213 (home-page "https://github.com/trendmicro/tlsh")
39214 (source
39215 (origin
39216 (method git-fetch)
39217 (uri (git-reference (url home-page) (commit version)))
39218 (file-name (git-file-name name version))
39219 (sha256
39220 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
39221 (build-system pyproject-build-system)
39222 (arguments
39223 (list
39224 #:phases
39225 #~(modify-phases %standard-phases
39226 (add-before 'build 'configure
39227 (lambda _
39228 (invoke "cmake" "."))) ;to generate tlsh_version.h
39229 (add-after 'configure 'chdir
39230 (lambda _
39231 (chdir "py_ext")))
39232 (replace 'check
39233 (lambda* (#:key tests? #:allow-other-keys)
39234 (when tests?
39235 (with-directory-excursion "../Testing"
39236 (invoke "./python_test.sh"))))))))
39237 (native-inputs (list cmake-minimal python-setuptools))
39238 (synopsis "Fuzzy matching library for Python")
39239 (description
39240 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
39241Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
39242value which can be used for similarity comparisons. Similar objects have
39243similar hash values, which allows for the detection of similar objects by
39244comparing their hash values. The byte stream should have a sufficient amount
39245of complexity; for example, a byte stream of identical bytes will not generate
39246a hash value.")
39247 (license license:asl2.0)))
39248
39249(define-public python-tlv8
39250 (package
39251 (name "python-tlv8")
39252 (version "0.10.0")
39253 (source
39254 (origin
39255 (method git-fetch)
39256 (uri (git-reference
39257 (url "https://github.com/jlusiardi/tlv8_python")
39258 (commit (string-append "v" version))))
39259 (file-name (git-file-name name version))
39260 (sha256
39261 (base32 "0q25y5lz7cigfk7l30rdm2z8as8662pzd8ki5vvs1c0saqq72zhv"))))
39262 (build-system pyproject-build-system)
39263 (native-inputs (list python-setuptools python-pytest))
39264 (home-page "https://github.com/jlusiardi/tlv8_python")
39265 (synopsis
39266 "Python library for @acronym{TLV, type-length-value} encoded data")
39267 (description
39268 "Python library for @acronym{TLV, type-length-value} encoding and decoding.
39269Represents type and length by one byte each, hence the name @code{tlv8}.")
39270 (license license:asl2.0)))
39271
39272(define-public python-tokenize-rt
39273 (package
39274 (name "python-tokenize-rt")
39275 (version "6.2.0")
39276 (source
39277 (origin
39278 (method git-fetch)
39279 (uri (git-reference
39280 (url "https://github.com/asottile/tokenize-rt")
39281 (commit (string-append "v" version))))
39282 (file-name (git-file-name name version))
39283 (sha256
39284 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
39285 (build-system pyproject-build-system)
39286 (native-inputs (list python-pytest python-setuptools))
39287 (home-page "https://github.com/asottile/tokenize-rt")
39288 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
39289 (description
39290 "This Python library is a wrapper around @code{tokenize} from the Python
39291standard library. It provides two additional tokens @code{ESCAPED_NL} and
39292@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
39293and @code{tokens_to_src} to roundtrip.")
39294 (license license:expat)))
39295
39296(define-public python-tomlkit
39297 (package
39298 (name "python-tomlkit")
39299 (version "0.13.3")
39300 (source
39301 (origin
39302 (method url-fetch)
39303 (uri (pypi-uri "tomlkit" version))
39304 (sha256
39305 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
39306 (build-system pyproject-build-system)
39307 (native-inputs
39308 (list python-poetry-core
39309 python-pytest
39310 python-pyyaml))
39311 (home-page "https://github.com/sdispater/tomlkit")
39312 (synopsis "Style-preserving TOML library")
39313 (description
39314 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
39315preserves all comments, indentations, whitespace and internal element ordering,
39316and makes them accessible and editable via an intuitive API. It can also
39317create new TOML documents from scratch using the provided helpers. Part of the
39318implementation has been adapted, improved, and fixed from Molten.")
39319 (license license:expat)))
39320
39321(define-public python-toolrack
39322 (package
39323 (name "python-toolrack")
39324 (version "4.0.3")
39325 (source
39326 (origin
39327 (method git-fetch)
39328 (uri (git-reference
39329 (url "https://github.com/albertodonato/toolrack")
39330 (commit (string-append "v" version))))
39331 (file-name (git-file-name name version))
39332 (sha256
39333 (base32
39334 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
39335 (build-system pyproject-build-system)
39336 (arguments
39337 (list
39338 #:phases
39339 #~(modify-phases %standard-phases
39340 (add-after 'unpack 'patch-/bin/sh
39341 (lambda _
39342 (substitute* "tests/aio/process_test.py"
39343 (("/bin/sh")
39344 (which "sh"))))))))
39345 (native-inputs
39346 (list python-pytest
39347 python-pytest-asyncio
39348 python-pytest-mock
39349 python-setuptools))
39350 (home-page "https://github.com/albertodonato/toolrack")
39351 (synopsis "Collection of Python utility functions and classes")
39352 (description "This package provides a collection of miscellaneous utility
39353functions and classes.")
39354 (license license:lgpl3+)))
39355
39356(define-public python-toolshed
39357 (package
39358 (name "python-toolshed")
39359 (version "0.4.8")
39360 (source
39361 (origin
39362 (method git-fetch)
39363 (uri (git-reference
39364 (url "https://github.com/brentp/toolshed")
39365 (commit (string-append "v" version))))
39366 (file-name (git-file-name name version))
39367 (sha256
39368 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
39369 (build-system pyproject-build-system)
39370 (native-inputs
39371 (list python-pytest
39372 python-setuptools))
39373 (home-page "https://github.com/brentp/toolshed/")
39374 (synopsis "Collection of modules and functions for working with data")
39375 (description "This is a collection of well-tested, simple modules and
39376functions that aim to reduce boilerplate when working with data.")
39377 (license license:bsd-2)))
39378
39379(define-public python-toolz
39380 (package
39381 (name "python-toolz")
39382 (version "1.1.0")
39383 (source
39384 (origin
39385 (method git-fetch)
39386 (uri (git-reference
39387 (url "https://github.com/pytoolz/toolz")
39388 (commit version)))
39389 (file-name (git-file-name name version))
39390 (sha256
39391 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
39392 (build-system pyproject-build-system)
39393 (arguments
39394 (list
39395 #:phases
39396 #~(modify-phases %standard-phases
39397 (add-after 'unpack 'set-version
39398 (lambda _
39399 (substitute* "pyproject.toml"
39400 (("\\[tool.setuptools-git-versioning\\]" all)
39401 (string-append "[tool.setuptools_scm]\n"
39402 "write_to = \"toolz/_version.py\"\n"
39403 all))))))))
39404 (native-inputs
39405 (list python-pytest
39406 python-setuptools
39407 ;; Project expects setuptools-git-versioning to build version, but
39408 ;; it does not support envar override as seuptools-scm.
39409 python-setuptools-scm))
39410 (home-page "https://github.com/pytoolz/toolz/")
39411 (synopsis "List processing tools and functional utilities")
39412 (description
39413 "This package provides a set of utility functions for iterators,
39414functions, and dictionaries.")
39415 (license license:bsd-3)))
39416
39417(define-public python-toposort
39418 (package
39419 (name "python-toposort")
39420 (version "1.10")
39421 (source
39422 (origin
39423 (method url-fetch)
39424 (uri (pypi-uri "toposort" version))
39425 (sha256
39426 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
39427 (build-system pyproject-build-system)
39428 (arguments
39429 (list #:test-backend #~'custom
39430 #:test-flags #~(list "-m" "test.test_toposort")))
39431 (native-inputs (list python-setuptools))
39432 (home-page "https://gitlab.com/ericvsmith/toposort")
39433 (synopsis "Topological sort algorithm")
39434 (description
39435 "This package provides an implementation of a topological sort
39436algorithm.")
39437 (license license:asl2.0)))
39438
39439(define-public python-towncrier
39440 (package
39441 (name "python-towncrier")
39442 (version "25.8.0")
39443 (source
39444 (origin
39445 (method url-fetch)
39446 (uri (pypi-uri "towncrier" version))
39447 (sha256
39448 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
39449 (build-system pyproject-build-system)
39450 (native-inputs
39451 (list git-minimal/pinned ;tests create git repositories
39452 python-hatchling
39453 python-pytest
39454 python-twisted))
39455 (propagated-inputs
39456 (list python-click
39457 python-jinja2))
39458 (home-page "https://towncrier.readthedocs.io/en/stable/")
39459 (synopsis "Manage release notes")
39460 (description
39461 "@code{towncrier} is a utility to produce useful, summarized news files
39462 (also known as changelogs) for a project.")
39463 (license license:expat)))
39464
39465(define-public python-tqdm
39466 (package
39467 (name "python-tqdm")
39468 (version "4.67.1")
39469 (source
39470 (origin
39471 (method url-fetch)
39472 (uri (pypi-uri "tqdm" version))
39473 (sha256
39474 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
39475 (build-system pyproject-build-system)
39476 (arguments
39477 (list #:test-flags
39478 '(list "-o" "asyncio_mode=auto"
39479 "-k" "not perf and not test_rlock_creation")))
39480 (native-inputs
39481 (list python-pytest
39482 python-pytest-asyncio
39483 python-pytest-timeout
39484 python-setuptools
39485 python-setuptools-scm
39486 python-toml
39487 python-wheel))
39488 (home-page "https://github.com/tqdm/tqdm")
39489 (synopsis "Fast, extensible progress meter")
39490 (description
39491 "Make loops show a progress bar on the console by just wrapping any
39492iterable with @code{|tqdm(iterable)|}. Offers many options to define
39493design and layout.")
39494 (license (list license:mpl2.0 license:expat))))
39495
39496(define-public python-traitlets
39497 (package
39498 (name "python-traitlets")
39499 (version "5.14.3")
39500 (source
39501 (origin
39502 (method url-fetch)
39503 (uri (pypi-uri "traitlets" version))
39504 (sha256
39505 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
39506 (build-system pyproject-build-system)
39507 ;; tests: 566 passed, 3 skipped, 1 warning
39508 (native-inputs
39509 (list python-hatchling
39510 python-pytest))
39511 (home-page "https://ipython.org")
39512 (synopsis "Configuration system for Python applications")
39513 (description
39514 "Traitlets is a framework that lets Python classes have attributes with
39515type checking, dynamically calculated default values, and ‘on change’
39516callbacks. The package also includes a mechanism to use traitlets for
39517configuration, loading values from files or from command line arguments. This
39518is a distinct layer on top of traitlets, so you can use traitlets in your code
39519without using the configuration machinery.")
39520 (license license:bsd-3)))
39521
39522(define-public python-translate-toolkit
39523 (package
39524 (name "python-translate-toolkit")
39525 (version "3.15.6")
39526 (source
39527 (origin
39528 (method url-fetch)
39529 (uri (pypi-uri "translate_toolkit" version))
39530 (sha256
39531 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
39532 (build-system pyproject-build-system)
39533 (arguments
39534 (list
39535 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
39536 #:test-flags
39537 ;; TODO: Some of the optional inputs are not packaged yet.
39538 #~(list #$@(map (lambda (file) (string-append "--ignore="
39539 "tests/translate/"
39540 file))
39541 (list "convert/test_ini2po.py"
39542 "convert/test_php2po.py"
39543 "convert/test_po2ini.py"
39544 "convert/test_po2php.py"
39545 "storage/test_cpo.py"
39546 "storage/test_fluent.py"
39547 "storage/test_ini.py"
39548 "storage/test_php.py"
39549 "storage/test_po.py"
39550 "storage/test_pypo.py"
39551 "storage/test_subtitles.py"))
39552 #$@(map (lambda (test) (string-append "--deselect="
39553 "tests/translate/storage/"
39554 test))
39555 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
39556 ;; 0xff in position 0: invalid start byte
39557 (list "test_csvl10n.py::TestCSV::test_encoding_save"
39558 ;; FileNotFoundError: [Errno 2] No such file or
39559 ;; directory: 'msgfmt'
39560 "test_mo.py::TestMOFile::test_output"
39561 ;; assert 0 == -16200
39562 "test_poheader.py::test_timezones"))
39563 #$@(map (lambda (test) (string-append "--deselect="
39564 "tests/translate/tools/"
39565 test))
39566 ;; XXX: Some issues with XML parsing.
39567 (list "test_junitmsgfmt.py::test_output"
39568 "test_pocount.py::test_output"
39569 "test_pocount.py::test_cases"))
39570 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
39571 (native-inputs
39572 (list python-pytest
39573 python-setuptools
39574 python-setuptools-scm))
39575 (propagated-inputs
39576 (list python-cwcwidth
39577 python-cheroot
39578 ;; python-aeidon
39579 ;; python-fluent
39580 python-iniparse
39581 python-lxml
39582 python-mistletoe
39583 python-phply
39584 python-pyparsing
39585 python-ruamel.yaml
39586 python-vobject))
39587 (home-page "https://toolkit.translatehouse.org")
39588 (synopsis "Tools and API for translation and localization engineering")
39589 (description
39590 "Tools and API for translation and localization engineering. It contains
39591several utilities, as well as an API for building localization tools.")
39592 (license license:gpl2+)))
39593
39594;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
39595(define-public python-translate-toolkit-for-offlate
39596 (hidden-package
39597 (package
39598 (inherit python-translate-toolkit)
39599 (version "3.6.2")
39600 (source
39601 (origin
39602 (method url-fetch)
39603 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
39604 (sha256
39605 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
39606 (arguments
39607 (list #:tests? #f)))))
39608
39609(define-public python-translitcodec
39610 (package
39611 (name "python-translitcodec")
39612 (version "0.7.0")
39613 (source
39614 (origin
39615 (method git-fetch)
39616 (uri (git-reference
39617 (url "https://github.com/claudep/translitcodec")
39618 (commit (string-append "version-" version))))
39619 (file-name (git-file-name name version))
39620 (sha256
39621 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
39622 (build-system pyproject-build-system)
39623 (native-inputs (list python-pytest python-setuptools))
39624 (home-page "https://github.com/claudep/translitcodec")
39625 (synopsis "Unicode to 8-bit charset transliteration codec")
39626 (description
39627 "This package contains codecs for transliterating ISO 10646 texts into
39628best-effort representations using smaller coded character sets (ASCII,
39629ISO 8859, etc.).")
39630 (license license:expat)))
39631
39632(define-public python-treelib
39633 (package
39634 (name "python-treelib")
39635 (version "1.8.0")
39636 (source
39637 (origin
39638 (method git-fetch)
39639 (uri (git-reference
39640 (url "https://github.com/caesar0301/treelib")
39641 (commit (string-append "v" version))))
39642 (file-name (git-file-name name version))
39643 (sha256
39644 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
39645 (patches
39646 (search-patches "python-treelib-remove-python2-compat.patch"))))
39647 (build-system pyproject-build-system)
39648 (native-inputs (list python-poetry-core python-pytest))
39649 (home-page "https://github.com/caesar0301/treelib")
39650 (synopsis "Implementation of a tree structure in Python")
39651 (description
39652 "This package provides a Python implementation of a tree structure.")
39653 (license license:asl2.0)))
39654
39655(define-public python-trio
39656 (package
39657 (name "python-trio")
39658 (version "0.32.0")
39659 (source
39660 (origin
39661 (method url-fetch)
39662 (uri (pypi-uri "trio" version))
39663 (sha256
39664 (base32 "0sw04md83splkb0x37bmd1yj8rbf033p2k0x3qim3k9vjbn2j3qm"))))
39665 (build-system pyproject-build-system)
39666 (arguments
39667 (list
39668 #:test-flags
39669 #~(list
39670 #$@(if (package? (this-package-native-input "python-trustme"))
39671 #~()
39672 #~("--ignore=src/trio/_tests/test_dtls.py"
39673 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
39674 "--ignore=src/trio/_tests/test_ssl.py"))
39675 ;; Skip tests for the upstream repository's tooling.
39676 "--ignore=src/trio/_tests/tools"
39677 "-k" (string-join
39678 (list
39679 ;; Keyboard interrupts misbehave in the build sandbox.
39680 "not test_ki_in_repl"
39681 "test_KI_interrupts"
39682 "test_run_in_trio_thread_ki"
39683 ;; Somehow f'{check_errno_is_5!r}' evaluates
39684 ;; to "'check_errno_is_5'" instead of "<function ...>",
39685 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
39686 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
39687 ;; will probably be removed in version 0.35.
39688 "test_Matcher_check"
39689 "test_matcher_tostring"
39690 "test_raisesgroup_tostring"
39691 ;; Failure in name resolution.
39692 "test_SocketType_resolve"
39693 ;; OSError: protocol not found.
39694 "test_getprotobyname")
39695 " and not ")
39696 "src/trio/_tests")
39697 #:phases
39698 #~(modify-phases %standard-phases
39699 (add-after 'unpack 'patch-pthread-path
39700 (lambda* (#:key inputs #:allow-other-keys)
39701 (substitute* '("src/trio/_core/_thread_cache.py"
39702 "src/trio/_tests/test_threads.py")
39703 (("ctypes.util.find_library\\(\"pthread\"\\)")
39704 (simple-format #f "~s"
39705 (search-input-file inputs "lib/libpthread.so.0"))))))
39706 (add-before 'check 'set-env
39707 (lambda _
39708 ;; Tests require a writable home.
39709 (setenv "HOME" "/tmp"))))))
39710 (native-inputs
39711 (append
39712 (if (supported-package? python-pyopenssl)
39713 (list python-pyopenssl)
39714 '())
39715 (if (supported-package? python-trustme)
39716 (list python-trustme)
39717 '())
39718 (list python-async-generator)
39719 (if (supported-package? python-cryptography)
39720 (list python-cryptography)
39721 '())
39722 (list python-jedi
39723 python-pylint
39724 python-pytest
39725 python-setuptools)))
39726 (propagated-inputs
39727 (list python-attrs
39728 python-idna
39729 python-outcome
39730 python-sniffio
39731 python-sortedcontainers))
39732 (home-page "https://trio.readthedocs.io")
39733 (synopsis "Friendly Python library for async concurrency and I/O")
39734 (description
39735 "Trio strives to be a production-quality, async/await-native I/O library
39736for Python. Like all async libraries, its main purpose is to help you write
39737programs that do multiple things at the same time with parallelized I/O.")
39738 ;; Either license applies.
39739 (license (list license:expat license:asl2.0))))
39740
39741(define-public python-trio-typing
39742 (package
39743 (name "python-trio-typing")
39744 (version "0.10.0")
39745 (source
39746 (origin
39747 (method url-fetch)
39748 (uri (pypi-uri "trio-typing" version))
39749 (sha256
39750 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
39751 (build-system pyproject-build-system)
39752 (native-inputs (list python-pytest python-setuptools python-wheel))
39753 (propagated-inputs
39754 (list python-async-generator
39755 python-importlib-metadata
39756 python-mypy-extensions
39757 python-packaging
39758 python-trio
39759 python-typing-extensions))
39760 (home-page "https://github.com/python-trio/trio-typing")
39761 (synopsis "Static type checking support for Trio and related projects")
39762 (description
39763 "This package provides:
39764
39765@itemize
39766@item PEP 561 typing stubs packages for the Trio project packages:
39767
39768@itemize
39769@item trio (@code{trio-stubs})
39770@item outcome (@code{outcome-stubs})
39771@item async_generator (@code{async_generator-stubs})
39772@end itemize
39773
39774@item A package @code{trio_typing} containing types that Trio programs often
39775want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
39776a mypy plugin that smooths over some limitations in the basic type hints.
39777@end itemize")
39778 ;; Either license applies.
39779 (license (list license:expat license:asl2.0))))
39780
39781(define-public python-trubar
39782 (package
39783 (name "python-trubar")
39784 (version "0.3.4")
39785 (source
39786 (origin
39787 (method url-fetch)
39788 (uri (pypi-uri "trubar" version))
39789 (sha256
39790 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
39791 (build-system pyproject-build-system)
39792 (arguments
39793 (list
39794 #:test-flags
39795 #~(list "-k" (string-join
39796 ;; AttributeError: module 'libcst' has no attribute
39797 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
39798 (list "not test_import_from_future"
39799 "test_inport_after_docstring"
39800 ;; AssertionError: Items in the second set but not
39801 ;; the first
39802 "test_walk_files")
39803 " and not "))))
39804 (native-inputs
39805 (list python-pytest
39806 python-setuptools
39807 python-wheel))
39808 (propagated-inputs
39809 (list python-libcst
39810 python-pyyaml))
39811 (home-page "https://github.com/janezd/trubar")
39812 (synopsis "Utility for translation of Python sources")
39813 (description
39814 "This package provides a tool for translation and localization of Python
39815programs via modification of source files. Trubar supports f-strings and does
39816not require any changes to the original source code, such as marking strings
39817for translation.")
39818 (license license:expat)))
39819
39820(define-public python-twine
39821 (package
39822 (name "python-twine")
39823 (version "6.2.0")
39824 (source
39825 (origin
39826 (method url-fetch)
39827 (uri (pypi-uri "twine" version))
39828 (sha256
39829 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
39830 (build-system pyproject-build-system)
39831 (arguments
39832 (list
39833 ;; tests: 228 passed, 1 deselected
39834 #:test-flags
39835 ;; Assertion is not equal for one tests.
39836 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
39837 (native-inputs
39838 (list python-pretend
39839 python-pytest
39840 python-pytest-socket
39841 python-setuptools
39842 python-setuptools-scm))
39843 (propagated-inputs
39844 (list python-id
39845 python-keyring
39846 python-packaging
39847 python-readme-renderer
39848 python-requests
39849 python-requests-toolbelt
39850 python-rfc3986
39851 python-rich
39852 python-urllib3))
39853 (home-page "https://github.com/pypa/twine")
39854 (synopsis "Collection of utilities for interacting with PyPI")
39855 (description
39856 "@code{twine} currently supports registering projects and uploading
39857distributions. It authenticates the user over HTTPS, allows them to pre-sign
39858their files and supports any packaging format (including wheels).")
39859 (license license:asl2.0)))
39860
39861(define-public python-twisted
39862 (package
39863 (name "python-twisted")
39864 (version "25.5.0")
39865 (source
39866 (origin
39867 (method git-fetch)
39868 (uri (git-reference
39869 (url "https://github.com/twisted/twisted")
39870 (commit (string-append "twisted-" version))))
39871 (file-name (git-file-name name version))
39872 (sha256
39873 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
39874 (build-system pyproject-build-system)
39875 (arguments
39876 (list
39877 ;; tests: skips=638, successes=9759
39878 #:test-backend #~'custom
39879 #:test-flags
39880 #~(list "-m" "twisted.trial"
39881 "--temp-directory=/tmp/_trial_temp"
39882 (string-append "-j" (number->string (min 8 (parallel-job-count))))
39883 "twisted")
39884 #:phases
39885 #~(modify-phases %standard-phases
39886 (add-after 'unpack 'disable-broken-tests
39887 (lambda _
39888 (for-each delete-file
39889 (list
39890 ;; No idea why they fail
39891 "src/twisted/test/test_log.py"
39892 ;; Network tests
39893 "src/twisted/conch/test/test_cftp.py"
39894 "src/twisted/internet/test/test_endpoints.py"
39895 "src/twisted/protocols/test/test_tls.py"
39896 "src/twisted/test/test_sslverify.py"
39897 "src/twisted/web/test/test_agent.py"
39898 "src/twisted/web/test/test_tap.py"
39899 ;; These need a git executable
39900 "src/twisted/python/test/test_release.py"
39901 ;; These leave behind a socket file, which breaks the
39902 ;; build with "...has an unsupported type"
39903 "src/twisted/internet/test/test_unix.py"
39904 "src/twisted/test/test_unix.py"
39905 ;; These complain about missing test modules.
39906 "src/twisted/test/test_failure.py"
39907 "src/twisted/web/test/test_http2.py"
39908 "src/twisted/conch/test/test_forwarding.py")))))))
39909 (propagated-inputs
39910 (list python-attrs
39911 python-automat
39912 python-bcrypt
39913 python-constantly
39914 python-hyperlink
39915 python-incremental
39916 python-typing-extensions
39917 python-zope-interface
39918 ;; [conch]
39919 (list python "tk")
39920 python-appdirs
39921 python-bcrypt
39922 python-cryptography
39923 ;; [http2]
39924 python-h2
39925 python-priority
39926 ;; [tls]
39927 python-idna
39928 python-pyopenssl
39929 python-service-identity
39930 ;; [serial]
39931 python-pyserial))
39932 (native-inputs
39933 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
39934 python-hatch-fancy-pypi-readme
39935 python-hatchling
39936 python-httpx
39937 python-hypothesis
39938 python-incremental
39939 python-pyhamcrest
39940 python-pytest))
39941 (home-page "https://twistedmatrix.com/")
39942 (synopsis "Asynchronous networking framework written in Python")
39943 (description
39944 "Twisted is an extensible framework for Python programming, with special
39945focus on event-based network programming and multiprotocol integration.")
39946 (license license:expat)))
39947
39948(define-public python-txredisapi
39949 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
39950 ;; The latest version is 1.4.11, but it contains a bug:
39951 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
39952 ;; patched in commit d2259a3.
39953 (revision "0"))
39954 (package
39955 (name "python-txredisapi")
39956 (version (git-version "1.4.11" revision commit))
39957 (source
39958 (origin
39959 (method git-fetch)
39960 ;; The source distribution on PyPi is missing test files:
39961 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
39962 (uri (git-reference
39963 (url "https://github.com/IlyaSkriblovsky/txredisapi")
39964 (commit commit)))
39965 (file-name (git-file-name name version))
39966 (sha256
39967 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
39968 (build-system pyproject-build-system)
39969 (arguments
39970 (list #:test-backend #~'custom
39971 #:test-flags #~(list "-m" "twisted.trial" "tests")
39972 #:phases
39973 #~(modify-phases %standard-phases
39974 ;; The tests require a running Redis server.
39975 (add-before 'check 'start-redis
39976 (lambda _
39977 (invoke "redis-server" "--daemonize" "yes"))))))
39978 (propagated-inputs (list python-twisted))
39979 (native-inputs (list python-mock python-setuptools redis))
39980 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
39981 (synopsis "Non-blocking Redis client for Python")
39982 (description "txredisapi is a non-blocking client driver for the Redis
39983database, written in Python. It uses Twisted for asynchronous communication
39984with Redis.")
39985 (license license:asl2.0))))
39986
39987(define-public python-typeapi
39988 (package
39989 (name "python-typeapi")
39990 (version "2.2.4")
39991 (source
39992 (origin
39993 (method url-fetch)
39994 (uri (pypi-uri "typeapi" version))
39995 (sha256
39996 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
39997 (build-system pyproject-build-system)
39998 (arguments
39999 (list
40000 #:tests? #false)) ;there are none
40001 (propagated-inputs (list python-typing-extensions))
40002 (native-inputs (list python-hatchling))
40003 (home-page "https://pypi.org/project/typeapi/")
40004 (synopsis "Type hints")
40005 (description "The typeapi package provides an object-oriented interface
40006for introspecting PEP484 type hints at runtime, including forward references
40007that make use of the more recent PEP585 and PEP604 type hint features in
40008Python versions that don't natively support them.")
40009 (license license:expat)))
40010
40011(define-public python-typer
40012 (package
40013 (name "python-typer")
40014 (version "0.22.0")
40015 (source
40016 (origin
40017 (method git-fetch)
40018 (uri (git-reference
40019 (url "https://github.com/fastapi/typer")
40020 (commit version)))
40021 (file-name (git-file-name name version))
40022 (sha256
40023 (base32 "17gxqqiafrp5dvqfm6k39zbanvnwb8b9kr7dvnkah17js0rfy1sz"))))
40024 (build-system pyproject-build-system)
40025 (arguments
40026 (list
40027 #:phases
40028 #~(modify-phases %standard-phases
40029 (add-before 'check 'pre-check
40030 (lambda _
40031 (setenv "HOME" "/tmp"))))
40032 #:test-flags
40033 #~(list "-k" "not test_cli"
40034 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
40035 (native-inputs
40036 (list python-coverage ;this is required in tests
40037 python-pdm-backend
40038 python-pytest
40039 python-pytest-xdist))
40040 (propagated-inputs
40041 (list python-click
40042 python-typing-extensions
40043 python-annotated-doc
40044 ;; [optional]
40045 python-rich
40046 python-shellingham))
40047 (home-page "https://github.com/fastapi/typer")
40048 (synopsis "Typer builds CLI based on Python type hints")
40049 (description
40050 "Typer is a library for building CLI applications. It's based on Python
400513.6+ type hints.")
40052 (license license:expat)))
40053
40054(define-public python-types-aiofiles
40055 (package
40056 (name "python-types-aiofiles")
40057 (version "25.1.0.20251011")
40058 (source
40059 (origin
40060 (method url-fetch)
40061 (uri (pypi-uri "types_aiofiles" version))
40062 (sha256
40063 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
40064 (build-system pyproject-build-system)
40065 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40066 (native-inputs (list python-setuptools))
40067 (home-page "https://github.com/python/typeshed")
40068 (synopsis "Typing stubs for python-aiofiles")
40069 (description "This package providis typing stubs for python-aiofiles.")
40070 (license license:asl2.0)))
40071
40072(define-public python-types-colorama
40073 (package
40074 (name "python-types-colorama")
40075 (version "0.4.15.20250801")
40076 (source
40077 (origin
40078 (method url-fetch)
40079 (uri (pypi-uri "types_colorama" version))
40080 (sha256
40081 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
40082 (build-system pyproject-build-system)
40083 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40084 (native-inputs
40085 (list python-setuptools))
40086 (home-page "https://github.com/python/typeshed")
40087 (synopsis "Typing stubs for colorama")
40088 (description "This package provides typing stubs for colorama.")
40089 (license license:asl2.0)))
40090
40091(define-public python-types-dataclasses
40092 (package
40093 (name "python-types-dataclasses")
40094 (version "0.6.6")
40095 (source
40096 (origin
40097 (method url-fetch)
40098 (uri (pypi-uri "types-dataclasses" version))
40099 (sha256
40100 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
40101 (build-system pyproject-build-system)
40102 (arguments (list #:tests? #f)) ;no tests
40103 (native-inputs (list python-setuptools))
40104 (home-page "https://github.com/python/typeshed")
40105 (synopsis "Typing stubs for dataclasses")
40106 (description
40107 "This package provides a collection of library stubs for Python, with
40108static types.")
40109 (license license:asl2.0)))
40110
40111(define-public python-types-dateutil
40112 (package
40113 (name "python-types-dateutil")
40114 (version "2.9.0.20240316")
40115 (source
40116 (origin
40117 (method url-fetch)
40118 (uri (pypi-uri "types-python-dateutil" version))
40119 (sha256
40120 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
40121 (build-system pyproject-build-system)
40122 (arguments (list #:tests? #f)) ; no tests
40123 (native-inputs
40124 (list python-pytest python-setuptools python-wheel))
40125 (home-page "https://github.com/python/typeshed")
40126 (synopsis "Typing stubs for python-dateutil")
40127 (description
40128 "This is a PEP 561 type stub package for the @code{python-dateutil}
40129package.")
40130 (license license:asl2.0)))
40131
40132(define-public python-types-docutils
40133 (package
40134 (name "python-types-docutils")
40135 (version "0.22.2.20251006")
40136 (source
40137 (origin
40138 (method url-fetch)
40139 (uri (pypi-uri "types_docutils" version))
40140 (sha256
40141 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
40142 (build-system pyproject-build-system)
40143 (arguments (list #:tests? #f)) ;no tests
40144 (native-inputs (list python-setuptools))
40145 (home-page "https://github.com/python/typeshed")
40146 (synopsis "Typing stubs for docutils")
40147 (description "This package provides a collection of library stubs for
40148Python, with static types.")
40149 (license license:asl2.0)))
40150
40151(define-public python-types-freezegun
40152 (package
40153 (name "python-types-freezegun")
40154 (version "1.1.8")
40155 (source
40156 (origin
40157 (method url-fetch)
40158 (uri (pypi-uri "types-freezegun" version))
40159 (sha256
40160 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
40161 (build-system pyproject-build-system)
40162 (arguments
40163 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40164 ;; right files from source, so ignore them for now.
40165 (list #:tests? #f))
40166 (native-inputs (list python-setuptools python-wheel))
40167 (home-page "https://github.com/python/typeshed")
40168 (synopsis "Typing stubs for @code{freezegun}")
40169 (description "This package contains typing stubs for for @code{freezegun}, a
40170very small subset the Python stubs contained in the complete @code{typeshed}
40171collection.")
40172 (license license:asl2.0)))
40173
40174(define-public python-types-orjson
40175 (package
40176 (name "python-types-orjson")
40177 (version "3.6.2")
40178 (source
40179 (origin
40180 (method url-fetch)
40181 (uri (pypi-uri "types-orjson" version))
40182 (sha256
40183 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
40184 (build-system pyproject-build-system)
40185 (arguments (list #:tests? #f)) ;no tests
40186 (native-inputs (list python-setuptools))
40187 (home-page "https://github.com/python/typeshed")
40188 (synopsis "Typing stubs for orjson")
40189 (description "This is a PEP 561 type stub package for the @code{orjson}
40190package. It can be used by type-checking tools like mypy, PyCharm, pytype
40191etc. to check code that uses @code{orjson}.")
40192 (license license:asl2.0)))
40193
40194(define-public python-types-protobuf
40195 (package
40196 (name "python-types-protobuf")
40197 (version "3.20.1")
40198 (source (origin
40199 (method url-fetch)
40200 (uri (pypi-uri "types-protobuf" version))
40201 (sha256
40202 (base32
40203 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
40204 (build-system pyproject-build-system)
40205 (arguments
40206 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40207 ;; right files from source, so ignore them for now.
40208 (list #:tests? #f))
40209 (native-inputs (list python-setuptools python-wheel))
40210 (home-page "https://github.com/python/typeshed")
40211 (synopsis "Typing stubs for @code{protobuf}")
40212 (description "This package contains typing stubs for @code{protobuf}, a
40213very small subset the Python stubs contained in the complete @code{typeshed}
40214collection.")
40215 (license license:asl2.0)))
40216
40217(define-public python-types-pyside6
40218 (package
40219 (name "python-types-pyside6")
40220 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
40221 ;; variant.
40222 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
40223 (revision . "0")))
40224 (version (git-version "6.10.1.1"
40225 (assoc-ref properties 'revision)
40226 (assoc-ref properties 'commit)))
40227 (source
40228 (origin
40229 (method git-fetch)
40230 (uri (git-reference
40231 (url "https://github.com/LumaPictures/cg-stubs")
40232 (commit (assoc-ref properties 'commit))))
40233 (file-name (git-file-name name version))
40234 (sha256
40235 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
40236 (build-system pyproject-build-system)
40237 (arguments
40238 (list
40239 #:tests? #f ;XXX: all tests failed
40240 #:phases
40241 #~(modify-phases %standard-phases
40242 (add-after 'unpack 'select-pyside6
40243 (lambda _
40244 (chdir "pyside6"))))))
40245 (native-inputs
40246 (list python-hatchling))
40247 (home-page "https://github.com/LumaPictures/cg-stubs")
40248 (synopsis "Accurate stubs for PySide6")
40249 (description
40250 "This package provides PySide6 stubs produced with @code{mypy}'s official
40251stubgen tool to directly generate stubs, with a set of corrections applied.")
40252 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
40253 ;; v2.1 . See file LICENSE for more details.
40254 ;;
40255 ;; MIT in pyproject.toml
40256 (license (list license:lgpl2.1+
40257 license:expat))))
40258
40259(define-public python-types-python-dateutil
40260 (package
40261 (name "python-types-python-dateutil")
40262 (version "2.9.0.20250708")
40263 (source
40264 (origin
40265 (method url-fetch)
40266 (uri (pypi-uri "types_python_dateutil" version))
40267 (sha256
40268 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
40269 (build-system pyproject-build-system)
40270 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40271 (native-inputs (list python-setuptools))
40272 (home-page "https://github.com/python/typeshed")
40273 (synopsis "Typing stubs for python-dateutil")
40274 (description "This package providis typing stubs for python-dateutil.")
40275 (license license:asl2.0)))
40276
40277(define-public python-types-pytz
40278 (package
40279 (name "python-types-pytz")
40280 (version "2025.2.0.20250809")
40281 (source
40282 (origin
40283 (method url-fetch)
40284 (uri (pypi-uri "types_pytz" version))
40285 (sha256
40286 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
40287 (build-system pyproject-build-system)
40288 (arguments
40289 (list #:tests? #f)) ;no tests provided
40290 (native-inputs (list python-setuptools))
40291 (home-page "https://github.com/python/typeshed")
40292 (synopsis "Typing stubs for pytz")
40293 (description "This package contains typing stubs for @code{pytz}, a very
40294small subset the Python stubs contained in the complete @code{typeshed}
40295collection.")
40296 (license license:asl2.0)))
40297
40298(define-public python-types-pyyaml
40299 (package
40300 (name "python-types-pyyaml")
40301 (version "6.0.12.20250915")
40302 (source
40303 (origin
40304 (method url-fetch)
40305 (uri (pypi-uri "types_pyyaml" version))
40306 (sha256
40307 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
40308 (build-system pyproject-build-system)
40309 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40310 (native-inputs
40311 (list python-setuptools))
40312 (home-page " https://github.com/python/typeshed")
40313 (synopsis "Typing stubs for PyYAML")
40314 (description "This package provides typing stubs for @code{PyYAML}.")
40315 (license license:asl2.0)))
40316
40317(define-public python-types-regex
40318 (package
40319 (name "python-types-regex")
40320 (version "2025.9.18.20250921")
40321 (source
40322 (origin
40323 (method url-fetch)
40324 (uri (pypi-uri "types_regex" version))
40325 (sha256
40326 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
40327 (build-system pyproject-build-system)
40328 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40329 (native-inputs (list python-setuptools))
40330 (home-page "https://github.com/python/typeshed")
40331 (synopsis "Typing stubs for regex")
40332 (description "This package provides typing stubs for regex.")
40333 (license license:asl2.0)))
40334
40335(define-public python-types-requests
40336 (package
40337 (name "python-types-requests")
40338 (version "2.32.4.20250611")
40339 (source
40340 (origin
40341 (method url-fetch)
40342 (uri (pypi-uri "types_requests" version))
40343 (sha256
40344 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
40345 (build-system pyproject-build-system)
40346 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40347 (native-inputs
40348 (list python-setuptools))
40349 (propagated-inputs
40350 (list python-urllib3))
40351 (home-page "https://github.com/python/typeshed")
40352 (synopsis "Typing stubs for requests")
40353 (description "This package provides typing stubs for requests.")
40354 (license license:asl2.0)))
40355
40356(define-public python-types-setuptools
40357 (package
40358 (name "python-types-setuptools")
40359 (version "80.9.0.20250529")
40360 (source
40361 (origin
40362 (method url-fetch)
40363 (uri (pypi-uri "types_setuptools" version))
40364 (sha256
40365 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
40366 (build-system pyproject-build-system)
40367 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40368 (native-inputs
40369 (list python-setuptools))
40370 (home-page "https://github.com/python/typeshed")
40371 (synopsis "Typing stubs for setuptools")
40372 (description "This package provides typing stubs for setuptools.")
40373 (license license:asl2.0)))
40374
40375(define-public python-types-simplejson
40376 (package
40377 (name "python-types-simplejson")
40378 (version "3.19.0.20241221")
40379 (source
40380 (origin
40381 (method url-fetch)
40382 (uri (pypi-uri "types_simplejson" version))
40383 (sha256
40384 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
40385 (build-system pyproject-build-system)
40386 (arguments
40387 (list
40388 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
40389 (native-inputs
40390 (list python-setuptools python-wheel))
40391 (home-page "https://github.com/python/typeshed")
40392 (synopsis "Typing stubs for simplejson")
40393 (description "Typing stubs for simplejson.")
40394 (license license:asl2.0)))
40395
40396(define-public python-types-toml
40397 (package
40398 (name "python-types-toml")
40399 (version "0.10.8.20240310")
40400 (source
40401 (origin
40402 (method url-fetch)
40403 (uri (pypi-uri "types-toml" version))
40404 (sha256
40405 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
40406 (build-system pyproject-build-system)
40407 (arguments
40408 (list #:tests? #f)) ;no tests provided
40409 (native-inputs (list python-setuptools))
40410 (home-page "https://github.com/python/typeshed")
40411 (synopsis "Typing stubs for TOML")
40412 (description
40413 "This package contains typing stubs for TOML, a very small subset the
40414Python stubs contained in the complete @code{typeshed} collection.")
40415 (license license:asl2.0)))
40416
40417(define-public python-types-tqdm
40418 (package
40419 (name "python-types-tqdm")
40420 (version "4.67.0.20250809")
40421 (source
40422 (origin
40423 (method url-fetch)
40424 (uri (pypi-uri "types_tqdm" version))
40425 (sha256
40426 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
40427 (build-system pyproject-build-system)
40428 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40429 (native-inputs (list python-setuptools))
40430 (propagated-inputs (list python-types-requests))
40431 (home-page "https://github.com/python/typeshed")
40432 (synopsis "Typing stubs for python-tqdm")
40433 (description "This package providis typing stubs for python-tqdm.")
40434 (license license:asl2.0)))
40435
40436(define-public python-types-ujson
40437 (package
40438 (name "python-types-ujson")
40439 (version "5.10.0.20250822")
40440 (source
40441 (origin
40442 (method url-fetch)
40443 (uri (pypi-uri "types_ujson" version))
40444 (sha256
40445 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
40446 (build-system pyproject-build-system)
40447 (arguments
40448 (list #:tests? #f)) ;no tests provided
40449 (native-inputs (list python-setuptools))
40450 (home-page "https://github.com/python/typeshed")
40451 (synopsis "Typing stubs for ujson")
40452 (description
40453 "This is a PEP 561 type stub package for the ujson package. It can be
40454used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
40455uses ujson.")
40456 (license license:asl2.0)))
40457
40458(define-public python-types-urllib3
40459 (package
40460 (name "python-types-urllib3")
40461 (version "1.26.25.14")
40462 (source
40463 (origin
40464 (method url-fetch)
40465 (uri (pypi-uri "types-urllib3" version))
40466 (sha256
40467 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
40468 (build-system pyproject-build-system)
40469 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40470 (native-inputs
40471 (list python-setuptools))
40472 (home-page "https://github.com/python/typeshed")
40473 (synopsis "Typing stubs for urllib3")
40474 (description "This package provides typing stubs for urllib3.")
40475 (license license:asl2.0)))
40476
40477(define-public python-typeshed-client
40478 (package
40479 (name "python-typeshed-client")
40480 (version "2.8.2")
40481 (source
40482 (origin
40483 (method git-fetch)
40484 (uri (git-reference
40485 (url "https://github.com/JelleZijlstra/typeshed_client")
40486 (commit (string-append "v" version))))
40487 (file-name (git-file-name name version))
40488 (sha256
40489 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
40490 (build-system pyproject-build-system)
40491 (arguments
40492 (list #:test-backend #~'custom
40493 #:test-flags #~(list "tests/test.py")))
40494 (native-inputs
40495 (list python-setuptools))
40496 (propagated-inputs
40497 (list python-importlib-resources
40498 python-typing-extensions))
40499 (home-page "https://github.com/JelleZijlstra/typeshed_client")
40500 (synopsis "Library for accessing stubs in typeshed")
40501 (description
40502 "This package provides a library for accessing stubs in typeshed.")
40503 (license license:expat)))
40504
40505(define-public python-typing-inspect
40506 (package
40507 (name "python-typing-inspect")
40508 (version "0.9.0")
40509 (source
40510 (origin
40511 (method url-fetch)
40512 (uri (pypi-uri "typing_inspect" version))
40513 (sha256
40514 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
40515 (build-system pyproject-build-system)
40516 (native-inputs
40517 (list python-pytest
40518 python-setuptools
40519 python-wheel))
40520 (propagated-inputs
40521 (list python-mypy-extensions
40522 python-typing-extensions))
40523 (home-page "https://github.com/ilevkivskyi/typing_inspect")
40524 (synopsis "API for inspection of types in the Python @code{typing} module")
40525 (description
40526 "The @code{typing_inspect} module defines experimental API for runtime
40527inspection of types defined in the Python standard typing module.")
40528 (license license:expat)))
40529
40530(define-public python-typing-inspection
40531 (package
40532 (name "python-typing-inspection")
40533 (version "0.4.2")
40534 (source
40535 (origin
40536 (method git-fetch)
40537 (uri (git-reference
40538 (url "https://github.com/pydantic/typing-inspection")
40539 (commit (string-append "v" version))))
40540 (file-name (git-file-name name version))
40541 (sha256
40542 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
40543 (build-system pyproject-build-system)
40544 ;; tests: 89 passed, 3 skipped
40545 (native-inputs
40546 (list python-pytest
40547 python-hatchling))
40548 (propagated-inputs
40549 (list python-typing-extensions))
40550 (home-page "https://github.com/pydantic/typing-inspection")
40551 (synopsis "Runtime typing introspection tools")
40552 (description
40553 "@code{typing-inspection} provides tools to inspect type annotations at
40554runtime.")
40555 (license license:expat)))
40556
40557(define-public python-typogrify
40558 (package
40559 (name "python-typogrify")
40560 (version "2.1.0")
40561 (source
40562 (origin
40563 (method url-fetch)
40564 (uri (pypi-uri "typogrify" version))
40565 (sha256
40566 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
40567 (build-system pyproject-build-system)
40568 (arguments
40569 (list
40570 #:test-flags
40571 #~(list "--doctest-modules"
40572 "typogrify/filters.py"
40573 "typogrify/packages/titlecase/tests.py")))
40574 (native-inputs
40575 (list python-pytest
40576 python-hatchling))
40577 (propagated-inputs
40578 (list python-smartypants))
40579 (home-page "https://github.com/justinmayer/typogrify")
40580 (synopsis "Filters to transform text into typographically-improved HTML")
40581 (description
40582 "@code{typogrify} provides a set of custom filters that automatically
40583apply various transformations to plain text in order to yield
40584typographically-improved HTML. While often used in conjunction with Jinja and
40585Django template systems, the filters can be used in any environment.")
40586 (license license:bsd-3)))
40587
40588(define-public python-ua-parser
40589 (package
40590 (name "python-ua-parser")
40591 (version "0.10.0")
40592 (source
40593 (origin
40594 (method url-fetch)
40595 (uri (pypi-uri "ua-parser" version))
40596 (sha256
40597 (base32
40598 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
40599 (build-system pyproject-build-system)
40600 (arguments
40601 `(#:tests? #f)) ;no test suite in release
40602 (native-inputs
40603 (list python-pyyaml
40604 python-setuptools))
40605 (home-page "https://github.com/ua-parser/uap-python")
40606 (synopsis "User agent parser")
40607 (description
40608 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
40609 (license license:asl2.0)))
40610
40611(define-public python-ubelt
40612 (package
40613 (name "python-ubelt")
40614 (version "1.3.6")
40615 (source
40616 (origin
40617 (method git-fetch)
40618 (uri (git-reference
40619 (url "https://github.com/Erotemic/ubelt")
40620 (commit (string-append "v" version))))
40621 (file-name (git-file-name name version))
40622 (sha256
40623 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
40624 (build-system pyproject-build-system)
40625 (arguments
40626 (list
40627 ;; The builder user home doesn't match HOME, which causes this test to
40628 ;; fail.
40629 #:test-flags #~(list "-k" "not userhome")
40630 #:phases
40631 #~(modify-phases %standard-phases
40632 (add-before 'check 'pre-check
40633 (lambda _
40634 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
40635 (native-inputs
40636 (list python-pytest
40637 python-requests
40638 python-setuptools
40639 python-wheel
40640 python-xdoctest))
40641 (propagated-inputs
40642 (list python-ordered-set))
40643 (home-page "https://github.com/Erotemic/ubelt")
40644 (synopsis "Python library for hashing, caching, timing and more")
40645 (description
40646 "Ubelt is a small library of simple functions that extend the Python
40647standard library. It includes an @acronym{API, Application Programming
40648Interface} to simplify common problems such as caching, timing, computing
40649progress, among other things.")
40650 (license license:asl2.0)))
40651
40652(define-public python-uc-micro-py
40653 (package
40654 (name "python-uc-micro-py")
40655 (version "1.0.1")
40656 (source (origin
40657 (method git-fetch) ;for tests
40658 (uri (git-reference
40659 (url "https://github.com/tsutsu3/uc.micro-py")
40660 (commit (string-append "v" version))))
40661 (file-name (git-file-name name version))
40662 (sha256
40663 (base32
40664 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
40665 (build-system pyproject-build-system)
40666 (native-inputs (list python-pytest python-setuptools python-wheel))
40667 (home-page "https://github.com/tsutsu3/uc.micro-py")
40668 (synopsis "Unicode data files for linkify-it-py projects")
40669 (description "This package contains a micro subset of Unicode data files
40670for linkify-it-py projects.")
40671 (license license:expat)))
40672
40673(define-public python-udapi
40674 (package
40675 (name "python-udapi")
40676 (version "0.5.2")
40677 (source
40678 (origin
40679 (method git-fetch)
40680 (uri (git-reference
40681 (url "https://github.com/udapi/udapi-python")
40682 (commit version)))
40683 (file-name (git-file-name name version))
40684 (sha256
40685 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
40686 (build-system pyproject-build-system)
40687 (native-inputs
40688 (list python-pytest python-setuptools))
40689 (propagated-inputs
40690 (list python-colorama python-termcolor))
40691 (home-page "http://udapi.readthedocs.io")
40692 (synopsis "Framework for processing Universal Dependencies data")
40693 (description
40694 "This package is a Python library providing an API for processing
40695Universal Dependencies data.")
40696 (license license:gpl3+)))
40697
40698(define-public python-ujson
40699 (package
40700 (name "python-ujson")
40701 (version "5.10.0")
40702 (source
40703 (origin
40704 (method url-fetch)
40705 (uri (pypi-uri "ujson" version))
40706 (sha256
40707 (base32
40708 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
40709 (modules '((guix build utils)))
40710 (snippet
40711 #~(begin (delete-file-recursively "deps")))))
40712 (build-system pyproject-build-system)
40713 (arguments
40714 (list
40715 #:phases
40716 #~(modify-phases %standard-phases
40717 (add-after 'unpack 'link-to-system-double-conversion
40718 (lambda* (#:key inputs #:allow-other-keys)
40719 (let ((d-c (assoc-ref inputs "double-conversion")))
40720 (substitute* "setup.py"
40721 (("./deps/double-conversion/double-conversion\"")
40722 (string-append d-c "/include/double-conversion\""))
40723 (("-lstdc++" stdc)
40724 (string-append "-L" d-c "/lib\","
40725 " \"-ldouble-conversion\","
40726 " \"" stdc)))))))))
40727 (native-inputs
40728 (list double-conversion
40729 python-pytest
40730 python-setuptools
40731 python-setuptools-scm
40732 python-wheel))
40733 (home-page "https://github.com/ultrajson/ultrajson")
40734 (synopsis "Ultra fast JSON encoder and decoder for Python")
40735 (description
40736 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
40737bindings for Python 3.")
40738 (license license:bsd-3)))
40739
40740(define-public python-ukkonen
40741 (package
40742 (name "python-ukkonen")
40743 (version "1.0.1")
40744 (source
40745 (origin
40746 ;; There are no tests in the PyPI tarball.
40747 (method git-fetch)
40748 (uri (git-reference
40749 (url "https://github.com/asottile/ukkonen")
40750 (commit (string-append "v" version))))
40751 (file-name (git-file-name name version))
40752 (sha256
40753 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
40754 (build-system pyproject-build-system)
40755 (native-inputs (list python-pytest python-setuptools python-wheel))
40756 (propagated-inputs (list python-cffi))
40757 (home-page "https://github.com/asottile/ukkonen")
40758 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
40759 (description "This package is an implementation of of bounded Levenshtein
40760distance (Ukkonen).")
40761 (license license:expat)))
40762
40763(define-public python-ulid
40764 (package
40765 (name "python-ulid")
40766 (version "3.1.0")
40767 (source
40768 (origin
40769 (method git-fetch)
40770 (uri (git-reference
40771 (url "https://github.com/mdomke/python-ulid")
40772 (commit version)))
40773 (file-name (git-file-name name version))
40774 (sha256
40775 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
40776 (build-system pyproject-build-system)
40777 (arguments
40778 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
40779 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
40780 ;; 68 passed, 1 deselected in 2.55s
40781 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
40782 (native-inputs
40783 (list python-freezegun
40784 python-hatch-fancy-pypi-readme
40785 python-hatch-vcs
40786 python-hatchling
40787 python-pytest))
40788 (propagated-inputs
40789 (list python-pydantic))
40790 (home-page "https://github.com/mdomke/python-ulid")
40791 (synopsis "Universally unique lexicographically sortable identifier")
40792 (description
40793 "ULID is a universally unique lexicographically sortable identifier.
40794It is:
40795@itemize
40796@item 128-bit compatible with UUID
40797@item 1.21e+24 unique ULIDs per millisecond
40798@item lexicographically sortable!
40799@item canonically encoded as a 26 character string, as opposed to the 36
40800character UUID
40801@item uses Crockford's base32 for better efficiency and readability (5 bits
40802per character)
40803@item case insensitive
40804@item no special characters (URL safe)
40805@item monotonic sort order (correctly detects and handles the same
40806millisecond)
40807@end itemize")
40808 (license license:expat)))
40809
40810(define-public python-uncertainties
40811 (package
40812 (name "python-uncertainties")
40813 (version "3.2.3")
40814 (source
40815 (origin
40816 (method url-fetch)
40817 (uri (pypi-uri "uncertainties" version))
40818 (sha256
40819 (base32
40820 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
40821 (build-system pyproject-build-system)
40822 (native-inputs
40823 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
40824 (propagated-inputs (list python-numpy))
40825 (home-page "https://uncertainties.readthedocs.io/en/latest/")
40826 (synopsis "Calculations with uncertainties")
40827 (description
40828 "The uncertainties package transparently handles calculations with
40829numbers with uncertainties. It can also yield the derivatives of any
40830expression.")
40831 (license license:bsd-3)))
40832
40833(define-public python-unicode-linebreak
40834 (package
40835 (name "python-unicode-linebreak")
40836 (version "0.0.2")
40837 (source
40838 (origin
40839 (method git-fetch)
40840 (uri (git-reference
40841 (url "https://github.com/mondeja/py-unicode-linebreak")
40842 (commit (string-append "v" version))))
40843 (file-name (git-file-name name version))
40844 (sha256
40845 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
40846 (build-system pyproject-build-system)
40847 (arguments
40848 (list
40849 #:imported-modules `(,@%cargo-build-system-modules
40850 ,@%pyproject-build-system-modules)
40851 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
40852 (guix build pyproject-build-system)
40853 (guix build utils))
40854 #:test-backend #~'unittest
40855 #:phases
40856 #~(modify-phases %standard-phases
40857 (add-after 'unpack 'prepare-cargo-build-system
40858 (lambda args
40859 (for-each
40860 (lambda (phase)
40861 (format #t "Running cargo phase: ~a~%" phase)
40862 (apply (assoc-ref cargo:%standard-phases phase)
40863 #:cargo-target #$(cargo-triplet)
40864 args))
40865 '(unpack-rust-crates
40866 configure
40867 check-for-pregenerated-files
40868 patch-cargo-checksums)))))))
40869 (native-inputs
40870 (append
40871 (list maturin
40872 rust
40873 `(,rust "cargo"))
40874 (or (and=> (%current-target-system)
40875 (compose list make-rust-sysroot))
40876 '())))
40877 (inputs (cargo-inputs 'unicode_linebreak))
40878 (home-page "https://github.com/mondeja/py-unicode-linebreak")
40879 (synopsis "Markdown paragraph wrapper")
40880 (description
40881 "This package provides a Markdown paragraph wrapper using Unicode Line
40882Breaking Algorithm written in Rust with Python bindings.")
40883 (license license:expat)))
40884
40885(define-public python-unicodedata2
40886 (package
40887 (name "python-unicodedata2")
40888 (version "16.0.0")
40889 (source
40890 (origin
40891 (method url-fetch)
40892 (uri (pypi-uri "unicodedata2" version))
40893 (sha256
40894 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
40895 (build-system pyproject-build-system)
40896 (native-inputs
40897 (list python-pytest
40898 python-setuptools))
40899 (home-page "https://github.com/fonttools/unicodedata2")
40900 (synopsis "Python unicodedata backport")
40901 (description "This package corresponds to the latest @code{unicodedata}
40902standard Python module.")
40903 (license license:asl2.0)))
40904
40905(define-public python-unicodeitplus
40906 (package
40907 (name "python-unicodeitplus")
40908 (version "0.3.1")
40909 (source
40910 (origin
40911 (method url-fetch)
40912 (uri (pypi-uri "unicodeitplus" version))
40913 (sha256
40914 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
40915 (build-system pyproject-build-system)
40916 (native-inputs
40917 (list python-pytest
40918 python-setuptools
40919 python-setuptools-scm))
40920 (propagated-inputs
40921 (list python-lark))
40922 (home-page "https://github.com/HDembinski/unicodeitplus")
40923 (synopsis "Convert simple LaTeX to an Unicode approximation")
40924 (description
40925 "This package provides a more complete LaTeX to Unicode converter than
40926@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
40927Backus-Naur Form} with the Lark library.")
40928 (license license:bsd-3)))
40929
40930(define-public python-unidecode
40931 (package
40932 (name "python-unidecode")
40933 (version "1.4.0")
40934 (source
40935 (origin
40936 (method url-fetch)
40937 (uri (pypi-uri "Unidecode" version))
40938 (sha256
40939 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
40940 (build-system pyproject-build-system)
40941 (native-inputs
40942 (list python-pytest python-setuptools))
40943 (home-page "https://pypi.org/project/Unidecode/")
40944 (synopsis "ASCII transliterations of Unicode text")
40945 (description
40946 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
40947useful when integrating with legacy code that doesn't support Unicode, or for
40948ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
40949machine identifiers from human-readable Unicode strings that should still be
40950somewhat intelligible.")
40951 (license license:gpl2+)))
40952
40953(define-public python-unique-log-filter
40954 (package
40955 (name "python-unique-log-filter")
40956 (version "0.1.0")
40957 (source
40958 (origin
40959 (method git-fetch)
40960 (uri (git-reference
40961 (url "https://github.com/twizmwazin/unique_log_filter")
40962 (commit (string-append "v" version))))
40963 (file-name (git-file-name name version))
40964 (sha256
40965 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
40966 (build-system pyproject-build-system)
40967 (arguments
40968 (list #:test-backend #~'custom
40969 #:test-flags #~(list "test_unique_log_filter.py")))
40970 (native-inputs (list python-flit-core))
40971 (home-page "https://github.com/twizmwazin/unique_log_filter")
40972 (synopsis "Log filter that removes duplicate log messages")
40973 (description
40974 "This library provides a filter for the @code{logging} module
40975from the Python standard library which allows removing duplicate log
40976messages.")
40977 (license license:bsd-2)))
40978
40979(define-public python-uniseg
40980 (package
40981 (name "python-uniseg")
40982 (version "0.10.0")
40983 (source
40984 (origin
40985 (method url-fetch)
40986 (uri (pypi-uri "uniseg" version))
40987 (sha256
40988 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
40989 (build-system pyproject-build-system)
40990 (native-inputs
40991 (list python-pytest
40992 python-setuptools
40993 python-setuptools-scm))
40994 (home-page "https://bitbucket.org/emptypage/uniseg-python")
40995 (synopsis "Python library to determine Unicode text segmentations")
40996 (description
40997 "Uniseg is a Python package used to determine Unicode text segmentations.
40998Supported segmentations include:
40999@enumerate
41000@item @dfn{Code point} (any value in the Unicode codespace)
41001@item @dfn{Grapheme cluster} (user-perceived character made of a single or
41002multiple Unicode code points, e.g. \"G\" + acute-accent)
41003@item Word break
41004@item Sentence break
41005@item Line break
41006@end enumerate")
41007 (license license:expat)))
41008
41009(define-public python-universal-pathlib
41010 (package
41011 (name "python-universal-pathlib")
41012 (version "0.2.6")
41013 (source
41014 (origin
41015 (method git-fetch)
41016 (uri (git-reference
41017 (url "https://github.com/fsspec/universal_pathlib")
41018 (commit (string-append "v" version))))
41019 (file-name (git-file-name name version))
41020 (sha256
41021 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
41022 (build-system pyproject-build-system)
41023 (arguments
41024 (list
41025 #:tests? #f)) ;requires network
41026 (native-inputs
41027 (list python-setuptools
41028 python-setuptools-scm))
41029 (propagated-inputs
41030 (list python-fsspec
41031 python-pathlib-abc))
41032 (home-page "https://github.com/fsspec/universal_pathlib")
41033 (synopsis
41034 "@code{pathlib} API extended to use @code{fsspec} backends")
41035 (description
41036 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
41037API to support a variety of backend filesystems via filesystem_spec.")
41038 (license license:expat)))
41039
41040(define-public python-unpaddedbase64
41041 (package
41042 (name "python-unpaddedbase64")
41043 (version "2.1.0")
41044 (source
41045 (origin
41046 (method git-fetch)
41047 (uri (git-reference
41048 (url "https://github.com/matrix-org/python-unpaddedbase64")
41049 (commit (string-append "v" version))))
41050 (file-name (git-file-name name version))
41051 (sha256
41052 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
41053 (build-system pyproject-build-system)
41054 (native-inputs (list python-poetry-core
41055 python-pytest
41056 python-setuptools
41057 python-wheel))
41058 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
41059 (synopsis "Encode and decode Base64 without “=” padding")
41060 (description
41061 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
41062using “=” characters. However this conveys no benefit so many protocols
41063choose to use Base64 without the “=” padding.")
41064 (license license:asl2.0)))
41065
41066(define-public python-update-checker
41067 (package
41068 (name "python-update-checker")
41069 (version "0.18.0")
41070 (source
41071 (origin
41072 (method url-fetch)
41073 (uri (pypi-uri "update-checker" version))
41074 (sha256
41075 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
41076 (build-system pyproject-build-system)
41077 (native-inputs
41078 (list python-pytest
41079 python-setuptools))
41080 (propagated-inputs
41081 (list python-requests))
41082 (home-page "https://github.com/bboe/update_checker")
41083 (synopsis "Python module that will check for package updates")
41084 (description "This package provides a Python module that will check for
41085package updates.")
41086 (license license:bsd-2)))
41087
41088(define-public python-uri-template
41089 (package
41090 (name "python-uri-template")
41091 (version "1.3.0")
41092 (source
41093 (origin
41094 (method url-fetch)
41095 (uri (pypi-uri "uri-template" version))
41096 (sha256
41097 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
41098 (build-system pyproject-build-system)
41099 (arguments
41100 (list
41101 #:phases
41102 '(modify-phases %standard-phases
41103 (replace 'check
41104 (lambda* (#:key tests? #:allow-other-keys)
41105 (when tests?
41106 (invoke "python3" "test.py")))))))
41107 (native-inputs
41108 (list python-setuptools
41109 python-setuptools-scm
41110 python-wheel))
41111 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
41112 (synopsis "RFC 6570 URI Template Processor")
41113 (description "This package implements URI Template expansion in strict
41114adherence to RFC 6570, but adds a few extensions.")
41115 (license license:expat)))
41116
41117(define-public python-uritools
41118 (package
41119 (name "python-uritools")
41120 (version "6.0.1")
41121 (source
41122 (origin
41123 (method git-fetch)
41124 (uri (git-reference
41125 (url "https://github.com/tkem/uritools/")
41126 (commit (string-append "v" version))))
41127 (file-name (git-file-name name version))
41128 (sha256
41129 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
41130 (build-system pyproject-build-system)
41131 (native-inputs
41132 (list python-pytest
41133 python-setuptools))
41134 (home-page "https://github.com/tkem/uritools/")
41135 (synopsis "URI parsing, classification and composition")
41136 (description
41137 "This package provides RFC 3986 compliant functions for parsing,
41138classifying and composing URIs and URI references, largely replacing the
41139Python Standard Library's urllib.parse module.")
41140 (license license:expat)))
41141
41142(define-public python-urwid
41143 (package
41144 (name "python-urwid")
41145 (version "3.0.3")
41146 (source
41147 (origin
41148 (method url-fetch)
41149 (uri (pypi-uri "urwid" version))
41150 (sha256
41151 (base32
41152 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
41153 (build-system pyproject-build-system)
41154 (arguments
41155 (list
41156 #:test-flags
41157 #~(list "tests"
41158 ;; According to Debian these tests are cursed.
41159 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
41160 "--ignore=tests/test_vterm.py")))
41161 (native-inputs
41162 (list python-pytest python-setuptools python-setuptools-scm))
41163 (propagated-inputs
41164 (list python-wcwidth
41165 ;; [optional]
41166 python-pygobject
41167 python-pyzmq
41168 python-tornado
41169 python-pyserial
41170 python-twisted))
41171 (home-page "https://urwid.org")
41172 (synopsis "Console user interface library for Python")
41173 (description
41174 "Urwid is a curses-based UI/widget library for Python. It includes many
41175features useful for text console applications.")
41176 (license license:lgpl2.1+)))
41177
41178(define-public python-urwid-2
41179 (package
41180 (inherit python-urwid)
41181 (name "python-urwid")
41182 (version "2.6.16")
41183 (source
41184 (origin
41185 (method url-fetch)
41186 (uri (pypi-uri "urwid" version))
41187 (sha256
41188 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
41189
41190(define-deprecated/public-alias python-urwid-3
41191 python-urwid) ;may be removed after 2025-11-12
41192
41193(define-public python-urwid-for-zulip-term
41194 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
41195 ;; to pass, remove when no longer required.
41196 (hidden-package
41197 (package
41198 (inherit python-urwid)
41199 (version "2.1.2")
41200 (source
41201 (origin
41202 (method url-fetch)
41203 (uri (pypi-uri "urwid" version))
41204 (sha256
41205 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
41206 (arguments
41207 (list #:tests? #f)))))
41208
41209(define-public python-urwid-readline
41210 (package
41211 (name "python-urwid-readline")
41212 (version "0.15.1")
41213 (source
41214 (origin
41215 (method git-fetch)
41216 (uri (git-reference
41217 (url "https://github.com/rr-/urwid_readline")
41218 (commit version)))
41219 (file-name (git-file-name name version))
41220 (sha256
41221 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
41222 (build-system pyproject-build-system)
41223 (native-inputs
41224 (list python-pytest
41225 python-setuptools))
41226 (propagated-inputs
41227 (list python-urwid))
41228 (home-page "https://github.com/rr-/urwid_readline")
41229 (synopsis "Text input widget for urwid that supports readline shortcuts")
41230 (description
41231 "This package provides a textbox edit widget for @code{python-urwid} that
41232supports @code{readline} shortcuts.")
41233 (license license:expat)))
41234
41235(define-public python-urwidgets
41236 (package
41237 (name "python-urwidgets")
41238 (version "0.2.1")
41239 (source
41240 (origin
41241 (method url-fetch)
41242 (uri (pypi-uri "urwidgets" version))
41243 (sha256
41244 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
41245 (build-system pyproject-build-system)
41246 (arguments
41247 (list #:tests? #f)) ;no tests
41248 (native-inputs
41249 (list python-setuptools))
41250 (propagated-inputs
41251 (list python-urwid-2))
41252 (home-page "https://github.com/AnonymouX47/urwidgets")
41253 (synopsis "Collection of widgets for urwid")
41254 (description
41255 "This package provides a collection of widgets for urwid.")
41256 (license license:expat)))
41257
41258(define-public python-urwidtrees
41259 (package
41260 (name "python-urwidtrees")
41261 (version "1.0.4")
41262 (source
41263 (origin
41264 (method git-fetch)
41265 ;; package author intends on distributing via github rather than pypi:
41266 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
41267 (uri (git-reference
41268 (url "https://github.com/pazz/urwidtrees")
41269 (commit version)))
41270 (file-name (git-file-name name version))
41271 (sha256
41272 (base32
41273 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
41274 (build-system pyproject-build-system)
41275 (arguments
41276 '(#:tests? #f)) ; no tests
41277 (propagated-inputs (list python-urwid))
41278 (native-inputs (list python-mock python-setuptools python-wheel))
41279 (home-page "https://github.com/pazz/urwidtrees")
41280 (synopsis "Tree widgets for urwid")
41281 (description "Urwidtrees is a Widget Container API for the @code{urwid}
41282toolkit. Use it to build trees of widgets.")
41283 (license license:gpl3+)))
41284
41285(define-public python-user-agents
41286 (package
41287 (name "python-user-agents")
41288 (version "2.2.0")
41289 (source
41290 (origin
41291 (method git-fetch)
41292 (uri (git-reference
41293 (url "https://github.com/selwin/python-user-agents")
41294 (commit (string-append "v" version))))
41295 (file-name (git-file-name name version))
41296 (sha256
41297 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
41298 (build-system pyproject-build-system)
41299 (arguments
41300 (list #:test-backend #~'unittest))
41301 (native-inputs
41302 (list python-setuptools))
41303 (propagated-inputs
41304 (list python-ua-parser))
41305 (home-page "https://github.com/selwin/python-user-agents")
41306 (synopsis "User Agent strings parsing library")
41307 (description
41308 "A library to identify devices (phones, tablets) and their capabilities by
41309parsing (browser/HTTP) user agent strings.")
41310 (license license:expat)))
41311
41312(define-public python-userpath
41313 (package
41314 (name "python-userpath")
41315 (version "1.9.2")
41316 (source
41317 (origin
41318 (method url-fetch)
41319 (uri (pypi-uri "userpath" version))
41320 (sha256
41321 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
41322 (build-system pyproject-build-system)
41323 (arguments
41324 ;; See https://github.com/ofek/userpath/issues/43.
41325 ;; In Guix, tests try to find the temporary build directory in PATH, but
41326 ;; only the store output is present.
41327 (list #:tests? #f))
41328 (native-inputs (list python-hatchling python-pytest))
41329 (propagated-inputs (list python-click))
41330 (home-page "https://github.com/ofek/userpath")
41331 (synopsis "Add locations to the user's PATH")
41332 (description "This package provides a tool for modifying a user's PATH.")
41333 (license license:expat)))
41334
41335(define-public python-userspacefs
41336 (package
41337 (name "python-userspacefs")
41338 (version "3.2.1")
41339 (source
41340 (origin
41341 (method url-fetch)
41342 (uri (pypi-uri "userspacefs" version))
41343 (sha256
41344 (base32 "0n3mp9y1xgkl292m44i6xrkha2ffja1zrf5yaykz0yyvm85cfip4"))))
41345 (build-system pyproject-build-system)
41346 (arguments
41347 (list #:tests? #f ;no tests
41348 #:phases
41349 #~(modify-phases %standard-phases
41350 (add-after 'unpack 'hardcode-libfuse
41351 (lambda* (#:key inputs #:allow-other-keys)
41352 (substitute* "userspacefs/fusepy.py"
41353 (("^_libfuse_path.*")
41354 (string-append "_libfuse_path = '"
41355 (search-input-file inputs "lib/libfuse3.so")
41356 "'\n"))))))))
41357 (inputs (list fuse))
41358 (native-inputs (list python-setuptools))
41359 (propagated-inputs (list python-aiohttp python-typing-extensions))
41360 (home-page "https://thelig.ht/code/userspacefs/readme.html")
41361 (synopsis "User-space file systems for Python")
41362 (description
41363 "@code{userspacefs} is a library that allows you to easily write
41364user-space file systems in Python.")
41365 (license license:gpl3+)))
41366
41367(define-public python-utils
41368 (package
41369 (name "python-utils")
41370 (version "3.9.1")
41371 (source
41372 (origin
41373 (method url-fetch)
41374 (uri (pypi-uri "python_utils" version))
41375 (sha256
41376 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
41377 (build-system pyproject-build-system)
41378 (native-inputs
41379 (list python-pytest
41380 python-pytest-asyncio
41381 python-setuptools))
41382 (propagated-inputs
41383 (list python-loguru
41384 python-typing-extensions))
41385 (home-page "https://github.com/WoLpH/python-utils")
41386 (synopsis "Convenient utilities not included with the standard Python install")
41387 (description
41388 "Python Utils is a collection of small Python functions and classes
41389which make common patterns shorter and easier.")
41390 (license license:bsd-2)))
41391
41392(define-public python-uuid6
41393 (package
41394 (name "python-uuid6")
41395 (version "2025.0.1")
41396 (source
41397 (origin
41398 (method git-fetch)
41399 (uri (git-reference
41400 (url "https://github.com/oittaa/uuid6-python")
41401 (commit version)))
41402 (file-name (git-file-name name version))
41403 (sha256
41404 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
41405 (build-system pyproject-build-system)
41406 (arguments
41407 (list
41408 #:test-flags
41409 ;; Test is time based: AssertionError: 13987034766.015247 !=
41410 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
41411 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
41412 (native-inputs
41413 (list python-pytest
41414 python-setuptools
41415 python-setuptools-scm))
41416 (home-page "https://github.com/oittaa/uuid6-python")
41417 (synopsis "Time-based UUID formats which are suited for use as a database key")
41418 (description
41419 "This module extends immutable UUID objects (the UUID class) with the
41420functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
41421@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
41422 (license license:expat)))
41423
41424(define-public python-validate-email
41425 (package
41426 (name "python-validate-email")
41427 (version "1.3")
41428 (source
41429 (origin
41430 (method url-fetch)
41431 (uri (pypi-uri "validate_email" version))
41432 (sha256
41433 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
41434 (build-system pyproject-build-system)
41435 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
41436 (native-inputs
41437 (list python-setuptools))
41438 (home-page "https://github.com/syrusakbary/validate_email")
41439 (synopsis "Verifies if an email address is valid and really exists")
41440 (description
41441 "@code{validate_email} can be used to verify if an email address is
41442valid and really exists.")
41443 (license license:lgpl3+)))
41444
41445(define-public python-validators
41446 (package
41447 (name "python-validators")
41448 (version "0.34.0")
41449 (source
41450 (origin
41451 (method url-fetch)
41452 (uri (pypi-uri "validators" version))
41453 (sha256
41454 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
41455 (build-system pyproject-build-system)
41456 (arguments
41457 (list
41458 ;; python-eth-hash is not packed yet.
41459 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
41460 (native-inputs
41461 (list python-pytest
41462 python-setuptools
41463 python-wheel))
41464 (propagated-inputs
41465 (list python-decorator
41466 ;; python-eth-hash ; optional, not packed yet.
41467 python-six))
41468 (home-page "https://github.com/kvesteri/validators")
41469 (synopsis "Data validation library")
41470 (description
41471 "This package contains validators for different things such as email
41472addresses, IP addresses, URLs, hashes and more. It has been designed to be
41473easy to use and not require defining a schema or form just to validate some
41474input.")
41475 (license license:expat)))
41476
41477(define-public python-valkey
41478 (package
41479 (name "python-valkey")
41480 (version "6.1.1")
41481 (source
41482 (origin
41483 (method git-fetch)
41484 (uri (git-reference
41485 (url "https://github.com/valkey-io/valkey-py")
41486 (commit (string-append "v" version))))
41487 (file-name (git-file-name name version))
41488 (sha256
41489 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
41490 (build-system pyproject-build-system)
41491 (arguments
41492 ;; XXX: A lot of tests fail with ConnectionError
41493 ;; Maybe we need to spawn a valkey server?
41494 (list #:tests? #f))
41495 (native-inputs
41496 (list python-setuptools))
41497 (home-page "https://github.com/valkey-io/valkey-py")
41498 (synopsis "Python client for Valkey")
41499 (description
41500 "This package provides a python client for the @code{Valkey} key-value
41501store, forked from redis-py.")
41502 (license license:expat)))
41503
41504;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
41505;; package.
41506(define-public python-vcversioner
41507 (package
41508 (name "python-vcversioner")
41509 (version "2.16.0.0")
41510 (source
41511 (origin
41512 (method url-fetch)
41513 (uri (pypi-uri "vcversioner" version))
41514 (sha256
41515 (base32
41516 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
41517 (build-system pyproject-build-system)
41518 (arguments
41519 (list #:tests? #f)) ;no tests in PyPI archive
41520 (native-inputs
41521 (list python-setuptools))
41522 (home-page "https://github.com/habnabit/vcversioner")
41523 (synopsis "Python library for version number discovery")
41524 (description
41525 "Vcversioner is a Python library that inspects tagging information in a
41526variety of version control systems in order to discover version numbers.")
41527 (license license:isc)))
41528
41529(define-public python-vdf
41530 (package
41531 (name "python-vdf")
41532 (version "3.4")
41533 (source
41534 (origin
41535 (method git-fetch) ; no tests in PyPI release
41536 (uri (git-reference
41537 (url "https://github.com/ValvePython/vdf")
41538 (commit (string-append "v" version))))
41539 (file-name (git-file-name name version))
41540 (sha256
41541 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
41542 (build-system pyproject-build-system)
41543 (native-inputs
41544 (list python-pytest python-setuptools))
41545 (home-page "https://github.com/ValvePython/vdf")
41546 (synopsis "Work with Valve's VDF text format")
41547 (description
41548 "This package provides @code{python-vdf}, a library for working with
41549 Valve's VDF text format.")
41550 (license license:expat)))
41551
41552(define-public python-vendetect
41553 (package
41554 (name "python-vendetect")
41555 (version "0.0.3")
41556 (source
41557 (origin
41558 (method url-fetch)
41559 (uri (pypi-uri "vendetect" version))
41560 (sha256
41561 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
41562 (build-system pyproject-build-system)
41563 (propagated-inputs (list python-copydetect python-rich))
41564 (native-inputs (list python-hatchling python-pytest))
41565 (home-page "https://github.com/trailofbits/vendetect")
41566 (synopsis "Detect vendored and copy-pasted code")
41567 (description
41568 "Vendetect helps identify copied or vendored code between repositories,
41569making it easier to detect when code has been copied with or without
41570attribution. It uses similarity detection algorithms to compare code files
41571and highlight matching sections.")
41572 (license license:agpl3+)))
41573
41574;; XXX: No updates since 2017.
41575(define-public python-verboselogs
41576 (package
41577 (name "python-verboselogs")
41578 (version "1.7")
41579 (source
41580 (origin
41581 (method url-fetch)
41582 (uri (pypi-uri "verboselogs" version))
41583 (sha256
41584 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
41585 (build-system pyproject-build-system)
41586 (arguments
41587 (list
41588 #:test-flags
41589 ;; Do not run pylint plugin test, as astroid is an old unsupported
41590 ;; version.
41591 #~(list "-k" "not test_pylint_plugin"
41592 "verboselogs/tests.py")))
41593 (native-inputs
41594 (list python-mock
41595 python-pytest
41596 python-setuptools))
41597 (home-page "https://verboselogs.readthedocs.io")
41598 (synopsis "Verbose logging level for Python's logging module")
41599 (description
41600 "The @code{verboselogs} package extends Python's @code{logging} module to
41601add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
41602 (license license:expat)))
41603
41604(define-public python-verlib2
41605 (package
41606 (name "python-verlib2")
41607 (version "0.3.1")
41608 (source
41609 (origin
41610 (method git-fetch)
41611 (uri (git-reference
41612 (url "https://github.com/pyveci/verlib2")
41613 (commit (string-append "v" version))))
41614 (file-name (git-file-name name version))
41615 (sha256
41616 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
41617 (build-system pyproject-build-system)
41618 (native-inputs
41619 (list python-pretend python-pytest python-setuptools))
41620 (home-page "https://github.com/pyveci/verlib2")
41621 (synopsis "Python versioning utilities")
41622 (description
41623 "This package provides a standalone variant of @code{distutils.version} and
41624@code{packaging.version}, without anything else.")
41625 (license license:bsd-2)))
41626
41627;; XXX: No updates since 2018, consider to remove when fails to build, it's a
41628;; leaf package.
41629(define-public python-version
41630 ;; No version tags available in the git repo; just using bare commit instead.
41631 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
41632 (revision "1"))
41633 (package
41634 (name "python-version")
41635 (version (git-version "0.0.2" revision commit))
41636 (source
41637 (origin
41638 (method git-fetch)
41639 (uri (git-reference
41640 (url "https://gitlab.com/halfak/python_version")
41641 (commit commit)))
41642 (file-name (git-file-name name version))
41643 (sha256
41644 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
41645 (build-system pyproject-build-system)
41646 (arguments
41647 (list #:tests? #f)) ;no tests
41648 (native-inputs
41649 (list python-setuptools))
41650 (home-page "https://gitlab.com/halfak/python_version")
41651 (synopsis "Python version checking utility")
41652 (description
41653 "This package provides a simple utility for checking the python version.")
41654 (license license:expat))))
41655
41656(define-public python-versioneer
41657 (package
41658 (name "python-versioneer")
41659 (version "0.29")
41660 (source
41661 (origin
41662 (method url-fetch)
41663 (uri (pypi-uri "versioneer" version))
41664 (sha256
41665 (base32
41666 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
41667 (patches (search-patches "python-versioneer-guix-support.patch"))))
41668 (build-system pyproject-build-system)
41669 (arguments
41670 (list
41671 ;; Minimize test requirements.
41672 #:test-flags
41673 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
41674 "--ignore=test/git/test_invocations.py"
41675 "--ignore=test/test_render.py")
41676 #:phases
41677 #~(modify-phases %standard-phases
41678 (add-before 'check 'pre-check
41679 (lambda _
41680 (invoke "python" "setup.py" "make_versioneer"
41681 "make_long_version_py_git"))))))
41682 (native-inputs
41683 (list git-minimal/pinned
41684 python-pytest
41685 python-setuptools
41686 python-wheel))
41687 (propagated-inputs
41688 (list python-tomli))
41689 (home-page "https://github.com/python-versioneer/python-versioneer")
41690 (synopsis "Version-string management for VCS-controlled trees")
41691 (description
41692 "@code{versioneer} is a tool for managing a recorded version number in
41693distutils-based python projects. The goal is to remove the tedious and
41694error-prone \"update the embedded version string\" step from your release
41695process.")
41696 (license license:unlicense)))
41697
41698(define-public python-verspec
41699 (package
41700 (name "python-verspec")
41701 (version "0.1.0")
41702 (source
41703 (origin
41704 (method url-fetch)
41705 (uri (pypi-uri "verspec" version))
41706 (sha256
41707 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
41708 (build-system pyproject-build-system)
41709 (arguments
41710 (list
41711 #:phases
41712 #~(modify-phases %standard-phases
41713 (add-before 'check 'pre-check
41714 (lambda _
41715 (invoke "touch" "test/__init__.py"))))))
41716 (native-inputs
41717 (list python-pretend
41718 python-pytest
41719 python-setuptools))
41720 (home-page "https://github.com/jimporter/verspec")
41721 (synopsis "Flexible version handling for Python")
41722 (description
41723 "This Python library handles software versions and specifiers. It is
41724adapted from the @code{packaging} package.")
41725 (license (list license:bsd-2 license:asl2.0))))
41726
41727(define-public python-vine
41728 (package
41729 (name "python-vine")
41730 (version "5.1.0")
41731 (source
41732 (origin
41733 (method url-fetch)
41734 (uri (pypi-uri "vine" version))
41735 (sha256
41736 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
41737 (build-system pyproject-build-system)
41738 (arguments
41739 (list
41740 #:test-flags
41741 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
41742 #~(list "-k" (string-join
41743 (list "not test_evaluate"
41744 "test_reverse"
41745 "test_cancel"
41746 "test_throw")
41747 " and not "))))
41748 (native-inputs
41749 (list python-pytest python-setuptools python-wheel))
41750 (home-page "https://github.com/celery/vine")
41751 (synopsis "Promises for Python")
41752 (description
41753 "@code{vine} provides a special implementation of promises in that it can
41754be used both for \"promise of a value\" and lazy evaluation. The biggest
41755upside for this is that everything in a promise can also be a promise,
41756e.g. filters, callbacks and errbacks can all be promises.")
41757 (license license:bsd-3)))
41758
41759(define-public python-virtualenv
41760 (package
41761 (name "python-virtualenv")
41762 (version "20.35.4")
41763 (source
41764 (origin
41765 (method git-fetch)
41766 (uri (git-reference
41767 (url "https://github.com/pypa/virtualenv")
41768 (commit version)))
41769 (file-name (git-file-name name version))
41770 (sha256
41771 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
41772 (build-system pyproject-build-system)
41773 (arguments
41774 (list
41775 ;; tests: 347 passed, 43 skipped, 8 deselected
41776 #:test-flags
41777 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
41778 (string-join ls "::")))
41779 '(("discovery/py_info/test_py_info.py"
41780 "test_fallback_existent_system_executable")
41781 ("discovery/test_discovery.py"
41782 "test_get_paths_no_path_env")
41783 ("create/via_global_ref/test_build_c_ext.py"
41784 "test_can_build_c_extensions[cpython3-posix]")
41785 ("create/via_global_ref/test_build_c_ext.py"
41786 "test_can_build_c_extensions[venv]")
41787 ("create/test_creator.py"
41788 "test_create_distutils_cfg[cpython3-posix]")
41789 ("create/test_creator.py"
41790 "test_create_distutils_cfg[venv]")
41791 ("seed/embed/test_bootstrap_link_via_app_data.py"
41792 "test_seed_link_via_app_data[True]")
41793 ("seed/embed/test_bootstrap_link_via_app_data.py"
41794 "test_seed_link_via_app_data[False]"))))))
41795 (native-inputs
41796 (list python-flaky
41797 python-hatch-vcs
41798 python-hatchling
41799 python-packaging
41800 python-pytest
41801 python-pytest-env
41802 python-pytest-freezer
41803 python-pytest-mock
41804 python-pytest-timeout
41805 python-setuptools
41806 python-time-machine))
41807 (propagated-inputs
41808 (list python-distlib
41809 python-filelock
41810 python-platformdirs))
41811 (home-page "https://virtualenv.pypa.io/")
41812 (synopsis "Virtual Python environment builder")
41813 (description
41814 "Virtualenv is a tool to create isolated Python environments.")
41815 (license license:expat)))
41816
41817(define-public python-vncdotool
41818 (package
41819 (name "python-vncdotool")
41820 (version "1.2.0")
41821 (source
41822 (origin
41823 (method git-fetch)
41824 (uri (git-reference
41825 (url "http://github.com/sibson/vncdotool")
41826 (commit (string-append "v" version))))
41827 (file-name (git-file-name name version))
41828 (sha256
41829 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
41830 (build-system pyproject-build-system)
41831 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
41832 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
41833 python-setuptools python-wheel))
41834 (home-page "http://github.com/sibson/vncdotool")
41835 (synopsis "Command line VNC client")
41836 (description
41837 "This package provides a Python command line VNC client. It can be
41838useful to automating interactions with virtual machines or hardware devices
41839that are otherwise difficult to control.")
41840 (license license:expat)))
41841
41842(define-public python-vncdotool-bootstrap
41843 (hidden-package
41844 (package/inherit python-vncdotool
41845 (arguments (list #:tests? #f))
41846 (native-inputs (list python-pexpect python-pytest python-setuptools
41847 python-wheel)))))
41848
41849(define-public python-vobject
41850 (package
41851 (name "python-vobject")
41852 (version "0.9.9")
41853 (source (origin
41854 (method url-fetch)
41855 (uri (pypi-uri "vobject" version))
41856 (sha256
41857 (base32
41858 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
41859 (build-system pyproject-build-system)
41860 (arguments
41861 '(;; The test suite relies on some non-portable Windows interfaces. Tests
41862 ;; are rewokred on master's HEAD.
41863 #:tests? #f))
41864 (native-inputs
41865 (list python-setuptools))
41866 (propagated-inputs
41867 (list python-dateutil
41868 python-pytz
41869 python-six)) ;it's dropped on master's HEAD
41870 (home-page "https://py-vobject.github.io/")
41871 (synopsis "Parse and generate vCard and vCalendar files")
41872 (description
41873 "Vobject is intended to be a full featured Python package for parsing
41874and generating vCard and vCalendar files. Currently, iCalendar files are
41875supported and well tested. vCard 3.0 files are supported, and all data should
41876be imported, but only a few components are understood in a sophisticated way.")
41877 (license license:asl2.0)))
41878
41879(define-public python-voluptuous
41880 (package
41881 (name "python-voluptuous")
41882 (version "0.15.2")
41883 (source
41884 (origin
41885 (method url-fetch)
41886 (uri (pypi-uri "voluptuous" version))
41887 (sha256
41888 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
41889 (build-system pyproject-build-system)
41890 (native-inputs
41891 (list python-pytest
41892 python-setuptools))
41893 (home-page "https://github.com/alecthomas/voluptuous")
41894 (synopsis "Python data validation library")
41895 (description
41896 "Voluptuous is a Python data validation library. It is primarily
41897intended for validating data coming into Python as JSON, YAML, etc.")
41898 (license license:bsd-3)))
41899
41900(define-public python-wadler-lindig
41901 (package
41902 (name "python-wadler-lindig")
41903 (version "0.1.7")
41904 (source
41905 (origin
41906 ;; GitHub includes the tests, unlike the PyPI tarball
41907 (method git-fetch)
41908 (uri (git-reference
41909 (url "https://github.com/patrick-kidger/wadler_lindig")
41910 (commit (string-append "v" version))))
41911 (file-name (git-file-name name version))
41912 (sha256
41913 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
41914 (build-system pyproject-build-system)
41915 (native-inputs (list python-hatchling python-pytest python-numpy))
41916 (home-page "https://docs.kidger.site/wadler_lindig")
41917 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
41918 (description
41919 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
41920library for Python that implements a simplified version of the Wadler-Lindig
41921algorithm. Designed to consume less horizontal space than Python's
41922built-in pprint.pprint, it produces compact, well-formatted representations
41923even for complex custom types.")
41924 (license license:asl2.0)))
41925
41926(define-public python-wait-for2
41927 (package
41928 (name "python-wait-for2")
41929 (version "0.4.1")
41930 (source
41931 (origin
41932 (method git-fetch)
41933 (uri (git-reference
41934 (url "https://github.com/Traktormaster/wait-for2")
41935 (commit (string-append "v" version))))
41936 (file-name (git-file-name name version))
41937 (sha256
41938 (base32 "08911yby18sw2y6njn1fqlwvf9j2aay0p5d3wykdlcj36nyxfv1w"))))
41939 (build-system pyproject-build-system)
41940 (native-inputs
41941 (list python-pytest
41942 python-pytest-asyncio
41943 python-setuptools))
41944 (home-page "https://github.com/Traktormaster/wait-for2")
41945 (synopsis "Asyncio wait_for handling simultaneous cancellation and future completion")
41946 (description
41947 "This package provide an alternate implementation of @code{asyncio.wait_for()}
41948introduced in Python 3.12. It handles several edge cases like simultaneous
41949cancellation of wait and completion of future differently and consistently
41950across Python versions 3.7+.")
41951 (license license:asl2.0)))
41952
41953(define-public python-wand
41954 (package
41955 (name "python-wand")
41956 (version "0.7.1")
41957 (source
41958 (origin
41959 (method git-fetch)
41960 (uri (git-reference
41961 (url "https://github.com/emcconville/wand")
41962 (commit version)))
41963 (file-name (git-file-name name version))
41964 (sha256
41965 (base32 "0yzv3jwbfg0h2n102718cw392gx2dkrbpj4b54khszrcgrsifa2a"))))
41966 (build-system pyproject-build-system)
41967 (arguments
41968 (list
41969 #:phases
41970 #~(modify-phases %standard-phases
41971 (add-after 'unpack 'hardcode-lib-path
41972 (lambda _
41973 (substitute* "wand/api.py"
41974 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
41975 (string-append "\"" #$(this-package-input "imagemagick") "\""))
41976 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
41977 "\".Q16\"")))))))
41978 (native-inputs
41979 (list python-setuptools python-pytest))
41980 (inputs
41981 (list imagemagick))
41982 (home-page "https://docs.wand-py.org/")
41983 (synopsis "MagickWand API binding for Python")
41984 (description
41985 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
41986 (license license:expat)))
41987
41988(define-public python-wasabi
41989 (package
41990 (name "python-wasabi")
41991 (version "1.1.3")
41992 (source
41993 (origin
41994 (method url-fetch)
41995 (uri (pypi-uri "wasabi" version))
41996 (sha256
41997 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
41998 (build-system pyproject-build-system)
41999 (arguments
42000 (list
42001 #:test-flags
42002 ;; Test requires nbconvert which is huge.
42003 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
42004 (native-inputs
42005 (list python-pytest
42006 python-setuptools))
42007 (propagated-inputs
42008 (list python-colorama))
42009 (home-page "https://github.com/ines/wasabi")
42010 (synopsis "Console printing and formatting toolkit")
42011 (description
42012 "This package provides a lightweight console printing and formatting
42013toolkit for Python.")
42014 (license license:expat)))
42015
42016(define-public python-watchdog
42017 (package
42018 (name "python-watchdog")
42019 (version "6.0.0")
42020 (source
42021 (origin
42022 (method url-fetch)
42023 (uri (pypi-uri "watchdog" version))
42024 (sha256
42025 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
42026 (build-system pyproject-build-system)
42027 (arguments
42028 (list
42029 #:test-flags
42030 #~(list "-k" (string-join
42031 (list "not test_kill_auto_restart"
42032 "test_auto_restart_on_file_change_debounce"
42033 ;; Fails with too many open files.
42034 "test_select_fd")
42035 " and not "))))
42036 (native-inputs
42037 (list python-pytest python-setuptools))
42038 (propagated-inputs
42039 (list python-pyyaml))
42040 (home-page "https://github.com/gorakhargosh/watchdog")
42041 (synopsis "File system events monitoring")
42042 (description
42043 "This package provides a way to monitor file system events such as a file
42044modification and trigger an action. This is similar to inotify, but
42045portable.")
42046 (license license:asl2.0)))
42047
42048(define-public python-watchfiles
42049 (package
42050 (name "python-watchfiles")
42051 (version "1.1.1")
42052 (source
42053 (origin
42054 (method git-fetch)
42055 (uri (git-reference
42056 (url "https://github.com/samuelcolvin/watchfiles")
42057 (commit (string-append "v" version))))
42058 (file-name (git-file-name name version))
42059 (sha256
42060 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
42061 (build-system pyproject-build-system)
42062 (arguments
42063 (list
42064 ;; Missing file in source.
42065 #:test-flags ''("-k" "not test_docs_examples")
42066 #:imported-modules `(,@%cargo-build-system-modules
42067 ,@%pyproject-build-system-modules)
42068 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
42069 (guix build pyproject-build-system)
42070 (guix build utils))
42071 #:phases
42072 #~(modify-phases %standard-phases
42073 (add-after 'unpack 'prepare-cargo-build-system
42074 (lambda args
42075 (for-each
42076 (lambda (phase)
42077 (format #t "Running cargo phase: ~a~%" phase)
42078 (apply (assoc-ref cargo:%standard-phases phase)
42079 #:cargo-target #$(cargo-triplet)
42080 args))
42081 '(unpack-rust-crates
42082 configure
42083 check-for-pregenerated-files
42084 patch-cargo-checksums))))
42085 (add-after 'build 'install-rust-library
42086 (lambda _
42087 (copy-file "target/release/lib_rust_notify.so"
42088 "watchfiles/_rust_notify.so"))))))
42089 (native-inputs
42090 (append
42091 (list maturin
42092 python-anyio
42093 python-dirty-equals
42094 python-pytest
42095 python-pytest-mock
42096 python-pytest-timeout
42097 rust
42098 `(,rust "cargo"))
42099 (or (and=> (%current-target-system)
42100 (compose list make-rust-sysroot))
42101 '())))
42102 (inputs
42103 (cargo-inputs 'python-watchfiles))
42104 (propagated-inputs
42105 (list python-anyio))
42106 (home-page "https://github.com/samuelcolvin/watchfiles")
42107 (synopsis "Simple, modern file watching and code reload in Python")
42108 (description
42109 "Simple, modern file watching and code reload in Python inspired by
42110@code{watchdog}. Among the differences are a unified approach for each
42111operating systems and an elegant approach to concurrency using threading.")
42112 (license license:expat)))
42113
42114(define-public python-wcmatch
42115 (package
42116 (name "python-wcmatch")
42117 (version "10.1")
42118 (source
42119 (origin
42120 (method git-fetch)
42121 (uri (git-reference
42122 (url "https://github.com/facelessuser/wcmatch")
42123 (commit version)))
42124 (file-name (git-file-name name version))
42125 (sha256
42126 (base32 "1pz6wyz2hlckl88y6z7v32sm5mfp2mqgar4z5f1kz7mixsdpmh41"))))
42127 (build-system pyproject-build-system)
42128 (arguments
42129 (list #:test-flags
42130 ;; ``test_glob_match_real_outside_curdir`` walks paths outside
42131 ;; the build directory which the sandbox does not permit.
42132 #~(list "-k" "not test_glob_match_real_outside_curdir")
42133 #:phases
42134 #~(modify-phases %standard-phases
42135 (add-before 'check 'set-home
42136 (lambda _
42137 (setenv "HOME" (getcwd)))))))
42138 (native-inputs
42139 (list python-hatchling
42140 python-pytest))
42141 (propagated-inputs
42142 (list python-bracex))
42143 (home-page "https://facelessuser.github.io/wcmatch/")
42144 (synopsis "Wildcard and glob file name matcher")
42145 (description
42146 "Wcmatch provides an enhanced @code{fnmatch}, @code{glob}, and
42147@code{pathlib} library. It adds features such as brace expansion,extended
42148glob patterns, and recursive globbing with configurable behavior.")
42149 (license license:expat)))
42150
42151(define-public python-wcwidth
42152 (package
42153 (name "python-wcwidth")
42154 (version "0.2.13")
42155 (source (origin
42156 (method url-fetch)
42157 (uri (pypi-uri "wcwidth" version))
42158 (sha256
42159 (base32
42160 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
42161 (build-system pyproject-build-system)
42162 (native-inputs (list python-pytest python-setuptools))
42163 (home-page "https://github.com/jquast/wcwidth")
42164 (synopsis "Measure number of terminal column cells of wide-character codes")
42165 (description
42166 "Wcwidth measures the number of terminal column cells of wide-character
42167codes. It is useful for those implementing a terminal emulator, or programs
42168that carefully produce output to be interpreted by one. It is a Python
42169implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
42170in POSIX.1-2001 and POSIX.1-2008.")
42171 (license license:expat)))
42172
42173(define-public python-whatever
42174 (package
42175 (name "python-whatever")
42176 (version "0.7")
42177 (source
42178 (origin
42179 (method git-fetch)
42180 (uri (git-reference
42181 (url "https://github.com/Suor/whatever")
42182 (commit version)))
42183 (file-name (git-file-name name version))
42184 (sha256
42185 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
42186 (build-system pyproject-build-system)
42187 (native-inputs
42188 (list python-pytest python-setuptools python-wheel))
42189 (home-page "https://github.com/Suor/whatever")
42190 (synopsis "Make anonymous functions by partial application of operators")
42191 (description "@code{whatever} provides an easy way to make anonymous
42192functions by partial application of operators.")
42193 (license license:bsd-3)))
42194
42195(define-public python-whatthepatch
42196 (package
42197 (name "python-whatthepatch")
42198 (version "1.0.7")
42199 (source
42200 (origin
42201 (method url-fetch)
42202 (uri (pypi-uri "whatthepatch" version))
42203 (sha256
42204 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
42205 (build-system pyproject-build-system)
42206 (native-inputs (list python-pytest python-setuptools))
42207 (home-page "https://github.com/cscorley/whatthepatch")
42208 (synopsis "Patch parsing and application library")
42209 (description
42210 "This package provides a patch parsing and application library.")
42211 (license license:expat)))
42212
42213(define-public python-wheel-filename
42214 (package
42215 (name "python-wheel-filename")
42216 (version "1.4.2")
42217 (source
42218 (origin
42219 (method url-fetch)
42220 (uri (pypi-uri "wheel_filename" version))
42221 (sha256
42222 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
42223 (build-system pyproject-build-system)
42224 (native-inputs (list python-hatchling python-pytest))
42225 (home-page "https://github.com/wheelodex/wheel-filename")
42226 (synopsis "Parse wheel filenames")
42227 (description
42228 "This software allows you to verify
42229@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
42230filenames and parse them into their component fields.
42231
42232This package adheres strictly to the standard, with the following
42233exceptions:
42234
42235@itemize @bullet
42236@item
42237Version components may be any sequence of the relevant set of
42238characters; they are not verified for PEP 440 compliance.
42239@item
42240The @file{.whl} file extension is matched case-insensitively.
42241@end itemize")
42242 (license license:expat)))
42243
42244(define-public python-whenever
42245 (package
42246 (name "python-whenever")
42247 (version "0.9.2")
42248 (source
42249 (origin
42250 (method url-fetch)
42251 (uri (pypi-uri "whenever" version))
42252 (sha256
42253 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
42254 (build-system pyproject-build-system)
42255 (arguments
42256 (list
42257 ;; tests: 2170 passed, 3 skipped, 2 warnings
42258 #:phases
42259 #~(modify-phases %standard-phases
42260 ;; Use the pure python version
42261 (add-before 'build 'setenv
42262 (lambda _
42263 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
42264 (add-before 'check 'set-check-environment
42265 (lambda* (#:key inputs #:allow-other-keys)
42266 (setenv "TZ" "UTC")
42267 (setenv "TZDIR"
42268 (search-input-directory inputs
42269 "share/zoneinfo")))))))
42270 (propagated-inputs
42271 (list python-time-machine python-tzdata python-tzlocal))
42272 (native-inputs
42273 (list python-pytest
42274 python-setuptools
42275 tzdata-for-tests))
42276 (home-page "https://whenever.readthedocs.io/")
42277 (synopsis "Modern datetime library for Python")
42278 (description "Modern datetime library for Python. Supports:
42279@itemize
42280@item DST-safe arithmetic
42281@item Nanosecond precision
42282@item Date arithmetic
42283@end itemize")
42284 (license license:expat)))
42285
42286;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
42287(define-public python-whichcraft
42288 (package
42289 (name "python-whichcraft")
42290 (version "0.6.1")
42291 (source
42292 (origin
42293 (method url-fetch)
42294 (uri (pypi-uri "whichcraft" version))
42295 (sha256
42296 (base32
42297 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
42298 (build-system pyproject-build-system)
42299 (native-inputs
42300 (list python-pytest python-setuptools))
42301 (home-page "https://github.com/pydanny/whichcraft")
42302 (synopsis "Cross-platform cross-python shutil.which functionality")
42303 (description
42304 "This package provides a shim of the shutil.which function that's
42305designed to work across multiple versions of Python.")
42306 (license license:bsd-3)))
42307
42308(define-public python-widgetsnbextension
42309 (package
42310 (name "python-widgetsnbextension")
42311 (version "4.0.14")
42312 (source
42313 (origin
42314 (method url-fetch)
42315 (uri (pypi-uri "widgetsnbextension" version))
42316 (sha256
42317 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
42318 (build-system pyproject-build-system)
42319 (arguments
42320 (list #:tests? #f)) ;no tests in PyPI or git
42321 (native-inputs
42322 (list python-jupyter-packaging
42323 python-setuptools))
42324 (home-page "https://ipython.org")
42325 (synopsis "IPython HTML widgets for Jupyter")
42326 (description "This package provides interactive HTML widgets for Jupyter
42327notebooks.")
42328 (license license:bsd-3)))
42329
42330(define-public python-wrapt
42331 (package
42332 (name "python-wrapt")
42333 (version "2.0.1")
42334 (source
42335 (origin
42336 (method url-fetch)
42337 (uri (pypi-uri "wrapt" version))
42338 (sha256
42339 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
42340 (build-system pyproject-build-system)
42341 (arguments
42342 (list
42343 ;; tests: 562 passed, 1 deselected
42344 #:test-flags
42345 ;; AssertionError: Output did not match expected for
42346 ;; mypy_function_wrapper_fn_t6.py
42347 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
42348 (native-inputs
42349 (list python-mypy-for-tests ;hard dependencies in tests
42350 python-pytest
42351 python-setuptools))
42352 (home-page "https://github.com/GrahamDumpleton/wrapt")
42353 (synopsis "Module for decorators, wrappers and monkey patching")
42354 (description
42355 "The aim of the wrapt module is to provide a transparent object proxy for
42356 Python, which can be used as the basis for the construction of function
42357 wrappers and decorator functions.")
42358 (license license:bsd-2)))
42359
42360(define-public python-wurlitzer
42361 (package
42362 (name "python-wurlitzer")
42363 (version "3.1.1")
42364 (source
42365 (origin
42366 (method url-fetch)
42367 (uri (pypi-uri "wurlitzer" version))
42368 (sha256
42369 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
42370 (build-system pyproject-build-system)
42371 (arguments
42372 (list #:test-flags #~(list "test.py")))
42373 (native-inputs
42374 (list python-pytest
42375 python-setuptools))
42376 (home-page "https://github.com/minrk/wurlitzer")
42377 (synopsis "Capture C-level output in context managers")
42378 (description
42379 "This library helps to redirect @code{sys.stdout} to a stream or a file
42380while executing some piece of code, including C code running within a Python
42381process.")
42382 (license license:expat)))
42383
42384(define-public python-xattr
42385 (package
42386 (name "python-xattr")
42387 (version "1.2.0")
42388 (source
42389 (origin
42390 (method url-fetch)
42391 (uri (pypi-uri "xattr" version))
42392 (sha256
42393 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
42394 (build-system pyproject-build-system)
42395 (native-inputs
42396 (list python-pytest
42397 python-setuptools))
42398 (propagated-inputs
42399 (list python-cffi))
42400 (home-page "https://github.com/xattr/xattr")
42401 (synopsis "Python wrapper for extended file system attributes")
42402 (description "This package provides a Python wrapper for using extended
42403file system attributes. Extended attributes extend the basic attributes of files
42404and directories in the file system. They are stored as name:data pairs
42405associated with file system objects (files, directories, symlinks, etc).")
42406 (license license:expat)))
42407
42408(define-public python-xdg-base-dirs
42409 (package
42410 (name "python-xdg-base-dirs")
42411 (version "6.0.2")
42412 (source
42413 (origin
42414 (method git-fetch)
42415 (uri (git-reference
42416 (url "https://github.com/srstevenson/xdg-base-dirs")
42417 (commit version)))
42418 (file-name (git-file-name name version))
42419 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
42420 (modules '((guix build utils)))
42421 ;; All pytest options are for coverage; remove snippet in next release:
42422 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
42423 (snippet #~(substitute* "pyproject.toml"
42424 (("^addopts = .*") "")))))
42425 (build-system pyproject-build-system)
42426 (native-inputs
42427 (list python-poetry-core python-pytest))
42428 (home-page "https://github.com/srstevenson/xdg-base-dirs")
42429 (synopsis "Variables defined by the XDG Base Directory Specification")
42430 (description "xdg-base-dirs is a Python module that provides functions to
42431return paths to the directories defined by the XDG Base Directory
42432Specification, to save you from duplicating the same snippet of logic in every
42433Python utility you write that deals with user cache, configuration, or data
42434files.")
42435 (license license:isc)))
42436
42437;; XXX: Deprecated on <2026-02-19>.
42438(define-deprecated-package python-xdg
42439 python-xdg-base-dirs)
42440
42441(define-public python-xkbcommon
42442 (package
42443 (name "python-xkbcommon")
42444 (version "1.0.1")
42445 (source
42446 (origin
42447 (method git-fetch)
42448 (uri (git-reference
42449 (url "https://github.com/sde1000/python-xkbcommon")
42450 (commit (string-append "v" version))))
42451 (file-name (git-file-name name version))
42452 (sha256
42453 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
42454 (build-system pyproject-build-system)
42455 (propagated-inputs (list python-cffi))
42456 (native-inputs (list libxkbcommon python-setuptools))
42457 (arguments
42458 (list
42459 #:test-backend
42460 #~'unittest
42461 #:phases
42462 #~(modify-phases %standard-phases
42463 (add-before 'check 'cleanup
42464 (lambda _
42465 (delete-file-recursively "xkbcommon"))))))
42466 (home-page "https://github.com/sde1000/python-xkbcommon")
42467 (synopsis "Bindings for libxkbcommon using cffi")
42468 (description "Bindings for libxkbcommon using cffi.")
42469 (license license:expat)))
42470
42471(define-public python-xlib
42472 (package
42473 (name "python-xlib")
42474 (version "0.33")
42475 (source
42476 (origin
42477 (method git-fetch)
42478 (uri (git-reference
42479 (url "https://github.com/python-xlib/python-xlib")
42480 (commit version)))
42481 (file-name (git-file-name name version))
42482 (sha256
42483 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
42484 (build-system pyproject-build-system)
42485 (arguments
42486 `(#:phases
42487 (modify-phases %standard-phases
42488 (add-before 'check 'start-xserver
42489 (lambda* (#:key inputs #:allow-other-keys)
42490 (let ((xorg-server (assoc-ref inputs "xorg-server")))
42491 ;; There must be a running X server and make check doesn't
42492 ;; start one. Therefore we must do it.
42493 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
42494 (setenv "DISPLAY" ":1")))))))
42495 (native-inputs
42496 (list python-mock
42497 python-pytest
42498 python-setuptools
42499 xorg-server))
42500 (propagated-inputs
42501 (list python-six))
42502 (home-page "https://github.com/python-xlib/python-xlib")
42503 (synopsis "Python X11 client library")
42504 (description
42505 "The Python X Library is intended to be a fully functional
42506X client library for Python programs. It is useful to implement
42507low-level X clients. It is written entirely in Python.")
42508 (license license:gpl2+)))
42509
42510(define-public python-xlrd
42511 (package
42512 (name "python-xlrd")
42513 (version "2.0.2")
42514 (source
42515 (origin
42516 (method git-fetch) ;no tests in PyPI archive
42517 (uri (git-reference
42518 (url "https://github.com/python-excel/xlrd")
42519 (commit version)))
42520 (file-name (git-file-name name version))
42521 (sha256
42522 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
42523 (build-system pyproject-build-system)
42524 (native-inputs
42525 (list python-pytest
42526 python-setuptools))
42527 (home-page "https://www.python-excel.org/")
42528 (synopsis "Library for extracting data from Excel files")
42529 (description "This package provides a library to extract data from
42530spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
42531@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
42532Unicode-aware. It is not intended as an end-user tool.")
42533 (license license:bsd-3)))
42534
42535(define-public python-xlsxwriter
42536 (package
42537 (name "python-xlsxwriter")
42538 (version "3.2.0")
42539 (source
42540 (origin
42541 ;; There are no tests in the PyPI tarball.
42542 (method git-fetch)
42543 (uri (git-reference
42544 (url "https://github.com/jmcnamara/XlsxWriter")
42545 (commit (string-append "RELEASE_" version))))
42546 (file-name (git-file-name name version))
42547 (sha256
42548 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
42549 (build-system pyproject-build-system)
42550 (native-inputs
42551 (list python-setuptools
42552 python-wheel))
42553 (home-page "https://github.com/jmcnamara/XlsxWriter")
42554 (synopsis "Python module for creating Excel XLSX files")
42555 (description
42556 "XlsxWriter is a Python module that can be used to write text, numbers,
42557formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
42558 (license license:bsd-2)))
42559
42560;;; Note: this package is unmaintained since 2018 (archived on GitHub).
42561(define-public python-xlwt
42562 (package
42563 (name "python-xlwt")
42564 (version "1.3.0")
42565 (source
42566 (origin
42567 (method url-fetch)
42568 (uri (pypi-uri "xlwt" version))
42569 (sha256
42570 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
42571 (build-system pyproject-build-system)
42572 (native-inputs (list python-pytest python-setuptools python-wheel))
42573 (home-page "https://www.python-excel.org/")
42574 (synopsis "Library for creating spreadsheet Excel files")
42575 (description
42576 "@code{xlwt} is a library for writing data and formatting information to
42577older Excel files (i.e. .xls). The package itself is pure Python with no
42578dependencies on modules or packages outside the standard Python distribution.
42579It is not intended as an end-user tool.")
42580 (license license:bsd-3)))
42581
42582(define-public python-xmldiff
42583 (package
42584 (name "python-xmldiff")
42585 (version "3.0b1")
42586 (source
42587 (origin
42588 (method git-fetch)
42589 (uri (git-reference
42590 (url "https://github.com/Shoobx/xmldiff")
42591 (commit version)))
42592 (file-name (git-file-name name version))
42593 (sha256
42594 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
42595 (build-system pyproject-build-system)
42596 (native-inputs (list python-pytest python-setuptools))
42597 (propagated-inputs (list python-lxml))
42598 (home-page "https://github.com/Shoobx/xmldiff")
42599 (synopsis "Creates diffs of XML files")
42600 (description "This Python tool figures out the differences between two
42601similar XML files, in the same way the @command{diff} utility does it.")
42602 (license license:expat)))
42603
42604(define-public python-xmlsec
42605 (package
42606 (name "python-xmlsec")
42607 (version "1.3.17")
42608 (source
42609 (origin
42610 (method git-fetch)
42611 (uri (git-reference
42612 (url "https://github.com/xmlsec/python-xmlsec")
42613 (commit version)))
42614 (file-name (git-file-name name version))
42615 (sha256
42616 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
42617 (build-system pyproject-build-system)
42618 (arguments
42619 (list
42620 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
42621 #:test-flags #~(list "-n" "1")))
42622 (inputs (list openssl libltdl libxslt libxml2))
42623 (propagated-inputs (list python-lxml xmlsec-openssl))
42624 (native-inputs (list pkg-config
42625 python-lxml
42626 python-pkgconfig
42627 python-pytest
42628 python-pytest-xdist
42629 python-setuptools
42630 python-setuptools-scm
42631 python-wheel))
42632 (home-page "https://github.com/xmlsec/python-xmlsec")
42633 (synopsis "Python bindings for the XML Security Library")
42634 (description "This package provides Python bindings for the XML Security
42635Library.")
42636 (license license:expat)))
42637
42638(define-public python-xmp-toolkit
42639 (package
42640 (name "python-xmp-toolkit")
42641 (version "2.1.0")
42642 (source
42643 (origin
42644 (method url-fetch)
42645 (uri (pypi-uri "python_xmp_toolkit" version))
42646 (sha256
42647 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
42648 (build-system pyproject-build-system)
42649 (arguments
42650 (list
42651 #:phases
42652 #~(modify-phases %standard-phases
42653 (add-after 'unpack 'patch-source
42654 (lambda* (#:key inputs #:allow-other-keys)
42655 (substitute* "libxmp/exempi.py"
42656 (("ctypes.util.find_library\\('exempi'\\)")
42657 (format #f "~s" (search-input-file
42658 inputs "lib/libexempi.so")))))))))
42659 (native-inputs
42660 (list python-pytest
42661 python-flit-core))
42662 (inputs
42663 (list exempi))
42664 (propagated-inputs
42665 (list python-pytz))
42666 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
42667 (synopsis "Python XMP Toolkit for working with metadata")
42668 (description "Python XMP Toolkit is a library for working with XMP
42669metadata, as well as reading/writing XMP metadata stored in many different
42670file formats.
42671
42672Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
42673based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
42674are easily incorporated into the library with a minimum amount of work.")
42675 (license license:bsd-3)))
42676
42677(define-public python-yamlcore
42678 (package
42679 (name "python-yamlcore")
42680 (version "0.0.4")
42681 (source
42682 (origin
42683 (method git-fetch)
42684 (uri (git-reference
42685 (url "https://github.com/perlpunk/pyyaml-core")
42686 (commit (string-append "v" version))))
42687 (file-name (git-file-name name version))
42688 (sha256
42689 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
42690 (build-system pyproject-build-system)
42691 (arguments
42692 (list
42693 #:phases
42694 #~(modify-phases %standard-phases
42695 (add-after 'unpack 'fix-test-file-names
42696 (lambda _
42697 (rename-file "tests/test-schema.py" "tests/test_schema.py")
42698 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
42699 (native-inputs (list python-pytest python-setuptools))
42700 (inputs (list python-pyyaml))
42701 (home-page "https://github.com/perlpunk/pyyaml-core")
42702 (synopsis "YAML 1.2 support for PyYAML")
42703 (description "This module can be used on top of PyYAML to load YAML 1.2
42704files.")
42705 (license license:expat)))
42706
42707(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
42708
42709(define-public python-yamllint
42710 (package
42711 (name "python-yamllint")
42712 (version "1.37.1")
42713 (source
42714 (origin
42715 (method url-fetch)
42716 (uri (pypi-uri "yamllint" version))
42717 (sha256
42718 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
42719 (build-system pyproject-build-system)
42720 (arguments
42721 (list #:test-backend #~'unittest))
42722 (native-inputs
42723 (list python-setuptools))
42724 (propagated-inputs
42725 (list python-pathspec python-pyyaml))
42726 (home-page "https://github.com/adrienverge/yamllint")
42727 (synopsis "Linter for YAML files")
42728 (description
42729 "Yamllint is a linter for YAML files. yamllint does not only check for
42730syntax validity, but for weirdnesses like key repetition and cosmetic problems
42731such as lines length, trailing spaces, indentation, etc.")
42732 (license license:gpl3+)))
42733
42734(define-public python-yamlloader
42735 (package
42736 (name "python-yamlloader")
42737 (version "1.6.0")
42738 (source
42739 (origin
42740 (method url-fetch)
42741 (uri (pypi-uri "yamlloader" version))
42742 (sha256
42743 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
42744 (build-system pyproject-build-system)
42745 (arguments
42746 (list #:test-backend #~'unittest
42747 #:test-flags #~(list "discover" "-v")))
42748 (native-inputs
42749 (list python-hatch-vcs
42750 python-hatchling
42751 python-hypothesis
42752 python-pytest))
42753 (propagated-inputs
42754 (list python-pyyaml))
42755 (home-page "https://github.com/Phynix/yamlloader")
42756 (synopsis "Ordered YAML loader and dumper for PyYAML")
42757 (description
42758 "This package provides loaders and dumpers for PyYAML. Currently, an
42759OrderedDict loader/dumper is implemented, allowing to keep items order when
42760loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
42761dicts are supported and are the default items to be loaded to. As of Python
427623.7 preservation of insertion order is a language feature of regular dicts.)
42763It was originally mirrored from
42764@url{https://github.com/fmenabe/python-yamlordereddictloader,
42765yamlordereddict}.")
42766 (license license:expat)))
42767
42768;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
42769;; an improved version of this library with unit tests, performance
42770;; improvements (by providing access to the C implementation of PyYAML) and is
42771;; more actively developed.
42772(define-public python-yamlordereddictloader
42773 (package
42774 (name "python-yamlordereddictloader")
42775 (version "0.4.2")
42776 (source
42777 (origin
42778 (method git-fetch)
42779 (uri (git-reference
42780 (url "https://github.com/fmenabe/python-yamlordereddictloader")
42781 (commit version)))
42782 (file-name (git-file-name name version))
42783 (sha256
42784 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
42785 (build-system pyproject-build-system)
42786 (arguments
42787 (list #:tests? #f)) ;no tests
42788 (native-inputs
42789 (list python-setuptools))
42790 (propagated-inputs
42791 (list python-pyyaml))
42792 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
42793 (synopsis "Loader and a dumper for PyYAML")
42794 (description
42795 "yamlordereddictloader is a Python package that provides a loader and a
42796dumper for PyYAML allowing to keep items order when loading a file (by putting
42797them in OrderedDict objects) and to manage OrderedDict objects when dumping to
42798a file.")
42799 (license license:expat)))
42800
42801(define-public python-yapf
42802 (package
42803 (name "python-yapf")
42804 (version "0.43.0")
42805 (source
42806 (origin
42807 (method url-fetch)
42808 (uri (pypi-uri "yapf" version))
42809 (sha256
42810 (base32
42811 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
42812 (build-system pyproject-build-system)
42813 (propagated-inputs
42814 (list python-platformdirs python-tomli))
42815 (native-inputs
42816 (list python-pytest python-setuptools python-wheel))
42817 (home-page "https://github.com/google/yapf")
42818 (synopsis "Formatter for Python code")
42819 (description "YAPF is a formatter for Python code. It's based off of
42820@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
42821takes the code and reformats it to the best formatting that conforms to the
42822style guide, even if the original code didn't violate the style guide.")
42823 (license license:asl2.0)))
42824
42825(define-public python-yapsy
42826 (package
42827 (name "python-yapsy")
42828 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
42829 ;; 3.12+; move back to git tag when released.
42830 (properties '((commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
42831 (revision . "0")))
42832 (version (git-version "1.12.2"
42833 (assoc-ref properties 'revision)
42834 (assoc-ref properties 'commit)))
42835 (source
42836 (origin
42837 (method git-fetch)
42838 (uri (git-reference
42839 (url "https://github.com/tibonihoo/yapsy")
42840 (commit (assoc-ref properties 'commit))))
42841 (file-name (git-file-name name version))
42842 (sha256
42843 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
42844 (build-system pyproject-build-system)
42845 (native-inputs
42846 (list python-pytest python-setuptools))
42847 (home-page "https://yapsy.sourceforge.net")
42848 (synopsis "Simple plugin system for Python applications")
42849 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
42850implementing the core mechanisms needed to build a plugin system into a wider
42851application.
42852
42853The main purpose is to depend only on Python's standard libraries and to
42854implement only the basic functionalities needed to detect, load and keep track
42855of several plugins.")
42856 (license license:bsd-3)))
42857
42858(define-public python-yaspin
42859 (package
42860 (name "python-yaspin")
42861 (version "3.2.0")
42862 (source
42863 (origin
42864 (method url-fetch)
42865 (uri
42866 (pypi-uri "yaspin" version))
42867 (sha256
42868 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
42869 (build-system pyproject-build-system)
42870 ;; tests: 3007 passed, 1758 skipped
42871 (native-inputs
42872 (list python-poetry-core
42873 python-pytest
42874 python-pytest-mock))
42875 (propagated-inputs
42876 (list python-termcolor-next))
42877 (home-page "https://github.com/pavdmyt/yaspin")
42878 (synopsis "Yet Another Terminal Spinner")
42879 (description "Yaspin provides a terminal spinner to indicate the progress
42880during long operations.")
42881 (license license:expat)))
42882
42883(define-public python-yattag
42884 (package
42885 (name "python-yattag")
42886 (version "1.16.1")
42887 (source
42888 (origin
42889 (method url-fetch)
42890 (uri (pypi-uri "yattag" version))
42891 (sha256
42892 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
42893 (build-system pyproject-build-system)
42894 (native-inputs
42895 (list python-pytest
42896 python-setuptools
42897 python-wheel))
42898 (home-page "https://www.yattag.org/")
42899 (synopsis "HTML or XML generator for Python")
42900 (description
42901 "Yattag is a Python library for generating HTML or XML in a pythonic
42902way.")
42903 (license license:lgpl2.1)))
42904
42905(define-public python-yq
42906 (package
42907 (name "python-yq")
42908 (version "3.4.3")
42909 (source
42910 (origin
42911 (method url-fetch)
42912 (uri (pypi-uri "yq" version))
42913 (sha256
42914 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
42915 (build-system pyproject-build-system)
42916 (arguments
42917 (list
42918 #:test-backend #~'custom
42919 #:test-flags #~(list "test/test.py" "-v")
42920 #:phases
42921 #~(modify-phases %standard-phases
42922 (add-after 'unpack 'patch
42923 (lambda _
42924 (substitute* "yq/__init__.py"
42925 (("Popen\\(\\[\"jq")
42926 (string-append
42927 "Popen([\""
42928 #$(this-package-input "jq") "/bin/jq"))))))))
42929 (native-inputs
42930 (list python-hatchling
42931 python-hatch-vcs))
42932 (inputs
42933 (list jq))
42934 (propagated-inputs
42935 (list python-argcomplete
42936 python-pyyaml
42937 python-tomlkit
42938 python-xmltodict))
42939 (home-page "https://github.com/kislyuk/yq")
42940 (synopsis "Command-line YAML/XML processor")
42941 (description
42942 "This package provides @command{yq} and @command{xq} for processing YAML
42943and XML respectively. The processing is done through @command{jq},
42944@command{jq} filters can be used to process the data as it passes through.")
42945 (license license:asl2.0)))
42946
42947(define-public python-yte
42948 (package
42949 (name "python-yte")
42950 (version "1.8.1") ;TODO higher versions depend on uv_build
42951 (source
42952 (origin
42953 (method git-fetch)
42954 (uri (git-reference
42955 (url "https://github.com/koesterlab/yte")
42956 (commit (string-append "v" version))))
42957 (sha256
42958 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
42959 (build-system pyproject-build-system)
42960 (arguments
42961 (list
42962 #:test-flags #~(list "tests.py")
42963 #:phases
42964 '(modify-phases %standard-phases
42965 (add-after 'unpack 'set-HOME
42966 (lambda _ (setenv "HOME" "/tmp"))))))
42967 (propagated-inputs (list python-dpath python-plac python-pyyaml))
42968 (native-inputs (list python-numpy python-poetry-core python-pytest))
42969 (home-page "https://github.com/koesterlab/yte")
42970 (synopsis "YAML template engine with Python expressions")
42971 (description
42972 "This package provides a YAML template engine with Python expressions.")
42973 (license license:expat)))
42974
42975(define-public python-zarr
42976 (package
42977 (name "python-zarr")
42978 (version "2.18.7")
42979 (source
42980 (origin
42981 (method url-fetch)
42982 (uri (pypi-uri "zarr" version))
42983 (sha256
42984 (base32
42985 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
42986 (build-system pyproject-build-system)
42987 (arguments
42988 (list
42989 #:test-flags
42990 #~(list "--numprocesses" (number->string (parallel-job-count))
42991 ;; This tests are flaky. The pass several times on my laptop
42992 ;; but occasionally fail. They fail pretty reliably on the
42993 ;; build farm.
42994 "-k" (string-append "not test_lazy_loader and not open_array"
42995 ;; File not found.
42996 " and not test_filesystem_path"))
42997 #:phases
42998 #~(modify-phases %standard-phases
42999 (add-before 'build 'set-version
43000 (lambda _
43001 (substitute* "pyproject.toml"
43002 (("^version_file.*") "")
43003 (("dynamic = \\[\"version\"\\]")
43004 (string-append "version = \"" #$version "\"")))))
43005 (add-after 'unpack 'disable-service-tests
43006 (lambda _
43007 (setenv "ZARR_TEST_ABS" "0")
43008 (setenv "ZARR_TEST_MONGO" "0")
43009 (setenv "ZARR_TEST_REDIS" "0"))))))
43010 (propagated-inputs
43011 (list python-asciitree
43012 python-fasteners
43013 python-numcodecs
43014 python-numpy))
43015 (native-inputs
43016 (list python-pytest
43017 python-pytest-xdist
43018 python-setuptools
43019 python-wheel))
43020 (home-page "https://github.com/zarr-developers/zarr-python")
43021 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
43022 (description
43023 "This package provides an implementation of chunked, compressed,
43024N-dimensional arrays for Python.")
43025 (license license:expat)))
43026
43027(define-public python-zeroc-ice
43028 (package
43029 (name "python-zeroc-ice")
43030 (version "3.7.10.1")
43031 (source (origin
43032 (method url-fetch)
43033 (uri (pypi-uri "zeroc-ice" version))
43034 (sha256
43035 (base32
43036 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
43037 (build-system pyproject-build-system)
43038 (arguments
43039 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
43040 ;; tag.
43041 ;;
43042 ;; See:
43043 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
43044 ;; - File: <ice/refs/heads/main/python/allTests.py>
43045 (list #:tests? #f))
43046 (inputs (list openssl))
43047 (native-inputs (list python-setuptools))
43048 (home-page "https://zeroc.com")
43049 (synopsis "RPC framework")
43050 (description
43051 "Ice is a comprehensive RPC framework. Ice helps you network your
43052software by taking care of all interactions with low-level network programming
43053interfaces.")
43054 (license license:gpl2)))
43055
43056;; Package variant to build [email protected]
43057(define-public python-zeroc-ice-3.6
43058 (package
43059 (inherit python-zeroc-ice)
43060 (version "3.6.5")
43061 (source (origin
43062 (method url-fetch)
43063 (uri (pypi-uri "zeroc-ice" version))
43064 (sha256
43065 (base32
43066 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
43067 (patches
43068 (search-patches
43069 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
43070 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
43071 (arguments
43072 (substitute-keyword-arguments arguments
43073 ((#:phases phases #~%standard-phases)
43074 #~(modify-phases #$phases
43075 (add-before 'build 'relax-gcc-14-strictness
43076 (lambda _
43077 (setenv "CFLAGS"
43078 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
43079
43080(define-public python-zeroconf
43081 (package
43082 (name "python-zeroconf")
43083 (version "0.38.1")
43084 (source
43085 (origin
43086 (method git-fetch)
43087 (uri (git-reference
43088 (url "https://github.com/jstasiak/python-zeroconf")
43089 (commit version)))
43090 (file-name (git-file-name name version))
43091 (sha256
43092 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
43093 (build-system pyproject-build-system)
43094 (arguments
43095 (list
43096 #:test-flags
43097 #~(list
43098 "-k" (string-append
43099 ;; XXX: Despite asyncio, this test fails.
43100 "not test_run_coro_with_timeout and not "
43101 ;; XXX: Networking isn't available.
43102 (string-join
43103 (list "test_integration_with_listener_ipv6"
43104 "test_launch_and_close_v4_v6"
43105 "test_launch_and_close_context_manager"
43106 "test_launch_and_close"
43107 "test_close_multiple_times")
43108 " and not ")))))
43109 (native-inputs
43110 (list python-pytest python-pytest-asyncio python-setuptools))
43111 (propagated-inputs
43112 (list python-ifaddr))
43113 (home-page "https://github.com/jstasiak/python-zeroconf")
43114 (synopsis "Pure Python mDNS service discovery")
43115 (description "Pure Python multicast DNS (mDNS) service discovery library
43116(Bonjour/Avahi compatible).")
43117 (license license:lgpl2.1+)))
43118
43119(define-public python-zict
43120 (package
43121 (name "python-zict")
43122 (version "3.0.0")
43123 (source
43124 (origin
43125 (method url-fetch)
43126 (uri (pypi-uri "zict" version))
43127 (sha256
43128 (base32
43129 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
43130 (build-system pyproject-build-system)
43131 (arguments
43132 (list
43133 #:test-flags
43134 ;; This uses "importorskip", but it won't skip.
43135 '(list "--ignore=tests/test_lmdb.py")))
43136 (propagated-inputs
43137 (list python-heapdict))
43138 (native-inputs
43139 (list python-pytest
43140 python-pytest-asyncio
43141 python-pytest-repeat
43142 python-pytest-timeout
43143 python-setuptools
43144 python-wheel))
43145 (home-page "https://zict.readthedocs.io/en/latest/")
43146 (synopsis "Composable mutable mapping tools")
43147 (description "This package provides abstract @code{MutableMapping} classes
43148that consume and build on other @code{MutableMappings}. Several of these can
43149be composed with one another to form intuitive interfaces over complex storage
43150systems policies.")
43151 (license license:bsd-3)))
43152
43153(define-public python-zipfly
43154 (package
43155 (name "python-zipfly")
43156 (version "6.0.5")
43157 (source
43158 (origin
43159 (method url-fetch)
43160 (uri (pypi-uri "zipfly" version))
43161 (sha256
43162 (base32
43163 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
43164 (build-system pyproject-build-system)
43165 (arguments
43166 (list #:test-backend #~'unittest))
43167 (native-inputs (list python-setuptools))
43168 (home-page "https://github.com/sandes/zipfly")
43169 (synopsis "Zip archive generator")
43170 (description "ZipFly is a zip archive generator. It was created to
43171generate very large zip archives for immediate sending out to clients, or
43172for writing large zip archives without memory inflation.")
43173 (license license:expat)))
43174
43175(define-public python-zipstream-new
43176 (package
43177 (name "python-zipstream-new")
43178 (version "1.1.8")
43179 (source
43180 (origin
43181 (method git-fetch) ; no tests in PyPI release
43182 (uri (git-reference
43183 (url "https://github.com/arjan-s/python-zipstream")
43184 (commit (string-append "v" version))))
43185 (file-name (git-file-name name version))
43186 (sha256
43187 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
43188 (build-system pyproject-build-system)
43189 (arguments
43190 (list #:test-backend #~'unittest))
43191 (native-inputs (list python-setuptools))
43192 (home-page "https://github.com/arjan-s/python-zipstream")
43193 (synopsis "Zipfile generator that takes input files as well as streams")
43194 (description "@code{zipstream.py} is a zip archive generator based on
43195@code{zipfile.py}. It was created to generate a zip file generator for
43196streaming. This is beneficial for when you want to provide a downloadable
43197archive of a large collection of regular files, which would be infeasible
43198to generate the archive prior to downloading or of a very large file that
43199you do not want to store entirely on disk or on memory.")
43200 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
43201 (license license:gpl3)))
43202
43203(define-public shrinkwrap
43204 (package
43205 (name "shrinkwrap")
43206 (version "0.1.0")
43207 (source
43208 (origin
43209 (method git-fetch)
43210 (uri (git-reference
43211 (url "https://github.com/fzakaria/shrinkwrap")
43212 (commit (string-append "v" version))))
43213 (file-name (git-file-name name version))
43214 (sha256
43215 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
43216 (build-system pyproject-build-system)
43217 (native-inputs
43218 (list python-click
43219 python-poetry-core
43220 python-pypa-build
43221 python-pytest))
43222 (inputs (list python-lief python-sh))
43223 (home-page "https://github.com/fzakaria/shrinkwrap")
43224 (synopsis "Emboss needed dependencies on the top level executable")
43225 (description
43226 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
43227shared objects, and lift them up to the executable referenced by absolute
43228path.")
43229 (license license:expat)))
43230
43231(define-public staticsite
43232 (package
43233 (name "staticsite")
43234 (version "2.5")
43235 (source
43236 (origin
43237 (method git-fetch)
43238 (uri (git-reference
43239 (url "https://github.com/spanezz/staticsite")
43240 (commit (string-append "v" version))))
43241 (file-name (git-file-name name version))
43242 (sha256
43243 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
43244 (build-system pyproject-build-system)
43245 (arguments
43246 (list
43247 #:phases
43248 #~(modify-phases %standard-phases
43249 (add-after 'unpack 'use-themes-in-output
43250 (lambda _
43251 (substitute* "staticsite/global_settings.py"
43252 (("/usr/share/staticsite") #$output))))
43253 (add-after 'install 'install-themes
43254 (lambda _
43255 (let ((themedir (string-append #$output "/themes")))
43256 (copy-recursively "themes" themedir)))))))
43257 (native-inputs
43258 (list python-hatchling
43259 python-pytest))
43260 (inputs
43261 (list perl-image-exiftool
43262 python-dateutil
43263 python-docutils
43264 python-jinja2
43265 python-markdown
43266 python-pillow
43267 python-pytz
43268 python-pyyaml
43269 python-ruamel.yaml
43270 python-slugify
43271 python-toml
43272 tzdata-for-tests))
43273 (home-page "https://github.com/spanezz/staticsite")
43274 (synopsis "Static site generator")
43275 (description
43276 "Statistic is a static site generator based on Markdown and Jinja2.")
43277 (license (list license:gpl3+ license:expat))))
43278
43279;;;
43280;;; Avoid adding new packages to the end of this file. To reduce the chances
43281;;; of a merge conflict, place them above in alphabetic order:
43282;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
43283;;;