projects/guix·blob ruby-team · refs

43618 lines · 1.5 MiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013-2025 Ludovic Courtès <[email protected]>
4;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2023 Andreas Enge <[email protected]>
5;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
6;;; Copyright © 2014, 2017, 2021, 2022, 2024 Eric Bavier <[email protected]>
7;;; Copyright © 2014, 2015 Federico Beffa <[email protected]>
8;;; Copyright © 2015 Omar Radwan <[email protected]>
9;;; Copyright © 2015 Pierre-Antoine Rault <[email protected]>
10;;; Copyright © 2015-2026 Ricardo Wurmus <[email protected]>
11;;; Copyright © 2015, 2016, 2020 Christine Lemmer-Webber <[email protected]>
12;;; Copyright © 2015 Eric Dvorsak <[email protected]>
13;;; Copyright © 2015, 2016 David Thompson <[email protected]>
14;;; Copyright © 2015, 2016, 2017, 2019, 2022 Leo Famulari <[email protected]>
15;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
16;;; Copyright © 2015, 2016 Erik Edrosa <[email protected]>
17;;; Copyright © 2015-2026 Efraim Flashner <[email protected]>
18;;; Copyright © 2015, 2017, 2020 Kyle Meyer <[email protected]>
19;;; Copyright © 2015, 2016 Chris Marusich <[email protected]>
20;;; Copyright © 2016 Danny Milosavljevic <[email protected]>
21;;; Copyright © 2016 Lukas Gradl <[email protected]>
22;;; Copyright © 2016, 2018, 2019, 2021 Hartmut Goebel <[email protected]>
23;;; Copyright © 2016 Daniel Pimentel <[email protected]>
24;;; Copyright © 2016 Sou Bunnbu <[email protected]>
25;;; Copyright © 2016, 2017 Troy Sankey <[email protected]>
26;;; Copyright © 2016, 2017 Nikita <[email protected]>
27;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
28;;; Copyright © 2016 David Craven <[email protected]>
29;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
30;;; Copyright © 2016, 2017, 2021, 2022 Stefan Reichör <[email protected]>
31;;; Copyright © 2016, 2017, 2019 Alex Vong <[email protected]>
32;;; Copyright © 2016–2018, 2021–2024, 2026 Arun Isaac <[email protected]>
33;;; Copyright © 2016, 2017, 2018, 2020, 2021 Julien Lepiller <[email protected]>
34;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <[email protected]>
35;;; Copyright © 2016, 2017 Thomas Danckaert <[email protected]>
36;;; Copyright © 2017 Carlo Zancanaro <[email protected]>
37;;; Copyright © 2017 Frederick M. Muriithi <[email protected]>
38;;; Copyright © 2017, 2018 Adriano Peluso <[email protected]>
39;;; Copyright © 2017 Ben Sturmfels <[email protected]>
40;;; Copyright © 2017, 2018, 2019, 2021, 2022 Mathieu Othacehe <[email protected]>
41;;; Copyright © 2017 José Miguel Sánchez García <[email protected]>
42;;; Copyright © 2017, 2020, 2021 Roel Janssen <[email protected]>
43;;; Copyright © 2017, 2018, 2019 Kei Kebreau <[email protected]>
44;;; Copyright © 2017 Rutger Helling <[email protected]>
45;;; Copyright © 2017, 2019, 2021, 2025 Brendan Tildesley <[email protected]>
46;;; Copyright © 2018 Ethan R. Jones <[email protected]
47;;; Copyright © 2018 Fis Trivial <[email protected]>
48;;; Copyright © 2018 Vijayalakshmi Vedantham <[email protected]>
49;;; Copyright © 2018 Mathieu Lirzin <[email protected]>
50;;; Copyright © 2018 Adam Massmann <[email protected]>
51;;; Copyright © 2016, 2018 Tomáš Čech <[email protected]>
52;;; Copyright © 2018-2025 Nicolas Goaziou <[email protected]>
53;;; Copyright © 2018 Oleg Pykhalov <[email protected]>
54;;; Copyright © 2018, 2019, 2021, 2023 Clément Lassieur <[email protected]>
55;;; Copyright © 2018-2025 Maxim Cournoyer <[email protected]>
56;;; Copyright © 2018 Luther Thompson <[email protected]>
57;;; Copyright © 2018 Vagrant Cascadian <[email protected]>
58;;; Copyright © 2015, 2018 Pjotr Prins <[email protected]>
59;;; Copyright © 2019 [email protected] <[email protected]>
60;;; Copyright © 2019, 2020 Brett Gilio <[email protected]>
61;;; Copyright © 2019 Sam <[email protected]>
62;;; Copyright © 2019, 2023 Jack Hill <[email protected]>
63;;; Copyright © 2019-2023, Guillaume Le Vaillant <[email protected]>
64;;; Copyright © 2019, 2020 Alex Griffin <[email protected]>
65;;; Copyright © 2019, 2020, 2021, 2022, 2023 Pierre Langlois <[email protected]>
66;;; Copyright © 2019 Jacob MacDonald <[email protected]>
67;;; Copyright © 2019-2021, 2023, 2024, 2026 Giacomo Leidi <[email protected]>
68;;; Copyright © 2019 Wiktor Żelazny <[email protected]>
69;;; Copyright © 2019, 2020, 2021, 2022, 2026 Tanguy Le Carrour <[email protected]>
70;;; Copyright © 2019, 2021-2023 Mădălin Ionel Patrașcu <[email protected]>
71;;; Copyright © 2020 Riku Viitanen <[email protected]>
72;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
73;;; Copyright © 2020 sirgazil <[email protected]>
74;;; Copyright © 2020 Sebastian Schott <[email protected]>
75;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
76;;; Copyright © 2020 Josh Marshall <[email protected]>
77;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
78;;; Copyright © 2020 Alex ter Weele <[email protected]>
79;;; Copyright © 2020, 2022 Matthew James Kraai <[email protected]>
80;;; Copyright © 2020 Ryan Prior <[email protected]>
81;;; Copyright © 2020 Josh Holland <[email protected]>
82;;; Copyright © 2020 Yuval Kogman <[email protected]>
83;;; Copyright © 2020, 2022 Michael Rohleder <[email protected]>
84;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <[email protected]>
85;;; Copyright © 2020 Guy Fleury Iteriteka <[email protected]>
86;;; Copyright © 2020 Hendursaga <[email protected]>
87;;; Copyright © 2020 Malte Frank Gerdes <[email protected]>
88;;; Copyright © 2020 Joseph LaFreniere <[email protected]>
89;;; Copyright © 2020 Tim Gesthuizen <[email protected]>
90;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <[email protected]>
91;;; Copyright © 2020 Ekaitz Zarraga <[email protected]>
92;;; Copyright © 2020 Diego N. Barbato <[email protected]>
93;;; Copyright © 2020 Liliana Marie Prikler <[email protected]>
94;;; Copyright © 2019 Kristian Trandem <[email protected]>
95;;; Copyright © 2020, 2021, 2024, 2025 Zheng Junjie <[email protected]>
96;;; Copyright © 2020 EuAndreh <[email protected]>
97;;; Copyright © 2021, 2022 Morgan Smith <[email protected]>
98;;; Copyright © 2021-2026 Sharlatan Hellseher <[email protected]>
99;;; Copyright © 2021 Ellis Kenyő <[email protected]>
100;;; Copyright © 2021 LibreMiami <[email protected]>
101;;; Copyright © 2021 Mathieu Othacehe <[email protected]>
102;;; Copyright © 2021 Xinglu Chen <[email protected]>
103;;; Copyright © 2021 Raghav Gururajan <[email protected]>
104;;; Copyright © 2021, 2023-2025 jgart <[email protected]>
105;;; Copyright © 2021 Danial Behzadi <[email protected]>
106;;; Copyright © 2021 Maxime Devos <[email protected]>
107;;; Copyright © 2021 Hugo Lecomte <[email protected]>
108;;; Copyright © 2021 Franck Pérignon <[email protected]>
109;;; Copyright © 2021, 2022 Petr Hodina <[email protected]>
110;;; Copyright © 2021 Simon Streit <[email protected]>
111;;; Copyright © 2021 Stefan Reichör <[email protected]>
112;;; Copyright © 2021, 2022, 2023 Daniel Meißner <[email protected]>
113;;; Copyright © 2021, 2022 Pradana Aumars <[email protected]>
114;;; Copyright © 2021–2024, 2026 Felix Gruber <[email protected]>
115;;; Copyright © 2021 Sébastien Lerique <[email protected]>
116;;; Copyright © 2021 Raphaël Mélotte <[email protected]>
117;;; Copyright © 2021 ZmnSCPxj <[email protected]>
118;;; Copyright © 2021 Filip Lajszczak <[email protected]>
119;;; Copyright © 2021 Greg Hogan <[email protected]>
120;;; Copyright © 2022, 2023 John Kehayias <[email protected]>
121;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
122;;; Copyright © 2022, 2024-2026 Evgeny Pisemsky <[email protected]>
123;;; Copyright © 2022 drozdov <[email protected]>
124;;; Copyright © 2022 Peter Polidoro <[email protected]>
125;;; Copyright © 2022, 2023 Wamm K. D. <[email protected]>
126;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
127;;; Copyright © 2022-2025 Artyom V. Poptsov <[email protected]>
128;;; Copyright © 2022, 2023 Paul A. Patience <[email protected]>
129;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <[email protected]>
130;;; Copyright © 2022 Philip McGrath <[email protected]>
131;;; Copyright © 2022 Marek Felšöci <[email protected]>
132;;; Copyright © 2022 Hilton Chain <[email protected]>
133;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
134;;; Copyright © 2022 Mathieu Laparie <[email protected]>
135;;; Copyright © 2022 Garek Dyszel <[email protected]>
136;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
137;;; Copyright © 2022-2025 Nicolas Graves <[email protected]>
138;;; Copyright © 2023 Gabriel Wicki <[email protected]>
139;;; Copyright © 2023 Amade Nemes <[email protected]>
140;;; Copyright © 2023 Bruno Victal <[email protected]>
141;;; Copyright © 2023 Lu Hui <[email protected]>
142;;; Copyright © 2023 Jean-Pierre De Jesus DIAZ <[email protected]>
143;;; Copyright © 2023 Kaelyn Takata <[email protected]>
144;;; Copyright © 2023 dan <[email protected]>
145;;; Copyright © 2023 Dominik Delgado Steuter <[email protected]>
146;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
147;;; Copyright © 2023 Ontje Lünsdorf <[email protected]>
148;;; Copyright © 2023, 2025 gemmaro <[email protected]>
149;;; Copyright © 2023 Parnikkapore <[email protected]>
150;;; Copyright © 2023 Foundation Devices, Inc. <[email protected]>
151;;; Copyright © c4droid <[email protected]>
152;;; Copyright © 2023, 2024, 2025 Janneke Nieuwenhuizen <[email protected]>
153;;; Copyright © 2023 Attila Lendvai <[email protected]>
154;;; Copyright © 2023, 2024 Troy Figiel <[email protected]>
155;;; Copyright © 2023 Adam Faiz <[email protected]>
156;;; Copyright © 2023 Wiktor Żelazny <[email protected]>
157;;; Copyright © 2023-2026 Spencer King <[email protected]>
158;;; Copyright © 2024 Timothee Mathieu <[email protected]>
159;;; Copyright © 2024 Ian Eure <[email protected]>
160;;; Copyright © 2024 Adriel Dumas--Jondeau <[email protected]>
161;;; Copyright © 2024 Navid Afkhami <[email protected]>
162;;; Copyright © 2024 TakeV <[email protected]>
163;;; Copyright © 2024, 2025 David Elsing <[email protected]>
164;;; Copyright © 2024 Rick Huijzer <[email protected]>
165;;; Copyright © 2024 Peter Kannewitz <[email protected]>
166;;; Copyright © 2024 Aaron Covrig <[email protected]>
167;;; Copyright © 2024 Markku Korkeala <[email protected]>
168;;; Copyright © 2025 Jordan Moore <[email protected]>
169;;; Copyright © 2025 Dariqq <[email protected]>
170;;; Copyright © 2025-2026 Nguyễn Gia Phong <[email protected]>
171;;; Copyright © 2025, 2026 Cayetano Santos <[email protected]>
172;;; Copyright © 2025 Jake Forster <[email protected]>
173;;; Copyright © 2025 Luis Felipe López Acevedo <[email protected]>
174;;; Copyright © 2025 Josep Bigorra <[email protected]>
175;;; Copyright © 2025 Matthias Riße <[email protected]>
176;;; Copyright © 2025 Ghislain Vaillant <[email protected]>
177;;; Copyright © 2025 Allan Adair <[email protected]>
178;;; Copyright © 2025-2026 Hennadii Stepanov <[email protected]>
179;;; Copyright © 2025 Luca Kredel <[email protected]>
180;;; Copyright © 2025 Isidor Zeuner <[email protected]>
181;;; Copyright © 2025 Andy Tai <[email protected]>
182;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
183;;; Copyright © 2026 Akiyoshi Suda <[email protected]>
184;;; Copyright © 2026 Sughosha <[email protected]>
185;;; Copyright © 2026 orahcio <[email protected]>
186;;; Copyright © 2026 John Dawson <[email protected]>
187;;; Copyright © 2026 Kevin Deldycke <[email protected]>
188;;; Copyright © 2026 Ryan Desfosses <[email protected]>
189;;; Copyright © 2026 nick <[email protected]>
190;;;
191;;; This file is part of GNU Guix.
192;;;
193;;; GNU Guix is free software; you can redistribute it and/or modify it
194;;; under the terms of the GNU General Public License as published by
195;;; the Free Software Foundation; either version 3 of the License, or (at
196;;; your option) any later version.
197;;;
198;;; GNU Guix is distributed in the hope that it will be useful, but
199;;; WITHOUT ANY WARRANTY; without even the implied warranty of
200;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
201;;; GNU General Public License for more details.
202;;;
203;;; You should have received a copy of the GNU General Public License
204;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
205
206(define-module (gnu packages python-xyz)
207 #:use-module (gnu packages algebra)
208 #:use-module (gnu packages attr)
209 #:use-module (gnu packages autotools)
210 #:use-module (gnu packages backup)
211 #:use-module (gnu packages base)
212 #:use-module (gnu packages bash)
213 #:use-module (gnu packages bdw-gc)
214 #:use-module (gnu packages bioinformatics)
215 #:use-module (gnu packages boost)
216 #:use-module (gnu packages build-tools)
217 #:use-module (gnu packages c)
218 #:use-module (gnu packages check)
219 #:use-module (gnu packages cmake)
220 #:use-module (gnu packages compression)
221 #:use-module (gnu packages cpp)
222 #:use-module (gnu packages crypto)
223 #:use-module (gnu packages databases)
224 #:use-module (gnu packages dbm)
225 #:use-module (gnu packages dictionaries)
226 #:use-module (gnu packages digest)
227 #:use-module (gnu packages django)
228 #:use-module (gnu packages djvu)
229 #:use-module (gnu packages dns)
230 #:use-module (gnu packages documentation)
231 #:use-module (gnu packages duckdb)
232 #:use-module (gnu packages elf)
233 #:use-module (gnu packages emulators)
234 #:use-module (gnu packages enchant)
235 #:use-module (gnu packages file)
236 #:use-module (gnu packages fonts)
237 #:use-module (gnu packages fontutils)
238 #:use-module (gnu packages freedesktop)
239 #:use-module (gnu packages gcc)
240 #:use-module (gnu packages gdb)
241 #:use-module (gnu packages geo)
242 #:use-module (gnu packages ghostscript)
243 #:use-module (gnu packages glib)
244 #:use-module (gnu packages gnome)
245 #:use-module (gnu packages gnupg)
246 #:use-module (gnu packages graphviz)
247 #:use-module (gnu packages gsasl)
248 #:use-module (gnu packages gtk)
249 #:use-module (gnu packages guile-xyz)
250 #:use-module (gnu packages haskell-xyz)
251 #:use-module (gnu packages icu4c)
252 #:use-module (gnu packages image)
253 #:use-module (gnu packages image-processing)
254 #:use-module (gnu packages imagemagick)
255 #:use-module (gnu packages inkscape)
256 #:use-module (gnu packages iso-codes)
257 #:use-module (gnu packages java)
258 #:use-module (gnu packages javascript)
259 #:use-module (gnu packages jupyter)
260 #:use-module (gnu packages kerberos)
261 #:use-module (gnu packages less)
262 #:use-module (gnu packages libevent)
263 #:use-module (gnu packages libffi)
264 #:use-module (gnu packages libusb)
265 #:use-module (gnu packages linux)
266 #:use-module (gnu packages llvm)
267 #:use-module (gnu packages machine-learning)
268 #:use-module (gnu packages man)
269 #:use-module (gnu packages markup)
270 #:use-module (gnu packages maths)
271 #:use-module (gnu packages messaging)
272 #:use-module (gnu packages monitoring)
273 #:use-module (gnu packages mpi)
274 #:use-module (gnu packages multiprecision)
275 #:use-module (gnu packages ncurses)
276 #:use-module (gnu packages networking)
277 #:use-module (gnu packages node)
278 #:use-module (gnu packages nss)
279 #:use-module (gnu packages openstack)
280 #:use-module (gnu packages pcre)
281 #:use-module (gnu packages pdf)
282 #:use-module (gnu packages perl)
283 #:use-module (gnu packages photo)
284 #:use-module (gnu packages pkg-config)
285 #:use-module (gnu packages protobuf)
286 #:use-module (gnu packages python)
287 #:use-module (gnu packages python-build)
288 #:use-module (gnu packages python-check)
289 #:use-module (gnu packages python-compression)
290 #:use-module (gnu packages python-crypto)
291 #:use-module (gnu packages python-science)
292 #:use-module (gnu packages python-web)
293 #:use-module (gnu packages qt)
294 #:use-module (gnu packages rdf)
295 #:use-module (gnu packages readline)
296 #:use-module (gnu packages regex)
297 #:use-module (gnu packages rpc)
298 #:use-module (gnu packages rust)
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 specifications)
304 #:use-module (gnu packages sphinx)
305 #:use-module (gnu packages ssh)
306 #:use-module (gnu packages statistics)
307 #:use-module (gnu packages task-management)
308 #:use-module (gnu packages tcl)
309 #:use-module (gnu packages tex)
310 #:use-module (gnu packages texinfo)
311 #:use-module (gnu packages time)
312 #:use-module (gnu packages tls)
313 #:use-module (gnu packages tree-sitter)
314 #:use-module (gnu packages valgrind)
315 #:use-module (gnu packages version-control)
316 #:use-module (gnu packages video)
317 #:use-module (gnu packages web)
318 #:use-module (gnu packages wxwidgets)
319 #:use-module (gnu packages xdisorg)
320 #:use-module (gnu packages xml)
321 #:use-module (gnu packages xorg)
322 #:use-module (gnu packages)
323 #:use-module (guix build-system cargo)
324 #:use-module (guix build-system cmake)
325 #:use-module (guix build-system copy)
326 #:use-module (guix build-system gnu)
327 #:use-module (guix build-system meson)
328 #:use-module (guix build-system pyproject)
329 #:use-module (guix deprecation)
330 #:use-module (guix download)
331 #:use-module (guix gexp)
332 #:use-module (guix git-download)
333 #:use-module (guix hg-download)
334 #:use-module ((guix licenses) #:prefix license:)
335 #:use-module (guix packages)
336 #:use-module (guix utils)
337 #:use-module (ice-9 match)
338 #:use-module (srfi srfi-1)
339 #:use-module (srfi srfi-26))
340
341(define-public python-aenum
342 (package
343 (name "python-aenum")
344 (version "3.1.17")
345 (source
346 (origin
347 (method git-fetch)
348 (uri (git-reference
349 (url "https://github.com/ethanfurman/aenum")
350 (commit version)))
351 (file-name (git-file-name name version))
352 (sha256
353 (base32 "0nygn64ydkvlpz9hw1f26z8w1dk7bws8qsirwkxyfw99vpbzlz3v"))))
354 (build-system pyproject-build-system)
355 (arguments
356 (list
357 #:phases
358 #~(modify-phases %standard-phases
359 (add-after 'unpack 'fix
360 (lambda _
361 (substitute* "aenum/_py2.py"
362 (("raise exc.*")
363 "raise exc.with_traceback(tb)")))))
364 #:tests? #f)) ;no tests
365 (native-inputs (list python-setuptools))
366 (home-page "https://github.com/ethanfurman/aenum")
367 (synopsis
368 "Support for advanced enumerations, namedtuples and namedconstants")
369 (description
370 "AEnum is a set of symbolic names (members) bound to unique, constant
371values. Within an enumeration, the members can be compared by identity, and
372the enumeration itself can be iterated over. There is built-in support for
373unique values, multiple values, auto-numbering, and suspension of aliasing
374(members with the same value are not identical), plus the ability to have
375values automatically bound to attributes.")
376 (license license:bsd-3)))
377
378(define-public python-accumulation-tree
379 ;; Only minor releases (0.x) are tagged, not patch versions.
380 (let ((commit "3617051f952ce12385c015be8e3d052d1883f17a")
381 (revision "0"))
382 (package
383 (name "python-accumulation-tree")
384 (version (git-version "0.6.4" revision commit))
385 (source
386 (origin
387 (method git-fetch)
388 (uri (git-reference
389 (url "https://github.com/tkluck/accumulation_tree")
390 (commit commit)))
391 (file-name (git-file-name name version))
392 (sha256
393 (base32 "0bgqy07rpiyz60y8nfh8mha38l650x25l4bbbv6fx42czw7kzhbx"))
394 (modules '((guix build utils)))
395 (snippet ;use src layout for isolated tests
396 #~(let* ((src "src/")
397 (old "accumulation_tree/")
398 (new (string-append src old)))
399 (mkdir src)
400 (rename-file old new)
401 (substitute* "setup.py"
402 (("packages=" all)
403 (string-append "package_dir={'': '" src "'}, " all))
404 ((old)
405 new))))))
406 (build-system pyproject-build-system)
407 (arguments
408 (list #:test-backend #~'custom
409 #:test-flags #~'("-m" "doctest" "README.md" "tests.md")))
410 (native-inputs (list python-cloudpickle python-cython python-setuptools))
411 (home-page "https://github.com/tkluck/accumulation_tree")
412 (synopsis "Red-black tree with fast value accumulation in a key range")
413 (description
414 "This Python package implements a red-black tree which also stores
415partial aggregations at each node, making getting aggregations
416of key range slices an O(log(N)) operation.
417
418This data structure is very similar to a binary indexed tree,
419with heap allocation instead of a flat array to represent a tree.")
420 (license license:expat))))
421
422(define-public python-anaconda-cli-base
423 (package
424 (name "python-anaconda-cli-base")
425 (version "0.8.2")
426 (source
427 (origin
428 (method git-fetch)
429 (uri (git-reference
430 (url "https://github.com/anaconda/anaconda-cli-base")
431 (commit (string-append "v" version))))
432 (file-name (git-file-name name version))
433 (sha256
434 (base32 "1vsbxcgn05d7mlwl17f0bfq25lydl7i8n4x0a95hmjdl45n1q9wx"))))
435 (build-system pyproject-build-system)
436 (arguments
437 (list
438 #:test-flags
439 #~(list "--deselect=tests/test_cli.py::test_cli_version"
440 "--deselect=tests/test_cli.py::test_load_plugin")))
441 (native-inputs
442 (list python-hatch-vcs
443 python-hatchling
444 python-pytest
445 python-pytest-mock
446 python-setuptools-scm
447 python-types-requests))
448 (propagated-inputs
449 (list python-click
450 python-packaging
451 python-pydantic
452 python-pydantic-settings
453 python-readchar
454 python-rich
455 python-tomli
456 python-tomlkit
457 python-typer))
458 (home-page "https://anaconda.github.io/anaconda-cli-base/")
459 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
460 (description
461 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
462 (license license:bsd-3)))
463
464(define-public python-annexremote
465 (package
466 (name "python-annexremote")
467 (version "1.6.6")
468 (source
469 (origin
470 (method git-fetch)
471 (uri (git-reference
472 (url "https://github.com/Lykos153/AnnexRemote")
473 (commit (string-append "v" version))))
474 (file-name (git-file-name name version))
475 (sha256
476 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
477 (build-system pyproject-build-system)
478 (native-inputs
479 (list python-pytest
480 python-setuptools
481 python-setuptools-scm))
482 (home-page "https://github.com/Lykos153/AnnexRemote")
483 (synopsis "Helper module to easily develop git-annex special remotes")
484 (description
485 "This package provides a helper module to develop special remotes for
486git-annex. AnnexRemote implements the line-based external special remote
487protocol of git-annex, while leaving the behavior of the remote up to the
488user.")
489 (license license:gpl3)))
490
491(define-public python-annotated-doc
492 (package
493 (name "python-annotated-doc")
494 (version "0.0.4")
495 (source
496 (origin
497 (method git-fetch)
498 (uri (git-reference
499 (url "https://github.com/fastapi/annotated-doc")
500 (commit version)))
501 (file-name (git-file-name name version))
502 (sha256
503 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
504 (build-system pyproject-build-system)
505 (native-inputs
506 (list python-pytest
507 python-pdm-backend))
508 (home-page "https://github.com/fastapi/annotated-doc")
509 (synopsis "Annotated for some Python objects")
510 (description
511 "This package implements a functionality for document parameters, class
512attributes, return types, and variables inline, with
513Annotated.")
514 (license license:expat)))
515
516(define-public python-archspec
517 (package
518 (name "python-archspec")
519 (version "0.2.5")
520 (source
521 (origin
522 (method git-fetch)
523 (uri (git-reference
524 (url "https://github.com/archspec/archspec")
525 (commit (string-append "v" version))
526 (recursive? #t)))
527 (file-name (git-file-name name version))
528 (sha256
529 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
530 (build-system pyproject-build-system)
531 (native-inputs
532 (list python-jsonschema
533 python-poetry-core
534 python-pytest))
535 (home-page "https://github.com/archspec/archspec")
536 (synopsis "Library to query system architecture")
537 (description
538 "Archspec offers human-readable labels for system architecture aspects.
539These aspects include CPU, network fabrics, etc. In addition, it offers
540APIs to detect, query, and compare them.")
541 (license license:expat)))
542
543(define-public python-astar
544 ;; The Git repository has no tag.
545 (let ((commit "b48388f5fa7dc1e5069ff85b05f0ad72ea8d5e93")
546 (revision "0"))
547 (package
548 (name "python-astar")
549 (version (git-version "0.99" revision commit))
550 (source
551 (origin
552 (method git-fetch)
553 (uri (git-reference
554 (url "https://github.com/jrialland/python-astar")
555 (commit commit)))
556 (file-name (git-file-name name version))
557 (sha256
558 (base32 "1gc4r3xmvw7hgqfadr2cz024ywbzmfak319cdkahd3dzpvyh404q"))))
559 (build-system pyproject-build-system)
560 ;; Despite pytest being listed in tool.poetry.group.dev.dependencies,
561 ;; the test suite has been written for unittest.
562 (native-inputs (list python-poetry-core))
563 (home-page "https://github.com/jrialland/python-astar")
564 (synopsis "Implementation of the A* search algorithm")
565 (description
566 "The @code{astar} Python package provide a generic implementation
567of the A* graph traversal and pathfinding algorithm.")
568 (license license:bsd-3))))
569
570(define-public python-asyncclick
571 (package
572 (name "python-asyncclick")
573 (version "8.3.0.3")
574 (source
575 (origin
576 (method url-fetch)
577 (uri (pypi-uri "asyncclick" version))
578 (sha256
579 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
580 (build-system pyproject-build-system)
581 ;; tests: 1418 passed, 21 skipped, 1 xfailed
582 (native-inputs
583 (list less
584 python-flit-core
585 python-pytest
586 python-trio))
587 (propagated-inputs
588 (list python-anyio))
589 (home-page "https://github.com/python-trio/asyncclick")
590 (synopsis "Python composable command line utility, trio-compatible version ")
591 (description
592 "AsyncClick is a fork of Click that works well with anyio, Trio, or
593asyncio.")
594 (license license:bsd-3)))
595
596(define-public python-asyncstdlib
597 (package
598 (name "python-asyncstdlib")
599 (version "3.13.0")
600 (source
601 (origin
602 (method url-fetch)
603 (uri (pypi-uri "asyncstdlib" version))
604 (sha256
605 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
606 (build-system pyproject-build-system)
607 (native-inputs (list python-flit-core python-pytest))
608 (home-page "https://asyncstdlib.readthedocs.io")
609 (synopsis "Compatibility layer between the Python stdlib and @code{async}
610callables")
611 (description
612 "The @code{asyncstdlib} library re-implements functions and classes of
613the Python standard library to make them compatible with @code{async}
614callables, iterables and context managers. It is fully agnostic to
615@code{async} event loops and seamlessly works with @code{asyncio}, third-party
616libraries such as @code{trio}, as well as any custom @code{async} event
617loop.")
618 (license license:expat)))
619
620(define-public python-awesomeversion
621 (package
622 (name "python-awesomeversion")
623 (version "24.6.0")
624 (source
625 (origin
626 (method git-fetch)
627 (uri (git-reference
628 (url "https://github.com/ludeeus/awesomeversion")
629 (commit version)))
630 (file-name (git-file-name name version))
631 (sha256
632 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
633 (modules '((guix build utils)))
634 (snippet #~(substitute* "pyproject.toml"
635 (("version = \"0\"")
636 (format #f "version = \"~a\"" #$version))))))
637 (build-system pyproject-build-system)
638 (native-inputs
639 (list python-poetry-core
640 python-pytest
641 python-pytest-snapshot))
642 (home-page "https://github.com/ludeeus/awesomeversion")
643 (synopsis "Create and compare version objects")
644 (description
645 "This package provides a way to make anything a version object, and
646compare against a vast section of other version formats.")
647 (license license:expat)))
648
649(define-public python-awkward-cpp
650 (package
651 (name "python-awkward-cpp")
652 ;; TODO: any higher versions need pybind11 >= 3, see:
653 ;; <https://codeberg.org/guix/guix/pulls/4696>.
654 (version "47")
655 (source
656 (origin
657 (method url-fetch)
658 (uri (pypi-uri "awkward_cpp" version))
659 (sha256
660 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
661 (build-system pyproject-build-system)
662 ;; tests: 22304 passed, 524 skipped
663 (native-inputs
664 (list cmake-minimal
665 pybind11-2
666 python-pytest
667 python-scikit-build-core))
668 (propagated-inputs
669 (list python-numpy))
670 (home-page "https://awkward-array.org/")
671 (synopsis "CPU kernels and compiled extensions for Awkward Array")
672 (description "Awkward CPP provides precompiled routines for the awkward
673package. It is not useful on its own, only as a dependency for awkward.")
674 (license license:bsd-3)))
675
676(define-public python-awkward
677 (package
678 (name "python-awkward")
679 (version "2.8.5")
680 (source
681 (origin
682 (method url-fetch)
683 (uri (pypi-uri "awkward" version))
684 (sha256
685 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
686 (build-system pyproject-build-system)
687 (arguments
688 (list
689 ;; tests: 2798 passed, 156 skipped
690 #:test-flags
691 ;; CUDA is and requires proprietary software.
692 #~(list "--ignore=tests-cuda-kernels/"
693 "--ignore=tests-cuda/")))
694 (native-inputs
695 (list python-hatch-fancy-pypi-readme
696 python-hatchling
697 python-pytest))
698 (propagated-inputs
699 (list python-awkward-cpp
700 python-fsspec
701 python-importlib-metadata
702 python-numpy
703 python-packaging))
704 (home-page "https://awkward-array.org/")
705 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
706 (description "Awkward Array is a library for nested, variable-sized data,
707including arbitrary-length lists, records, mixed types, and missing data,
708using NumPy-like idioms.")
709 (license license:bsd-3)))
710
711(define-public python-bracex
712 (package
713 (name "python-bracex")
714 (version "2.6")
715 (source
716 (origin
717 (method git-fetch)
718 (uri (git-reference
719 (url "https://github.com/facelessuser/bracex")
720 (commit version)))
721 (file-name (git-file-name name version))
722 (sha256
723 (base32 "1j717bsjr3ms4snzrbv4izbblcwgdk1lzxzi2cjhr9365zgz4kdk"))))
724 (build-system pyproject-build-system)
725 (native-inputs
726 (list python-hatchling
727 python-pytest))
728 (home-page "https://facelessuser.github.io/bracex/")
729 (synopsis "Bash-style brace expansion for Python")
730 (description
731 "Bracex is a brace expansion library for Python that implements
732Bash-style brace expansion. It can generate strings from patterns like
733@code{@{a,b,c@}} or @code{@{1..10@}}.")
734 (license license:expat)))
735
736(define-public python-bresenham
737 (package
738 (name "python-bresenham")
739 (version "0.2.1")
740 (source
741 (origin
742 (method git-fetch)
743 (uri (git-reference
744 (url "https://github.com/encukou/bresenham")
745 (commit (string-append "v" version))))
746 (file-name (git-file-name name version))
747 (sha256
748 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
749 (build-system pyproject-build-system)
750 (native-inputs
751 (list python-pytest
752 python-setuptools
753 python-wheel))
754 (home-page "https://github.com/encukou/bresenham")
755 (synopsis "Implementation of Bresenham's line drawing algorithm")
756 (description
757 "This package provides a Python implementation of
758@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
759line drawing algorithm}.")
760 (license license:expat)))
761
762(define-public python-cachey
763 (package
764 (name "python-cachey")
765 (version "0.2.1")
766 (source
767 (origin
768 (method git-fetch)
769 (uri (git-reference
770 (url "https://github.com/dask/cachey/")
771 (commit version)))
772 (file-name (git-file-name name version))
773 (sha256
774 (base32 "12rkn4cvdwlpjhlmyxi1glvn1nzlx147xs96h9k6pbgbwyxaci75"))))
775 (build-system pyproject-build-system)
776 (native-inputs
777 (list python-pytest
778 python-setuptools))
779 (propagated-inputs
780 (list python-heapdict))
781 (home-page "https://github.com/dask/cachey/")
782 (synopsis "Caching based on computation time and storage space")
783 (description
784 "This package provides a Python module for caching mindful of
785computation/storage costs.")
786 (license license:bsd-3)))
787
788(define-public python-catalogus
789 (package
790 (name "python-catalogus")
791 (version "0.1.0")
792 (source
793 (origin
794 (method git-fetch)
795 (uri (git-reference
796 (url "https://github.com/breezy-team/catalogus")
797 (commit (string-append "v" version))))
798 (file-name (git-file-name name version))
799 (sha256
800 (base32 "0l34anf0h4rcsimq78q6y1s2m91605pxwpzfzxr2vh2hl45sy4w5"))))
801 (build-system pyproject-build-system)
802 (native-inputs
803 (list python-pytest
804 python-setuptools
805 python-setuptools-scm))
806 (home-page "https://github.com/breezy-team/catalogus")
807 (synopsis "Classes to provide name-to-object registry-like support")
808 (description
809 "This package provides classes to provide name-to-object registry-like
810support.")
811 (license license:gpl2+)))
812
813(define-public python-catppuccin
814 (package
815 (name "python-catppuccin")
816 (version "2.5.0")
817 (source
818 (origin
819 (method url-fetch)
820 (uri (pypi-uri "catppuccin" version))
821 (sha256
822 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
823 (build-system pyproject-build-system)
824 (native-inputs
825 (list python-hatchling python-pytest
826 ;; These are optional dependencies but required for tests.
827 python-matplotlib python-pygments python-rich))
828 (home-page "https://github.com/catppuccin/python")
829 (synopsis "Pastel palette for Python libraries")
830 (description "Catppuccin for Python is a soothing pastel palette for Python
831libraries. It aims to be the middle ground between low and high contrast
832themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
833 (license license:expat)))
834
835(define-public python-calmjs-parse
836 (package
837 (name "python-calmjs-parse")
838 (version "1.3.3")
839 (source
840 (origin
841 (method git-fetch)
842 (uri (git-reference
843 (url "https://github.com/calmjs/calmjs.parse/")
844 (commit version)))
845 (file-name (git-file-name name version))
846 (sha256
847 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
848 (build-system pyproject-build-system)
849 ;; tests: 797 passed, 1 warning
850 (native-inputs (list python-pytest python-setuptools))
851 (propagated-inputs (list python-ply))
852 (home-page "https://github.com/calmjs/calmjs.parse/")
853 (synopsis "Parsers for ECMA standards")
854 (description
855 "@code{Calmjs-parse} is a collection of helper libraries for
856understanding ECMA script.")
857 (license license:expat)))
858
859(define-public python-chameleon
860 (package
861 (name "python-chameleon")
862 (version "4.6.0")
863 (source
864 (origin
865 (method url-fetch)
866 (uri (pypi-uri "Chameleon" version))
867 (sha256
868 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
869 (build-system pyproject-build-system)
870 (native-inputs
871 (list python-pytest
872 python-setuptools))
873 (home-page "https://chameleon.readthedocs.io")
874 (synopsis "Fast HTML/XML Template Compiler")
875 (description
876 "Chameleon is an HTML/XML template engine for Python. It uses the page
877templates language.")
878 ;; Project is duo licensed, see: LICENSE.txt.
879 (license (list license:zpl2.1
880 license:psfl))))
881
882(define-public python-click-extra
883 (package
884 (name "python-click-extra")
885 (version "8.8.1")
886 (source
887 (origin
888 (method git-fetch)
889 (uri (git-reference
890 (url "https://github.com/kdeldycke/click-extra")
891 (commit (string-append "v" version))))
892 (file-name (git-file-name name version))
893 (sha256
894 (base32 "0i22as7f22qhnp69c7zwdh7k4pzl45ywa0hdj71j0n07lqdmdqc7"))))
895 (build-system pyproject-build-system)
896 (arguments
897 (list
898 ;; Upstream uses uv-build which is not yet available in Guix.
899 #:build-backend "setuptools.build_meta"
900 ;; tets: 3659 passed, 509 skipped, 4 deselected, 4 xfailed, 1267 warnings
901 #:test-flags
902 ;; Skip the network tests.
903 #~(list "-m" "not network"
904 ;; Prevent adding python-sphinx into scope.
905 (string-append "--deselect=tests/test_blocks.py"
906 "::test_blocks_reexported_from_sphinx_package"))))
907 (native-inputs
908 ;; Optional libraries imported at module level by the test suite.
909 (list python-hjson
910 python-jsonschema
911 python-pygments
912 python-pytest
913 python-pytest-httpserver
914 python-pyyaml
915 python-requests
916 python-setuptools
917 python-tomlkit
918 python-xmltodict))
919 (propagated-inputs
920 (list python-boltons
921 python-click
922 python-cloup
923 python-deepmerge
924 python-extra-platforms
925 python-tabulate
926 python-wcmatch
927 python-wcwidth))
928 (home-page "https://kdeldycke.github.io/click-extra/")
929 (synopsis "Drop-in replacement for Click to build colorful CLIs")
930 (description
931 "Click Extra extends the Click framework with colored help screens,
932configuration file support, table rendering, and platform detection. It
933serves as a drop-in replacement adding features for user-friendly command-line
934interfaces.")
935 (license license:gpl2+)))
936
937(define-public python-comrak
938 (package
939 (name "python-comrak")
940 (version "0.0.16")
941 (source
942 (origin
943 (method url-fetch)
944 (uri (pypi-uri "comrak" version))
945 (sha256
946 (base32 "1nzr1d957vac16kvy4si3hykx5cbcm73vpy94nm74rf66hgpx8m3"))))
947 (build-system pyproject-build-system)
948 (arguments
949 (list
950 #:imported-modules (append %cargo-build-system-modules
951 %pyproject-build-system-modules)
952 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
953 (guix build pyproject-build-system)
954 (guix build utils))
955 #:phases
956 #~(modify-phases %standard-phases
957 (add-after 'unpack 'prepare-cargo-build-system
958 (lambda args
959 (for-each (lambda (phase)
960 (format #t "Running cargo phase: ~a~%" phase)
961 (apply (assoc-ref cargo:%standard-phases phase)
962 #:cargo-target #$(cargo-triplet)
963 args))
964 '(prepare-rust-crates
965 unpack-rust-crates
966 configure
967 check-for-pregenerated-files
968 patch-cargo-checksums)))))))
969 (native-inputs
970 (append
971 (list maturin
972 python-pytest
973 rust
974 `(,rust "cargo"))
975 (or (and=> (%current-target-system)
976 (compose list make-rust-sysroot))
977 '())))
978 (inputs (cargo-inputs 'python-comrak))
979 (home-page "https://github.com/lmmx/comrak")
980 (synopsis "Python bindings for the Comrak Rust library")
981 (description
982 "This package provides Python bindings for the Comrak Rust library, a
983fast @code{CommonMark/GFM} parser.")
984 (license license:expat)))
985
986(define-public python-conda-content-trust
987 (package
988 (name "python-conda-content-trust")
989 (version "0.2.0")
990 (source
991 (origin
992 (method git-fetch)
993 (uri (git-reference
994 (url "https://github.com/conda/conda-content-trust")
995 (commit version)))
996 (file-name (git-file-name name version))
997 (sha256
998 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
999 (build-system pyproject-build-system)
1000 (arguments
1001 (list
1002 #:test-flags
1003 ;; XXX: Not packaged yet:
1004 ;; <https://github.com/secure-systems-lab/securesystemslib>.
1005 ;;
1006 ;; ImportError: The securesystemslib library is required, which appears
1007 ;; to be unavailable.
1008 #~(list #$@(map (lambda (test) (string-append "--deselect="
1009 "tests/test_root.py::"
1010 test))
1011 (list "test_sign_root_metadata_dict_via_gpg"
1012 "test_sign_root_metadata_via_gpg"
1013 "test_gpg_pubkey_in_ssl_format")))))
1014 (native-inputs
1015 (list python-hatch-vcs
1016 python-hatchling
1017 python-pytest))
1018 (propagated-inputs
1019 (list python-cryptography))
1020 (home-page "https://github.com/conda/conda-content-trust")
1021 (synopsis "Signing and verification tools for Conda")
1022 (description
1023 "This package implements a functionalit of signing and verification tools
1024for Conda. @url{https://theupdateframework.io/, Based on The Update
1025Framework (TUF)}, conda-content-trust is intended to ensure that when users in
1026the conda ecosystem obtain a package or data about that package, they can know
1027whether or not it is trustworthy (e.g. originally comes from a reliable source
1028and has not been tampered with). A basic library and basic CLI are included
1029to provide signing, verification, and trust delegation functionality.")
1030 (license license:bsd-3)))
1031
1032(define-public python-conda-inject
1033 (package
1034 (name "python-conda-inject")
1035 (version "1.3.2")
1036 (source
1037 (origin
1038 (method git-fetch)
1039 (uri (git-reference
1040 (url "https://github.com/koesterlab/conda-inject")
1041 (commit (string-append "v" version))))
1042 (file-name (git-file-name name version))
1043 (sha256
1044 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
1045 (build-system pyproject-build-system)
1046 (arguments
1047 (list #:tests? #f)) ; tests require setting up Conda
1048 (native-inputs
1049 (list python-poetry-core))
1050 (propagated-inputs
1051 (list python-pyyaml))
1052 (home-page "https://github.com/koesterlab/conda-inject")
1053 (synopsis "Inject a conda environment into the current python environment")
1054 (description
1055 "This package provides helper functions for injecting a conda
1056environment into the current python environment (by modifying @code{sys.path},
1057without actually changing the current python environment).")
1058 (license license:expat)))
1059
1060(define-public python-copydetect
1061 (package
1062 (name "python-copydetect")
1063 (version "0.5.0")
1064 (source
1065 (origin
1066 (method git-fetch)
1067 (uri (git-reference
1068 (url "https://github.com/blingenf/copydetect")
1069 (commit version)))
1070 (sha256
1071 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
1072 (build-system pyproject-build-system)
1073 (propagated-inputs (list python-jinja2
1074 python-matplotlib
1075 python-numpy
1076 python-pygments
1077 python-tqdm))
1078 (native-inputs (list python-setuptools
1079 python-pytest
1080 python-wheel))
1081 (home-page "https://github.com/blingenf/copydetect")
1082 (synopsis "Code plagiarism detection tool")
1083 (description "Copydetect is a tool to detect likely instances of plagiarism
1084based on the winnowing algorithm. It takes a list of directories as input and
1085generates an HTML report displaying copied slices as output.")
1086 (license license:expat)))
1087
1088(define-public python-couleur
1089 (package
1090 (name "python-couleur")
1091 (version "0.7.4")
1092 (source
1093 (origin
1094 (method url-fetch)
1095 (uri (pypi-uri "couleur" version))
1096 (sha256
1097 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
1098 (build-system pyproject-build-system)
1099 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
1100 (native-inputs
1101 (list python-setuptools
1102 python-wheel))
1103 (home-page "https://github.com/gabrielfalcao/couleur")
1104 (synopsis "ANSI terminal tool for Python")
1105 (description
1106 "This package provides an ANSI terminal tool for Python, colored shell
1107and other handy fancy features.")
1108 (license license:lgpl3+)))
1109
1110(define-public python-crc
1111 (package
1112 (name "python-crc")
1113 (version "7.1.0")
1114 (source
1115 (origin
1116 (method git-fetch)
1117 (uri (git-reference
1118 (url "https://github.com/Nicoretti/crc/")
1119 (commit version)))
1120 (file-name (git-file-name name version))
1121 (sha256
1122 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
1123 (build-system pyproject-build-system)
1124 (native-inputs
1125 (list python-poetry-core
1126 python-pytest
1127 python-wheel))
1128 (home-page "https://nicoretti.github.io/crc/")
1129 (synopsis "Pure Python CRC library")
1130 (description
1131 "This library computes and verifies @acronym{Cyclic Redundancy Check,
1132CRC} checksums, using predefined and custom CRC configurations.
1133
1134Configurations:
1135@table @asis
1136@item CRC8
1137 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
1138@item CRC16
1139 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
1140@item CRC32
1141 CRC32 AUTOSAR BZIP2 POSIX
1142@item CRC64
1143 CRC64
1144@end table")
1145 (license license:bsd-2)))
1146
1147(define-public python-cron-converter
1148 (package
1149 (name "python-cron-converter")
1150 (version "1.3.1")
1151 (source
1152 (origin
1153 (method git-fetch)
1154 (uri (git-reference
1155 (url "https://github.com/Sonic0/cron-converter")
1156 (commit (string-append "v" version))))
1157 (file-name (git-file-name name version))
1158 (sha256
1159 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
1160 (build-system pyproject-build-system)
1161 (arguments
1162 (list #:test-backend #~'unittest
1163 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
1164 (native-inputs
1165 (list python-dateutil
1166 python-setuptools))
1167 (propagated-inputs
1168 (list python-dateutil))
1169 (home-page "https://github.com/Sonic0/cron-converter")
1170 (synopsis "Cron string parser and scheduler for Python")
1171 (description
1172 "Cron-converter provides a Cron string parser (from string/lists to
1173string/lists) and iteration for the datetime object with a cron like format.")
1174 (license license:expat)))
1175
1176(define-public python-curtsies
1177 (package
1178 (name "python-curtsies")
1179 (version "0.4.3")
1180 (source
1181 (origin
1182 (method url-fetch)
1183 (uri (pypi-uri "curtsies" version))
1184 (sha256
1185 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
1186 (build-system pyproject-build-system)
1187 (native-inputs
1188 (list python-pyte
1189 python-pytest
1190 python-setuptools
1191 python-wheel))
1192 (propagated-inputs
1193 (list python-blessed
1194 python-cwcwidth))
1195 (home-page "https://github.com/bpython/curtsies")
1196 (synopsis "Library for curses-like terminal interaction with colored strings")
1197 (description
1198 "Curtsies is a Python library for interacting with the terminal. It
1199features string-like objects which carry formatting information, per-line
1200fullscreen terminal rendering, and keyboard input event reporting.")
1201 (license license:expat)))
1202
1203(define-public python-customtkinter
1204 (package
1205 (name "python-customtkinter")
1206 (version "5.2.2")
1207 (source
1208 (origin
1209 (method git-fetch)
1210 (uri (git-reference
1211 (url "https://github.com/TomSchimansky/CustomTkinter")
1212 (commit (string-append "v" version))))
1213 (file-name (git-file-name name version))
1214 (sha256
1215 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
1216 (build-system pyproject-build-system)
1217 (arguments
1218 (list
1219 #:phases
1220 #~(modify-phases %standard-phases
1221 (add-before 'check 'start-xorg-server
1222 (lambda _
1223 (setenv "HOME" "/tmp")
1224 ;; The test suite requires a running X server.
1225 (system "Xvfb :99 -screen 0 1024x768x24 &")
1226 (setenv "DISPLAY" ":99.0")))
1227 (replace 'check
1228 (lambda* (#:key tests? #:allow-other-keys)
1229 (when tests?
1230 (with-directory-excursion "test"
1231 (invoke "python" "unit_tests/test_all.py"))))))))
1232 (propagated-inputs
1233 (list (list python "tk")
1234 python-darkdetect
1235 python-packaging))
1236 (native-inputs
1237 (list python-setuptools
1238 xorg-server-for-tests))
1239 (home-page "https://customtkinter.tomschimansky.com")
1240 (synopsis
1241 "Python @acronym{User Interface, UI} library based on Tkinter")
1242 (description
1243 "CustomTkinter provides fully customizable widgets, created and used
1244like normal Tkinter widgets, which can also be used in combination with normal
1245Tkinter elements.")
1246 (license license:expat)))
1247
1248(define-public python-cyclopts
1249 (package
1250 (name "python-cyclopts")
1251 (version "4.14.0")
1252 (source
1253 (origin
1254 (method git-fetch)
1255 (uri (git-reference
1256 (url "https://github.com/BrianPugh/cyclopts")
1257 (commit (string-append "v" version))))
1258 (file-name (git-file-name name version))
1259 (sha256
1260 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1261 (build-system pyproject-build-system)
1262 (arguments
1263 (list
1264 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1265 #:test-flags
1266 #~(list #$@(map (lambda (test) (string-append "--deselect="
1267 "tests/completion/"
1268 "test_bash.py::"
1269 test))
1270 (list "test_list_path_multi_positional_default_case"
1271 "test_eq_form_path_completion"
1272 "test_bash_path_completion_reflects_caller_cwd"))
1273 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1274 (native-inputs
1275 (list python-docutils
1276 python-hatch-vcs
1277 python-hatchling
1278 python-mkdocs
1279 python-pexpect
1280 python-pydantic
1281 python-pytest
1282 python-pytest-mock
1283 python-pyyaml
1284 python-sphinx
1285 python-syrupy
1286 python-toml
1287 python-trio))
1288 (propagated-inputs
1289 (list python-attrs
1290 python-docstring-parser
1291 python-rich
1292 python-rich-rst
1293 python-tomli
1294 python-typing-extensions))
1295 (home-page "https://github.com/BrianPugh/cyclopts")
1296 (synopsis "Intuitive, easy CLIs based on type hints")
1297 (description
1298 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1299that aims to provide an intuitive & efficient developer experience.")
1300 (license license:asl2.0)))
1301
1302(define-public python-darkdetect
1303 (package
1304 (name "python-darkdetect")
1305 (version "0.8.0")
1306 (source
1307 (origin
1308 (method url-fetch)
1309 (uri (pypi-uri "darkdetect" version))
1310 (sha256
1311 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1312 (build-system pyproject-build-system)
1313 (arguments
1314 (list
1315 #:tests? #f)) ;no tests in PyPI or Git.
1316 (native-inputs (list python-setuptools))
1317 (home-page "https://github.com/albertosottile/darkdetect")
1318 (synopsis "Detect OS dark mode from Python")
1319 (description
1320 "This package allows to detect if the user is using Dark Mode.")
1321 (license license:bsd-3)))
1322
1323(define-public python-decopatch
1324 (package
1325 (name "python-decopatch")
1326 (version "1.4.10")
1327 (source
1328 (origin
1329 (method url-fetch)
1330 (uri (pypi-uri "decopatch" version))
1331 (sha256
1332 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1333 (build-system pyproject-build-system)
1334 (arguments
1335 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1336 (native-inputs
1337 (list python-setuptools
1338 python-setuptools-scm))
1339 (propagated-inputs
1340 (list python-makefun))
1341 (home-page "https://github.com/smarie/python-decopatch")
1342 (synopsis "Create decorators easily in Python")
1343 (description
1344 "This package provide implements a functionality to simplify writing
1345decorators in Python.")
1346 (license license:bsd-3)))
1347
1348(define-public python-discovery
1349 (package
1350 (name "python-discovery")
1351 (version "1.2.1")
1352 (source
1353 (origin
1354 (method git-fetch)
1355 (uri (git-reference
1356 (url "https://github.com/tox-dev/python-discovery")
1357 (commit version)))
1358 (file-name (git-file-name name version))
1359 (sha256
1360 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1361 (build-system pyproject-build-system)
1362 (arguments
1363 (list
1364 #:test-flags
1365 ;; assert []
1366 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1367 (native-inputs
1368 (list python-pytest
1369 python-pytest-mock
1370 python-hatchling
1371 python-hatch-vcs))
1372 (propagated-inputs
1373 (list python-filelock
1374 python-platformdirs))
1375 (home-page "https://github.com/tox-dev/python-discovery")
1376 (synopsis "Python interpreter discovery")
1377 (description
1378 "@code{python-discovery} is a library for discovering Python interpreters
1379installed on the current machine which may have multiple Python versions from
1380system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1381Windows registry (PEP 514). This library finds the right one.")
1382 (license license:expat)))
1383
1384(define-public python-distance
1385 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1386 (revision "0"))
1387 (package
1388 (name "python-distance")
1389 (version (git-version "0.1.3" revision commit))
1390 (source
1391 (origin
1392 (method git-fetch)
1393 (uri (git-reference
1394 (url "https://github.com/doukremt/distance")
1395 (commit commit)))
1396 (file-name (git-file-name name version))
1397 (sha256
1398 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1399 (build-system pyproject-build-system)
1400 (arguments
1401 (list #:test-backend #~'custom
1402 #:test-flags #~(list "tests/tests.py")))
1403 (native-inputs (list python-setuptools))
1404 (home-page "https://github.com/doukremt/distance")
1405 (synopsis "Utilities for comparing sequences")
1406 (description
1407 "This package provides helpers for computing similarities between
1408arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1409Sorensen distance, plus some bonuses. All distance computations are
1410implemented in pure Python, and most of them are also implemented in C.")
1411 (license license:gpl2+))))
1412
1413(define-public python-docopt-ng
1414 (package
1415 (name "python-docopt-ng")
1416 (version "0.9.0")
1417 (source
1418 (origin
1419 (method git-fetch)
1420 (uri (git-reference
1421 (url "https://github.com/jazzband/docopt-ng")
1422 (commit version)))
1423 (file-name (git-file-name name version))
1424 (sha256
1425 (base32 "1vdh1amh8jkhll0ym1r72q1ddg8ds3pyx37kyw9abg1w3abh6ih8"))))
1426 (build-system pyproject-build-system)
1427 (native-inputs
1428 (list python-pdm-backend
1429 python-pytest-8))
1430 (home-page "https://github.com/jazzband/docopt-ng")
1431 (synopsis "Humane command line arguments parser")
1432 (description
1433 "This package provides Jazzband-maintained fork of docopt, the humane
1434command line arguments parser.")
1435 (license license:expat)))
1436
1437(define-public python-doi
1438 (package
1439 (name "python-doi")
1440 (version "0.2.0")
1441 (source
1442 (origin
1443 (method url-fetch)
1444 (uri (pypi-uri "python-doi" version))
1445 (sha256
1446 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1447 (build-system pyproject-build-system)
1448 (arguments
1449 (list #:test-flags
1450 #~(list "-vv"
1451 (string-append "-k not (test_validate_doi "
1452 "or test_get_real_url_from_doi)"))))
1453 (native-inputs
1454 (list python-pytest
1455 python-pytest-xdist
1456 python-setuptools
1457 python-sphinx
1458 python-sphinx-autobuild
1459 python-sphinx-rtd-theme))
1460 (home-page "https://github.com/papis/python-doi")
1461 (synopsis "Python package to work with Document Object Identifier (doi)")
1462 (description
1463 "Python package to work with Document Object Identifier (doi).")
1464 (license license:gpl3)))
1465
1466(define-public python-domdf-python-tools
1467 (package
1468 (name "python-domdf-python-tools")
1469 (version "3.10.0")
1470 (source
1471 (origin
1472 (method url-fetch)
1473 (uri (pypi-uri "domdf_python_tools" version))
1474 (sha256
1475 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1476 (build-system pyproject-build-system)
1477 (native-inputs (list python-hatch-requirements-txt))
1478 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1479 (propagated-inputs
1480 (list python-natsort
1481 python-typing-extensions))
1482 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1483 (synopsis "Helpful functions for Python")
1484 (description
1485 "This package provide helpful functions for Python's testing and
1486packaging tasks.")
1487 (license license:expat)))
1488
1489(define-public python-donfig
1490 (package
1491 (name "python-donfig")
1492 (version "0.8.1.post1")
1493 (source
1494 (origin
1495 (method git-fetch)
1496 (uri (git-reference
1497 (url "https://github.com/pytroll/donfig")
1498 (commit (string-append "v" version))))
1499 (file-name (git-file-name name version))
1500 (sha256
1501 (base32 "0hp6v9lh4gaym48ljvpb00cgcwssj306ypyszha2rlwb7mkknmj6"))))
1502 (build-system pyproject-build-system)
1503 (native-inputs
1504 (list python-cloudpickle
1505 python-pytest
1506 python-setuptools
1507 python-versioneer))
1508 (propagated-inputs
1509 (list python-pyyaml))
1510 (home-page "https://github.com/pytroll/donfig")
1511 (synopsis "Python package for configuring a python package")
1512 (description
1513 "Donfig is a Python library meant to make configuration easier for other
1514python packages. Donfig can be configured programmatically, by environment
1515variables, or from YAML files in standard locations. The below examples show
1516the basics of using donfig.")
1517 (license license:expat)))
1518
1519(define-public python-duet
1520 (package
1521 (name "python-duet")
1522 (version "0.2.9")
1523 (source
1524 (origin
1525 (method git-fetch)
1526 (uri (git-reference
1527 (url "https://github.com/google/duet")
1528 (commit (string-append "v" version))))
1529 (file-name (git-file-name name version))
1530 (sha256
1531 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1532 (build-system pyproject-build-system)
1533 (native-inputs (list python-pytest python-setuptools))
1534 (home-page "https://github.com/google/duet")
1535 (synopsis "Simple future-based async library for Python")
1536 (description
1537 "This package provides a simple @code{Future}-based async library for
1538Python. Duet uses a structured concurrency approach to async programming,
1539relying on the @code{Future} interface for parallelism. Duet also provides
1540a way to run async/await coroutines around those @code{Future}s. Unlike most
1541async libraries, duet is re-entrant.")
1542 (license license:asl2.0)))
1543
1544(define-public python-envs
1545 (package
1546 (name "python-envs")
1547 (version "1.4")
1548 (source
1549 (origin
1550 (method url-fetch)
1551 (uri (pypi-uri "envs" version))
1552 (sha256
1553 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1554 (build-system pyproject-build-system)
1555 (arguments
1556 (list #:test-backend #~'unittest))
1557 (native-inputs
1558 (list python-packaging python-poetry-core))
1559 (propagated-inputs
1560 (list python-click python-jinja2 python-terminaltables))
1561 (home-page "https://github.com/capless/envs")
1562 (synopsis "Easy access of environment variables from Python")
1563 (description
1564 "This package implements a functionality to access of environment
1565variables from Python with support for strings, booleans, list, tuples, and
1566dicts.")
1567 (license license:asl2.0)))
1568
1569(define-public python-exitcode
1570 (package
1571 (name "python-exitcode")
1572 (version "0.1.0")
1573 (source
1574 (origin
1575 (method url-fetch)
1576 (uri (pypi-uri "exitcode" version))
1577 (sha256
1578 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1579 (build-system pyproject-build-system)
1580 (arguments
1581 (list #:tests? #f)) ; no tests in PyPI or Git
1582 (native-inputs
1583 (list python-poetry-core
1584 python-setuptools))
1585 (home-page "https://github.com/rumpelsepp/exitcode")
1586 (synopsis "Preferred system exit codes as defined by sysexits.h")
1587 (description
1588 "This package implements a preferred system exit codes as defined by
1589@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1590Rust's @url{https://docs.rs/exitcode, exitcode}.")
1591 (license license:expat)))
1592
1593(define-public python-exrex
1594 (package
1595 (name "python-exrex")
1596 (version "0.12.0")
1597 (source
1598 (origin
1599 (method git-fetch)
1600 (uri (git-reference
1601 (url "https://github.com/asciimoo/exrex")
1602 (commit (string-append "v" version))))
1603 (file-name (git-file-name name version))
1604 (sha256
1605 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1606 (build-system pyproject-build-system)
1607 (arguments (list #:test-backend #~'custom
1608 #:test-flags #~'("tests.py")))
1609 (native-inputs (list python-setuptools))
1610 (home-page "https://github.com/asciimoo/exrex")
1611 (synopsis "Irregular methods for regular expressions")
1612 (description
1613 "Exrex is a command line tool and Python module that generates all,
1614or random, matching strings to a given regular expression.")
1615 (license license:agpl3+)))
1616
1617(define-public python-extra-platforms
1618 (package
1619 (name "python-extra-platforms")
1620 (version "13.6.0")
1621 (source
1622 (origin
1623 (method git-fetch)
1624 (uri (git-reference
1625 (url "https://github.com/kdeldycke/extra-platforms")
1626 (commit (string-append "v" version))))
1627 (file-name (git-file-name name version))
1628 (sha256
1629 (base32 "0h9bg8dn5zzcm0nnn5wvnc7yrwlglg5yvbxfzwkg4vm123l72zsa"))))
1630 (build-system pyproject-build-system)
1631 (arguments
1632 (list
1633 #:build-backend "setuptools.build_meta"
1634 ;; Skip the network tests.
1635 #:test-flags #~(list "-m" "not network")))
1636 (native-inputs
1637 (list python-pytest
1638 python-setuptools))
1639 (home-page "https://kdeldycke.github.io/extra-platforms/")
1640 (synopsis "Detection of architectures, platforms, and OS families")
1641 (description
1642 "Extra Platforms detects and identifies operating systems, platforms,
1643architectures, and OS families. It groups them by family for conditional
1644logic in cross-platform applications.")
1645 (license license:asl2.0)))
1646
1647(define-public python-ezdxf
1648 (package
1649 (name "python-ezdxf")
1650 (version "1.3.5")
1651 (source
1652 (origin
1653 (method git-fetch)
1654 (uri (git-reference
1655 (url "https://github.com/mozman/ezdxf")
1656 (commit (string-append "v" version))))
1657 (sha256
1658 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1659 (build-system pyproject-build-system)
1660 (native-inputs (list python-cython python-pillow python-pytest
1661 python-setuptools unzip))
1662 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1663 python-typing-extensions))
1664 (home-page "https://ezdxf.mozman.at/")
1665 (synopsis "Python library to read and write DXF drawings")
1666 (description "ezdxf is a Python package to create new DXF files and
1667read/modify/write existing DXF files.")
1668 (license license:expat)))
1669
1670(define-public python-fastnumbers
1671 (package
1672 (name "python-fastnumbers")
1673 (version "5.1.1")
1674 (source
1675 (origin
1676 (method url-fetch)
1677 (uri (pypi-uri "fastnumbers" version))
1678 (sha256
1679 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1680 (build-system pyproject-build-system)
1681 (native-inputs
1682 (list python-numpy
1683 python-pytest
1684 python-setuptools
1685 python-setuptools-scm))
1686 (home-page "https://github.com/SethMMorton/fastnumbers")
1687 (synopsis "Super-fast and clean conversions to numbers")
1688 (description
1689 "This package provides provides drop-in replacements for the Python
1690built-in @code{int} and @code{float} that are on par or faster with the Python
1691equivalents.")
1692 (license license:expat)))
1693
1694(define-public python-findpython
1695 (package
1696 (name "python-findpython")
1697 (version "0.7.0")
1698 (source
1699 (origin
1700 (method url-fetch)
1701 (uri (pypi-uri "findpython" version))
1702 (sha256
1703 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1704 (build-system pyproject-build-system)
1705 (native-inputs
1706 (list python-pdm-backend
1707 python-pytest))
1708 (propagated-inputs
1709 (list python-packaging
1710 python-platformdirs))
1711 (home-page "https://github.com/frostming/findpython")
1712 (synopsis "Find Python versions the system")
1713 (description
1714 "This package provides a utility to find Python versions on the current
1715system.")
1716 (license license:expat)))
1717
1718(define-public python-flexcache
1719 (package
1720 (name "python-flexcache")
1721 (version "0.3")
1722 (source
1723 (origin
1724 (method git-fetch)
1725 (uri (git-reference
1726 (url "https://github.com/hgrecco/flexcache")
1727 (commit version)))
1728 (file-name (git-file-name name version))
1729 (sha256
1730 (base32 "08b1i79q6gxcn6c5gkgscwjnzwlwaaz9vmlgrr7z9kbindxx61ih"))))
1731 (build-system pyproject-build-system)
1732 (native-inputs
1733 (list python-pytest
1734 python-setuptools
1735 python-setuptools-scm))
1736 (propagated-inputs
1737 (list python-typing-extensions))
1738 (home-page "https://github.com/hgrecco/flexcache")
1739 (synopsis "Caching transformed versions of a source object")
1740 (description
1741 "This package implements a functionality to cache on disk the result of
1742expensive calculations. It was started as part of
1743@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1744 (license license:bsd-3)))
1745
1746(define-public python-flexparser
1747 (package
1748 (name "python-flexparser")
1749 (version "0.4")
1750 (source
1751 (origin
1752 (method git-fetch)
1753 (uri (git-reference
1754 (url "https://github.com/hgrecco/flexparser")
1755 (commit version)))
1756 (file-name (git-file-name name version))
1757 (sha256
1758 (base32 "1aj6b2a5w0z814x4gr8z4lmpf4ivp41gikx998lkk7rbdgh2kryh"))))
1759 (build-system pyproject-build-system)
1760 (native-inputs
1761 (list python-pytest
1762 python-setuptools
1763 python-setuptools-scm))
1764 (propagated-inputs
1765 (list python-typing-extensions))
1766 (home-page "https://github.com/hgrecco/flexparser")
1767 (synopsis "Parsing made fun ... using typing")
1768 (description "This project provides a typed parser. It was started as
1769part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1770package. ")
1771 (license license:bsd-3)))
1772
1773(define-public python-fortranformat
1774 (package
1775 (name "python-fortranformat")
1776 (version "2.0.3")
1777 (source
1778 (origin
1779 (method git-fetch)
1780 (uri (git-reference
1781 (url "https://github.com/brendanarnold/py-fortranformat")
1782 (commit (string-append "v" version))))
1783 (file-name (git-file-name name version))
1784 (sha256
1785 (base32 "0k4lpj72a6zy1m5855w6b127q8h20c1xfr0x3gasqbkqqz65kli6"))))
1786 (build-system pyproject-build-system)
1787 (native-inputs
1788 (list python-poetry-core
1789 python-pytest))
1790 (home-page "https://github.com/brendanarnold/py-fortranformat")
1791 (synopsis "FORTRAN format interpreter for Python")
1792 (description
1793 "This package mimics FORTRAN textual IO in Python - generates text from a
1794Python list of variables or will read a line of text into Python variables
1795according to the FORTRAN format statement passed.")
1796 (license license:expat)))
1797
1798(define-public python-gest-api
1799 (package
1800 (name "python-gest-api")
1801 (version "0.1")
1802 (source
1803 (origin
1804 (method url-fetch)
1805 (uri (pypi-uri "gest_api" version))
1806 (sha256
1807 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1808 (build-system pyproject-build-system)
1809 (native-inputs
1810 (list python-pytest
1811 python-setuptools))
1812 (propagated-inputs
1813 (list python-pydantic))
1814 (home-page "https://github.com/campa-consortium/gest-api")
1815 (synopsis "Standardization for generators")
1816 (description
1817 "This package provides a standard for generating test points and
1818exchanging variables, objectives, and constraints in optimization problems.
1819
1820It is an effort to standardize the interface of the generators in optimization
1821libraries such as:
1822@itemize
1823@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1824high-level optimization in Python
1825@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1826scale, powered by @code{libEnsemble}
1827@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1828toolkit for coordinating asynchronous and dynamic ensembles of calculations
1829@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1830and execution of large, black-box optimization problems
1831@end itemize")
1832 (license license:bsd-3)))
1833
1834(define-public python-grapheme
1835 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1836 ;; branch.
1837 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1838 (revision "0"))
1839 (package
1840 (name "python-grapheme")
1841 (version (git-version "0.6.0" revision commit))
1842 (source
1843 (origin
1844 (method git-fetch)
1845 (uri (git-reference
1846 (url "https://github.com/alvinlindstam/grapheme")
1847 (commit commit)))
1848 (file-name (git-file-name name version))
1849 (sha256
1850 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1851 (build-system pyproject-build-system)
1852 (native-inputs
1853 (list python-pytest
1854 python-setuptools))
1855 (home-page "https://github.com/alvinlindstam/grapheme")
1856 (synopsis "Unicode grapheme helpers")
1857 (description
1858 "This package provides a functionality for working with user perceived
1859characters. More specifically, string manipulation and calculation functions
1860for working with grapheme cluster groups (graphemes) as defined by the
1861@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1862 (license license:expat))))
1863
1864(define-public python-halo
1865 (package
1866 (name "python-halo")
1867 (version "0.0.31")
1868 (source
1869 (origin
1870 (method url-fetch)
1871 (uri (pypi-uri "halo" version))
1872 (sha256
1873 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1874 (build-system pyproject-build-system)
1875 (arguments
1876 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1877 (native-inputs
1878 (list python-setuptools))
1879 (propagated-inputs
1880 (list python-colorama
1881 python-log-symbols
1882 python-six
1883 python-spinners
1884 python-termcolor))
1885 (home-page "https://github.com/manrajgrover/halo")
1886 (synopsis "Python library to display graphical spinners in the terminal")
1887 (description
1888 "Halo is a Python library to display graphical spinners in the terminal.
1889It also supports IPython/Jupyter.")
1890 (license license:expat)))
1891
1892(define-public python-hatch-argparse-manpage
1893 (package
1894 (name "python-hatch-argparse-manpage")
1895 (version "1.0.0")
1896 (source
1897 (origin
1898 (method git-fetch)
1899 (uri (git-reference
1900 (url "https://github.com/damonlynch/hatch-argparse-manpage")
1901 (commit (string-append "v" version))))
1902 (file-name (git-file-name name version))
1903 (sha256
1904 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
1905 (build-system pyproject-build-system)
1906 (arguments (list #:tests? #f)) ; No tests upstream.
1907 (native-inputs (list python-hatchling))
1908 (propagated-inputs (list python-argparse-manpage python-rich))
1909 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1910 (synopsis "Hatch build hook plugin to generate manual pages")
1911 (description
1912 "This package provides a build hook plugin for Hatch to automatically
1913 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1914by Pavel Raiskup.")
1915 (license license:gpl3+)))
1916
1917(define-public python-hatch-gettext
1918 (package
1919 (name "python-hatch-gettext")
1920 (version "1.1.0")
1921 (source
1922 (origin
1923 (method git-fetch)
1924 (uri (git-reference
1925 (url "https://github.com/damonlynch/hatch-gettext")
1926 (commit (string-append "v" version))))
1927 (file-name (git-file-name name version))
1928 (sha256
1929 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
1930 (build-system pyproject-build-system)
1931 (arguments (list #:tests? #f)) ; No tests upstream.
1932 (native-inputs (list python-hatchling))
1933 (propagated-inputs (list python-rich))
1934 (home-page "https://github.com/damonlynch/hatch-gettext")
1935 (synopsis "Hatch build hook plugin for GNU gettext")
1936 (description
1937 "This package provides a build hook plugin for Hatch that compiles
1938 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1939 (license license:gpl3+)))
1940
1941(define-public python-hatch-nodejs-version
1942 (package
1943 (name "python-hatch-nodejs-version")
1944 (version "0.4.0")
1945 (source
1946 (origin
1947 (method git-fetch)
1948 (uri (git-reference
1949 (url "https://github.com/agoose77/hatch-nodejs-version")
1950 (commit (string-append "v" version))))
1951 (file-name (git-file-name name version))
1952 (sha256
1953 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
1954 (build-system pyproject-build-system)
1955 (propagated-inputs (list python-hatchling))
1956 (native-inputs (list python-hatchling python-pytest))
1957 (home-page "https://github.com/agoose77/hatch-nodejs-version")
1958 (synopsis "Hatch plugin for versioning from a package.json file")
1959 (description "This package provides a hatch plugin for fetching a version
1960from a @code{package.json} file.")
1961 (license license:expat)))
1962
1963(define-public python-hatch-regex-commit
1964 (package
1965 (name "python-hatch-regex-commit")
1966 (version "0.0.4")
1967 (source
1968 (origin
1969 (method git-fetch)
1970 (uri (git-reference
1971 (url "https://github.com/frankie567/hatch-regex-commit")
1972 (commit (string-append "v" version))))
1973 (file-name (git-file-name name version))
1974 (sha256
1975 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
1976 (build-system pyproject-build-system)
1977 (arguments (list #:tests? #f)) ;test directory is empty
1978 (propagated-inputs (list python-hatchling))
1979 (native-inputs (list python-hatchling))
1980 (home-page "https://github.com/frankie567/hatch-regex-commit")
1981 (synopsis "Hatch plugin to create a commit and tag when bumping version")
1982 (description
1983 "This provides a plugin for Hatch that automatically creates a Git commit
1984and tag after version bumping.")
1985 (license license:expat)))
1986
1987;; TODO: Move to ci or task-runners, see:
1988;; <https://codeberg.org/guix/guix/issues/3096>.
1989(define-public python-huey
1990 (package
1991 (name "python-huey")
1992 (version "2.5.3")
1993 (source
1994 (origin
1995 (method git-fetch)
1996 (uri (git-reference
1997 (url "https://github.com/coleifer/huey")
1998 (commit version)))
1999 (file-name (git-file-name name version))
2000 (sha256
2001 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
2002 (build-system pyproject-build-system)
2003 (arguments
2004 (list
2005 #:phases
2006 #~(modify-phases %standard-phases
2007 (add-after 'unpack 'remove-which
2008 (lambda _
2009 (substitute* "huey/tests/test_kt_huey.py"
2010 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
2011 "has_ktserver = False"))))
2012 (replace 'check
2013 (lambda* (#:key tests? #:allow-other-keys)
2014 (when tests?
2015 (spawn "redis-server" '("redis-server"))
2016 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
2017 (native-inputs (list python-setuptools redis tzdata-for-tests))
2018 (propagated-inputs (list python-redis))
2019 (home-page "https://huey.readthedocs.io")
2020 (synopsis "Lightweight task queue for Python")
2021 (description
2022 "Huey is a lightweight task queue for Python applications. Huey
2023supports:
2024@itemize
2025@item Redis, SQLite, file-system, or in-memory storage
2026@item multi-process, multi-thread or greenlet task execution models
2027@item scheduling tasks to execute at a given time, or after a given delay
2028@item scheduling recurring tasks, like a crontab
2029@item automatically retrying tasks that fail
2030@item task prioritization
2031@item task result storage
2032@item task expiration
2033@item task locking
2034@item task pipelines and chains
2035@end itemize")
2036 (license license:expat)))
2037
2038(define-public python-id
2039 (package
2040 (name "python-id")
2041 (version "1.5.0")
2042 (source
2043 (origin
2044 (method url-fetch)
2045 (uri (pypi-uri "id" version))
2046 (sha256
2047 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
2048 (build-system pyproject-build-system)
2049 (native-inputs
2050 (list python-flit-core
2051 python-pretend
2052 python-pytest))
2053 (propagated-inputs
2054 (list python-requests))
2055 (home-page "https://github.com/di/id")
2056 (synopsis "Tool for generating OIDC identities")
2057 (description
2058 "This package provides a tool for generating @code{OIDC, OpenID Connect}
2059identities.")
2060 (license license:asl2.0)))
2061
2062(define-public python-iniparse
2063 (package
2064 (name "python-iniparse")
2065 (version "0.5.1")
2066 (source
2067 (origin
2068 (method git-fetch)
2069 (uri (git-reference
2070 (url "https://github.com/candlepin/python-iniparse")
2071 (commit version)))
2072 (file-name (git-file-name name version))
2073 (sha256
2074 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
2075 (build-system pyproject-build-system)
2076 (arguments
2077 (list
2078 #:test-backend #~'custom
2079 #:test-flags #~(list "runtests.py")
2080 #:phases
2081 #~(modify-phases %standard-phases
2082 (add-before 'check 'disable-tests
2083 (lambda _
2084 ;; XXX: Three tests failed to compare lists.
2085 (substitute* "tests/test_compat.py"
2086 (("test_read_returns_file_list")
2087 "disabled_test_read_returns_file_list")))))))
2088 (native-inputs
2089 (list python-setuptools))
2090 (home-page "https://github.com/candlepin/python-iniparse")
2091 (synopsis "Accessing and Modifying INI files")
2092 (description
2093 "iniparse is a INI parser for Python which is:
2094@itemize
2095@item Compatible with ConfigParser: Backward compatible implementations of
2096ConfigParser, RawConfigParser, and SafeConfigParser are included that are
2097API-compatible with the Python standard library.
2098@item Preserves structure of INI files: Order of sections & options,
2099indentation, comments, and blank lines are preserved as far as possible when
2100data is updated.
2101@item More convenient: Values can be accessed using dotted notation
2102(@code{cfg.user.name}), or using container syntax
2103(@code{cfg['user']['name']}).
2104@end itemize")
2105 (license license:expat)))
2106
2107(define-public python-inotify
2108 (package
2109 (name "python-inotify")
2110 (version "0.2.12")
2111 (source
2112 (origin
2113 (method git-fetch)
2114 (uri (git-reference
2115 (url "https://github.com/dsoprea/PyInotify")
2116 (commit version)))
2117 (file-name (git-file-name name version))
2118 (sha256
2119 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
2120 (build-system pyproject-build-system)
2121 (arguments
2122 (list
2123 #:phases
2124 #~(modify-phases %standard-phases
2125 (add-after 'unpack 'fix-requirements
2126 (lambda _
2127 (substitute* "inotify/resources/requirements.txt"
2128 (("build")
2129 "")))))))
2130 (native-inputs (list python-pytest python-setuptools))
2131 (propagated-inputs (list python-pyasyncore))
2132 (home-page "https://github.com/dsoprea/PyInotify")
2133 (synopsis "Linux filesystem activity monitor library for Python")
2134 (description
2135 "This package provides an efficient and elegant inotify (Linux filesystem
2136activity monitor) library for Python.")
2137 (license license:gpl2)))
2138
2139(define-public python-intervaltree
2140 (package
2141 (name "python-intervaltree")
2142 (version "3.1.0")
2143 (source
2144 (origin
2145 (method url-fetch)
2146 (uri (pypi-uri "intervaltree" version))
2147 (sha256
2148 (base32
2149 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
2150 (build-system pyproject-build-system)
2151 (arguments
2152 `(#:phases
2153 (modify-phases %standard-phases
2154 ;; pytest seems to have a check to make sure the user is testing
2155 ;; their checked-out code and not an installed, potentially
2156 ;; out-of-date copy. This is harmless here, since we just installed
2157 ;; the package, so we disable the check to avoid skipping tests
2158 ;; entirely.
2159 (add-before 'check 'import-mismatch-error-workaround
2160 (lambda _
2161 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
2162 #t)))))
2163 (propagated-inputs
2164 (list python-sortedcontainers))
2165 (native-inputs
2166 (list python-setuptools python-pytest))
2167 (home-page "https://github.com/chaimleib/intervaltree")
2168 (synopsis "Editable interval tree data structure")
2169 (description
2170 "This package provides a mutable, self-balancing interval tree
2171implementation for Python. Queries may be by point, by range overlap, or by
2172range envelopment. This library was designed to allow tagging text and time
2173intervals, where the intervals include the lower bound but not the upper
2174bound.")
2175 (license license:asl2.0)))
2176
2177(define-public python-jschon
2178 (package
2179 (name "python-jschon")
2180 (version "0.11.1")
2181 (source
2182 (origin
2183 (method git-fetch)
2184 (uri (git-reference
2185 (url "https://github.com/marksparkza/jschon/")
2186 (commit (string-append "v" version))
2187 (recursive? #t))) ;required for tests
2188 (sha256
2189 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
2190 (file-name (git-file-name name version))))
2191 (build-system pyproject-build-system)
2192 (propagated-inputs
2193 (list python-rfc3986))
2194 (native-inputs
2195 (list python-coverage
2196 python-hypothesis
2197 python-pytest
2198 python-pytest-benchmark
2199 python-pytest-httpserver
2200 python-requests
2201 python-setuptools))
2202 (home-page "https://jschon.readthedocs.io/")
2203 (synopsis "Object-oriented JSON Schema implementation for Python")
2204 (description
2205 "This package provides a JSON toolkit for Python developers.")
2206 (license license:expat)))
2207
2208(define-public python-jsonpath-ng
2209 (package
2210 (name "python-jsonpath-ng")
2211 (version "1.7.0" )
2212 (source
2213 (origin
2214 (method git-fetch)
2215 (uri (git-reference
2216 (url "https://github.com/h2non/jsonpath-ng")
2217 (commit (string-append "v" version))))
2218 (file-name (git-file-name name version))
2219 (sha256
2220 (base32 "0z0qm5sgzal0qzml2fmc9h5nim8m3x6sz55gqhcd9c2jrq8jmwmi"))))
2221 (build-system pyproject-build-system)
2222 (native-inputs
2223 (list python-pytest
2224 python-setuptools))
2225 (propagated-inputs
2226 (list python-ply))
2227 (home-page "https://github.com/h2non/jsonpath-ng")
2228 (synopsis "JSONPath Next-Generation")
2229 (description
2230 "This package provides a final implementation of @code{JSONPath} for
2231Python that aims to be standard compliant, including arithmetic and binary
2232comparison operators, as defined in the original
2233@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
2234 (license license:asl2.0)))
2235
2236(define-public python-json-log-formatter
2237 (package
2238 (name "python-json-log-formatter")
2239 (version "1.1.1")
2240 (source
2241 (origin
2242 (method git-fetch)
2243 (uri (git-reference
2244 (url "https://github.com/marselester/json-log-formatter")
2245 (commit (string-append "v" version))))
2246 (file-name (git-file-name name version))
2247 (sha256
2248 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
2249 (build-system pyproject-build-system)
2250 (arguments
2251 (list
2252 #:phases
2253 #~(modify-phases %standard-phases
2254 (replace 'check
2255 (lambda* (#:key tests? #:allow-other-keys)
2256 (when tests?
2257 (invoke "pytest" "-s" "tests.py")))))))
2258 (native-inputs (list python-django
2259 python-pytest
2260 python-setuptools
2261 python-simplejson
2262 python-ujson
2263 python-wheel))
2264 (home-page "https://github.com/marselester/json-log-formatter")
2265 (synopsis "JSON log formatter")
2266 (description "The library helps you to store logs in JSON format.")
2267 (license license:expat)))
2268
2269(define-public python-keeper-secrets-manager-core
2270 ;; released from a monorepo with other packages following various versioning
2271 ;; schemes. This commit was selected because some failing tests were fixed
2272 ;; since the most recent release of the Python SDK packages.
2273 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2274 (revision "0"))
2275 (package
2276 (name "python-keeper-secrets-manager-core")
2277 (version (git-version "17.0.0" revision commit))
2278 (source
2279 (origin
2280 (method git-fetch)
2281 (uri (git-reference
2282 (url "https://github.com/Keeper-Security/secrets-manager")
2283 (commit commit)))
2284 (file-name (git-file-name name version))
2285 (sha256
2286 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2287 (build-system pyproject-build-system)
2288 (arguments
2289 (list
2290 #:phases
2291 #~(modify-phases %standard-phases
2292 (add-after 'unpack 'chdir
2293 (lambda _
2294 (chdir "sdk/python/core"))))))
2295 (propagated-inputs
2296 (list python-cryptography
2297 python-importlib-metadata
2298 python-requests))
2299 (native-inputs
2300 (list python-pytest
2301 python-setuptools))
2302 (home-page "https://github.com/Keeper-Security/secrets-manager")
2303 (synopsis "Keeper Secrets Manager for Python SDK")
2304 (description
2305 "The Keeper Secrets Manager Python SDK provides access to
2306@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
2307Management} services.")
2308 (license license:expat))))
2309
2310(define-public python-keeper-secrets-manager-helper
2311 ;; released alongside keeper-secrets-manager-core, but with a different
2312 ;; versioning scheme.
2313 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2314 (revision "0"))
2315 (package
2316 (name "python-keeper-secrets-manager-helper")
2317 (version (git-version "1.0.6" revision commit))
2318 (source
2319 (origin
2320 (method git-fetch)
2321 (uri (git-reference
2322 (url "https://github.com/Keeper-Security/secrets-manager")
2323 (commit commit)))
2324 (file-name (git-file-name name version))
2325 (sha256
2326 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2327 (build-system pyproject-build-system)
2328 (arguments
2329 (list
2330 #:phases
2331 #~(modify-phases %standard-phases
2332 (add-after 'unpack 'chdir
2333 (lambda _
2334 (chdir "sdk/python/helper"))))))
2335 (propagated-inputs
2336 (list python-iso8601
2337 python-keeper-secrets-manager-core
2338 python-pyyaml))
2339 (native-inputs
2340 (list python-pytest
2341 python-setuptools))
2342 (home-page "https://github.com/Keeper-Security/secrets-manager")
2343 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2344 (description
2345 "Keeper Secrets Manager SDK helper is for creating and managing secret
2346records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2347 (license license:expat))))
2348
2349(define-public python-language-data
2350 (package
2351 (name "python-language-data")
2352 (version "1.3.0")
2353 (source
2354 (origin
2355 (method url-fetch)
2356 (uri (pypi-uri "language_data" version))
2357 (sha256
2358 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2359 (build-system pyproject-build-system)
2360 (native-inputs
2361 (list python-pytest
2362 python-setuptools
2363 python-setuptools-scm))
2364 (propagated-inputs
2365 (list python-marisa-trie))
2366 (home-page "https://github.com/georgkrause/language_data")
2367 (synopsis "Supplementary data about languages used by the langcodes module")
2368 (description
2369 "language_data is a supplement to the langcodes module, for working with
2370standardized codes for human languages. It stores the more bulky and
2371hard-to-index data about languages, particularly what they are named in
2372various languages.")
2373 (license license:expat)))
2374
2375(define-public python-log-symbols
2376 (package
2377 (name "python-log-symbols")
2378 (version "0.0.14")
2379 (source
2380 (origin
2381 (method url-fetch)
2382 (uri (pypi-uri "log_symbols" version))
2383 (sha256
2384 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2385 (build-system pyproject-build-system)
2386 (arguments
2387 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2388 (native-inputs
2389 (list python-setuptools))
2390 (propagated-inputs
2391 (list python-colorama))
2392 (home-page "https://github.com/manrajgrover/py-log-symbols")
2393 (synopsis "Python library with graphical symbols for logging on the terminal")
2394 (description
2395 "This package provides a Python library with graphical symbols that can
2396be displayed on the terminal, with color if possible, for logging purposes.")
2397 (license license:expat)))
2398
2399(define-public python-lsprotocol
2400 (package
2401 (name "python-lsprotocol")
2402 (version "2025.0.0")
2403 (source
2404 (origin
2405 (method git-fetch)
2406 (uri (git-reference
2407 (url "https://github.com/microsoft/lsprotocol")
2408 (commit version)))
2409 (file-name (git-file-name name version))
2410 (sha256
2411 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2412 (build-system pyproject-build-system)
2413 (arguments
2414 (list
2415 #:tests? #f ;no tests for Python package
2416 #:phases
2417 #~(modify-phases %standard-phases
2418 (add-after 'unpack 'cd-packages-python
2419 (lambda _
2420 (chdir "packages/python"))))))
2421 (native-inputs
2422 (list python-flit-core))
2423 (propagated-inputs
2424 (list python-attrs
2425 python-cattrs))
2426 (home-page "https://github.com/microsoft/lsprotocol")
2427 (synopsis "Python types for Language Server Protocol.")
2428 (description
2429 "@code{lsprotocol} is a Python implementation of object types used in
2430the Language Server Protocol (LSP). This repository contains the code
2431generator and the generated types for LSP.")
2432 (license license:expat)))
2433
2434(define-public python-marisa-trie
2435 (package
2436 (name "python-marisa-trie")
2437 (version "1.3.1")
2438 (source
2439 (origin
2440 (method url-fetch)
2441 (uri (pypi-uri "marisa_trie" version))
2442 (sha256
2443 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2444 (build-system pyproject-build-system)
2445 (native-inputs
2446 (list python-cython
2447 python-hypothesis
2448 python-pytest
2449 python-readme-renderer
2450 python-setuptools))
2451 (home-page "https://github.com/pytries/marisa-trie")
2452 (synopsis "Static memory-efficient Trie-like structures for Python")
2453 (description
2454 "This package provides static memory-efficient and fast Trie-like structures
2455for Python.")
2456 (license license:expat)))
2457
2458(define-public python-materialyoucolor
2459 (package
2460 (name "python-materialyoucolor")
2461 (version "3.0.2")
2462 (source
2463 (origin
2464 (method git-fetch)
2465 (uri (git-reference
2466 (url "https://github.com/T-Dynamos/materialyoucolor-python")
2467 (commit (string-append "v" version))))
2468 (file-name (git-file-name name version))
2469 (sha256
2470 (base32 "1yxz05g681zpvxzfcvp4dwayq8hjvw773n4lixkhgxkvvan5hah8"))))
2471 (build-system pyproject-build-system)
2472 (arguments
2473 (list #:test-backend #~'custom
2474 #:test-flags #~(list "tests/test_all.py")))
2475 (propagated-inputs (list python-pillow))
2476 (native-inputs (list pybind11 python-psutil python-rich python-setuptools))
2477 (home-page "https://github.com/T-Dynamos/materialyoucolor-python")
2478 (synopsis "Material You color generation algorithms")
2479 (description
2480 "@code{python-materialyoucolor} provides a tool that generates harmonious
2481color palettes from the dominant colors of an image, based on the
2482@uref{https://m3.material.io/styles/color/system/overview, Material color
2483system}.")
2484 (license license:expat)))
2485
2486(define-public python-menuinst
2487 (package
2488 (name "python-menuinst")
2489 (version "2.4.1")
2490 (source
2491 (origin
2492 (method git-fetch)
2493 (uri (git-reference
2494 (url "https://github.com/conda/menuinst")
2495 (commit version)))
2496 (file-name (git-file-name name version))
2497 (sha256
2498 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2499 (build-system pyproject-build-system)
2500 (arguments
2501 (list
2502 #:tests? #f)) ;tests need conda
2503 (native-inputs
2504 (list python-setuptools
2505 python-setuptools-scm))
2506 (home-page "https://conda.github.io/menuinst/")
2507 (synopsis "Cross platform menu item installation")
2508 (description
2509 "This package provides cross platform menu item installation for conda
2510packages.")
2511 (license license:bsd-3)))
2512
2513(define-public python-multiplex
2514 (package
2515 (name "python-multiplex")
2516 (version "0.6.1")
2517 (source
2518 (origin
2519 (method git-fetch) ;no tests in PyPI archive
2520 (uri (git-reference
2521 (url "https://github.com/dankilman/multiplex")
2522 (commit version)))
2523 (file-name (git-file-name name version))
2524 (sha256
2525 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2526 (build-system pyproject-build-system)
2527 (native-inputs
2528 (list python-poetry-core
2529 python-pytest
2530 python-pytest-asyncio))
2531 (propagated-inputs
2532 (list python-aiofiles
2533 python-aiostream
2534 python-click
2535 python-easy-ansi-0.3
2536 python-pyte))
2537 (home-page "https://github.com/dankilman/multiplex")
2538 (synopsis "Parallel stream of outputs from multiple processes")
2539 (description
2540 "This package provides a functionality to view output of multiple
2541processes, in parallel, in the console, with an interactive TUI.")
2542 (license license:expat)))
2543
2544(define-public python-nrepl
2545 (package
2546 (name "python-nrepl")
2547 (version "0.3.4")
2548 (source
2549 (origin
2550 (method git-fetch)
2551 (uri (git-reference
2552 (url "https://git.sr.ht/~ngraves/nrepl-python")
2553 (commit version)))
2554 (file-name (git-file-name name version))
2555 (sha256
2556 (base32 "12fi4ilkslh9rg5dilqknrr6sm2rhs2v91xhyfi432f0dp5920lp"))))
2557 (build-system pyproject-build-system)
2558 (arguments
2559 (list
2560 #:test-flags
2561 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2562 (native-inputs
2563 (list python-flit-core
2564 python-pytest
2565 python-pytest-asyncio
2566 python-pytest-xdist))
2567 (propagated-inputs
2568 (list python-fastbencode
2569 python-gevent
2570 python-ipython))
2571 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2572 (synopsis "NREPL server for Python")
2573 (description
2574 "This package provides an implementation of the @url{https://nrepl.org,
2575NREPL} protocol for Python.")
2576 (license license:gpl3+)))
2577
2578(define-public python-num2words
2579 (package
2580 (name "python-num2words")
2581 (version "0.5.14")
2582 (source
2583 (origin
2584 (method git-fetch)
2585 (uri (git-reference
2586 (url "https://github.com/savoirfairelinux/num2words")
2587 (commit (string-append "v" version))))
2588 (file-name (git-file-name name version))
2589 (sha256
2590 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2591 (build-system pyproject-build-system)
2592 (arguments
2593 (list
2594 #:test-flags
2595 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2596 (native-inputs (list python-pytest python-setuptools))
2597 (propagated-inputs (list python-docopt))
2598 (home-page "https://github.com/savoirfairelinux/num2words")
2599 (synopsis "Convert numbers to words in multiple languages")
2600 (description
2601 "@code{num2words} is a library that converts numbers like 42 to words like
2602forty-two. It supports multiple languages, and can even generate ordinal
2603numbers like forty-second.")
2604 (license license:lgpl2.1)))
2605
2606(define-public python-orderly-set
2607 (package
2608 (name "python-orderly-set")
2609 (version "5.5.0")
2610 (source
2611 (origin
2612 (method url-fetch)
2613 (uri (pypi-uri "orderly_set" version))
2614 (sha256
2615 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2616 (build-system pyproject-build-system)
2617 (native-inputs (list python-flit-core python-pytest))
2618 (home-page "https://github.com/seperman/orderly-set")
2619 (synopsis "Multiple implementations of Ordered Set")
2620 (description "Orderly Set is a package containing multiple implementations
2621of Ordered Set.")
2622 (license license:expat)))
2623
2624(define-public python-packageurl
2625 (package
2626 (name "python-packageurl")
2627 (version "0.17.6")
2628 (source
2629 (origin
2630 (method git-fetch)
2631 (uri (git-reference
2632 (url "https://github.com/package-url/packageurl-python")
2633 (commit (string-append "v" version))))
2634 (file-name (git-file-name name version))
2635 (sha256
2636 (base32 "03b6nf6jxzcbgkmqdp3bsl2lvzszqiaiqfwk88cnpvqbgq67lafb"))
2637 (modules '((guix build utils)))
2638 ;; Remove bundled virtualenv and license files used only for
2639 ;; development; not needed at build or runtime.
2640 (snippet '(delete-file-recursively "thirdparty"))))
2641 (build-system pyproject-build-system)
2642 (arguments
2643 (list #:test-flags
2644 ;; test_purl_spec.py reads JSON fixtures from the 'spec' git
2645 ;; submodule at import time; skip it when the submodule is absent.
2646 #~(list "--ignore=tests/test_purl_spec.py")))
2647 (native-inputs
2648 (list python-pytest
2649 python-setuptools))
2650 (home-page "https://www.packageurl.org")
2651 (synopsis "Package URL parser and builder")
2652 (description
2653 "This library parses and builds Package URLs (purls) as defined in the
2654purl specification. It provides a @code{PackageURL} class for creating,
2655parsing, and normalizing package URL strings across different package
2656management ecosystems.")
2657 (license license:expat)))
2658
2659(define-public python-pandocfilters
2660 (package
2661 (name "python-pandocfilters")
2662 (version "1.5.1")
2663 (source
2664 (origin
2665 (method url-fetch)
2666 (uri (pypi-uri "pandocfilters" version))
2667 (sha256
2668 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2669 (build-system pyproject-build-system)
2670 (arguments
2671 (list #:tests? #f)) ;require pandoc to run tests
2672 (native-inputs
2673 (list python-setuptools))
2674 (home-page "https://github.com/jgm/pandocfilters")
2675 (synopsis "Python module for writing Pandoc filters")
2676 (description "Pandoc is a powerful utility to transform various
2677input formats into a wide range of output formats. To alter the
2678exported output document, Pandoc allows the usage of filters, which
2679are pipes that read a JSON serialization of the Pandoc AST from stdin,
2680transform it in some way, and write it to stdout. It allows therefore
2681to alter the processing of Pandoc's supported input formats, for
2682instance one can add new syntax elements to markdown, etc.
2683
2684This package provides Python bindings.")
2685 (license license:bsd-3)))
2686
2687(define-public python-panflute
2688 (package
2689 (name "python-panflute")
2690 (version "2.3.1")
2691 (source
2692 (origin
2693 (method url-fetch)
2694 (uri (pypi-uri "panflute" version))
2695 (sha256
2696 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2697 (build-system pyproject-build-system)
2698 (arguments
2699 (list #:tests? #f)) ;require pandoc to run tests
2700 (native-inputs
2701 (list python-setuptools))
2702 (propagated-inputs
2703 (list python-click
2704 python-pyyaml))
2705 (home-page "http://scorreia.com/software/panflute/")
2706 (synopsis "Pythonic Pandoc filters")
2707 (description
2708 "Panflute is a Python package that makes Pandoc filters fun to write.
2709It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2710is heavily inspired.")
2711 (license license:bsd-3)))
2712
2713(define-public python-pastel
2714 (package
2715 (name "python-pastel")
2716 (version "0.2.1")
2717 (source
2718 (origin
2719 (method git-fetch)
2720 (uri (git-reference
2721 (url "https://github.com/sdispater/pastel")
2722 (commit version)))
2723 (file-name (git-file-name name version))
2724 (sha256
2725 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2726 (build-system pyproject-build-system)
2727 (arguments
2728 (list
2729 #:test-flags
2730 #~(list "pastel" "tests/")
2731 #:phases
2732 #~(modify-phases %standard-phases
2733 (add-after 'unpack 'use-poetry-core
2734 (lambda _
2735 ;; Patch to use the core poetry API.
2736 (substitute* "pyproject.toml"
2737 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2738 (native-inputs (list python-poetry-core python-pytest))
2739 (home-page "https://github.com/sdispater/pastel")
2740 (synopsis "Library to colorize strings in your terminal")
2741 (description
2742 "Pastel is a simple library to help you colorize strings in your
2743terminal.")
2744 (license license:expat)))
2745
2746(define-public python-pathlib-abc
2747 (package
2748 (name "python-pathlib-abc")
2749 (version "0.5.0")
2750 (source
2751 (origin
2752 (method url-fetch)
2753 (uri (pypi-uri "pathlib_abc" version))
2754 (sha256
2755 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2756 (build-system pyproject-build-system)
2757 (native-inputs (list python-pytest python-hatchling))
2758 (home-page "https://github.com/barneygale/pathlib-abc")
2759 (synopsis "Python base classes for rich path objects")
2760 (description
2761 "This package is a preview of pathlib functionality planned for a future
2762release of Python; specifically, it provides three ABCs that can be used to
2763implement path classes for non-local filesystems")
2764 (license license:psfl)))
2765
2766;; XXX: It's for [email protected], remove when no longer required.
2767(define-public python-pathlib-abc-for-python-pathy
2768 (hidden-package
2769 (package
2770 (inherit python-pathlib-abc)
2771 (version "0.1.1")
2772 (source
2773 (origin
2774 (method url-fetch)
2775 (uri (pypi-uri "pathlib_abc" version))
2776 (sha256
2777 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2778
2779(define-public python-pbs-installer
2780 (package
2781 (name "python-pbs-installer")
2782 (version "2025.09.18")
2783 (source
2784 (origin
2785 (method git-fetch)
2786 (uri (git-reference
2787 (url "https://github.com/frostming/pbs-installer")
2788 (commit version)))
2789 (file-name (git-file-name name version))
2790 (sha256
2791 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2792 (build-system pyproject-build-system)
2793 (arguments
2794 (list
2795 #:tests? #f ;no tests provided
2796 #:phases
2797 #~(modify-phases %standard-phases
2798 (add-before 'build 'set-version
2799 (lambda _
2800 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2801 (native-inputs
2802 (list python-pdm-backend
2803 python-pytest))
2804 (propagated-inputs
2805 (list python-httpx
2806 python-zstandard))
2807 (home-page "https://github.com/frostming/pbs-installer")
2808 (synopsis "Installer for Python Build Standalone")
2809 (description
2810 "This package implements an installer for
2811@url{https://github.com/astral-sh/python-build-standalone, Python Build
2812Standalone}.")
2813 (license license:expat)))
2814
2815(define-public python-phply
2816 (package
2817 (name "python-phply")
2818 (version "1.2.6")
2819 (source
2820 (origin
2821 (method url-fetch)
2822 (uri (pypi-uri "phply" version))
2823 (sha256
2824 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2825 (build-system pyproject-build-system)
2826 (native-inputs
2827 (list python-pytest
2828 python-setuptools))
2829 (propagated-inputs
2830 (list python-ply))
2831 (home-page "https://github.com/viraptor/phply")
2832 (synopsis "PHP parser written in Python using PLY")
2833 (description
2834 "@code{phply} is a parser for the PHP programming language written using
2835PLY,a Lex/YACC-style parser generator toolkit for Python.")
2836 (license license:bsd-3)))
2837
2838(define-public python-puccinialin
2839 (package
2840 (name "python-puccinialin")
2841 (version "0.1.5")
2842 (source
2843 (origin
2844 (method url-fetch)
2845 (uri (pypi-uri "puccinialin" version))
2846 (sha256
2847 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2848 (build-system pyproject-build-system)
2849 (arguments
2850 (list #:tests? #f)) ;no tests in PyPI or Git
2851 (native-inputs
2852 (list python-hatchling))
2853 (propagated-inputs
2854 (list python-httpx
2855 python-platformdirs
2856 python-tqdm))
2857 (home-page "https://github.com/konstin/puccinialin")
2858 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2859 (description
2860 "This tool helps to install Rust into a temporary directory, allowing
2861support of Rust-based Python builds. Cargo and rustc are installed into a
2862cache directory, to avoid modifying the host's environment, and further
2863activated using a set of environment variables.")
2864 (license (list license:expat license:asl2.0))))
2865
2866(define-public python-py010parser
2867 (package
2868 (name "python-py010parser")
2869 (version "0.1.18")
2870 (source
2871 (origin
2872 (method git-fetch)
2873 (uri (git-reference
2874 (url "https://github.com/d0c-s4vage/py010parser")
2875 (commit (string-append "v" version))))
2876 (file-name (git-file-name name version))
2877 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
2878 (modules '((guix build utils)))
2879 (snippet #~(begin
2880 ;; Unbundle ply.
2881 (substitute* "requirements.txt"
2882 (("^six\\>.*") ""))
2883 (substitute* "setup.py"
2884 (("(packages += \\['py010parser').*\\]" all first)
2885 (string-append first "]")))
2886 (delete-file-recursively "py010parser/ply")
2887 (substitute* (find-files "py010parser" "\\.py$")
2888 ((" .*\\.ply\\>") " ply"))
2889 ;; Avoid regenerating the lex table.
2890 (substitute* '("py010parser/__init__.py"
2891 "py010parser/c_parser.py")
2892 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
2893 (string-append open "False" close)))
2894 (substitute* '("py010parser/__init__.py"
2895 "setup.py")
2896 (("\\{\\{VERSION\\}\\}") #$version))
2897 (substitute* "setup.cfg"
2898 (("description-file") "description_file"))))))
2899 (build-system pyproject-build-system)
2900 (arguments (list #:test-backend #~'unittest
2901 #:test-flags #~'("discover" "tests")))
2902 (propagated-inputs (list python-regex python-ply))
2903 (native-inputs (list python-setuptools))
2904 (home-page "https://github.com/d0c-s4vage/py010parser")
2905 (synopsis "Parser of 010 editor's template")
2906 (description
2907 "@code{py010parser} is a Python library for parsing templates
2908for the Sweetscape 010 binary-format editor.")
2909 (license license:bsd-3)))
2910
2911(define-public python-pyasynchat
2912 (package
2913 (name "python-pyasynchat")
2914 (version "1.0.5")
2915 (source
2916 (origin
2917 (method git-fetch)
2918 (uri (git-reference
2919 (url "https://github.com/simonrob/pyasynchat")
2920 (commit (string-append "v" version))))
2921 (file-name (git-file-name name version))
2922 (sha256
2923 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
2924 (build-system pyproject-build-system)
2925 (native-inputs
2926 (list python-pytest
2927 python-setuptools))
2928 (propagated-inputs
2929 (list python-pyasyncore))
2930 (home-page "https://github.com/simonrob/pyasynchat")
2931 (synopsis "Make asynchat available for Python 3.12 onwards")
2932 (description
2933 "This package contains the
2934@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
2935found in Python versions prior to 3.12. It is provided so that existing code
2936relying on @code{import asynchat} is able to continue being used without
2937significant refactoring.")
2938 (license license:psfl)))
2939
2940(define-public python-pyasyncore
2941 (package
2942 (name "python-pyasyncore")
2943 (version "1.0.5")
2944 (source
2945 (origin
2946 (method git-fetch)
2947 (uri (git-reference
2948 (url "https://github.com/simonrob/pyasyncore")
2949 (commit (string-append "v" version))))
2950 (file-name (git-file-name name version))
2951 (sha256
2952 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
2953 (build-system pyproject-build-system)
2954 (native-inputs (list python-pytest python-setuptools))
2955 (home-page "https://github.com/simonrob/pyasyncore")
2956 (synopsis "Make asyncore available for Python 3.12 onwards")
2957 (description
2958 "This package contains the
2959@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
2960found in Python versions prior to 3.12. It is provided so that existing code
2961relying on @code{import asyncore} is able to continue being used without
2962significant refactoring.")
2963 (license license:psfl)))
2964
2965(define-public python-pyconify
2966 (package
2967 (name "python-pyconify")
2968 (version "0.2.1")
2969 (source
2970 (origin
2971 (method git-fetch)
2972 (uri (git-reference
2973 (url "https://github.com/pyapp-kit/pyconify")
2974 (commit (string-append "v" version))))
2975 (file-name (git-file-name name version))
2976 (sha256
2977 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
2978 (build-system pyproject-build-system)
2979 (arguments
2980 (list #:tests? #f)) ;require netwok access
2981 (native-inputs
2982 (list python-hatch-vcs
2983 python-hatchling))
2984 (propagated-inputs
2985 (list python-requests))
2986 (home-page "https://github.com/pyapp-kit/pyconify")
2987 (synopsis "Python wrapper for the Iconify API")
2988 (description
2989 "This packge provides a Python wrapper for the
2990@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
2991framework that includes 100+ icon sets with more than 100,000 icons from
2992FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
2993Emoji and many other open source icon sets.")
2994 (license license:bsd-3)))
2995
2996(define-public python-pygls
2997 (package
2998 (name "python-pygls")
2999 (version "2.0.0")
3000 (source
3001 (origin
3002 (method git-fetch)
3003 (uri (git-reference
3004 (url "https://github.com/openlawlibrary/pygls")
3005 (commit (string-append "v" version))))
3006 (file-name (git-file-name name version))
3007 (sha256
3008 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
3009 (build-system pyproject-build-system)
3010 ;; tests: 265 passed, 8 skipped
3011 (native-inputs
3012 (list python-pytest
3013 python-pytest-asyncio
3014 python-poetry-core))
3015 (propagated-inputs
3016 (list python-attrs
3017 python-cattrs
3018 python-lsprotocol))
3019 (home-page "https://github.com/openlawlibrary/pygls")
3020 (synopsis "Pythonic generic language server")
3021 (description
3022 "This package provides a pythonic generic language server (pronounced
3023like pie glass').")
3024 (license license:asl2.0)))
3025
3026(define-public python-pyls-spyder
3027 (package
3028 (name "python-pyls-spyder")
3029 (version "0.4.0")
3030 (source
3031 (origin
3032 (method git-fetch)
3033 (uri (git-reference
3034 (url "https://github.com/spyder-ide/pyls-spyder")
3035 (commit (string-append "v" version))))
3036 (file-name (git-file-name name version))
3037 (sha256
3038 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
3039 (build-system pyproject-build-system)
3040 (propagated-inputs (list python-lsp-server))
3041 (native-inputs (list python-pytest python-setuptools))
3042 (home-page "https://github.com/spyder-ide/pyls-spyder")
3043 (synopsis "Spyder extensions for @code{python-lsp-server}")
3044 (description "This package provides Spyder-specific extras for the
3045Language Server Protocol (LSP) on Python, such as document symbol searching
3046and others.")
3047 (license license:expat)))
3048
3049(define-public python-pylsp-rope
3050 (package
3051 (name "python-pylsp-rope")
3052 (version "0.1.17")
3053 (source
3054 (origin
3055 (method git-fetch)
3056 (uri (git-reference
3057 (url "https://github.com/python-rope/pylsp-rope")
3058 (commit version)))
3059 (file-name (git-file-name name version))
3060 (sha256
3061 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
3062 (build-system pyproject-build-system)
3063 (native-inputs
3064 (list python-pytest
3065 python-setuptools))
3066 (propagated-inputs
3067 (list python-lsp-server
3068 python-rope))
3069 (home-page "https://github.com/python-rope/pylsp-rope")
3070 (synopsis
3071 "Extended refactoring capabilities for Python LSP Server using Rope")
3072 (description
3073 "This plugs in to Python LSP Server, adding code actions that refactor
3074using Rope.")
3075 (license license:expat)))
3076
3077(define-public python-pypydispatcher
3078 (package
3079 (name "python-pypydispatcher")
3080 (version "2.1.2")
3081 (source
3082 (origin
3083 (method url-fetch)
3084 (uri (pypi-uri "PyPyDispatcher" version))
3085 (sha256
3086 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
3087 (build-system pyproject-build-system)
3088 (native-inputs
3089 (list python-pytest
3090 python-setuptools
3091 python-setuptools-scm))
3092 (home-page "https://github.com/scrapy/pypydispatcher")
3093 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
3094 (description
3095 "This package implements a functionality of pulti-producer-multi-consumer
3096signal dispatching mechanism. It's a fork of
3097http://pydispatcher.sourceforge.net/ with PyPy support.")
3098 (license license:bsd-3)))
3099
3100(define-public python-pyread-eagle
3101 (package
3102 (name "python-pyread-eagle")
3103 (version "1.0.3")
3104 (source
3105 (origin
3106 (method git-fetch)
3107 (uri (git-reference
3108 (url "https://github.com/kyleaoman/pyread_eagle")
3109 (commit version)))
3110 (file-name (git-file-name name version))
3111 (sha256
3112 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
3113 (build-system pyproject-build-system)
3114 (arguments
3115 ;; TODO: Tests need additional test data, see tests/test_regions.py.
3116 (list #:tests? #f))
3117 (native-inputs
3118 (list python-setuptools))
3119 (propagated-inputs
3120 (list python-h5py
3121 python-numpy))
3122 (home-page "https://github.com/kyleaoman/pyread_eagle")
3123 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
3124 (description
3125 "This package provides a pure-python port of
3126@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
3127 (license license:gpl3)))
3128
3129(define-public python-pyte
3130 (package
3131 (name "python-pyte")
3132 (version "0.8.2")
3133 (source
3134 (origin
3135 (method git-fetch)
3136 (uri (git-reference
3137 (url "https://github.com/selectel/pyte")
3138 (commit version)))
3139 (file-name (git-file-name name version))
3140 (sha256
3141 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
3142 (build-system pyproject-build-system)
3143 (propagated-inputs (list python-wcwidth))
3144 (native-inputs (list python-pytest python-setuptools python-wheel))
3145 (home-page "https://pyte.readthedocs.io/")
3146 (synopsis "Simple VTXXX-compatible terminal emulator")
3147 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
3148emulator. @var{VTxxx} stands for a series of video terminals, developed by
3149DEC between 1970 and 1995. The first and probably most famous one was the
3150VT100 terminal, which is now a de-facto standard for all virtual terminal
3151emulators.
3152
3153pyte is a fork of vt102, which was an incomplete pure Python implementation
3154of VT100 terminal.")
3155 (license license:lgpl3+)))
3156
3157(define-public python-pytokens
3158 (package
3159 (name "python-pytokens")
3160 (version "0.4.1")
3161 (source
3162 (origin
3163 (method git-fetch)
3164 (uri (git-reference
3165 (url "https://github.com/tusharsadhwani/pytokens")
3166 (commit version)))
3167 (file-name (git-file-name name version))
3168 (sha256
3169 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
3170 (build-system pyproject-build-system)
3171 (arguments
3172 (list
3173 #:phases
3174 #~(modify-phases %standard-phases
3175 (add-before 'build 'build-with-cython
3176 (lambda _
3177 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
3178 (native-inputs
3179 (list python-cython
3180 python-pytest
3181 python-setuptools))
3182 (home-page "https://github.com/tusharsadhwani/pytokens")
3183 (synopsis "Spec compliant Python 3.14+ tokenizer")
3184 (description
3185 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
3186runs on older Pythons.")
3187 (license license:expat)))
3188
3189(define-public python-pyuca
3190 (package
3191 (name "python-pyuca")
3192 (version "1.2")
3193 (source
3194 (origin
3195 (method git-fetch)
3196 (uri (git-reference
3197 (url "https://github.com/jtauber/pyuca")
3198 (commit (string-append "v" version))))
3199 (file-name (git-file-name name version))
3200 (sha256
3201 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
3202 (build-system pyproject-build-system)
3203 (arguments
3204 (list #:tests? #f)) ; there are no tests
3205 (native-inputs (list python-setuptools))
3206 (home-page "https://github.com/jtauber/pyuca")
3207 (synopsis "Python implementation of the Unicode Collation Algorithm")
3208 (description "This package provides a Python implementation of the
3209@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
3210 (license license:expat)))
3211
3212(define-public python-pyxdameraulevenshtein
3213 (package
3214 (name "python-pyxdameraulevenshtein")
3215 (version "1.8.0")
3216 (source
3217 (origin
3218 (method git-fetch)
3219 (uri (git-reference
3220 (url "https://github.com/lanl/pyxDamerauLevenshtein")
3221 (commit (string-append "v" version))))
3222 (file-name (git-file-name name version))
3223 (sha256
3224 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
3225 (build-system pyproject-build-system)
3226 (native-inputs (list python-cython python-pytest python-setuptools))
3227 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
3228 (synopsis "Damerau-Levenshtein edit distance algorithm")
3229 (description
3230 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
3231edit distance algorithm for Python in Cython for high performance.")
3232 (license license:bsd-3)))
3233
3234(define-public python-qrcodegen
3235 (package
3236 (name "python-qrcodegen")
3237 (version "1.8.0")
3238 (source
3239 (origin
3240 (method git-fetch)
3241 (uri (git-reference
3242 (url "https://github.com/nayuki/QR-Code-generator")
3243 (commit (string-append "v" version))))
3244 (sha256
3245 (base32 "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39"))))
3246 (build-system pyproject-build-system)
3247 (arguments
3248 (list
3249 #:tests? #f ;no tests
3250 #:phases
3251 #~(modify-phases %standard-phases
3252 (add-before 'build 'chdir
3253 (lambda _
3254 (chdir "python"))))))
3255 (native-inputs (list python-setuptools))
3256 (home-page "https://www.nayuki.io/page/qr-code-generator-library")
3257 (synopsis "QR Code generator")
3258 (description
3259 "@code{python-qrcodegen} is a QR code generator library in Python.")
3260 (license license:expat)))
3261
3262(define-public python-rectpack
3263 (package
3264 (name "python-rectpack")
3265 (version "0.2.2")
3266 (source
3267 (origin
3268 (method git-fetch)
3269 (uri (git-reference
3270 (url "https://github.com/secnot/rectpack/")
3271 (commit version)))
3272 (file-name (git-file-name name version))
3273 (sha256
3274 (base32 "0y6nzpqny2knlq5g53wdnrznv10xv21rbzmlbq5xgf92gi7i6kci"))))
3275 (build-system pyproject-build-system)
3276 (arguments (list #:test-backend #~'unittest))
3277 (native-inputs (list python-setuptools))
3278 (home-page "https://github.com/secnot/rectpack/")
3279 (synopsis "2D Rectangle packing Python library")
3280 (description "Rectpack is a collection of heuristic algorithms for solving
3281the 2D knapsack or bin packing problem, consisting on packing a set of
3282rectangles into the smallest number of bins.")
3283 (license license:asl2.0)))
3284
3285(define-public python-represent
3286 (package
3287 (name "python-represent")
3288 (version "2.1")
3289 (source
3290 (origin
3291 (method url-fetch)
3292 (uri (pypi-uri "Represent" version))
3293 (sha256
3294 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
3295 (build-system pyproject-build-system)
3296 (native-inputs
3297 ;; XXX This might be too much for testing, maybe switch them off as it's
3298 ;; a simple middleware library.
3299 (list python-ipython
3300 python-pytest
3301 python-rich
3302 python-setuptools))
3303 (home-page "https://github.com/RazerM/represent")
3304 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
3305 (description
3306 "This package implements a functionality to generate Python
3307@code{__repr__} methods automatically or declaratively.")
3308 (license license:expat)))
3309
3310(define-public python-rich-argparse
3311 (package
3312 (name "python-rich-argparse")
3313 (version "1.8.0")
3314 (source
3315 (origin
3316 (method git-fetch)
3317 (uri (git-reference
3318 (url "https://github.com/hamdanal/rich-argparse")
3319 (commit (string-append "v" version))))
3320 (file-name (git-file-name name version))
3321 (sha256
3322 (base32
3323 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
3324 (build-system pyproject-build-system)
3325 (native-inputs
3326 (list python-pytest
3327 python-hatchling))
3328 (propagated-inputs
3329 (list python-rich))
3330 (home-page "https://github.com/hamdanal/rich-argparse")
3331 (synopsis "Format argparse and optparse help using rich")
3332 (description
3333 "This package improves the look and readability of argparse's help while
3334requiring minimal changes to the code.")
3335 (license license:expat)))
3336
3337(define-public python-rich-rst
3338 (package
3339 (name "python-rich-rst")
3340 (version "2.0.1")
3341 (source
3342 (origin
3343 (method git-fetch)
3344 (uri (git-reference
3345 (url "https://github.com/wasi-master/rich-rst")
3346 (commit (string-append "v" version))))
3347 (file-name (git-file-name name version))
3348 (sha256
3349 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
3350 (build-system pyproject-build-system)
3351 (native-inputs
3352 (list python-pytest
3353 python-setuptools))
3354 (propagated-inputs
3355 (list python-pygments
3356 python-rich))
3357 (home-page "https://wasi-master.github.io/rich-rst")
3358 (synopsis "Beautiful reStructuredText renderer for Rich")
3359 (description
3360 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
3361documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
3362renderables.")
3363 (license license:expat)))
3364
3365(define-public python-roman-numerals
3366 (package
3367 (name "python-roman-numerals")
3368 (version "3.1.0")
3369 (source
3370 (origin
3371 (method url-fetch)
3372 (uri (pypi-uri "roman_numerals" version))
3373 (sha256
3374 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
3375 (build-system pyproject-build-system)
3376 (native-inputs (list python-flit-core python-pytest))
3377 (home-page "https://pypi.org/project/roman-numbers/")
3378 (synopsis "Python library to manipulate Roman numerals")
3379 (description "This package provides a Python library to manipulate
3380well-formed Roman numerals.")
3381 (license license:expat)))
3382
3383(define-public python-rush
3384 (package
3385 (name "python-rush")
3386 (version "2021.04.0")
3387 (source
3388 (origin
3389 (method git-fetch)
3390 (uri (git-reference
3391 (url "https://github.com/sigmavirus24/rush")
3392 (commit version)))
3393 (file-name (git-file-name name version))
3394 (sha256
3395 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
3396 (build-system pyproject-build-system)
3397 (arguments
3398 (list
3399 #:test-flags
3400 ;; E ValueError: Redis URL must specify one of the following schemes
3401 ;; (redis://, rediss://, unix://)
3402 #~(list "-k" (string-append "not test_valid_url[redis://]"
3403 " and not test_valid_url[rediss://]"))))
3404 (native-inputs
3405 (list python-mock
3406 python-redis
3407 python-rfc3986
3408 python-pytest
3409 python-setuptools))
3410 (propagated-inputs
3411 (list python-attrs))
3412 (home-page "https://github.com/sigmavirus24/rush")
3413 (synopsis "Throttling and rate-limiting algorithms for Python")
3414 (description
3415 "This package provides is a small collection of algorithms that can be
3416reused when throttling user interactions with a resource (e.g., an API).")
3417 (license license:expat)))
3418
3419(define-public python-rustworkx
3420 (package
3421 (name "python-rustworkx")
3422 (version "0.17.1")
3423 (source
3424 (origin
3425 (method git-fetch)
3426 (uri (git-reference
3427 (url "https://github.com/Qiskit/rustworkx")
3428 (commit version)))
3429 (file-name (git-file-name name version))
3430 (sha256
3431 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
3432 (build-system pyproject-build-system)
3433 (arguments
3434 (list
3435 #:test-flags #~(list "--test-path" "tests")
3436 #:imported-modules (append %cargo-build-system-modules
3437 %pyproject-build-system-modules)
3438 #:modules '(((guix build cargo-build-system)
3439 #:prefix cargo:)
3440 (guix build pyproject-build-system)
3441 (guix build utils))
3442 #:phases
3443 #~(modify-phases %standard-phases
3444 (add-after 'unpack 'prepare-cargo-build-system
3445 (lambda args
3446 (for-each
3447 (lambda (phase)
3448 (format #t "Running cargo phase: ~a~%" phase)
3449 (apply (assoc-ref cargo:%standard-phases phase)
3450 #:cargo-target #$(cargo-triplet) args))
3451 '(unpack-rust-crates
3452 configure
3453 check-for-pregenerated-files
3454 patch-cargo-checksums))))
3455 (add-before 'check 'pre-check
3456 (lambda _
3457 ;; Delete the source directory to avoid interference.
3458 (delete-file-recursively "rustworkx")
3459 ;; Matplotlib needs to be able to write its configuration file
3460 ;; somewhere.
3461 (setenv "MPLCONFIGDIR" "/tmp")
3462 ;; For fontconfig.
3463 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3464 (propagated-inputs (list python-numpy))
3465 (native-inputs
3466 (append (list graphviz
3467 python-matplotlib
3468 python-networkx
3469 python-pillow
3470 python-setuptools
3471 python-setuptools-rust
3472 python-stestr
3473 rust
3474 `(,rust "cargo"))
3475 (or (and=> (%current-target-system)
3476 (compose list make-rust-sysroot))
3477 '())))
3478 (inputs (cargo-inputs 'python-rustworkx))
3479 (home-page "https://www.rustworkx.org")
3480 (synopsis "High performance graph library for Python")
3481 (description
3482 "@code{rustworkx} is a Python package for working with graphs and complex
3483networks. It enables the creation, interaction with, and study of graphs and
3484networks.")
3485 (license license:asl2.0)))
3486
3487(define-public python-safety-schemas
3488 (package
3489 (name "python-safety-schemas")
3490 (version "0.0.19")
3491 (source
3492 (origin
3493 (method url-fetch)
3494 (uri (pypi-uri "safety_schemas" version))
3495 (sha256
3496 (base32 "13dany62q262l08441aps815nz42k9mcd3lgjs5z592j91nz10a7"))))
3497 (build-system pyproject-build-system)
3498 (arguments
3499 (list
3500 #:test-flags
3501 #~(list "-k" (string-join
3502 ;; These tests are failing for unknown reasons.
3503 ;; (AssertionError).
3504 (list "not test_model[ConfigModel-ConfigModel]"
3505 "test_model[MetadataModel-MetadataModel]"
3506 "test_model[PolicyFileModel-PolicyFileModel]"
3507 "test_model[ProjectModel-ProjectModel]"
3508 "test_model[ReportModel-ReportModel]")
3509 " and not "))))
3510 (propagated-inputs (list python-dparse
3511 python-packaging
3512 python-pydantic
3513 python-ruamel.yaml
3514 python-typing-extensions))
3515 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3516 ;; Source code is not yet published outside of PyPI:
3517 ;; https://github.com/pyupio/safety/issues/494
3518 (home-page "https://pypi.org/project/safety-schemas/")
3519 (synopsis "Schemas for Safety tools")
3520 (description "This package contains models and schemas used by Safety.")
3521 (license license:expat)))
3522
3523(define-public python-scverse-misc
3524 (package
3525 (name "python-scverse-misc")
3526 (version "0.1.1")
3527 (source
3528 (origin
3529 (method git-fetch)
3530 (uri (git-reference
3531 (url "https://github.com/scverse/scverse-misc")
3532 (commit (string-append "v" version))))
3533 (file-name (git-file-name name version))
3534 (sha256
3535 (base32 "14gqrafilfzlc9rydz90rifs48icqvdqa80qsfsmhrwv25mwwjry"))))
3536 (build-system pyproject-build-system)
3537 (arguments
3538 (list
3539 #:test-flags
3540 ;; Optinal tests, Pydantic fails to validate inputs.
3541 #~(list "--deselect=tests/settings/test_runtime.py::test_dotenv[2]"
3542 "--deselect=tests/settings/test_runtime.py::test_dotenv[4]")))
3543 (native-inputs
3544 (list python-hatch-vcs
3545 python-hatchling
3546 python-pytest
3547 python-pyyaml))
3548 (propagated-inputs
3549 (list python-session-info2
3550 python-typing-extensions
3551 ;; [optional]
3552 python-dotenv
3553 python-pydantic-settings))
3554 (home-page "https://github.com/scverse/scverse-misc")
3555 (synopsis "Miscellaneous utility code used by scverse packages")
3556 (description
3557 "This package provides miscellaneous utility code used by scverse
3558packages.")
3559 (license license:bsd-3)))
3560
3561(define-public python-senf
3562 (package
3563 (name "python-senf")
3564 (version "1.5.1")
3565 (source
3566 (origin
3567 (method git-fetch)
3568 (uri (git-reference
3569 (url "https://github.com/quodlibet/senf")
3570 (commit (string-append "v" version))))
3571 (file-name (git-file-name name version))
3572 (sha256
3573 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3574 (build-system pyproject-build-system)
3575 (arguments
3576 (list
3577 #:test-flags
3578 ;; These tests fail due to various home fetching methods during build.
3579 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3580 "--deselect" "tests/test_api.py::test_expanduser_user")))
3581 (native-inputs (list python-pytest python-setuptools))
3582 (home-page "https://github.com/quodlibet/senf")
3583 (synopsis "Text, bytes and paths conversion functions for Python")
3584 (description "Senf introduces a new platform native string type called
3585fsnative. It adds functions to convert text, bytes and paths to and from that
3586new type and helper functions to integrate it nicely with the Python
3587stdlib.")
3588 (license license:expat)))
3589
3590(define-public python-session-info2
3591 (package
3592 (name "python-session-info2")
3593 (version "0.2")
3594 (source
3595 (origin
3596 (method url-fetch)
3597 (uri (pypi-uri "session_info2" version))
3598 (sha256
3599 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3600 (build-system pyproject-build-system)
3601 (arguments
3602 (list
3603 #:test-flags
3604 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3605 ;; Tests require Jupyter Client.
3606 "--ignore=tests/test_subprocess.py")))
3607 (native-inputs
3608 (list python-hatch-docstring-description
3609 python-hatch-vcs
3610 python-hatchling
3611 python-pytest
3612 python-pytest-asyncio))
3613 (home-page "https://session-info2.readthedocs.io/")
3614 (synopsis "Print versions of imported packages")
3615 (description
3616 "This package implements a functionality to print versions of imported
3617Python packages.")
3618 (license license:mpl2.0)))
3619
3620(define-public python-show-in-file-manager
3621 (package
3622 (name "python-show-in-file-manager")
3623 (version "1.1.6")
3624 (source
3625 (origin
3626 (method git-fetch)
3627 (uri (git-reference
3628 (url "https://github.com/damonlynch/showinfilemanager")
3629 (commit (string-append "v" version))))
3630 (file-name (git-file-name name version))
3631 (sha256
3632 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3633 (build-system pyproject-build-system)
3634 (arguments (list #:tests? #f)) ;no tests upstream
3635 (native-inputs
3636 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3637 (propagated-inputs
3638 (list python-packaging python-pyxdg))
3639 (home-page "https://github.com/damonlynch/showinfilemanager")
3640 (synopsis "Open the system file manager and select files in it")
3641 (description
3642 "Show in File Manager is a Python package to open the system file manager
3643and optionally select files in it. The point is not to open the files, but to
3644select them in the file manager, thereby highlighting the files and allowing
3645the user to quickly do something with them.")
3646 (license license:expat)))
3647
3648(define-public python-shxparser
3649 (package
3650 (name "python-shxparser")
3651 (version "0.0.2")
3652 (source
3653 (origin
3654 (method url-fetch)
3655 (uri (pypi-uri "shxparser" version))
3656 (sha256
3657 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3658 (build-system pyproject-build-system)
3659 (arguments (list #:test-backend #~'unittest))
3660 (native-inputs
3661 (list python-svgelements python-setuptools))
3662 (home-page "https://github.com/tatarize/shxparser")
3663 (synopsis "SHX line font parser")
3664 (description
3665 "This is a pure python parser for SHX Hershey font files that are an
3666AutoCad format which can encode single line fonts. This format is used for
3667many CNC and laser operations.")
3668 (license license:expat)))
3669
3670(define-public python-simplify-polyline
3671 (package
3672 (name "python-simplify-polyline")
3673 (version "0.1.0")
3674 (source
3675 (origin
3676 (method url-fetch)
3677 (uri (pypi-uri "simplify_polyline" version))
3678 (sha256
3679 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3680 (build-system pyproject-build-system)
3681 (native-inputs
3682 (list python-pytest
3683 python-setuptools
3684 python-setuptools-scm
3685 python-wheel))
3686 (propagated-inputs
3687 (list python-numpy))
3688 (home-page "https://github.com/ShayHill/simplify_polyline")
3689 (synopsis "Simplify an open or closed polyline")
3690 (description
3691 "This package implements functionality to work with plyline.
3692Features:
3693@itemize
3694@item Visvalingham-Whyatt - removes the smallest triangles formed by
3695three consecutive points in a polyline or polygon
3696@item Douglas-Peucker - gives a better representation of the convex hull
3697@end itemize")
3698 (license license:expat)))
3699
3700(define-public python-siphash24
3701 (package
3702 (name "python-siphash24")
3703 (version "1.8")
3704 (source
3705 (origin
3706 (method git-fetch)
3707 (uri (git-reference
3708 (url "https://github.com/dnicolodi/python-siphash24/")
3709 (commit (string-append "v" version))))
3710 (file-name (git-file-name name version))
3711 (sha256
3712 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3713 (build-system pyproject-build-system)
3714 (arguments
3715 (list
3716 #:test-backend #~'custom
3717 #:test-flags #~(list "test.py")
3718 #:phases
3719 #~(modify-phases %standard-phases
3720 (add-after 'unpack 'patch-pyproject
3721 (lambda _
3722 (substitute* "pyproject.toml"
3723 ;; meson-python: error: Field `project.license` has an invalid
3724 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3725 ;; LGPL-2.1-or-later`)
3726 (("^license = .*")
3727 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3728 (native-inputs
3729 (list pkg-config
3730 python-meson
3731 python-pytest))
3732 (inputs
3733 (list c-siphash))
3734 (home-page "https://github.com/dnicolodi/python-siphash24/")
3735 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3736 (description
3737 "This package provides a C-based implementation of
3738@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3739compatible with the hash functions provided by the hashlib standard library
3740module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3741 ;; They are in LICENSES directory:
3742 (license (list license:asl2.0
3743 license:lgpl2.1+))))
3744
3745(define-public python-snakesay
3746 (package
3747 (name "python-snakesay")
3748 (version "0.10.4")
3749 (source
3750 (origin
3751 (method git-fetch)
3752 (uri (git-reference
3753 (url "https://github.com/pythonanywhere/snakesay")
3754 (commit (string-append "v" version))))
3755 (file-name (git-file-name name version))
3756 (sha256
3757 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
3758 (build-system pyproject-build-system)
3759 (native-inputs (list python-pytest python-uv-build))
3760 (home-page "https://github.com/pythonanywhere/snakesay")
3761 (synopsis "Like @command{cowsay} but with Python flavor")
3762 (description
3763 "This package provides a simple ASCII art pictures generator of a
3764Snake with a message.")
3765 (license license:expat)))
3766
3767(define-public python-jaconv
3768 (package
3769 (name "python-jaconv")
3770 ;; Last release is not tagged.
3771 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
3772 (revision . "0")))
3773 (version (git-version "0.4.0"
3774 (assoc-ref properties 'revision)
3775 (assoc-ref properties 'commit)))
3776 (source
3777 (origin
3778 (method git-fetch)
3779 (uri (git-reference
3780 (url "https://github.com/ikegami-yukino/jaconv")
3781 (commit (assoc-ref properties 'commit))))
3782 (file-name (git-file-name name version))
3783 (sha256
3784 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
3785 (build-system pyproject-build-system)
3786 (native-inputs (list python-setuptools python-pynose))
3787 (home-page "https://github.com/ikegami-yukino/jaconv")
3788 (synopsis
3789 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
3790Hankaku, Zenkaku")
3791 (description
3792 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
3793Hankaku (half-width character) and Zenkaku (full-width character)")
3794 (license license:expat)))
3795
3796(define-public python-janus
3797 (package
3798 (name "python-janus")
3799 (version "1.0.0")
3800 (source
3801 (origin
3802 (method url-fetch)
3803 (uri (pypi-uri "janus" version))
3804 (sha256
3805 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
3806 (build-system pyproject-build-system)
3807 (native-inputs
3808 (list python-pytest python-pytest-asyncio
3809 python-setuptools python-wheel))
3810 (propagated-inputs (list python-typing-extensions))
3811 (home-page "https://github.com/aio-libs/janus/")
3812 (synopsis
3813 "Sync-async queue to interoperate between asyncio tasks and classic threads")
3814 (description
3815 "Mixed sync-async queue, supposed to be used for communicating between
3816classic synchronous (threaded) code and asynchronous (in terms of
3817@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
3818@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
3819library has two faces: synchronous and asynchronous interface. Synchronous is
3820fully compatible with
3821@url{https://docs.python.org/3/library/queue.html,standard queue},
3822asynchronous one follows
3823@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
3824design}.")
3825 (license license:asl2.0)))
3826
3827(define-public python-concurrent-log-handler
3828 (package
3829 (name "python-concurrent-log-handler")
3830 (version "0.9.25")
3831 ;; No tests in the PyPI tarball.
3832 (source
3833 (origin
3834 (method git-fetch)
3835 (uri (git-reference
3836 (url "https://github.com/Preston-Landers/concurrent-log-handler")
3837 (commit version)))
3838 (file-name (git-file-name name version))
3839 (sha256
3840 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
3841 (build-system pyproject-build-system)
3842 (arguments
3843 (list
3844 ;; XXX: Tests are broken, no new version fixing them yet.
3845 #:tests? #f))
3846 (native-inputs
3847 (list python-hatchling))
3848 (propagated-inputs
3849 (list python-portalocker))
3850 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
3851 (synopsis
3852 "Additional log handler for Python's standard @code{logging} package")
3853 (description
3854 "This package provides an additional log handler for Python's standard
3855@code{logging} package (PEP 282). This handler will write log events to a log
3856file which is rotated when the log file reaches a certain size. Multiple
3857processes can safely write to the same log file concurrently and rotated logs
3858can be gzipped if desired. An optional threaded queue logging handler is
3859provided to perform logging in the background.")
3860 (license license:asl2.0)))
3861
3862(define-public python-lazy
3863 (package
3864 (name "python-lazy")
3865 (version "1.6")
3866 (source
3867 (origin
3868 (method url-fetch)
3869 (uri (pypi-uri "lazy" version))
3870 (sha256
3871 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
3872 (build-system pyproject-build-system)
3873 (native-inputs (list python-pytest python-setuptools python-wheel))
3874 (home-page "https://github.com/stefanholek/lazy")
3875 (synopsis "Lazy attributes for Python objects")
3876 (description "This package provides a decorator to create lazy
3877attributes.")
3878 (license license:bsd-2)))
3879
3880(define-public python-logfury
3881 (package
3882 (name "python-logfury")
3883 (version "1.0.1")
3884 (source
3885 (origin
3886 (method url-fetch)
3887 (uri (pypi-uri "logfury" version))
3888 (sha256
3889 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
3890 (build-system pyproject-build-system)
3891 (native-inputs
3892 (list python-pytest
3893 python-setuptools
3894 python-setuptools-scm
3895 python-testfixtures
3896 python-wheel))
3897 (home-page "https://github.com/reef-technologies/logfury/")
3898 (synopsis "Logging of method calls for python libraries")
3899 (description
3900 "Logfury is a tool for python library maintainers. It allows for
3901responsible, low-boilerplate logging of method calls.")
3902 (license license:bsd-3)))
3903
3904(define-public python-logzero
3905 (package
3906 (name "python-logzero")
3907 (version "1.7.0")
3908 (source
3909 (origin
3910 (method git-fetch)
3911 (uri (git-reference
3912 (url "https://github.com/metachris/logzero")
3913 (commit (string-append "v" version))))
3914 (file-name (git-file-name name version))
3915 (sha256
3916 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
3917 (build-system pyproject-build-system)
3918 (native-inputs (list python-pytest python-setuptools))
3919 (home-page "https://github.com/metachris/logzero")
3920 (synopsis "Robust and effective logging for Python")
3921 (description
3922 "@code{logzero} provides a fully configured Python logger object for
3923easy logging and rotating to a console or a file.")
3924 (license license:expat)))
3925
3926(define-public python-logbook
3927 (package
3928 (name "python-logbook")
3929 (version "1.8.2")
3930 (source
3931 (origin
3932 (method url-fetch)
3933 (uri (pypi-uri "logbook" version))
3934 (sha256
3935 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
3936 (build-system pyproject-build-system)
3937 (native-inputs
3938 (list python-brotli
3939 python-cython
3940 python-pytest
3941 python-setuptools
3942 python-wheel))
3943 (home-page "https://github.com/getlogbook/logbook")
3944 (synopsis "Logbook is a logging replacement for Python")
3945 (description
3946 "Logbook is a logging system for Python that replaces the standard
3947library’s logging module. It was designed with both complex and simple
3948applications in mind and the idea to make logging fun.")
3949 (license license:bsd-3)))
3950
3951(define-public python-databind-core
3952 (package
3953 (name "python-databind-core")
3954 (version "4.4.2")
3955 (source
3956 (origin
3957 (method url-fetch)
3958 (uri (pypi-uri "databind.core" version))
3959 (sha256
3960 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
3961 (snippet
3962 #~(begin (use-modules (guix build utils))
3963 ;; The problem with python-typing-extensions >= 4.7 is only
3964 ;; with python-3.7.
3965 (substitute* "pyproject.toml"
3966 ((",<4.7.*") "\"\n"))))))
3967 (build-system pyproject-build-system)
3968 (arguments
3969 (list
3970 #:phases
3971 #~(modify-phases %standard-phases
3972 (add-after 'install 'fix-name
3973 (lambda* (#:key inputs outputs #:allow-other-keys)
3974 (let* ((sitedir (site-packages inputs outputs))
3975 (dist-info
3976 (string-append sitedir "/databind_core-" #$version ".dist-info")))
3977 (substitute* (string-append dist-info "/METADATA")
3978 (("Name: databind-core")
3979 "Name: databind.core"))
3980 (substitute* (string-append dist-info "/RECORD")
3981 (("databind_core") "databind.core"))
3982 (rename-file dist-info
3983 (string-append sitedir
3984 "/databind.core-"
3985 #$version ".dist-info"))))))))
3986 (propagated-inputs
3987 (list python-deprecated
3988 python-nr-date
3989 python-nr-stream
3990 python-typeapi
3991 python-typing-extensions))
3992 (native-inputs
3993 (list python-poetry-core python-pytest))
3994 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
3995 (synopsis
3996 "Library for de-/serializing Python dataclasses")
3997 (description
3998 "Databind is a library inspired by jackson-databind to de-/serialize
3999Python dataclasses.")
4000 (license license:expat)))
4001
4002(define-public python-databind-json
4003 (package
4004 (name "python-databind-json")
4005 (version "4.4.2")
4006 (source
4007 (origin
4008 (method url-fetch)
4009 (uri (pypi-uri "databind.json" version))
4010 (sha256
4011 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
4012 (snippet
4013 #~(begin (use-modules (guix build utils))
4014 ;; The problem with python-typing-extensions >= 4.7 is only
4015 ;; with python-3.7.
4016 (substitute* "pyproject.toml"
4017 ((",<4.7.*") "\"\n"))))))
4018 (build-system pyproject-build-system)
4019 (arguments
4020 (list
4021 #:phases
4022 #~(modify-phases %standard-phases
4023 (add-after 'install 'fix-name
4024 (lambda* (#:key inputs outputs #:allow-other-keys)
4025 (let* ((sitedir (site-packages inputs outputs))
4026 (dist-info
4027 (string-append sitedir "/databind_json-" #$version ".dist-info")))
4028 (substitute* (string-append dist-info "/METADATA")
4029 (("Name: databind-json")
4030 "Name: databind.json"))
4031 (substitute* (string-append dist-info "/RECORD")
4032 (("databind_json") "databind.json"))
4033 (rename-file dist-info
4034 (string-append sitedir
4035 "/databind.json-"
4036 #$version ".dist-info"))))))))
4037 (propagated-inputs
4038 (list python-databind-core python-nr-date
4039 python-typeapi python-typing-extensions))
4040 (native-inputs (list python-poetry-core python-pytest))
4041 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
4042 (synopsis
4043 "De-/serialize Python dataclasses to or from JSON payloads")
4044 (description
4045 "The @code{databind.json} package implements the de-/serialization to or
4046from JSON payloads using the @code{databind.core} framework.")
4047 (license license:expat)))
4048
4049(define-public python-docspec
4050 (package
4051 (name "python-docspec")
4052 (version "2.2.1")
4053 (source
4054 (origin
4055 (method url-fetch)
4056 (uri (pypi-uri "docspec" version))
4057 (sha256
4058 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
4059 (build-system pyproject-build-system)
4060 (arguments (list #:tests? #false)) ;there are none
4061 (propagated-inputs
4062 (list python-databind-core
4063 python-databind-json
4064 python-deprecated))
4065 (native-inputs
4066 (list python-poetry-core))
4067 (home-page "https://github.com/NiklasRosenstein/python-docspec")
4068 (synopsis "Represent API documentation of programming languages")
4069 (description
4070 "Docspec is a JSON object specification for representing API
4071documentation of programming languages.")
4072 (license license:expat)))
4073
4074(define-public python-docspec-python
4075 (package
4076 (name "python-docspec-python")
4077 (version "2.2.1")
4078 (source
4079 (origin
4080 (method url-fetch)
4081 (uri (pypi-uri "docspec_python" version))
4082 (sha256
4083 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
4084 (build-system pyproject-build-system)
4085 (arguments
4086 (list #:tests? #false)) ;there are none
4087 (propagated-inputs (list python-docspec python-nr-util))
4088 (native-inputs (list python-poetry-core))
4089 (home-page "https://github.com/NiklasRosenstein/docspec/")
4090 (synopsis "Produce docspec data from Python source code")
4091 (description
4092 "This package provides a parser based on @code{lib2to3} producing
4093@code{docspec} data from Python source code.")
4094 (license license:expat)))
4095
4096(define-public python-fqdn
4097 (package
4098 (name "python-fqdn")
4099 (version "1.5.1")
4100 (source
4101 (origin
4102 (method git-fetch)
4103 (uri (git-reference
4104 (url "https://github.com/ypcrts/fqdn")
4105 (commit (string-append "v" version))))
4106 (file-name (git-file-name name version))
4107 (sha256
4108 (base32 "1cfxpvlvfi9s20v93m3rgw7jn6ybc5ga5rwxhrap59zwd9crsh2g"))))
4109 (build-system pyproject-build-system)
4110 (native-inputs
4111 (list python-pytest
4112 python-setuptools))
4113 (home-page "https://github.com/ypcrts/fqdn")
4114 (synopsis "Validate domain names against RFC 1123")
4115 (description
4116 "This package validates fully-qualified domain names against RFC 1123, so
4117that they are acceptable to modern bowsers")
4118 (license license:mpl2.0)))
4119
4120(define-public python-fire
4121 (package
4122 (name "python-fire")
4123 (version "0.7.0")
4124 (source
4125 (origin
4126 (method url-fetch)
4127 (uri (pypi-uri "fire" version))
4128 (sha256
4129 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
4130 (build-system pyproject-build-system)
4131 (propagated-inputs (list python-termcolor))
4132 (native-inputs (list python-pytest python-setuptools python-wheel))
4133 (synopsis "Library for automatically generating command line interfaces")
4134 (description
4135 "Fire is a library for automatically generating command line interfaces
4136from absolutely any Python object. The following are the advantages:
4137@itemize
4138@item A simple way to create a CLI in Python.
4139@item A helpful tool for developing and debugging Python code.
4140@item Helps with exploring existing code or turning other people's code into a
4141command line interface.
4142@item Makes transitioning between Bash and Python easier.
4143@item Makes using a Python REPL easier by setting up the REPL with the modules
4144and variables you'll need already imported and created.
4145@end itemize")
4146 (home-page "https://github.com/google/python-fire")
4147 (license license:asl2.0)))
4148
4149(define-public python-fit-nbinom
4150 (package
4151 (name "python-fit-nbinom")
4152 (version "1.1")
4153 (source (origin
4154 (method url-fetch)
4155 (uri (pypi-uri "fit_nbinom" version))
4156 (sha256
4157 (base32
4158 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
4159 (build-system pyproject-build-system)
4160 (arguments
4161 (list
4162 #:tests? #false ;there are none
4163 #:phases
4164 '(modify-phases %standard-phases
4165 (add-after 'unpack 'remove-invalid-syntax
4166 (lambda _
4167 (substitute* "setup.py"
4168 ((".\\*\"") "\"")))))))
4169 (propagated-inputs (list python-numpy python-scipy))
4170 (native-inputs (list python-setuptools python-wheel))
4171 (home-page "https://github.com/joachimwolff/fit_nbinom")
4172 (synopsis "Negative binomial maximum likelihood estimator")
4173 (description "This package provides an implementation in Python using
4174scipy and numpy of negative binomial maximum likelihood estimation.")
4175 (license license:gpl3+)))
4176
4177(define-public python-docrep
4178 (package
4179 (name "python-docrep")
4180 (version "0.3.2")
4181 (source (origin
4182 (method url-fetch)
4183 (uri (pypi-uri "docrep" version))
4184 (sha256
4185 (base32
4186 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
4187 (build-system pyproject-build-system)
4188 (propagated-inputs (list python-six))
4189 (native-inputs (list python-pytest python-setuptools python-wheel))
4190 (home-page "https://github.com/Chilipp/docrep")
4191 (synopsis "Python package for docstring repetition")
4192 (description "Docrep is the documentation repetition module. This module
4193targets developers that develop complex and nested Python APIs and helps them
4194to create a well-documented piece of software.")
4195 (license license:asl2.0)))
4196
4197(define-public python-dotmap
4198 (package
4199 (name "python-dotmap")
4200 (version "1.3.30")
4201 (source
4202 (origin
4203 (method url-fetch)
4204 (uri (pypi-uri "dotmap" version))
4205 (sha256
4206 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
4207 (build-system pyproject-build-system)
4208 (arguments (list #:test-backend #~'unittest))
4209 (native-inputs (list python-setuptools))
4210 (home-page "https://github.com/drgrib/dotmap")
4211 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
4212 (description
4213 "DotMap is a dot-access dictionary subclass that has dynamic
4214hierarchy creation, can be initialized with keys, can be initialized from a
4215dictionary, can be convert to a dictionary, and is ordered by insertion.")
4216 (license license:expat)))
4217
4218(define-public python-dotty-dict
4219 (package
4220 (name "python-dotty-dict")
4221 (version "1.3.1")
4222 (source
4223 (origin
4224 (method git-fetch)
4225 (uri (git-reference
4226 (url "https://github.com/pawelzny/dotty_dict")
4227 (commit (string-append "v" version))))
4228 (sha256
4229 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
4230 (build-system pyproject-build-system)
4231 (native-inputs
4232 (list python-poetry-core
4233 python-pytest
4234 python-setuptools))
4235 (home-page "https://github.com/pawelzny/dotty_dict")
4236 (synopsis "Python library for accessing dictionaries using a dot syntax")
4237 (description "This package provides a library that wraps the traditional
4238Python dictionaries and provides a syntax to access nested dictionaries values
4239using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
4240 (license license:expat)))
4241
4242(define-public python-affine
4243 (package
4244 (name "python-affine")
4245 (version "2.4.0")
4246 (source (origin
4247 (method url-fetch)
4248 (uri (pypi-uri "affine" version))
4249 (sha256
4250 (base32
4251 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
4252 (build-system pyproject-build-system)
4253 (propagated-inputs (list python-flake8
4254 python-pytest python-pytest-cov))
4255 (native-inputs (list python-flit-core))
4256 (home-page "https://github.com/rasterio/affine")
4257 (synopsis "Matrices describing affine transformation of the plane")
4258 (description "This is a package for matrices describing the affine
4259transformation of the plane.")
4260 (license license:bsd-3)))
4261
4262(define-public python-argopt
4263 (package
4264 (name "python-argopt")
4265 (version "0.9.1")
4266 (source
4267 (origin
4268 (method url-fetch)
4269 (uri (pypi-uri "argopt" version))
4270 (sha256
4271 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
4272 (build-system pyproject-build-system)
4273 (native-inputs
4274 (list python-pytest
4275 python-pytest-timeout
4276 python-setuptools
4277 python-setuptools-scm
4278 python-wheel))
4279 (home-page "https://github.com/casperdcl/argopt")
4280 (synopsis "Generate a command-line interface from a docstring")
4281 (description
4282 "This package provides tools to define a command line interface
4283from a docstring rather than the other way around.")
4284 (license license:mpl2.0)))
4285
4286(define-public python-array-api-compat
4287 (package
4288 (name "python-array-api-compat")
4289 (version "1.12.0")
4290 (source
4291 (origin
4292 (method url-fetch)
4293 (uri (pypi-uri "array_api_compat" version))
4294 (sha256
4295 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
4296 (build-system pyproject-build-system)
4297 ;; Tests would require all supported array libraries, including pytorch
4298 (arguments (list #:tests? #false))
4299 (native-inputs
4300 (list python-setuptools))
4301 (home-page "https://data-apis.org/array-api-compat/")
4302 (synopsis "Array API compatibility wrapper for NumPy et al")
4303 (description
4304 "This package provides a wrapper around @code{NumPy} and other array
4305libraries to make them compatible with the Array API standard")
4306 (license license:expat)))
4307
4308(define-public python-array-api-strict
4309 (package
4310 (name "python-array-api-strict")
4311 (version "2.5")
4312 (source
4313 (origin
4314 (method url-fetch)
4315 (uri (pypi-uri "array_api_strict" version))
4316 (sha256
4317 (base32 "1ig116ld5k8wx82ahld4l7qcb0d4s5s4f4a0nrflrh3hzabyarvp"))))
4318 (build-system pyproject-build-system)
4319 (arguments
4320 (list
4321 ;; tests: 585 passed, 2 deselected
4322 #:test-flags
4323 ;; hypothesis.errors.InvalidArgument:
4324 ;; xp.__array_api_version__='2025.12', but it must be a valid version
4325 ;; string ('2021.12', '2022.12', '2023.12', '2024.12'). If the standard
4326 ;; version you want is not available, please ensure you're using the
4327 ;; latest version of Hypothesis, then open an issue if one doesn't
4328 ;; already exist.
4329 #~(list "--ignore=array_api_strict/tests/test_set_functions.py"
4330 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
4331 "-k" (string-append "not test_disabled_extensions"
4332 " and not test_environment_variables"))))
4333 (native-inputs
4334 (list python-hypothesis
4335 python-pytest
4336 python-setuptools
4337 python-setuptools-scm))
4338 (propagated-inputs
4339 (list python-numpy))
4340 (home-page "https://data-apis.org/array-api-strict/")
4341 (synopsis "Strict implementation of the Python array API")
4342 (description
4343 "@code{array_api_strict} is a strict, minimal implementation of the
4344@url{https://data-apis.org/array-api/latest/, Python array API}.
4345
4346The purpose of array-api-strict is to provide an implementation of the array
4347API for consuming libraries to test against so they can be completely sure
4348their usage of the array API is portable.")
4349 (license license:bsd-3)))
4350
4351(define-public python-cachedir-tag
4352 (package
4353 (name "python-cachedir-tag")
4354 (version "0.0.4")
4355 (source
4356 (origin
4357 (method git-fetch)
4358 (uri (git-reference
4359 (url "https://github.com/moreati/python-cachedir-tag")
4360 (commit (string-append "v" version))))
4361 (file-name (git-file-name name version))
4362 (sha256
4363 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
4364 (build-system pyproject-build-system)
4365 (arguments '(#:tests? #f)) ;no test
4366 (native-inputs (list python-setuptools))
4367 (home-page "https://github.com/moreati/python-cachedir-tag")
4368 (synopsis
4369 "Handle @file{CACHEDIR.TAG} in cache directories")
4370 (description
4371 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
4372a file llowing any arbitrary directory to be marked as a cache directory.")
4373 (license license:expat)))
4374
4375(define-public python-cachetools
4376 (package
4377 (name "python-cachetools")
4378 (version "6.1.0")
4379 (source
4380 (origin
4381 (method url-fetch)
4382 (uri (pypi-uri "cachetools" version))
4383 (sha256
4384 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
4385 (build-system pyproject-build-system)
4386 (native-inputs
4387 (list python-pytest
4388 python-setuptools
4389 python-wheel))
4390 (home-page "https://github.com/tkem/cachetools/")
4391 (synopsis "Extensible memoizing collections and decorators")
4392 (description "This module provides various memoizing collections and
4393decorators, including variants of the Python standard library's
4394@code{lru_cache} function decorator.")
4395 (license license:expat)))
4396
4397(define-public python-cachetools-5
4398 (package
4399 (inherit python-cachetools)
4400 (version "5.5.2")
4401 (source
4402 (origin
4403 (method url-fetch)
4404 (uri (pypi-uri "cachetools" version))
4405 (sha256
4406 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
4407
4408(define-public python-colorclass
4409 (package
4410 (name "python-colorclass")
4411 (version "2.2.2")
4412 (source
4413 (origin
4414 (method git-fetch)
4415 (uri (git-reference
4416 (url "https://github.com/matthewdeanmartin/colorclass")
4417 (commit (string-append "v" version))))
4418 (file-name (git-file-name name version))
4419 (sha256
4420 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
4421 (build-system pyproject-build-system)
4422 (arguments
4423 (list
4424 #:test-flags
4425 #~(list "-k" "not test_piped") ; Unclear why this test fails.
4426 #:phases
4427 #~(modify-phases %standard-phases
4428 (add-after 'unpack 'use-poetry-core
4429 (lambda _
4430 ;; Patch to use the core poetry API.
4431 (substitute* "pyproject.toml"
4432 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
4433 (native-inputs (list python-poetry-core python-pytest))
4434 (home-page "https://github.com/matthewdeanmartin/colorclass")
4435 (synopsis "Colorful console applications with Python")
4436 (description
4437 "This package provides an ANSI color text library for Python. It
4438provides automatic coloring for dark or light terminals.")
4439 (license license:expat)))
4440
4441(define-public python-colorcet
4442 (package
4443 (name "python-colorcet")
4444 (version "3.1.1a1")
4445 (source
4446 (origin
4447 (method url-fetch)
4448 (uri (pypi-uri "colorcet" version))
4449 (sha256
4450 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
4451 (build-system pyproject-build-system)
4452 (native-inputs (list python-nbval
4453 python-packaging
4454 python-pytest
4455 python-pytest-mpl
4456 python-setuptools
4457 python-setuptools-scm))
4458 (home-page "https://colorcet.holoviz.org/")
4459 (synopsis "Collection of perceptually uniform colormaps")
4460 (description "Colorcet is a collection of perceptually accurate 256-color
4461colormaps for use with Python plotting programs like Bokeh, Matplotlib,
4462HoloViews, and Datashader.")
4463 (license license:cc-by4.0)))
4464
4465(define-public python-colored
4466 (package
4467 (name "python-colored")
4468 (version "2.3.0")
4469 (source (origin
4470 (method git-fetch)
4471 (uri (git-reference
4472 (url "https://gitlab.com/dslackw/colored")
4473 (commit version)))
4474 (file-name (git-file-name name version))
4475 (sha256
4476 (base32
4477 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
4478 (build-system pyproject-build-system)
4479 (arguments
4480 (list
4481 #:phases
4482 #~(modify-phases %standard-phases
4483 (add-before 'check 'pre-check
4484 (lambda _
4485 ;; Tests expect ANSI escape codes for colors.
4486 (setenv "FORCE_COLOR" "1"))))))
4487 (native-inputs (list python-flit-core python-pytest))
4488 (home-page "https://gitlab.com/dslackw/colored")
4489 (synopsis "Simple library for color and formatting to terminal")
4490 (description "This is a very simple Python library for color and
4491formatting in the terminal. It comes with a collection of color codes and
4492names for 256 color terminal setups.")
4493 (license license:expat)))
4494
4495(define-public python-colored-traceback
4496 ;; No tags in upstream repository.
4497 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
4498 (revision "0"))
4499 (package
4500 (name "python-colored-traceback")
4501 (version (git-version "0.4.2" revision commit))
4502 (source
4503 (origin
4504 (method git-fetch)
4505 (uri (git-reference
4506 (url "https://github.com/staticshock/colored-traceback.py")
4507 (commit commit)))
4508 (file-name (git-file-name name version))
4509 (sha256
4510 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4511 (build-system pyproject-build-system)
4512 (arguments
4513 ;; Tests are incompatible with current python version.
4514 (list #:tests? #f))
4515 (propagated-inputs (list python-colorama python-pygments))
4516 (native-inputs (list python-setuptools python-wheel))
4517 (home-page "https://github.com/staticshock/colored-traceback.py")
4518 (synopsis "Automatically color uncaught exception tracebacks")
4519 (description "This package provides python utilities to automatically
4520color uncaught exception tracebacks.")
4521 (license license:isc))))
4522
4523(define-public python-colorful
4524 (package
4525 (name "python-colorful")
4526 (version "0.5.8")
4527 (source
4528 (origin
4529 (method git-fetch)
4530 (uri (git-reference
4531 (url "https://github.com/timofurrer/colorful")
4532 (commit (string-append "v" version))))
4533 (file-name (git-file-name name version))
4534 (sha256
4535 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4536 (build-system pyproject-build-system)
4537 (native-inputs
4538 (list python-pytest
4539 python-setuptools))
4540 (propagated-inputs
4541 (list python-colorama))
4542 (home-page "http://github.com/timofurrer/colorful")
4543 (synopsis "Terminal string styling")
4544 (description "Colorful provides an array of text styles, that can be used
4545as functions or string constants to form colored terminal output.")
4546 (license license:expat)))
4547
4548(define-public python-colorthief
4549 (package
4550 (name "python-colorthief")
4551 (version "0.2.1")
4552 (source
4553 (origin
4554 (method url-fetch)
4555 (uri (pypi-uri "colorthief" version))
4556 (sha256
4557 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4558 (build-system pyproject-build-system)
4559 (arguments
4560 (list #:tests? #f)) ;no tests in PyPI or Git
4561 (native-inputs (list python-setuptools))
4562 (propagated-inputs (list python-pillow))
4563 (home-page "https://github.com/fengsp/color-thief-py")
4564 (synopsis "Grab the color palette of an image")
4565 (description
4566 "This package provides methods to determine the dominant color
4567of an image, as well as constructing a representative color palette.")
4568 (license license:bsd-3)))
4569
4570(define-public python-construct-classes
4571 (package
4572 (name "python-construct-classes")
4573 (version "0.1.2")
4574 (source
4575 (origin
4576 (method git-fetch)
4577 (uri (git-reference
4578 (url "https://github.com/matejcik/construct-classes")
4579 (commit (string-append "v" version))))
4580 (file-name (git-file-name name version))
4581 (sha256
4582 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4583 (build-system pyproject-build-system)
4584 (propagated-inputs
4585 (list python-construct))
4586 (native-inputs
4587 (list python-poetry-core
4588 python-pytest))
4589 (home-page "https://github.com/matejcik/construct-classes")
4590 (synopsis "Parse binary structs into dataclasses")
4591 (description "This package provides a parser to parse binary structs
4592into dataclasses.")
4593 (license license:expat)))
4594
4595(define-public python-contourpy
4596 (package
4597 (name "python-contourpy")
4598 (version "1.3.3")
4599 (source
4600 (origin
4601 (method url-fetch)
4602 (uri (pypi-uri "contourpy" version))
4603 (sha256
4604 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4605 (build-system pyproject-build-system)
4606 (arguments
4607 (list
4608 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4609 #:test-flags
4610 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4611 #~(list "-m" "not image"
4612 ;; Tests that pass but avoided for load reasons.
4613 "-k" "not test_filled_random_big and not test_lines_random_big")))
4614 (native-inputs
4615 (list pybind11-2
4616 python-meson
4617 python-pytest
4618 python-wurlitzer))
4619 (propagated-inputs
4620 (list python-numpy))
4621 (home-page "https://contourpy.readthedocs.io/")
4622 (synopsis
4623 "Python library for calculating contours of 2D quadrilateral grids")
4624 (description
4625 "ContourPy is a Python library for calculating contours of 2D
4626quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4627 (license license:bsd-3)))
4628
4629(define-public python-lunr
4630 (package
4631 (name "python-lunr")
4632 (version "0.8.0")
4633 (source
4634 (origin
4635 (method url-fetch)
4636 (uri
4637 (pypi-uri "lunr" version))
4638 (sha256
4639 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4640 (build-system pyproject-build-system)
4641 (arguments
4642 (list
4643 #:test-flags
4644 '(list "-k" "not TestLanguageSupport"
4645 "--ignore-glob=tests/acceptance_tests/*")))
4646 (native-inputs
4647 (list python-hatch-fancy-pypi-readme
4648 python-hatchling
4649 python-pytest
4650 python-pytest-timeout))
4651 (propagated-inputs
4652 (list python-nltk))
4653 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4654 (synopsis "Full-text search library")
4655 (description "This package provides python library for full-text search.
4656It indexes documents and provides a search interface for retrieving documents
4657that best match text queries.")
4658 (license license:expat)))
4659
4660(define-public python-mdit-py-plugins
4661 (package
4662 (name "python-mdit-py-plugins")
4663 (version "0.5.0")
4664 (source (origin
4665 (method git-fetch) ;for tests
4666 (uri (git-reference
4667 (url "https://github.com/executablebooks/mdit-py-plugins")
4668 (commit (string-append "v" version))))
4669 (file-name (git-file-name name version))
4670 (sha256
4671 (base32
4672 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4673 (build-system pyproject-build-system)
4674 (propagated-inputs
4675 (list python-markdown-it-py
4676 python-attrs))
4677 (native-inputs
4678 (list python-flit-core
4679 python-pytest
4680 python-pytest-regressions))
4681 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4682 (synopsis "Collection of plugins for markdown-it-py")
4683 (description "This package contains a collection of plugins for
4684@code{markdown-it-py} like:
4685@enumerate
4686@item amsmath,
4687@item attrs,
4688@item container,
4689@item definition list,
4690@item dollarmath,
4691@item field list,
4692@item footnote,
4693@item textmath, and
4694@item wordcount.
4695@end enumerate")
4696 (license license:expat)))
4697
4698(define-public python-mdurl
4699 (package
4700 (name "python-mdurl")
4701 (version "0.1.2")
4702 (source
4703 (origin
4704 (method git-fetch)
4705 (uri (git-reference
4706 (url "https://github.com/executablebooks/mdurl")
4707 (commit version)))
4708 (file-name (git-file-name name version))
4709 (sha256
4710 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4711 (build-system pyproject-build-system)
4712 (native-inputs (list python-flit-core python-pytest))
4713 (home-page "https://github.com/executablebooks/mdurl")
4714 (synopsis "Markdown URL utilities")
4715 (description
4716 "This package implements a Python port of the JavaScript @code{mdurl}.")
4717 (license license:expat)))
4718
4719(define-public python-mkdocs
4720 (package
4721 (name "python-mkdocs")
4722 (version "1.6.1")
4723 (source
4724 (origin
4725 (method git-fetch)
4726 (uri (git-reference
4727 (url "https://github.com/mkdocs/mkdocs")
4728 (commit version)))
4729 (file-name (git-file-name name version))
4730 (sha256
4731 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4732 (build-system pyproject-build-system)
4733 (arguments
4734 (list
4735 ;; tests: 687 passed
4736 #:test-backend #~'unittest
4737 #:test-flags
4738 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4739 #:phases
4740 #~(modify-phases %standard-phases
4741 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4742 ;; to run tests with pytest (and thus ignore them selectively).
4743 (add-before 'check 'delete-failing-tests
4744 (lambda _
4745 (delete-file "mkdocs/tests/cli_tests.py"))))))
4746 (native-inputs
4747 (list python-hatchling
4748 python-setuptools))
4749 (propagated-inputs
4750 (list python-click
4751 python-ghp-import
4752 python-jinja2
4753 python-markdown
4754 python-markupsafe
4755 python-mergedeep
4756 python-mkdocs-get-deps
4757 python-packaging
4758 python-pathspec
4759 python-pyyaml
4760 python-pyyaml-env-tag
4761 python-watchdog
4762 ;; [optional]
4763 python-babel))
4764 (home-page "https://www.mkdocs.org")
4765 (synopsis "Project documentation with Markdown")
4766 (description
4767 "MkDocs is a static site generator geared towards building project
4768documentation. Documentation source files are written in Markdown, and
4769configured with a single YAML configuration file.")
4770 (license license:bsd-3)))
4771
4772(define-public python-mkdocs-get-deps
4773 (package
4774 (name "python-mkdocs-get-deps")
4775 (version "0.2.0")
4776 (source
4777 (origin
4778 (method git-fetch)
4779 (uri (git-reference
4780 (url "https://github.com/mkdocs/get-deps")
4781 (commit (string-append "v" version))))
4782 (file-name (git-file-name name version))
4783 (sha256
4784 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
4785 (build-system pyproject-build-system)
4786 (native-inputs
4787 (list python-pytest
4788 python-hatchling))
4789 (propagated-inputs
4790 (list python-mergedeep
4791 python-platformdirs
4792 python-pyyaml))
4793 (home-page "https://github.com/mkdocs/get-deps")
4794 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
4795 (description
4796 "This package provides an @code{MkDocs} extension that lists all dependencies
4797according to a mkdocs.yml file. This command guesses the Python dependencies
4798that a MkDocs site requires in order to build. It simply prints the PyPI
4799packages that need to be installed.")
4800 (license license:expat)))
4801
4802(define-public python-mkdocs-markdownextradata-plugin
4803 (package
4804 (name "python-mkdocs-markdownextradata-plugin")
4805 (version "0.2.5")
4806 (source
4807 (origin
4808 (method git-fetch)
4809 (uri (git-reference
4810 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
4811 (commit version)))
4812 (file-name (git-file-name name version))
4813 (sha256
4814 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
4815 (build-system pyproject-build-system)
4816 (native-inputs (list python-pytest python-setuptools))
4817 (propagated-inputs (list python-mkdocs python-pyyaml))
4818 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
4819 (synopsis "Inject extra variables into the MkDocs markdown template")
4820 (description
4821 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
4822variables into the markdown template.")
4823 (license license:expat)))
4824
4825(define-public python-docstring-to-markdown
4826 (package
4827 (name "python-docstring-to-markdown")
4828 (version "0.15")
4829 (source
4830 (origin
4831 (method url-fetch)
4832 (uri (pypi-uri "docstring-to-markdown" version))
4833 (sha256
4834 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
4835 (build-system pyproject-build-system)
4836 (native-inputs
4837 (list python-pytest
4838 python-setuptools))
4839 (home-page "https://github.com/python-lsp/docstring-to-markdown")
4840 (synopsis "On the fly conversion of Python docstrings to markdown")
4841 (description
4842 "This module can convert Python docstrings to Markdown. It can recognise
4843reStructuredText inside docstrings and convert multiple of its features to
4844Markdown. It also includes initial support for Google-formatted docstrings.")
4845 (license license:lgpl2.1+)))
4846
4847(define-public python-pdoc
4848 (package
4849 (name "python-pdoc")
4850 (version "13.0.1")
4851 (source (origin
4852 (method git-fetch)
4853 (uri (git-reference
4854 (url "https://github.com/mitmproxy/pdoc")
4855 (commit (string-append "v" version))))
4856 (file-name (git-file-name name version))
4857 (sha256
4858 (base32
4859 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
4860 (build-system pyproject-build-system)
4861 (native-inputs (list python-pytest python-jinja2 python-pygments
4862 python-setuptools python-wheel))
4863 (arguments
4864 (list
4865 ;; Some tests fail, presumably because of slight version mismatches of
4866 ;; the dependencies.
4867 #:test-flags
4868 '(list "-k" (string-append "not test_var_with_raising_repr and "
4869 "not test_smoke[mock] and "
4870 "not test_snapshots[html"))))
4871 (home-page "https://pdoc.dev/")
4872 (synopsis "API documentation for Python projects")
4873 (description "pdoc auto-generates API documentation that follows your
4874project's Python module hierarchy. It requires no configuration, has
4875first-class support for type annotations, cross-links between identifiers,
4876comes with an integrated live-reloading web server, uses customizable HTML
4877templates, understands numpydoc and Google-style docstrings.")
4878 (license license:unlicense)))
4879
4880(define-public python-py4j
4881 (package
4882 (name "python-py4j")
4883 (version "0.10.9.7")
4884 (source (origin
4885 (method url-fetch)
4886 (uri (pypi-uri "py4j" version))
4887 (sha256
4888 (base32
4889 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
4890 (build-system pyproject-build-system)
4891 (arguments (list #:tests? #f)) ; Requires a running JVM?
4892 (native-inputs (list python-setuptools))
4893 (home-page "https://www.py4j.org/")
4894 (synopsis "Dynamically access arbitrary Java objects from Python")
4895 (description
4896 "This package enables Python programs to dynamically access arbitrary
4897Java objects.")
4898 (license license:bsd-3)))
4899
4900(define-public python-pymdown-extensions
4901 (package
4902 (name "python-pymdown-extensions")
4903 (version "10.16.1")
4904 (source
4905 (origin
4906 (method git-fetch)
4907 (uri (git-reference
4908 (url "https://github.com/facelessuser/pymdown-extensions")
4909 (commit version)))
4910 (file-name (git-file-name name version))
4911 (sha256
4912 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
4913 (build-system pyproject-build-system)
4914 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
4915 (arguments
4916 (list #:tests? #f))
4917 (native-inputs (list python-hatchling python-pytest python-pyyaml))
4918 (propagated-inputs (list python-markdown))
4919 (home-page "https://github.com/facelessuser/pymdown-extensions")
4920 (synopsis "Extension pack for Python Markdown")
4921 (description
4922 "PyMdown Extensions is a collection of extensions for Python Markdown.
4923All extensions are found under the module namespace of pymdownx.")
4924 (license license:expat)))
4925
4926(define-public python-plotext
4927 (package
4928 (name "python-plotext")
4929 (version "5.2.8")
4930 (source (origin
4931 (method url-fetch)
4932 (uri (pypi-uri "plotext" version))
4933 (sha256
4934 (base32
4935 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
4936 (build-system pyproject-build-system)
4937 (arguments (list #:tests? #false)) ;there are none
4938 (native-inputs (list python-setuptools python-wheel))
4939 (home-page "https://github.com/piccolomo/plotext")
4940 (synopsis "Plots in the terminal")
4941 (description "Plotext lets you plot directly to the terminal.")
4942 (license license:expat)))
4943
4944(define-public python-plotille
4945 (package
4946 (name "python-plotille")
4947 (version "5.0.0")
4948 (source
4949 (origin
4950 (method git-fetch)
4951 (uri (git-reference
4952 (url "https://github.com/tammoippen/plotille")
4953 (commit (string-append "v" version))))
4954 (file-name (git-file-name name version))
4955 (sha256
4956 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
4957 (modules '((guix build utils)))
4958 (snippet
4959 #~(begin
4960 ;; Without deleting ./imgs setuptools complains as follows: error:
4961 ;; Multiple top-level packages discovered in a flat-layout:
4962 ;; ['imgs', 'plotille'].
4963 (delete-file-recursively "./imgs")))))
4964 (build-system pyproject-build-system)
4965 (native-inputs
4966 (list python-pytest
4967 python-mock
4968 python-pendulum
4969 python-pytest-mock
4970 python-setuptools
4971 python-wheel))
4972 (home-page "https://github.com/tammoippen/plotille")
4973 (synopsis "Plot in the terminal using braille dots")
4974 (description
4975 "Plotille provides a figure class and graphing functions to create plots,
4976scatter plots, histograms and heatmaps in the terminal using braille dots.")
4977 (license license:expat)))
4978
4979(define-public python-poetry-dynamic-versioning
4980 (package
4981 (name "python-poetry-dynamic-versioning")
4982 (version "1.9.1")
4983 (source
4984 (origin
4985 (method url-fetch)
4986 (uri (pypi-uri "poetry_dynamic_versioning" version))
4987 (sha256
4988 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
4989 (build-system pyproject-build-system)
4990 (arguments
4991 (list
4992 #:test-flags
4993 #~(list "--ignore=tests/test_integration.py"
4994 "-k" (string-join
4995 ;; Tests searching for VCS back end.
4996 (list "not test__get_version__defaults"
4997 "test__enable_in_doc__project_with_dynamic"
4998 "test__enable_in_doc__project_with_version"
4999 "test__get_version__format_jinja"
5000 "test__get_version__format_jinja_imports_with_module_and_item"
5001 "test__get_version__format_jinja_imports_with_module_only"
5002 "test__get_version__format_jinja_with_enforced_style")
5003 " and not "))))
5004 (native-inputs
5005 (list python-poetry-core
5006 python-pytest))
5007 (propagated-inputs
5008 (list python-dunamai
5009 python-jinja2
5010 python-tomlkit))
5011 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
5012 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
5013 (description
5014 "This package provides a build backend that patches Poetry Core to enable
5015the versioning system in PEP 517 build frontends.")
5016 (license license:expat)))
5017
5018(define-public python-poetry-plugin-export
5019 (package
5020 (name "python-poetry-plugin-export")
5021 (version "1.10.0")
5022 (source
5023 (origin
5024 (method url-fetch)
5025 (uri (pypi-uri "poetry_plugin_export" version))
5026 (sha256
5027 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
5028 (build-system pyproject-build-system)
5029 (arguments
5030 (list
5031 #:tests? #f)) ;tests cycle with poetry
5032 (native-inputs
5033 (list python-poetry-core))
5034 (propagated-inputs
5035 (list python-cachy
5036 python-pendulum
5037 python-poetry-core
5038 python-tomlkit))
5039 (home-page "https://python-poetry.org/")
5040 (synopsis "Poetry plugin to export the dependencies to various formats")
5041 (description
5042 "Poetry plugin to export the dependencies to various formats.")
5043 (license license:expat)))
5044
5045(define-public python-portpicker
5046 (package
5047 (name "python-portpicker")
5048 (version "1.6.0")
5049 (source
5050 (origin
5051 (method url-fetch)
5052 (uri (pypi-uri "portpicker" version))
5053 (sha256
5054 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
5055 (build-system pyproject-build-system)
5056 (arguments
5057 (list
5058 #:test-flags
5059 ;; This fails because portserver ends up in bin, not site-packages
5060 '(list "--ignore=src/tests/portserver_test.py")))
5061 (propagated-inputs (list python-psutil))
5062 (native-inputs (list python-pytest python-setuptools python-wheel
5063 net-tools))
5064 (home-page "https://github.com/google/python_portpicker")
5065 (synopsis "Choose unique available network ports")
5066 (description
5067 "This package provides a library to choose unique available network
5068ports.")
5069 (license license:asl2.0)))
5070
5071(define-public python-md-ulb-pwrap
5072 (package
5073 (name "python-md-ulb-pwrap")
5074 (version "0.1.3")
5075 (source
5076 (origin
5077 (method git-fetch)
5078 (uri (git-reference
5079 (url "https://github.com/mondeja/md-ulb-pwrap")
5080 (commit (string-append "v" version))))
5081 (file-name (git-file-name name version))
5082 (sha256
5083 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
5084 (build-system pyproject-build-system)
5085 (arguments
5086 (list
5087 #:imported-modules `(,@%cargo-build-system-modules
5088 ,@%pyproject-build-system-modules)
5089 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
5090 (guix build pyproject-build-system)
5091 (guix build utils))
5092 #:test-backend #~'custom
5093 #:test-flags #~(list "test.py")
5094 #:phases
5095 #~(modify-phases %standard-phases
5096 (add-after 'unpack 'prepare-cargo-build-system
5097 (lambda args
5098 (for-each
5099 (lambda (phase)
5100 (format #t "Running cargo phase: ~a~%" phase)
5101 (apply (assoc-ref cargo:%standard-phases phase)
5102 #:cargo-target #$(cargo-triplet)
5103 args))
5104 '(unpack-rust-crates
5105 configure
5106 check-for-pregenerated-files
5107 patch-cargo-checksums))))
5108 (add-after 'prepare-cargo-build-system 'chdir
5109 (lambda _
5110 (chdir "python"))))))
5111 (native-inputs
5112 (append
5113 (list maturin
5114 python-pytest
5115 python-unicode-linebreak
5116 rust
5117 `(,rust "cargo"))
5118 (or (and=> (%current-target-system)
5119 (compose list make-rust-sysroot))
5120 '())))
5121 (inputs (cargo-inputs 'md_ulb_pwrap))
5122 (home-page "https://github.com/mondeja/md-ulb-pwrap")
5123 (synopsis "Markdown paragraph wrapper")
5124 (description
5125 "This package provides a Markdown paragraph wrapper using Unicode Line
5126Breaking Algorithm written in Rust with Python bindings.")
5127 (license license:expat)))
5128
5129(define-public python-mdx-gh-links
5130 (package
5131 (name "python-mdx-gh-links")
5132 (version "0.4")
5133 (source
5134 (origin
5135 (method url-fetch)
5136 (uri (pypi-uri "mdx_gh_links" version))
5137 (sha256
5138 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
5139 (build-system pyproject-build-system)
5140 (arguments (list #:tests? #f)) ;tests connect github
5141 (native-inputs (list python-setuptools))
5142 (propagated-inputs (list python-markdown))
5143 (home-page "https://github.com/Python-Markdown/github-links/")
5144 (synopsis "Python-Markdown extension adding support for shorthand links")
5145 (description "This package is an extension to Python-Markdown which adds
5146support for shorthand links to GitHub users, repositories, issues and
5147commits.")
5148 (license license:bsd-3)))
5149
5150(define-public python-mkdocs-material
5151 (package
5152 (name "python-mkdocs-material")
5153 (version "7.3.6")
5154 (source
5155 (origin
5156 (method git-fetch)
5157 (uri (git-reference
5158 (url "https://github.com/squidfunk/mkdocs-material")
5159 (commit version)))
5160 (file-name (git-file-name name version))
5161 (sha256
5162 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
5163 (modules '((guix build utils)))
5164 (snippet
5165 ;; TODO There are still bundled assets and minified JS.
5166 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
5167 (build-system pyproject-build-system)
5168 (arguments
5169 (list
5170 #:tests? #f ; No tests.
5171 #:phases
5172 #~(let ((symlink-js
5173 (lambda (inputs)
5174 (for-each
5175 (lambda (lang)
5176 (let* ((filename (string-append "lunr." lang ".min.js"))
5177 (file (string-append "share/javascript/" filename)))
5178 (symlink (search-input-file inputs file) filename)))
5179 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
5180 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
5181 "vi")))))
5182 (modify-phases %standard-phases
5183 ;; Requirement mkdocs-material-extensions
5184 ;; in-turn requires mkdocs-material. This causes
5185 ;; circular dependency, so we remove this requirement.
5186 (add-after 'unpack 'patch-requirements
5187 (lambda _
5188 (substitute* "requirements.txt"
5189 (("mkdocs-material-extensions.*$")
5190 ""))))
5191 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
5192 (lambda* (#:key inputs #:allow-other-keys)
5193 (mkdir-p "material/assets/javascripts/lunr/min")
5194 (with-directory-excursion "material/assets/javascripts/lunr/min"
5195 (symlink-js inputs))))
5196 (add-after 'wrap 'replace-javascript-assets
5197 (lambda* (#:key inputs outputs #:allow-other-keys)
5198 (let* ((site (site-packages inputs outputs))
5199 (js-assets (string-append site "/material/"
5200 "assets/javascripts")))
5201 (with-directory-excursion js-assets
5202 (delete-file-recursively "lunr/min")
5203 (mkdir-p "lunr/min")
5204 (with-directory-excursion "lunr/min"
5205 (symlink-js inputs))))))))))
5206 (native-inputs (list python-setuptools))
5207 (inputs (list js-lunr-ar
5208 js-lunr-da
5209 js-lunr-de
5210 js-lunr-es
5211 js-lunr-fi
5212 js-lunr-fr
5213 js-lunr-hu
5214 js-lunr-it
5215 js-lunr-ja
5216 js-lunr-nl
5217 js-lunr-no
5218 js-lunr-pt
5219 js-lunr-ro
5220 js-lunr-ru
5221 js-lunr-sv
5222 js-lunr-tr
5223 js-lunr-vi
5224 js-lunr-multi
5225 js-lunr-stemmer-support))
5226 (propagated-inputs
5227 (list python-markdown python-mkdocs python-pygments
5228 python-pymdown-extensions))
5229 (home-page "https://squidfunk.github.io/mkdocs-material/")
5230 (synopsis "Material Design theme for MkDocs")
5231 (description "This package provides a theme plugin for the static site
5232generator MkDocs.")
5233 (license license:expat)))
5234
5235(define-public python-nanobind
5236 (package
5237 (name "python-nanobind")
5238 (version "2.10.2")
5239 (source
5240 (origin
5241 (method url-fetch)
5242 (uri (pypi-uri "nanobind" version))
5243 (sha256
5244 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
5245 (build-system pyproject-build-system)
5246 (arguments
5247 (list
5248 ;; tests: 466 passed, 27 skipped
5249 #:phases
5250 #~(modify-phases %standard-phases
5251 (add-before 'build 'configure-cmake
5252 (lambda _
5253 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
5254 (add-after 'configure-cmake 'build-c++
5255 (lambda _
5256 (invoke "cmake" "--build" "build" "-j" "2")))
5257 (add-before 'check 'pre-check
5258 (lambda _ (chdir "build"))))))
5259 (native-inputs
5260 (list cmake-minimal
5261 python-numpy
5262 python-pathspec
5263 python-pytest
5264 python-scikit-build-core
5265 python-scipy))
5266 (inputs
5267 (list eigen))
5268 (home-page "https://github.com/wjakob/nanobind/")
5269 (synopsis "Tiny and efficient C++/Python bindings")
5270 (description "Nanobind is a small binding library that exposes C++ types
5271in Python and vice versa. It is reminiscent of @code{Boost.Python} and
5272@code{pybind11} and uses near-identical syntax. In contrast to these existing
5273tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
5274of time, produce smaller binaries, and have better runtime performance.")
5275 (license license:bsd-3)))
5276
5277(define-public python-nr-date
5278 (package
5279 (name "python-nr-date")
5280 (version "2.1.0")
5281 (source
5282 (origin
5283 (method url-fetch)
5284 (uri (pypi-uri "nr_date" version))
5285 (sha256
5286 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
5287 (build-system pyproject-build-system)
5288 (arguments (list #:tests? #false)) ;there are none
5289 (native-inputs (list python-poetry-core))
5290 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
5291 (synopsis "Fast, regex-based date parsing library in plain Python")
5292 (description "This package provides a fast, regex-based date parsing
5293library in pure Python.")
5294 (license license:expat)))
5295
5296(define-public python-nr-stream
5297 (package
5298 (name "python-nr-stream")
5299 (version "1.1.5")
5300 (source
5301 (origin
5302 (method url-fetch)
5303 (uri (pypi-uri "nr_stream" version))
5304 (sha256
5305 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
5306 (build-system pyproject-build-system)
5307 (arguments (list #:tests? #false)) ;there are none
5308 (native-inputs (list python-poetry-core))
5309 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
5310 (synopsis "Stream and Optional classes for Python")
5311 (description "This package provides a @code{Stream} and @code{Optional}
5312class.")
5313 (license license:expat)))
5314
5315(define-public python-nr-util
5316 (package
5317 (name "python-nr-util")
5318 (version "0.8.12")
5319 (source
5320 (origin
5321 (method url-fetch)
5322 (uri (pypi-uri "nr.util" version))
5323 (sha256
5324 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
5325 (build-system pyproject-build-system)
5326 (arguments
5327 (list
5328 #:tests? #false ;there are none
5329 #:phases
5330 #~(modify-phases %standard-phases
5331 (add-after 'unpack 'patch-build-system
5332 (lambda _
5333 (substitute* "pyproject.toml"
5334 (("^config =.*") "config = []\n"))))
5335 (add-after 'install 'fix-name
5336 (lambda* (#:key inputs outputs #:allow-other-keys)
5337 (let* ((sitedir (site-packages inputs outputs))
5338 (dist-info
5339 (string-append sitedir "/nr_util-" #$version ".dist-info")))
5340 (substitute* (string-append dist-info "/METADATA")
5341 (("Name: nr-util")
5342 "Name: nr.util"))
5343 (substitute* (string-append dist-info "/RECORD")
5344 (("nr_util") "nr.util"))
5345 (rename-file dist-info
5346 (string-append sitedir
5347 "/nr.util-"
5348 #$version ".dist-info"))))))))
5349 (propagated-inputs (list python-deprecated python-typing-extensions))
5350 (native-inputs (list python-poetry-core))
5351 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
5352 (synopsis "General purpose Python utility library")
5353 (description "This package provides a general purpose Python utility
5354library.")
5355 (license license:expat)))
5356
5357(define-public python-slicerator
5358 (package
5359 (name "python-slicerator")
5360 (version "1.1.0")
5361 (source
5362 (origin
5363 (method url-fetch)
5364 (uri (pypi-uri "slicerator" version))
5365 (sha256
5366 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
5367 (build-system pyproject-build-system)
5368 (native-inputs
5369 (list python-numpy
5370 python-pytest
5371 python-setuptools))
5372 (home-page "https://github.com/soft-matter/slicerator")
5373 (synopsis "Lazy-loading, fancy-sliceable iterable")
5374 (description
5375 "This package provides a lazy-loading, fancy-sliceable iterable. Think
5376of it like a generator that is \"reusable\" and has a length.")
5377 (license license:bsd-3)))
5378
5379(define-public python-pytelegrambotapi
5380 (package
5381 (name "python-pytelegrambotapi")
5382 (version "4.22.0")
5383 (source
5384 (origin
5385 (method git-fetch)
5386 (uri (git-reference
5387 (url "https://github.com/eternnoir/pyTelegramBotAPI")
5388 (commit version)))
5389 (file-name (git-file-name name version))
5390 (sha256
5391 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
5392 (build-system pyproject-build-system)
5393 (arguments
5394 (list
5395 #:phases
5396 #~(modify-phases %standard-phases
5397 (replace 'check
5398 (lambda* (#:key tests? #:allow-other-keys)
5399 (when tests?
5400 (with-directory-excursion "tests"
5401 (invoke "py.test"))))))))
5402 (propagated-inputs
5403 (list python-requests))
5404 (native-inputs
5405 (list python-hatchling python-pytest))
5406 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
5407 (synopsis "Python Telegram bot api")
5408 (description "This package provides a simple, but extensible Python
5409implementation for the Telegram Bot API.")
5410 (license license:gpl2)))
5411
5412(define-public python-pytoolconfig
5413 (package
5414 (name "python-pytoolconfig")
5415 (version "1.3.1")
5416 (source
5417 (origin
5418 (method url-fetch)
5419 (uri (pypi-uri "pytoolconfig" version))
5420 (sha256
5421 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
5422 (build-system pyproject-build-system)
5423 (arguments
5424 (list
5425 #:test-flags
5426 ;; Requires Sphinx.
5427 #~(list "--ignore=tests/test_documentation.py")))
5428 (native-inputs
5429 (list python-pdm-backend
5430 python-pytest))
5431 (propagated-inputs
5432 (list python-tomli
5433 python-packaging
5434 python-platformdirs))
5435 (home-page "https://pypi.org/project/pytoolconfig/")
5436 (synopsis "Python tool configuration")
5437 (description "The goal of this project is to manage configuration for
5438Python tools, such as rope and add support for a @file{pyproject.toml}
5439configuration file.")
5440 (license license:lgpl3+)))
5441
5442(define-public python-pytooling
5443 (package
5444 (name "python-pytooling")
5445 (version "9.0.0")
5446 (source
5447 (origin
5448 (method git-fetch)
5449 (uri (git-reference
5450 (url "https://github.com/pyTooling/pyTooling/")
5451 (commit (string-append "v" version))))
5452 (file-name (git-file-name name version))
5453 (sha256
5454 (base32 "19zbpy35bfcq3m49xd80qsy7f4b4r98dhv4vx76199a425n61932"))))
5455 (build-system pyproject-build-system)
5456 (arguments
5457 (list
5458 ;; Tests do not support linux-i686 system: Exception: Unknown
5459 ;; architecture 'linux-i686' for a native Linux.
5460 #:tests? (not (or (%current-target-system)
5461 (target-x86-32?)))
5462 #:test-flags
5463 #~(list
5464 "tests/unit"
5465 ;; These tests try to access the network.
5466 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
5467 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
5468 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
5469 #:phases
5470 #~(modify-phases %standard-phases
5471 (add-after 'unpack 'patch-git-bin-for-tests
5472 (lambda* (#:key inputs #:allow-other-keys)
5473 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
5474 "tests/unit/CLIAbstraction/Program.py")
5475 (("/usr/bin")
5476 (dirname (search-input-file inputs "/bin/git")))))))))
5477 (native-inputs
5478 (list git-minimal/pinned
5479 python-aiohttp
5480 python-colorama
5481 python-pytest
5482 python-requests
5483 python-ruamel.yaml
5484 python-setuptools))
5485 (home-page "https://pytooling.github.io/pyTooling/")
5486 (synopsis "Miscellaneous Python tools")
5487 (description
5488 "pyTooling is a collection of (abstract) data models, lacking classes,
5489decorators, a new performance boosting meta-class, and enhanced exceptions.
5490It also provides lots of helper functions---e.g., to ease the handling of
5491package descriptions or to unify multiple existing APIs into a single API.")
5492 (license license:asl2.0)))
5493
5494(define-public python-colorlog
5495 (package
5496 (name "python-colorlog")
5497 (version "6.9.0")
5498 (source
5499 (origin
5500 (method url-fetch)
5501 (uri (pypi-uri "colorlog" version))
5502 (sha256
5503 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5504 (build-system pyproject-build-system)
5505 (native-inputs
5506 (list python-pytest
5507 python-setuptools))
5508 (home-page "https://github.com/borntyping/python-colorlog")
5509 (synopsis "Log formatting with colors for python")
5510 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5511with Python's logging module that outputs records using terminal colors.")
5512 (license license:expat)))
5513
5514(define-public python-pyprind
5515 (package
5516 (name "python-pyprind")
5517 (version "2.11.3")
5518 (source
5519 (origin
5520 (method url-fetch)
5521 (uri (pypi-uri "PyPrind" version))
5522 (sha256
5523 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5524 (build-system pyproject-build-system)
5525 (native-inputs (list python-pytest python-setuptools))
5526 (propagated-inputs (list python-psutil))
5527 (home-page "https://github.com/rasbt/pyprind")
5528 (synopsis "Python Progress Bar and Percent Indicator Utility")
5529 (description
5530 "The PyPrind (Python Progress Indicator) module provides a progress bar
5531and a percentage indicator object that let you track the progress of a loop
5532structure or other iterative computation.")
5533 (license license:bsd-3)))
5534
5535(define-public python-gh-md-to-html
5536 (package
5537 (name "python-gh-md-to-html")
5538 (version "1.21.2")
5539 (source
5540 (origin
5541 (method url-fetch)
5542 (uri (pypi-uri "gh_md_to_html" version))
5543 (sha256
5544 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5545 (build-system pyproject-build-system)
5546 (arguments
5547 (list
5548 #:tests? #false ;there are none
5549 #:phases
5550 #~(modify-phases %standard-phases
5551 (add-after 'unpack 'relax-shellescape-requirement
5552 (lambda _
5553 (substitute* "src/__init__.py"
5554 (("import shellescape")
5555 "import shlex")
5556 (("shellescape\\.quote")
5557 "shlex.quote"))
5558 (substitute* "setup.py"
5559 (("\"shellescape\",")
5560 "")))))))
5561 (propagated-inputs
5562 (list python-beautifulsoup4
5563 python-emoji-for-gh-md-to-html
5564 python-pillow
5565 python-requests
5566 python-webcolors))
5567 (native-inputs (list python-setuptools))
5568 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5569 (synopsis "Github-flavored Markdown")
5570 (description
5571 "This package provides a feature-rich Github-flavored Markdown to HTML
5572Python library and command line interface.")
5573 (license license:expat)))
5574
5575(define-public python-gfloat
5576 (package
5577 (name "python-gfloat")
5578 (version "0.5.2")
5579 (source
5580 (origin
5581 (method url-fetch)
5582 (uri (pypi-uri "gfloat" version))
5583 (sha256
5584 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5585 (build-system pyproject-build-system)
5586 (arguments
5587 (list
5588 #:test-flags
5589 #~(list
5590 "--ignore=test/test_array_api.py" ;requires array_api_strict
5591 "--ignore=test/test_jax.py" ;requires python-jax
5592 "--ignore=test/test_microxcaling.py" ;requires torchao
5593 ;; Jupyter.
5594 "--ignore-glob=docs/source/*.ipynb")))
5595 (propagated-inputs
5596 (list python-array-api-compat python-more-itertools python-numpy))
5597 (native-inputs (list python-nbval
5598 python-ml-dtypes
5599 python-pytest
5600 python-pytorch
5601 python-setuptools
5602 openssl))
5603 (home-page "https://github.com/graphcore-research/gfloat")
5604 (synopsis "Generic floating point handling in Python")
5605 (description
5606 "This package provides an implementation of generic floating point encode
5607and decode logic in Python. It handles various current and proposed floating
5608point types:
5609
5610@itemize
5611@item IEEE 754: Binary16, Binary32
5612@item OCP Float8: E5M2, E4M3
5613@item IEEE WG P3109
5614@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5615@end itemize")
5616 (license license:expat)))
5617
5618(define-public python-glymur
5619 (package
5620 (name "python-glymur")
5621 (version "0.14.8")
5622 (source
5623 (origin
5624 (method git-fetch)
5625 (uri (git-reference
5626 (url "https://github.com/quintusdias/glymur")
5627 (commit (string-append "v" version))))
5628 (file-name (git-file-name name version))
5629 (sha256
5630 (base32 "0jhnr5p8lrycf9bn9p429rkc82aayc0bjf0pivk870a954br268h"))))
5631 (build-system pyproject-build-system)
5632 (arguments
5633 (list
5634 #:test-flags
5635 #~(list "--numprocesses" (number->string (parallel-job-count))
5636 ;; Failing test due to inability of ctypes.util.find_library()
5637 ;; to determine library path, which is patched above.
5638 "--ignore=tests/test_config.py")
5639 #:phases
5640 #~(modify-phases %standard-phases
5641 (add-after 'unpack 'patch-library-locations
5642 (lambda* (#:key inputs #:allow-other-keys)
5643 ;; XXX: It's a workaround for Python inability to find the
5644 ;; .so libraries with ctypes.util.find_library()
5645 (substitute* '("glymur/config.py")
5646 (("path = find_library\\(libname\\)")
5647 (string-append
5648 "if libname == \"openjp2\":\n"
5649 " path = \""
5650 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5651 " elif libname == \"tiff\":\n"
5652 " path = \""
5653 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5654 " elif libname == \"c\":\n"
5655 " path = \""
5656 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5657 (native-inputs
5658 (list python-pytest
5659 python-pytest-xdist
5660 python-scikit-image
5661 python-setuptools))
5662 (inputs
5663 (list openjpeg ; glymur/lib/openjp2.py
5664 libtiff)) ; glymur/lib/tiff.py
5665 (propagated-inputs
5666 (list python-lxml
5667 python-numpy
5668 python-pillow ))
5669 (home-page "https://github.com/quintusdias/glymur")
5670 (synopsis "Python interface to OpenJPEG and LibTIFF")
5671 (description
5672 "This package provides Python interface to the OpenJPEG library which
5673allows one to read and write JPEG 2000 files")
5674 (license license:expat)))
5675
5676(define-public python-gphoto2
5677 (package
5678 (name "python-gphoto2")
5679 (version "2.6.1")
5680 (source
5681 (origin
5682 (method git-fetch) ; no tests in PyPI
5683 (uri (git-reference
5684 (url "https://github.com/jim-easterbrook/python-gphoto2")
5685 (commit (string-append "v" version))))
5686 (file-name (git-file-name name version))
5687 (sha256
5688 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5689 (build-system pyproject-build-system)
5690 (native-inputs
5691 (list pkg-config python-pytest python-setuptools python-wheel))
5692 (inputs
5693 (list libgphoto2))
5694 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5695 (synopsis "Python interface to libgphoto2")
5696 (description "@code{python-gphoto2} is a comprehensive Python interface
5697(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5698automatically generate the interface code.")
5699 (license license:lgpl3+)))
5700
5701(define-public python-colour
5702 (package
5703 (name "python-colour")
5704 (version "0.1.5")
5705 (source
5706 (origin
5707 (method git-fetch)
5708 (uri (git-reference
5709 (url "https://github.com/vaab/colour")
5710 (commit version)))
5711 (file-name (git-file-name name version))
5712 (sha256
5713 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5714 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5715 (build-system pyproject-build-system)
5716 (arguments
5717 (list
5718 #:tests? #f ; No tests.
5719 #:phases
5720 #~(modify-phases %standard-phases
5721 (add-after 'unpack 'set-version
5722 (lambda _
5723 (substitute* "autogen.sh"
5724 (("if ! \"\\$git\".*")
5725 "if false ; then\n")
5726 (("depends git grep")
5727 "depends grep")
5728 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5729 (format #f "version=~s" #$version))))))))
5730 (native-inputs (list python-setuptools))
5731 (home-page "https://github.com/vaab/colour")
5732 (synopsis "Convert and manipulate various color representations")
5733 (description
5734 "This package provides a pythonic way to manipulate color representations
5735(HSL, RVB,web, X11, ...).")
5736 (license license:expat)))
5737
5738(define-public python-rapidfuzz
5739 (package
5740 (name "python-rapidfuzz")
5741 (version "3.14.5")
5742 (source
5743 (origin
5744 (method git-fetch)
5745 (uri (git-reference
5746 (url "https://github.com/rapidfuzz/RapidFuzz")
5747 (commit (string-append "v" version))))
5748 (file-name (git-file-name name version))
5749 (sha256
5750 (base32 "0ic219rfw4nlj9jp3idhxpk8vjlcw3x0xc23s36hf6gs41wxwpn0"))))
5751 (build-system pyproject-build-system)
5752 (native-inputs
5753 (list python-cython
5754 python-pandas-minimal
5755 python-pytest
5756 python-scikit-build-core
5757 rapidfuzz-cpp
5758 taskflow))
5759 (home-page "https://github.com/rapidfuzz/RapidFuzz")
5760 (synopsis "Rapid fuzzy string matching")
5761 (description
5762 "RapidFuzz is a fast string matching library for Python and
5763C++, which is using the string similarity calculations from FuzzyWuzzy.")
5764 (license license:expat)))
5765
5766(define-public python-easygui
5767 (package
5768 (name "python-easygui")
5769 (version "0.98.1")
5770 (source
5771 (origin
5772 (method git-fetch)
5773 (uri (git-reference
5774 (url "https://github.com/robertlugg/easygui")
5775 (commit version)))
5776 (file-name (git-file-name name version))
5777 (sha256
5778 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
5779 (build-system pyproject-build-system)
5780 (arguments
5781 ;; XXX: There seem to be no tests upstream, although the package itself
5782 ;; seems to provide a lot of demo elements.
5783 (list #:tests? #f))
5784 (native-inputs (list python-pytest python-setuptools))
5785 (propagated-inputs (list `(,python "tk")))
5786 (home-page "https://github.com/robertlugg/easygui")
5787 (synopsis "GUI programming module for Python")
5788 (description
5789 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
5790different from other GUI generators in that EasyGUI is NOT event-driven.
5791Instead, all GUI interactions are invoked by simple function calls.")
5792 (license license:bsd-3)))
5793
5794(define-public python-echo
5795 (package
5796 (name "python-echo")
5797 (version "0.12.1")
5798 (source
5799 (origin
5800 (method url-fetch)
5801 (uri (pypi-uri "echo" version))
5802 (sha256
5803 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
5804 (build-system pyproject-build-system)
5805 (arguments
5806 (list
5807 #:phases
5808 #~(modify-phases %standard-phases
5809 (add-before 'check 'start-xorg-server
5810 (lambda _
5811 ;; The test suite requires a running X server.
5812 (system "Xvfb :99 -screen 0 1024x768x24 &")
5813 (setenv "DISPLAY" ":99.0"))))))
5814 (propagated-inputs
5815 (list python-numpy
5816 python-qtpy
5817 python-pyqt-6))
5818 (native-inputs
5819 (list python-pytest
5820 python-setuptools
5821 python-setuptools-scm
5822 xorg-server-for-tests))
5823 (home-page "https://github.com/glue-viz/echo")
5824 (synopsis "Callback Properties in Python")
5825 (description
5826 "Echo is a small library for attaching callback functions to property
5827state changes.")
5828 (license license:expat)))
5829
5830(define-public python-pymd4c
5831 (package
5832 (name "python-pymd4c")
5833 (version "1.3.0")
5834 (source
5835 (origin
5836 (method git-fetch)
5837 (uri (git-reference
5838 (url "https://github.com/dominickpastore/pymd4c")
5839 (commit (string-append "v" version))))
5840 (file-name (git-file-name name version))
5841 (sha256
5842 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
5843 (build-system pyproject-build-system)
5844 (arguments (list #:test-flags #~(list "test")))
5845 (inputs (list md4c))
5846 (native-inputs
5847 (list pkg-config python-pkgconfig python-pytest python-setuptools))
5848 (home-page "https://github.com/dominickpastore/pymd4c")
5849 (synopsis "Python bindings for MD4C")
5850 (description
5851 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
5852to CommonMark.")
5853 (license license:expat)))
5854
5855(define-public python-pymediainfo
5856 (package
5857 (name "python-pymediainfo")
5858 (version "4.1")
5859 (source
5860 (origin
5861 (method url-fetch)
5862 (uri (pypi-uri "pymediainfo" version))
5863 (sha256
5864 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
5865 (build-system pyproject-build-system)
5866 (arguments
5867 (list
5868 ;; The only failing test requires internet access.
5869 #:test-flags
5870 #~(list "-k" "not test_parse_url")
5871 #:phases
5872 #~(modify-phases %standard-phases
5873 (add-after 'unpack 'patch-libmediainfo
5874 (lambda* (#:key inputs #:allow-other-keys)
5875 (substitute* "pymediainfo/__init__.py"
5876 (("libmediainfo.so.0")
5877 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
5878 (native-inputs (list python-pytest python-setuptools))
5879 (inputs (list libmediainfo))
5880 (home-page "https://github.com/sbraz/pymediainfo")
5881 (synopsis "Python wrapper for the mediainfo library")
5882 (description
5883 "This package provides a Python wrapper for the mediainfo library to
5884access the technical and tag data for video and audio files.")
5885 (license license:expat)))
5886
5887(define-public python-psutil
5888 (package
5889 (name "python-psutil")
5890 (version "7.2.2")
5891 (source
5892 (origin
5893 (method git-fetch)
5894 (uri (git-reference
5895 (url "https://github.com/giampaolo/psutil")
5896 (commit (string-append "release-" version))))
5897 (file-name (git-file-name name version))
5898 (sha256
5899 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
5900 (build-system pyproject-build-system)
5901 (arguments
5902 (list
5903 ;; tests: X86_64-linux 414 passed, 278 skipped
5904 ;; i686-linux 410 passed, 278 skipped
5905 #:test-flags
5906 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
5907 "--dist" "loadgroup"
5908 #$@(map (lambda (ls) (string-append "--deselect=tests/"
5909 (string-join ls "::")))
5910 ;; assert None is not None
5911 '(("test_linux.py" "TestRootFsDeviceFinder"
5912 "test_comparisons")
5913 ;; FileNotFoundError: [Errno 2] No such file or
5914 ;; directory: '/sys/class/net/lo/mtu'
5915 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
5916 ;; AssertionError: assert '/dev/root' != '/dev/root'
5917 ("test_linux.py" "TestRootFsDeviceFinder"
5918 "test_disk_partitions_mocked")
5919 ;; psutil.AccessDenied: (pid=426)
5920 ("test_process.py" "TestProcess" "test_weird_environ")
5921 ;; assert []
5922 ("test_system.py" "TestMiscAPIs" "test_users")
5923 ;; ModuleNotFoundError: No module named '_common'
5924 ("test_scripts.py" "TestSetupScript"
5925 "test_invocation")
5926 ;; AssertionError: assert ''
5927 ("test_scripts.py" "TestExampleScripts" "test_who")
5928 ;; AssertionError: no disks on this system? assert
5929 ;; None is not None
5930 ("test_system.py" "TestDiskAPIs"
5931 "test_disk_io_counters")
5932 ;; psutil.NoSuchProcess: process no longer exists
5933 ;; (pid=247))
5934 ("test_process_all.py" "TestFetchAllProcesses"
5935 "test_all")
5936 ;; ModuleNotFoundError: No module named 'pypinfo'
5937 ("test_scripts.py" "TestInternalScripts"
5938 "test_import_all")
5939 ;; FileNotFoundError: [Errno 2] No such file or
5940 ;; directory: '/sys/class/power_supply'
5941 ("test_misc.py" "TestMisc" "test_serialization")))
5942 #$@(if (target-32bit?)
5943 (map (lambda (ls) (string-append "--deselect=tests/"
5944 (string-join ls "::")))
5945 ;; assert 12884901915 < 500 where 12884901915 =
5946 ;; abs((2596570605 - 15481472520))
5947 '(("test_linux.py" "TestSystemCPUStats"
5948 "test_interrupts")
5949 ;; OSError: [Errno 22] Invalid argument
5950 ("test_process.py" "TestProcess"
5951 "test_zombie_process")))
5952 '()))
5953 #:phases
5954 #~(modify-phases %standard-phases
5955 (add-before 'check 'pre-check
5956 (lambda _
5957 (delete-file-recursively "psutil")
5958 (substitute* "tests/test_linux.py"
5959 (("\"(free|vmstat)\"" _ cmd)
5960 (format #f "~s" (which cmd))))
5961 (setenv "PYTHONWARNINGS" "always")
5962 (setenv "PYTHONUNBUFFERED" "1")
5963 (setenv "PSUTIL_DEBUG" "1")
5964 (setenv "PSUTIL_TESTING" "1"))))))
5965 (native-inputs
5966 (list procps
5967 python-packaging
5968 python-psleak
5969 python-pyperf
5970 python-pytest
5971 python-pytest-instafail
5972 python-pytest-xdist
5973 python-setuptools))
5974 (home-page "https://github.com/giampaolo/psutil")
5975 (synopsis "Library for retrieving information on running processes")
5976 (description
5977 "@code{psutil} (Python system and process utilities) is a library for
5978retrieving information on running processes and system utilization (CPU,
5979memory, disks, network) in Python. It is useful mainly for system monitoring,
5980profiling and limiting process resources and management of running processes.
5981It implements many functionalities offered by command line tools such as: ps,
5982top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
5983iotop, uptime, pidof, tty, taskset, pmap.")
5984 (license license:bsd-3)))
5985
5986(define-public python-psutil-bootstrap
5987 (hidden-package
5988 (package/inherit python-psutil
5989 (name "python-psutil-bootstrap")
5990 (arguments
5991 (list #:tests? #f))
5992 (propagated-inputs '())
5993 (native-inputs
5994 (list python-setuptools)))))
5995
5996(define-public python-scapy
5997 (package
5998 (name "python-scapy")
5999 (version "2.6.1")
6000 (source (origin
6001 (method url-fetch)
6002 (uri (pypi-uri "scapy" version))
6003 (sha256
6004 (base32
6005 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
6006 (arguments
6007 '(#:tests? #f)) ; There is a test directory, but apparently no
6008 ; automatic testing framework.
6009 ;; The package has more optional dependencies such as ipython and
6010 ;; matplotlib. If functionality is missing, these should be added.
6011 ;; See
6012 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
6013 (build-system pyproject-build-system)
6014 (native-inputs (list python-setuptools python-wheel))
6015 (home-page "https://scapy.net")
6016 (synopsis "Python network packet crafting library")
6017 (description
6018 "Scapy is a Python library and executable for interactively
6019manipulating network packets. It can forge or decode packets of a number
6020of protocols, send them on the wire, capture them, store or read them
6021using pcap files, match requests and replies, and so on.
6022It can handle tasks such as scanning, tracerouting, probing, unit tests,
6023attacks or network discovery.")
6024 (license license:gpl2)))
6025
6026(define-public python-icmplib
6027 (package
6028 (name "python-icmplib")
6029 (version "3.0.4")
6030 (source
6031 (origin
6032 (method git-fetch)
6033 (uri (git-reference
6034 (url "https://github.com/ValentinBELYN/icmplib")
6035 (commit (string-append "v" version))))
6036 (file-name (git-file-name name version))
6037 (sha256
6038 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
6039 (build-system pyproject-build-system)
6040 (arguments (list #:tests? #f)) ; No tests.
6041 (native-inputs (list python-setuptools))
6042 (home-page "https://github.com/ValentinBELYN/icmplib")
6043 (synopsis
6044 "Python implementation of the Internet Control Message Protocol (ICMP)")
6045 (description
6046 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
6047ICMP is typically used for diagnostic or control purposes - well known from
6048utilities such as ping(1).")
6049 (license license:lgpl3)))
6050
6051(define-public python-iron-core
6052 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
6053 (revision "0"))
6054 (package
6055 (name "python-iron-core")
6056 (version (git-version "1.2.1" revision commit))
6057 (source
6058 (origin
6059 (method git-fetch)
6060 (uri (git-reference
6061 (url "https://www.github.com/iron-io/iron_core_python")
6062 (commit commit)))
6063 (file-name (git-file-name name version))
6064 (sha256
6065 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
6066 (build-system pyproject-build-system)
6067 (arguments
6068 (list
6069 ;; XXX: Tests are run, but they seem too old/not updated.
6070 #:tests? #f
6071 #:test-backend #~'unittest))
6072 (propagated-inputs (list python-dateutil python-requests))
6073 (native-inputs (list python-setuptools))
6074 (home-page "https://www.github.com/iron-io/iron_core_python")
6075 (synopsis "Universal classes and methods for Iron.io API wrappers")
6076 (description
6077 "This package provides universal classes and methods for the Iron.io
6078API wrappers to build on.")
6079 (license license:bsd-2))))
6080
6081(define-public python-iron-mq
6082 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
6083 (revision "0"))
6084 (package
6085 (name "python-iron-mq")
6086 (version (git-version "0.9" revision commit))
6087 (source
6088 (origin
6089 (method git-fetch)
6090 (uri (git-reference
6091 (url "https://github.com/iron-io/iron_mq_python")
6092 (commit commit)))
6093 (file-name (git-file-name name version))
6094 (sha256
6095 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
6096 (build-system pyproject-build-system)
6097 (arguments
6098 (list
6099 ;; XXX: Tests are broken and require network access.
6100 #:tests? #f
6101 #:test-backend #~'unittest))
6102 (propagated-inputs (list python-iron-core))
6103 (native-inputs (list python-setuptools))
6104 (home-page "https://github.com/iron-io/iron_mq_python")
6105 (synopsis "Client library for IronMQ, a message queue in the cloud")
6106 (description
6107 "This package provides Python language bindings for IronMQ. IronMQ is an
6108elastic message queue for managing data and event flow within cloud
6109applications and between systems.")
6110 (license license:bsd-2))))
6111
6112(define-public python-rasterio
6113 (package
6114 (name "python-rasterio")
6115 (version "1.3.7")
6116 (source (origin
6117 (method url-fetch)
6118 (uri (pypi-uri "rasterio" version))
6119 (sha256
6120 (base32
6121 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
6122 (properties
6123 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
6124 (build-system pyproject-build-system)
6125 (arguments
6126 (list
6127 #:tests? #false ;test data not present
6128 #:phases
6129 '(modify-phases %standard-phases
6130 (add-before 'check 'build-extensions
6131 (lambda _
6132 ;; Cython extensions have to be built before running the tests.
6133 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6134 (propagated-inputs (list python-affine
6135 python-attrs
6136 python-certifi
6137 python-click
6138 python-click-plugins
6139 python-cligj
6140 python-numpy
6141 python-setuptools ; For pkg_resources.
6142 python-snuggs))
6143 (native-inputs (list gdal
6144 python-boto3
6145 python-cython
6146 python-hypothesis
6147 python-packaging
6148 python-pytest
6149 python-shapely
6150 python-wheel))
6151 (home-page "https://github.com/rasterio/rasterio")
6152 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
6153 (description "This package implements fast and direct raster I/O for use
6154with Numpy and SciPy.")
6155 (license license:bsd-3)))
6156
6157(define-public python-rich-tables
6158 (package
6159 (name "python-rich-tables")
6160 (version "0.8.0")
6161 (source
6162 (origin
6163 (method git-fetch) ; no tests data in PyPi package
6164 (uri (git-reference
6165 (url "https://github.com/snejus/rich-tables")
6166 (commit version)))
6167 (file-name (git-file-name name version))
6168 (sha256
6169 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
6170 (build-system pyproject-build-system)
6171 (arguments
6172 (list
6173 #:test-flags
6174 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
6175 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
6176 (native-inputs
6177 (list python-freezegun
6178 python-poetry-core
6179 python-pytest))
6180 (propagated-inputs
6181 (list python-funcy
6182 python-humanize
6183 python-multimethod
6184 python-platformdirs
6185 python-rgbxy
6186 python-rich
6187 python-sqlparse))
6188 (home-page "https://github.com/snejus/rich-tables")
6189 (synopsis "Ready-made rich tables for various purposes")
6190 (description
6191 "This package implements rich tables for various purposes, it's JSON
6192human-prettifier based on the @code{rich} Python library.")
6193 (license license:expat)))
6194
6195(define-public python-rich-toolkit
6196 (package
6197 (name "python-rich-toolkit")
6198 (version "0.12.0")
6199 (source
6200 (origin
6201 (method url-fetch)
6202 (uri (pypi-uri "rich_toolkit" version))
6203 (sha256
6204 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
6205 (build-system pyproject-build-system)
6206 (propagated-inputs (list python-click python-rich python-typing-extensions))
6207 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
6208 (home-page "https://pypi.org/project/rich-toolkit/")
6209 (synopsis "Rich toolkit for building command-line applications")
6210 (description "This package provides the Rich toolkit for building
6211command-line applications.")
6212 (license license:expat)))
6213
6214(define-public python-shapely
6215 (package
6216 (name "python-shapely")
6217 (version "2.1.1")
6218 (source
6219 (origin
6220 (method url-fetch)
6221 (uri (pypi-uri "shapely" version))
6222 (sha256
6223 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
6224 (build-system pyproject-build-system)
6225 (arguments
6226 (list
6227 #:phases
6228 '(modify-phases %standard-phases
6229 (add-before 'check 'build-extensions
6230 (lambda _
6231 ;; Cython extensions have to be built before running the tests.
6232 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6233 (native-inputs
6234 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
6235 (inputs
6236 (list geos))
6237 (propagated-inputs
6238 (list python-numpy))
6239 (home-page "https://github.com/shapely/shapely")
6240 (synopsis "Library for the manipulation and analysis of geometric objects")
6241 (description "Shapely is a Python package for manipulation and analysis of
6242planar geometric objects. It is based on the @code{GEOS} library.")
6243 (license license:bsd-3)))
6244
6245(define-public python-shortuuid
6246 (package
6247 (name "python-shortuuid")
6248 (version "1.0.13")
6249 (source
6250 (origin
6251 (method url-fetch)
6252 (uri (pypi-uri "shortuuid" version))
6253 (sha256
6254 (base32
6255 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
6256 (build-system pyproject-build-system)
6257 (native-inputs
6258 (list python-poetry-core python-pytest))
6259 (home-page "https://github.com/skorokithakis/shortuuid")
6260 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
6261 (description
6262 "@code{shortuuid} is a Python library for generating concise, unambiguous
6263and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
6264module and then similar looking characters are removed.")
6265 (license license:bsd-3)))
6266
6267(define-public python-logwrap
6268 (package
6269 (name "python-logwrap")
6270 (version "11.1.1")
6271 (source
6272 (origin
6273 (method git-fetch) ; no tests in PyPI release
6274 (uri (git-reference
6275 (url "https://github.com/python-useful-helpers/logwrap")
6276 (commit version)))
6277 (file-name (git-file-name name version))
6278 (sha256
6279 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
6280 (build-system pyproject-build-system)
6281 (native-inputs (list python-pytest
6282 python-setuptools
6283 python-setuptools-scm
6284 python-wheel))
6285 (home-page "https://github.com/python-useful-helpers/logwrap")
6286 (synopsis "Decorator for logging function arguments")
6287 (description "This package provides a decorator to log function arguments
6288and function call return values in a human-readable way.")
6289 (license license:asl2.0)))
6290
6291(define-public python-babel
6292 (package
6293 (name "python-babel")
6294 (version "2.16.0")
6295 (source
6296 (origin
6297 (method url-fetch)
6298 (uri (pypi-uri "babel" version))
6299 (sha256
6300 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
6301 (build-system pyproject-build-system)
6302 (native-inputs
6303 (list python-freezegun
6304 python-pytest
6305 python-setuptools
6306 tzdata-for-tests))
6307 (propagated-inputs
6308 (list python-pytz))
6309 (home-page "https://babel.pocoo.org/")
6310 (synopsis
6311 "Tools for internationalizing Python applications")
6312 (description
6313 "Babel is composed of two major parts:
6314- tools to build and work with gettext message catalogs
6315- a Python interface to the CLDR (Common Locale Data Repository), providing
6316access to various locale display names, localized number and date formatting,
6317etc.")
6318 (license license:bsd-3)))
6319
6320(define-public python-bidict
6321 (package
6322 (name "python-bidict")
6323 (version "0.23.1")
6324 (source
6325 (origin
6326 (method git-fetch) ; no tests in PyPI.
6327 (uri (git-reference
6328 (url "https://github.com/jab/bidict")
6329 (commit (string-append "v" version))))
6330 (file-name (git-file-name name version))
6331 (sha256
6332 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
6333 (build-system pyproject-build-system)
6334 (native-inputs
6335 (list python-pytest
6336 python-pytest-benchmark
6337 python-pytest-xdist
6338 python-setuptools
6339 python-sortedcollections
6340 python-wheel))
6341 (home-page "https://bidict.readthedocs.io")
6342 (synopsis "Bidirectional mapping library")
6343 (description "The @code{bidict} library provides several data structures
6344for working with bidirectional mappings in Python.")
6345 (license license:mpl2.0)))
6346
6347(define-public python-bip39
6348 (package
6349 (name "python-bip39")
6350 (version "0.0.2")
6351 (source
6352 (origin
6353 (method url-fetch)
6354 (uri (pypi-uri "bip39" version))
6355 (sha256
6356 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
6357 (build-system pyproject-build-system)
6358 (native-inputs (list python-pytest python-setuptools))
6359 (home-page "https://github.com/de-centralized-systems/python-bip39/")
6360 (synopsis "Self-contained and simple BIP39 implementation in Python")
6361 (description
6362 "This package provides a self-contained and simple BIP39
6363implementation written in Python. It includes a @code{bip39.py} executable.
6364
6365BIP39 is a standardized mapping between binary data (the @emph{entropy}),
6366and a list of words that are easier to remember for humans (the
6367@emph{mnemonic}).")
6368 (license license:expat)))
6369
6370(define-public python-bitarray
6371 (package
6372 (name "python-bitarray")
6373 (version "3.4.3")
6374 (source (origin
6375 (method url-fetch)
6376 (uri (pypi-uri "bitarray" version))
6377 (sha256
6378 (base32
6379 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
6380 (build-system pyproject-build-system)
6381 (arguments
6382 (list #:phases
6383 #~(modify-phases %standard-phases
6384 (replace 'check
6385 (lambda* (#:key tests? #:allow-other-keys)
6386 (when tests?
6387 ;; Step out of the source directory to avoid interference.
6388 (with-directory-excursion "/tmp"
6389 (invoke "python" "-c"
6390 "import bitarray; bitarray.test()"))))))))
6391 (native-inputs (list python-setuptools python-wheel))
6392 (home-page "https://github.com/ilanschnell/bitarray")
6393 (synopsis "Efficient arrays of booleans")
6394 (description "This package provides an object type which efficiently
6395represents an array of booleans. Bitarrays are sequence types and behave very
6396much like usual lists. Eight bits are represented by one byte in a contiguous
6397block of memory. The user can select between two representations:
6398little-endian and big-endian. All of the functionality is implemented in C.
6399Methods for accessing the machine representation are provided. This can be
6400useful when bit level access to binary files is required, such as portable
6401bitmap image files. Also, when dealing with compressed data which uses
6402variable bit length encoding, you may find this module useful.")
6403 (license license:psfl)))
6404
6405(define-public python-bitarray-2
6406 (package
6407 (inherit python-bitarray)
6408 (version "2.8.1")
6409 (source (origin
6410 (method url-fetch)
6411 (uri (pypi-uri "bitarray" version))
6412 (sha256
6413 (base32
6414 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
6415
6416(define-public python-boolean.py
6417 (package
6418 (name "python-boolean.py")
6419 (version "5.0")
6420 (source
6421 (origin
6422 (method url-fetch)
6423 (uri (pypi-uri "boolean_py" version))
6424 (sha256
6425 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
6426 (build-system pyproject-build-system)
6427 (native-inputs (list python-pytest python-setuptools python-wheel))
6428 (home-page "https://github.com/bastikr/boolean.py")
6429 (synopsis "Boolean algebra in one Python module")
6430 (description
6431 "This is a small Python library that implements boolean algebra.
6432It defines two base elements, @code{TRUE} and @code{FALSE}, and a
6433@code{Symbol} class that can take on one of these two values. Calculations
6434are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
6435compositions like @code{XOR} and @code{NAND} are emulated on top of them.
6436Expressions are constructed from parsed strings or directly in Python.")
6437 (license license:bsd-2)))
6438
6439(define-public python-h5netcdf
6440 (package
6441 (name "python-h5netcdf")
6442 (version "1.3.0")
6443 (source
6444 (origin
6445 (method url-fetch)
6446 (uri (pypi-uri "h5netcdf" version))
6447 (sha256
6448 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
6449 (build-system pyproject-build-system)
6450 (native-inputs
6451 (list python-netcdf4
6452 python-pytest
6453 python-setuptools
6454 python-setuptools-scm
6455 python-wheel))
6456 (propagated-inputs
6457 (list python-h5py python-packaging))
6458 (home-page "https://h5netcdf.org")
6459 (synopsis "Python interface for the netCDF4 file-format based on h5py")
6460 (description "This package provides a Python interface for the netCDF4
6461file-format that reads and writes local or remote HDF5 files directly via
6462@url{h5py, https://www.h5py.org/} or @url{h5pyd,
6463https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
6464library.")
6465 (license license:bsd-3)))
6466
6467(define-public python-h5py
6468 ;; TODO: Move to (gnu packages python-science) or maths, prevent import mpi
6469 ;; module here.
6470 (package
6471 (name "python-h5py")
6472 (version "3.16.0")
6473 (source
6474 (origin
6475 (method git-fetch)
6476 (uri (git-reference
6477 (url "https://github.com/h5py/h5py")
6478 (commit version)))
6479 (file-name (git-file-name name version))
6480 (sha256
6481 (base32 "1s5nqhylp7daizljnwr8bwwsxd92kqgz2106vi9q1c1q920ihsyy"))))
6482 (build-system pyproject-build-system)
6483 (arguments
6484 (list
6485 ;; tests: 849 passed, 50 skipped
6486 #:test-flags
6487 #~(list "--pyargs" "h5py")
6488 #:phases
6489 #~(modify-phases %standard-phases
6490 (add-after 'unpack 'set-hdf5-options
6491 ;; For custom installation with Parallel HDF5 see:
6492 ;; <https://docs.h5py.org/en/latest/build.html#custom-installation>.
6493 (lambda _
6494 ;; XXX: Check if we need this:
6495 ;; <https://github.com/h5py/h5py/issues/2560>.
6496 ;; (setenv "H5PY_SETUP_REQUIRES" "0")
6497 ;;
6498 ;; Project is part of h5py, but availalbe at
6499 ;; <https://oldhome.schmorp.de/marc/liblzf.html>, version 3.6
6500 ;; was released on 2019.
6501 ;; (setenv "H5PY_SYSTEM_LZF" "1")
6502 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
6503 (setenv "HDF5_MPI" "ON")))
6504 (add-before 'check 'pre-check
6505 (lambda _
6506 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
6507 (delete-file-recursively "h5py"))))))
6508 (native-inputs
6509 (list pkg-config
6510 python-cython
6511 python-pkgconfig
6512 python-pytest
6513 python-pytest-mpi
6514 python-setuptools))
6515 (inputs
6516 (list hdf5-parallel-openmpi))
6517 (propagated-inputs
6518 (list python-mpi4py
6519 python-numpy))
6520 (home-page "https://www.h5py.org/")
6521 (synopsis "Read and write HDF5 files from Python")
6522 (description
6523 "The h5py package provides both a high- and low-level interface to the
6524HDF5 library from Python. The low-level interface is intended to be a
6525complete wrapping of the HDF5 API, while the high-level component supports
6526access to HDF5 files, datasets and groups using established Python and NumPy
6527concepts.")
6528 (license license:bsd-3)))
6529
6530(define-public python-hdf5storage
6531 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6532 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6533 ;;
6534 ;; This package probably is sun setting, consider to remove when stops
6535 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6536 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6537 (revision "0"))
6538 (package
6539 (name "python-hdf5storage")
6540 (version (git-version "0.1.19" revision commit))
6541 (source
6542 (origin
6543 (method git-fetch)
6544 (uri (git-reference
6545 (url "https://github.com/frejanordsiek/hdf5storage")
6546 (commit commit)))
6547 (file-name (git-file-name name version))
6548 (sha256
6549 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6550 (build-system pyproject-build-system)
6551 (arguments
6552 ;; Started failing with the move to [email protected], due to modules changes.
6553 (list
6554 #:test-flags
6555 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6556 (native-inputs
6557 (list python-pytest
6558 python-setuptools))
6559 (propagated-inputs
6560 (list python-h5py
6561 python-numpy-1))
6562 (home-page "https://github.com/frejanordsiek/hdf5storage")
6563 (synopsis "Read and write Python data types from and to HDF5 files")
6564 (description
6565 "This Python package provides high-level utilities to read and write a
6566variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6567formatted files. This package also provides support for MATLAB MAT v7.3
6568formatted files, which are HDF5 files with a different extension and some
6569extra metadata. Because HDF5 and MAT files might need to be read from
6570untrusted sources, pickling is avoided in this package.")
6571 (license license:bsd-2))))
6572
6573(define-public python-prctl
6574 (package
6575 (name "python-prctl")
6576 (version "1.8.1")
6577 (source (origin
6578 (method url-fetch)
6579 (uri (pypi-uri "python-prctl" version))
6580 (sha256
6581 (base32
6582 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6583 (build-system pyproject-build-system)
6584 (arguments
6585 (list #:test-backend ''custom
6586 #:test-flags ''("test_prctl.py")
6587 #:phases
6588 #~(modify-phases %standard-phases
6589 (add-after 'unpack 'patch-tests
6590 (lambda _
6591 (substitute* "test_prctl.py"
6592 ;; actual suffix used in cpython build output dir name
6593 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6594 ;; test_no_new_privs assumes existence of /bin/ping, but
6595 ;; can never run anyway due to it requiring setuid ping.
6596 ;; just short circuit it instead.
6597 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6598 (inputs (list libcap))
6599 (native-inputs (list python-setuptools))
6600 (supported-systems (filter target-linux? %supported-systems))
6601 (home-page "https://pythonhosted.org/python-prctl")
6602 (synopsis "Linux capabilities library")
6603 (description "This package provides a Python library for controlling Linux
6604capabilities and attributes, similar to the prctl syscall.")
6605 (license license:gpl3+)))
6606
6607(define-public python-pyhimitsu
6608 (package
6609 (name "python-pyhimitsu")
6610 (version "0.0.9")
6611 (source (origin
6612 (method url-fetch)
6613 (uri (pypi-uri "py_himitsu" version))
6614 (sha256
6615 (base32
6616 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6617 (build-system pyproject-build-system)
6618 (arguments
6619 (list
6620 #:phases
6621 #~(modify-phases %standard-phases
6622 (replace 'check
6623 (lambda _
6624 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6625 (invoke "make" "check"))))))
6626 (native-inputs (list python-hatchling))
6627 (propagated-inputs (list python-pyxdg))
6628 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6629 (synopsis "Himitsu client protocol implementation in Python")
6630 (description "This package provides a library for writing Himitsu client
6631programs in Python.")
6632 (license license:expat)))
6633
6634(define-public python-hjson
6635 ;; Using commit from master branch as the PyPI version does not contain
6636 ;; the hjson/tests/ directory.
6637 (let ((revision "0")
6638 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6639 (package
6640 (name "python-hjson")
6641 (version (git-version "3.1.0" revision commit))
6642 (source (origin
6643 (method git-fetch)
6644 (uri (git-reference
6645 (url "https://github.com/hjson/hjson-py")
6646 (commit commit)))
6647 (file-name (git-file-name name version))
6648 (sha256
6649 (base32
6650 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6651 (modules '((guix build utils)))
6652 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6653 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6654 (snippet #~(substitute* "hjson/__init__.py"
6655 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6656 "{'foo': 'a', 'bar': 1}")))))
6657 (build-system pyproject-build-system)
6658 (native-inputs (list python-setuptools python-wheel))
6659 (home-page "https://github.com/hjson/hjson-py")
6660 (synopsis "Python package to parse HJSON documents")
6661 (description "This package provides a Python library and a command-line
6662interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6663 (license license:expat))))
6664
6665(define-public python-hnswlib
6666 (package
6667 (name "python-hnswlib")
6668 (version "0.8.0")
6669 (source
6670 (origin
6671 (method git-fetch)
6672 (uri (git-reference
6673 (url "https://github.com/nmslib/hnswlib")
6674 (commit (string-append "v" version))))
6675 (file-name (git-file-name name version))
6676 (sha256
6677 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6678 (build-system pyproject-build-system)
6679 (arguments
6680 (list
6681 #:phases
6682 #~(modify-phases %standard-phases
6683 (add-after 'unpack 'disable-native-optimization
6684 (lambda _
6685 (substitute* "setup.py"
6686 ((", '-march=native'")
6687 "")))))))
6688 (native-inputs
6689 (list pybind11-2
6690 python-pytest
6691 python-setuptools))
6692 (propagated-inputs
6693 (list python-numpy))
6694 (home-page "https://github.com/nmslib/hnswlib")
6695 (synopsis "Fast approximate nearest neighbor search")
6696 (description "Hnswlib is a header-only C++ implementation of fast
6697approximate nearest neighbor search with Python bindings.")
6698 (license license:asl2.0)))
6699
6700(define-public python-pylatex
6701 (package
6702 (name "python-pylatex")
6703 (version "1.4.2")
6704 (source
6705 (origin
6706 (method git-fetch)
6707 (uri (git-reference
6708 (url "https://github.com/JelteF/PyLaTeX")
6709 (commit (string-append "v" version))))
6710 (file-name (git-file-name name version))
6711 (sha256
6712 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6713 (build-system pyproject-build-system)
6714 (arguments
6715 (list #:phases
6716 #~(modify-phases %standard-phases
6717 ;; some tests attempt to create directories
6718 (add-before 'check 'set-home-directory
6719 (lambda _
6720 (setenv "HOME" "/tmp"))))))
6721 (propagated-inputs (list python-ordered-set))
6722 (native-inputs (list python-matplotlib
6723 python-pytest
6724 python-quantities
6725 python-setuptools
6726 (texlive-local-tree
6727 (list texlive-lastpage
6728 texlive-latexmk
6729 texlive-parskip))))
6730 (home-page "https://github.com/JelteF/PyLaTeX")
6731 (synopsis "Library for creating LaTeX files and snippets")
6732 (description
6733 "This package provides a Python library for creating LaTeX files and
6734snippets.")
6735 (license license:expat)))
6736
6737(define-public python-pylatexenc
6738 (package
6739 (name "python-pylatexenc")
6740 (version "2.10")
6741 (source
6742 (origin
6743 (method url-fetch)
6744 (uri (pypi-uri "pylatexenc" version))
6745 (sha256
6746 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6747 (build-system pyproject-build-system)
6748 (native-inputs (list python-pytest python-setuptools python-wheel))
6749 (home-page "https://github.com/phfaist/pylatexenc")
6750 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6751 (description
6752 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6753Unicode-to-LaTeX conversion.")
6754 (license license:expat)))
6755
6756(define-public python-lsp-black
6757 (package
6758 (name "python-lsp-black")
6759 (version "2.0.0")
6760 (source
6761 (origin
6762 (method git-fetch)
6763 (uri (git-reference
6764 (url "https://github.com/python-lsp/python-lsp-black")
6765 (commit (string-append "v" version))))
6766 (file-name (git-file-name name version))
6767 (sha256
6768 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
6769 (build-system pyproject-build-system)
6770 (arguments
6771 ;; The python version is too old for these tests to pass properly.
6772 (list #:test-flags
6773 `'("-k" ,(string-append
6774 "not test_pylsp_format_document_syntax_error"
6775 " and not test_pylsp_format_range_syntax_error"
6776 " and not test_load_config_defaults"
6777 " and not test_load_config_with_skip_options"))))
6778 (propagated-inputs
6779 (list python-black python-lsp-server python-tomli))
6780 (native-inputs
6781 (list python-pytest python-setuptools python-wheel))
6782 (home-page "https://github.com/python-lsp/python-lsp-black")
6783 (synopsis "Black plugin for the Python LSP Server")
6784 (description "This package provides a plugin with support for the
6785@code{python-black} formatter for the Python LSP Server.")
6786 (license license:expat)))
6787
6788(define-public python-pylsp-mypy
6789 (package
6790 (name "python-pylsp-mypy")
6791 (version "0.7.1")
6792 (source
6793 (origin
6794 ;; "The newest version on PyPI is indeed not published on GitHub."
6795 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
6796 (method url-fetch)
6797 (uri (pypi-uri "pylsp_mypy" version))
6798 (sha256
6799 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
6800 (build-system pyproject-build-system)
6801 (native-inputs (list python-pytest python-setuptools))
6802 (propagated-inputs (list python-mypy python-lsp-server))
6803 (home-page "https://github.com/python-lsp/pylsp-mypy")
6804 (synopsis "Mypy linter for the Python LSP Server")
6805 (description
6806 "Mypy linter integration for use with @code{python-lsp-server}.")
6807 (license license:expat)))
6808
6809(define-public python-sh
6810 (package
6811 (name "python-sh")
6812 (version "2.2.2")
6813 (source
6814 (origin
6815 (method url-fetch)
6816 (uri (pypi-uri "sh" version))
6817 (sha256
6818 (base32
6819 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
6820 (build-system pyproject-build-system)
6821 (arguments
6822 (list
6823 #:test-flags
6824 #~(list "-k" (string-join
6825 ;; These tests are shaky.
6826 (list "not test_bad_sig_raise_exception"
6827 "test_doesnt_execute_directories"
6828 "test_environment"
6829 "test_ok_code_ignores_bad_sig_exception"
6830 "test_unicode_path")
6831 " and not ")
6832 "tests")
6833 #:phases
6834 #~(modify-phases %standard-phases
6835 (add-before 'check 'pre-check
6836 (lambda _
6837 (setenv "HOME" "/tmp"))))))
6838 (native-inputs
6839 (list python-poetry-core python-pytest))
6840 (home-page "https://github.com/amoffat/sh")
6841 (synopsis "Python subprocess replacement")
6842 (description "This package provides a replacement for Python's
6843@code{subprocess} feature.")
6844 (license license:expat)))
6845
6846;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
6847;; that is updated.
6848(define-public python-sh-1
6849 (package
6850 (inherit python-sh)
6851 (version "1.14.2")
6852 (source
6853 (origin
6854 (method url-fetch)
6855 (uri (pypi-uri "sh" version))
6856 (sha256
6857 (base32
6858 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
6859 (arguments
6860 '(#:phases
6861 (modify-phases %standard-phases
6862 (replace 'check
6863 (lambda _
6864 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
6865 (setenv "HOME" "/tmp")
6866 (invoke "python" "sh.py" "test"))))))
6867 (native-inputs
6868 (list python-setuptools))))
6869
6870(define-public python-cftime
6871 (package
6872 (name "python-cftime")
6873 (version "1.6.5")
6874 (source
6875 (origin
6876 (method url-fetch)
6877 (uri (pypi-uri "cftime" version))
6878 (sha256
6879 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
6880 (build-system pyproject-build-system)
6881 (propagated-inputs
6882 (list python-numpy))
6883 (native-inputs
6884 (list python-cython
6885 python-pytest
6886 python-setuptools
6887 python-wheel))
6888 (home-page "https://unidata.github.io/cftime/")
6889 (synopsis "Library for time handling")
6890 (description
6891 "This package provides time-handling functionality that used to be part
6892of the netcdf4 package before.")
6893 (license license:expat)))
6894
6895(define-public python-netcdf4
6896 ;; TODO: Move to (gnu packages python-science).
6897 (package
6898 (name "python-netcdf4")
6899 (version "1.7.4")
6900 (source
6901 (origin
6902 (method git-fetch)
6903 (uri (git-reference
6904 (url "https://github.com/Unidata/netcdf4-python")
6905 (commit (string-append "v" version "rel"))))
6906 (file-name (git-file-name name version))
6907 (sha256
6908 (base32 "0lmapnqc4rivv0nggm8865xpni1gbcg6dc7khf5r0p16jk8gv41c"))))
6909 (build-system pyproject-build-system)
6910 (arguments
6911 (list
6912 ;; tests: Ran 115 tests
6913 #:phases
6914 #~(modify-phases %standard-phases
6915 (add-before 'build 'set-configure-flags
6916 (lambda _
6917 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
6918 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
6919 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
6920 (setenv "USE_NCCONFIG" "0")))
6921 (replace 'check
6922 (lambda* (#:key tests? #:allow-other-keys)
6923 (when tests?
6924 (with-directory-excursion "test"
6925 (setenv "NO_NET" "1")
6926 (setenv "NO_CDL" "1")
6927 (invoke "python" "run_all.py"))))))))
6928 (native-inputs
6929 (list python-cython
6930 python-packaging
6931 python-pytest
6932 python-setuptools
6933 python-setuptools-scm
6934 python-typing-extensions))
6935 (inputs
6936 ;; After python-h5py was built with MPI support it can't be used together
6937 ;; with hdf5 and netcdf built without MPI support tests and load may
6938 ;; brake when python-netcdf4 and python-h5py are used together.
6939 (list netcdf-parallel-openmpi
6940 hdf5-parallel-openmpi
6941 zlib))
6942 (propagated-inputs
6943 (list python-certifi
6944 python-cftime
6945 python-mpi4py
6946 python-numpy))
6947 (home-page "https://github.com/Unidata/netcdf4-python")
6948 (synopsis "Python/numpy interface to the netCDF library")
6949 (description "Netcdf4-python is a Python interface to the netCDF C
6950library. netCDF version 4 has many features not found in earlier
6951versions of the library and is implemented on top of HDF5. This module
6952can read and write files in both the new netCDF 4 and the old netCDF 3
6953format, and can create files that are readable by HDF5 clients. The
6954API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
6955to users of that module.")
6956 ;; The software is mainly ISC, but includes some files covered
6957 ;; by the Expat license.
6958 (license (list license:isc license:expat))))
6959
6960(define-public python-ncclient
6961 (package
6962 (name "python-ncclient")
6963 (version "0.6.19")
6964 (source
6965 (origin
6966 (method git-fetch) ;no tests in PyPI release
6967 (uri (git-reference
6968 (url "https://github.com/ncclient/ncclient")
6969 (commit (string-append "v" version))))
6970 (file-name (git-file-name name version))
6971 (sha256
6972 (base32
6973 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
6974 (build-system pyproject-build-system)
6975 (native-inputs
6976 (list python-pytest
6977 python-setuptools
6978 python-wheel))
6979 (propagated-inputs
6980 (list python-lxml
6981 python-paramiko))
6982 (home-page "https://github.com/ncclient/ncclient")
6983 (synopsis "Python library for NETCONF clients")
6984 (description "@code{ncclient} is a Python library that facilitates
6985client-side scripting and application development around the NETCONF
6986protocol.")
6987 (license license:asl2.0)))
6988
6989(define-public python-ncls
6990 (package
6991 (name "python-ncls")
6992 (version "0.0.68")
6993 (source (origin
6994 (method url-fetch)
6995 (uri (pypi-uri "ncls" version))
6996 (sha256
6997 (base32
6998 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
6999 (build-system pyproject-build-system)
7000 (arguments
7001 ;; Those tests fail with warnings (not errors) for the Numpy update.
7002 ;; Remove it at next python-team iteration.
7003 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
7004 "--ignore=examples/test_find_overlap_list.py")))
7005 (native-inputs (list python-cython
7006 python-pandas
7007 python-pytest
7008 python-setuptools
7009 python-wheel))
7010 (propagated-inputs (list python-numpy))
7011 (home-page "https://github.com/endrebak/ncls")
7012 (synopsis "Nested containment list data structure")
7013 (description
7014 "This package provides a wrapper for the nested containment list data
7015structure. It is a static interval-tree that is fast for both construction
7016and lookups.")
7017 (license license:bsd-3)))
7018
7019(define-public python-license-expression
7020 (package
7021 (name "python-license-expression")
7022 (version "30.1.0")
7023 (source
7024 (origin
7025 (method url-fetch)
7026 (uri (pypi-uri "license-expression" version))
7027 (sha256
7028 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
7029 (build-system pyproject-build-system)
7030 (native-inputs
7031 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
7032 (propagated-inputs
7033 (list python-boolean.py))
7034 (home-page "https://github.com/nexB/license-expression")
7035 (synopsis "Apply boolean logic to license expressions")
7036 (description
7037 "This Python module defines a tiny language to evaluate and compare
7038license expressions using boolean logic. Logical combinations of licenses can
7039be tested for equality, containment, and equivalence. They can be normalised
7040and simplified. It supports SPDX license expressions as well as other naming
7041conventions and aliases in the same expression.")
7042 (license license:gpl2+)))
7043
7044(define-public python-limits
7045 (package
7046 (name "python-limits")
7047 (version "5.8.0")
7048 (source
7049 (origin
7050 (method git-fetch)
7051 (uri (git-reference
7052 (url "https://github.com/alisaifee/limits")
7053 (commit version)))
7054 (file-name (git-file-name name version))
7055 (sha256
7056 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
7057 (build-system pyproject-build-system)
7058 (arguments
7059 (list
7060 ;; tests: 155 passed, 620 deselected
7061 #:test-flags
7062 #~(list
7063 ;; The test suite spawns storages in Docker.
7064 "-k" (simple-format #f "not (~a)"
7065 (string-join
7066 '("lazy_dependency" ;importing redis
7067 "memcache"
7068 "mongo"
7069 "redis"
7070 "valkey")
7071 " or "))
7072 "--ignore=tests/benchmarks")
7073 #:phases
7074 #~(modify-phases %standard-phases
7075 (add-before 'check 'adjust-tests
7076 (lambda _
7077 (substitute* "pytest.ini"
7078 ((".*--cov=.*") "")
7079 ((".*-K.*") ""))
7080 (substitute* (find-files "tests" "\\.py$")
7081 (("import pymemcache.*") "")
7082 (("import pymongo.*") "")
7083 (("import redis.*") "")
7084 (("import valkey.*") "")
7085 ;; Lazy fixtures are only used for storages.
7086 (("from pytest_lazy_fixtures import lf.*") "")
7087 (("lf\\((.+)\\)" all fixture) fixture))
7088 (substitute* "tests/test_storage.py"
7089 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
7090 (propagated-inputs (list python-deprecated python-packaging))
7091 (native-inputs
7092 (list python-flaky
7093 python-hatch-vcs
7094 python-hatchling
7095 python-pytest
7096 python-pytest-asyncio))
7097 (home-page "https://limits.readthedocs.io/")
7098 (synopsis "Rate limiting utilities")
7099 (description
7100 "This package provides a Python library to perform rate limiting with
7101commonly used storage backends.")
7102 (license license:expat)))
7103
7104(define-public python-fb-re2
7105 (package
7106 (name "python-fb-re2")
7107 (version "1.0.7")
7108 (source
7109 (origin
7110 (method git-fetch)
7111 (uri (git-reference
7112 (url "https://github.com/facebook/pyre2")
7113 (commit (string-append "v" version))))
7114 (file-name (git-file-name name version))
7115 (sha256
7116 (base32
7117 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
7118 (build-system pyproject-build-system)
7119 (arguments
7120 (list
7121 #:phases
7122 #~(modify-phases %standard-phases
7123 (add-after 'unpack 'fix-tests
7124 (lambda _
7125 (substitute* "tests/test_match.py"
7126 (("assertRaisesRegexp")
7127 "assertRaisesRegex")))))))
7128 (native-inputs
7129 (list python-pytest python-setuptools))
7130 (inputs
7131 (list re2))
7132 (home-page "https://github.com/facebook/pyre2")
7133 (synopsis "Python wrapper for RE2")
7134 (description "This package provides a Python extension that wraps Google's
7135RE2 regular expression library. It implements many of the features of
7136Python's built-in @code{re} module with compatible interfaces.")
7137 (license license:bsd-3)))
7138
7139(define-public python-filelock
7140 ;; Try to update simultaneously with the bootstrap version in
7141 ;; (gnu packages python-build).
7142 (package
7143 (name "python-filelock")
7144 (version "3.16.1")
7145 (source
7146 (origin
7147 (method url-fetch)
7148 (uri (pypi-uri "filelock" version))
7149 (sha256
7150 (base32
7151 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
7152 (build-system pyproject-build-system)
7153 (arguments
7154 (list
7155 ;; Break cycle with virtualenv.
7156 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
7157 (native-inputs
7158 (list python-hatch-vcs
7159 python-hatchling
7160 python-pytest
7161 python-pytest-asyncio
7162 python-pytest-mock
7163 python-setuptools-scm))
7164 (home-page "https://github.com/tox-dev/py-filelock")
7165 (synopsis "Platform independent file lock")
7166 (description "@code{filelock} contains a single module implementing
7167a platform independent file lock in Python, which provides a simple way of
7168inter-process communication.")
7169 (license license:unlicense)))
7170
7171(define-public python-filelock-next
7172 (package
7173 (inherit python-filelock)
7174 (name "python-filelock")
7175 (version "3.20.0")
7176 (source
7177 (origin
7178 (method url-fetch)
7179 (uri (pypi-uri "filelock" version))
7180 (sha256
7181 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
7182 (native-inputs
7183 (list python-hatch-vcs
7184 python-hatchling
7185 python-pytest
7186 python-pytest-asyncio
7187 python-pytest-mock
7188 python-pytest-timeout))))
7189
7190(define-public python-seedir
7191 (package
7192 (name "python-seedir")
7193 (version "0.5.0")
7194 (source
7195 (origin
7196 (method url-fetch)
7197 (uri (pypi-uri "seedir" version))
7198 (sha256
7199 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
7200 (build-system pyproject-build-system)
7201 (propagated-inputs (list python-natsort))
7202 (native-inputs (list python-pytest python-setuptools python-wheel))
7203 (home-page "https://github.com/earnestt1234/seedir")
7204 (synopsis
7205 "Package for creating, editing, and reading folder tree diagrams.")
7206 (description
7207 "This is a package for creating, editing, and reading folder tree
7208diagrams.")
7209 (license license:expat)))
7210
7211(define-public python-semantic-version
7212 (package
7213 (name "python-semantic-version")
7214 (version "2.10.0")
7215 (source
7216 (origin
7217 (method url-fetch)
7218 (uri (pypi-uri "semantic_version" version))
7219 (sha256
7220 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
7221 (build-system pyproject-build-system)
7222 (arguments (list #:test-backend #~'nose2))
7223 (native-inputs
7224 (list python-nose2
7225 python-setuptools))
7226 (home-page "https://github.com/rbarrois/python-semanticversion")
7227 (synopsis "Semantic versioning module for Python")
7228 (description
7229 "The @code{semantic_version} class is a small library for handling
7230@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
7231
7232It can compare versions, generate a new version that represents a bump in one
7233of the version levels, and check whether any given string is a proper semantic
7234version identifier.")
7235 (license license:bsd-3)))
7236
7237(define-public python-serpent
7238 (package
7239 (name "python-serpent")
7240 (version "1.41")
7241 (source
7242 (origin
7243 (method git-fetch)
7244 (uri (git-reference
7245 (url "https://github.com/irmen/Serpent")
7246 (commit (string-append "serpent-" version))))
7247 (file-name (git-file-name name version))
7248 (sha256
7249 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
7250 (build-system pyproject-build-system)
7251 (arguments (list #:test-backend #~'unittest
7252 #:test-flags #~(list "discover" "-s" "tests")))
7253 (native-inputs
7254 (list python-attrs python-pytz python-setuptools))
7255 (home-page "https://github.com/irmen/Serpent")
7256 (synopsis "Serializer for literal Python expressions")
7257 (description
7258 "Serpent provides @code{ast.literal_eval()}-compatible object tree
7259serialization. It serializes an object tree into bytes (an utf-8 encoded
7260string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
7261to rebuild the original object tree.
7262
7263Because only safe literals are encoded, it is safe to send serpent data to
7264other machines, such as over the network.")
7265 (license license:expat)))
7266
7267(define-public python-setuptools-declarative-requirements
7268 (package
7269 (name "python-setuptools-declarative-requirements")
7270 (version "1.3.0")
7271 (source
7272 (origin
7273 (method url-fetch)
7274 (uri (pypi-uri "setuptools-declarative-requirements" version))
7275 (sha256
7276 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
7277 (build-system pyproject-build-system)
7278 (arguments
7279 (list #:tests? #f)) ;require dated inputs
7280 (native-inputs
7281 (list python-setuptools-scm))
7282 (propagated-inputs
7283 (list python-setuptools))
7284 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
7285 (synopsis "File support for setuptools declarative setup.cfg")
7286 (description
7287 "This package provides file support for setuptools declarative
7288@code{setup.cfg}.")
7289 (license license:asl2.0)))
7290
7291(define-public python-humanfriendly
7292 (package
7293 (name "python-humanfriendly")
7294 (version "10.0")
7295 (source
7296 (origin
7297 (method git-fetch)
7298 (uri (git-reference
7299 (url "https://github.com/xolox/python-humanfriendly")
7300 (commit version)))
7301 (file-name (git-file-name name version))
7302 (sha256
7303 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
7304 (build-system pyproject-build-system)
7305 (arguments
7306 (list
7307 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
7308 #:tests? #f))
7309 (native-inputs (list python-setuptools))
7310 (home-page "https://humanfriendly.readthedocs.io")
7311 (synopsis "Human-friendly input and output in Python")
7312 (description
7313 "The functions and classes in @code{humanfriendly} can be used to make
7314text interfaces more user-friendly. It includes tools to parse and format
7315numbers, file sizes, and timespans, timers for long-running operations, menus
7316to allow the user to choose from a list of options, and terminal interaction
7317helpers.")
7318 (license license:expat)))
7319
7320(define-public python-calver
7321 (package
7322 (name "python-calver")
7323 (version "2022.06.26")
7324 (source
7325 (origin
7326 (method git-fetch)
7327 (uri (git-reference
7328 (url "https://github.com/di/calver")
7329 (commit version)))
7330 (file-name (git-file-name name version))
7331 (sha256
7332 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
7333 (build-system pyproject-build-system)
7334 (native-inputs
7335 (list python-pretend
7336 python-pytest
7337 python-setuptools
7338 python-wheel))
7339 (home-page "https://github.com/di/calver")
7340 (synopsis "Setuptools extension for CalVer package versions")
7341 (description
7342 "The calver package is a setuptools extension for automatically defining
7343your Python package version as a calendar version.")
7344 (license license:asl2.0)))
7345
7346(define-public python-can
7347 (package
7348 (name "python-can")
7349 (version "4.6.1")
7350 (source
7351 (origin
7352 (method git-fetch)
7353 (uri (git-reference
7354 (url "https://github.com/hardbyte/python-can")
7355 (commit (string-append "v" version))))
7356 (file-name (git-file-name name version))
7357 (sha256
7358 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
7359 (build-system pyproject-build-system)
7360 (arguments
7361 (list
7362 #:test-flags
7363 #~(list
7364 ;; TODO: Check if it could be packed:
7365 ;; https://github.com/projectgus/python-canalystii
7366 ;;
7367 ;; Disable tests which require specific CAN drivers we have no
7368 ;; package for in Guix.
7369 "--ignore=test/test_interface_canalystii.py"
7370 ;; These tests fail with "OSError: [Errno 19] No such device".
7371 "-k" "not BasicTestUdpMulticastBusIPv")
7372 #:phases
7373 #~(modify-phases %standard-phases
7374 (add-after 'unpack 'relax-requirements
7375 (lambda _
7376 (substitute* "pyproject.toml"
7377 (("\"wrapt~=.*\"")
7378 "\"wrapt\"")))))))
7379 (propagated-inputs (list python-packaging python-wrapt))
7380 (native-inputs
7381 (list ;; python-canalystii ; Not packed yet
7382 python-hypothesis
7383 python-mock
7384 python-parameterized
7385 python-pyserial
7386 python-pytest
7387 python-pytest-timeout
7388 python-setuptools
7389 python-setuptools-scm))
7390 (home-page "https://github.com/hardbyte/python-can")
7391 (synopsis "Controller Area Network (CAN) interface module for Python")
7392 (description
7393 "This package defines the @code{can} module, which provides controller
7394area network (CAN) support for Python developers; providing common
7395abstractions to different hardware devices, and a suite of utilities for
7396sending and receiving messages on a CAN bus.")
7397 (license license:lgpl3+)))
7398
7399(define-public python-canmatrix
7400 (package
7401 (name "python-canmatrix")
7402 (version "1.2")
7403 (source
7404 (origin
7405 (method git-fetch) ; no tests data in PyPi package
7406 (uri (git-reference
7407 (url "https://github.com/ebroecker/canmatrix")
7408 (commit version)))
7409 (file-name (git-file-name name version))
7410 (sha256
7411 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
7412 (build-system pyproject-build-system)
7413 (native-inputs
7414 (list python-pytest
7415 python-pytest-timeout
7416 python-setuptools
7417 python-wheel))
7418 (propagated-inputs
7419 (list python-attrs
7420 python-canopen
7421 python-click
7422 ;; python-ldfparser
7423 python-lxml
7424 python-openpyxl
7425 python-pyyaml
7426 python-xlrd
7427 python-xlwt))
7428 (home-page "https://github.com/ebroecker/canmatrix")
7429 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
7430 (description
7431 "This package implements a @acronym{CAN, Controller Area Network} matrix
7432object in Python which describes the CAN-communication and its needed objects
7433such as board units, frames, signals, and values. It also includes two
7434command-line tools (@command{canconvert} and @command{cancompare}) for
7435converting and comparing CAN databases.")
7436 (license license:bsd-2)))
7437
7438(define-public python-canopen
7439 (package
7440 (name "python-canopen")
7441 (version "2.4.1")
7442 (source
7443 (origin
7444 (method git-fetch)
7445 (uri (git-reference
7446 (url "https://github.com/canopen-python/canopen")
7447 (commit (string-append "v" version))))
7448 (file-name (git-file-name name version))
7449 (sha256
7450 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
7451 (build-system pyproject-build-system)
7452 (native-inputs (list python-pytest python-setuptools))
7453 (propagated-inputs (list python-can))
7454 (home-page "https://github.com/canopen-python/canopen")
7455 (synopsis "CANopen stack implementation")
7456 (description
7457 "This package provides a Python implementation of the
7458@uref{https://www.can-cia.org/canopen/,CANopen standard} for
7459@acronym{CANs, controller-area networks}. The aim of the project is to
7460support the most common parts of the CiA 301 standard in a simple
7461Pythonic interface. It is mainly targeted for testing and automation
7462tasks rather than a standard compliant master implementation.")
7463 (license license:expat)))
7464
7465(define-public python-diskcache
7466 (package
7467 (name "python-diskcache")
7468 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
7469 ;; Django fixing failing tests.
7470 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
7471 (revision . "0")))
7472 (version (git-version "5.6.3"
7473 (assoc-ref properties 'revision)
7474 (assoc-ref properties 'commit)))
7475 (source
7476 (origin
7477 (method git-fetch)
7478 (uri (git-reference
7479 (url "https://github.com/grantjenks/python-diskcache")
7480 (commit (assoc-ref properties 'commit))))
7481 (file-name (git-file-name name version))
7482 (sha256
7483 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
7484 (build-system pyproject-build-system)
7485 (arguments
7486 (list
7487 #:phases
7488 #~(modify-phases %standard-phases
7489 (add-after 'unpack 'fix-pytest-config
7490 (lambda _
7491 ;; Prevent full threads utilization.
7492 (substitute* "tox.ini"
7493 (("-n auto") "")))))))
7494 (native-inputs
7495 (list python-django
7496 python-pytest
7497 python-setuptools))
7498 (home-page "https://www.grantjenks.com/docs/diskcache/")
7499 (synopsis "Disk and file backed cache library")
7500 (description "DiskCache is a disk and file backed persistent cache.")
7501 (license license:asl2.0)))
7502
7503(define-public python-optparse-pretty
7504 (package
7505 (name "python-optparse-pretty")
7506 (version "0.1.1")
7507 (source
7508 (origin
7509 (method url-fetch)
7510 (uri (pypi-uri "optparse-pretty" version))
7511 (sha256
7512 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7513 (build-system pyproject-build-system)
7514 (arguments (list #:tests? #false)) ;There are none
7515 (native-inputs (list python-setuptools python-wheel))
7516 (home-page "https://github.com/gvalkov/optparse-pretty")
7517 (synopsis "Compact help formatter for optparse")
7518 (description
7519 "This module provides two help formatters for optparse. They provide
7520terser and more customizable option formatting in comparison to the default
7521help formatter.")
7522 (license license:bsd-3)))
7523
7524(define-public python-orjson
7525 (package
7526 (name "python-orjson")
7527 (version "3.9.7")
7528 (source (origin
7529 (method url-fetch)
7530 (uri (pypi-uri "orjson" version))
7531 (sha256
7532 (base32
7533 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7534 (build-system cargo-build-system)
7535 (arguments
7536 (list
7537 #:imported-modules `(,@%cargo-build-system-modules
7538 ,@%pyproject-build-system-modules)
7539 #:modules '((guix build cargo-build-system)
7540 ((guix build pyproject-build-system) #:prefix py:)
7541 (guix build utils))
7542 #:phases
7543 #~(modify-phases %standard-phases
7544 (add-after 'build 'build-python-module
7545 (assoc-ref py:%standard-phases 'build))
7546 (add-after 'build-python-module 'install-python-module
7547 (assoc-ref py:%standard-phases 'install)))
7548 #:install-source? #false))
7549 (inputs
7550 (cons maturin (cargo-inputs 'python-orjson)))
7551 (native-inputs
7552 (list python-wrapper))
7553 (home-page "https://github.com/ijl/orjson")
7554 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7555 (description "Orjson is a fast, correct JSON library for Python. It
7556benchmarks as the fastest Python library for JSON and is more correct than the
7557standard @code{json} library or other third-party libraries. It serializes
7558dataclass, datetime, numpy, and UUID instances natively.")
7559 ;; Either of these licenses
7560 (license (list license:asl2.0 license:expat))))
7561
7562(define-public python-overrides
7563 (package
7564 (name "python-overrides")
7565 (version "7.7.0")
7566 (source
7567 (origin
7568 (method url-fetch)
7569 (uri (pypi-uri "overrides" version))
7570 (sha256
7571 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7572 (build-system pyproject-build-system)
7573 (native-inputs (list python-pytest python-setuptools python-wheel))
7574 (home-page "https://github.com/mkorpela/overrides")
7575 (synopsis "Decorator to detect mismatch when overriding a method")
7576 (description
7577 "This package provides a decorator to automatically detect mismatch when
7578overriding a method.")
7579 (license license:asl2.0)))
7580
7581(define-public python-argparse-addons
7582 (package
7583 (name "python-argparse-addons")
7584 (version "0.12.0")
7585 (source
7586 (origin
7587 (method url-fetch)
7588 (uri (pypi-uri "argparse_addons" version))
7589 (sha256
7590 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7591 (build-system pyproject-build-system)
7592 (native-inputs
7593 (list python-pytest python-setuptools))
7594 (home-page "https://github.com/eerimoq/argparse_addons")
7595 (synopsis "Extensions for Python's @code{argparse} library")
7596 (description "This Python library provides additional types and actions
7597for the standard @code{argparse} library.")
7598 (license license:expat)))
7599
7600(define-public python-bitstruct
7601 (package
7602 (name "python-bitstruct")
7603 (version "8.21.0")
7604 (source
7605 (origin
7606 (method url-fetch)
7607 (uri (pypi-uri "bitstruct" version))
7608 (sha256
7609 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7610 (build-system pyproject-build-system)
7611 (native-inputs
7612 (list python-pytest
7613 python-setuptools
7614 python-wheel))
7615 (home-page "https://github.com/eerimoq/bitstruct")
7616 (synopsis "Python values to and C bit field structs converter")
7617 (description
7618 "This module performs conversions between Python values and C bit field
7619structs represented as Python byte strings. It is intended to have a similar
7620interface as the @code{struct} module from Python, but working on bits instead
7621of primitive data types like @code{char}, @code{int}, etc.")
7622 (license license:expat)))
7623
7624(define-public python-cantools
7625 (package
7626 (name "python-cantools")
7627 (version "40.5.0")
7628 (source
7629 (origin
7630 (method git-fetch)
7631 (uri (git-reference
7632 (url "https://github.com/eerimoq/cantools")
7633 (commit version)))
7634 (file-name (git-file-name name version))
7635 (sha256
7636 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7637 (build-system pyproject-build-system)
7638 (native-inputs
7639 (list python-freezegun
7640 python-parameterized
7641 python-pytest
7642 python-setuptools
7643 python-setuptools-scm))
7644 (propagated-inputs
7645 (list python-argparse-addons
7646 python-bitstruct
7647 python-can
7648 python-crccheck
7649 python-diskcache
7650 python-matplotlib
7651 python-textparser))
7652 (home-page "https://github.com/eerimoq/cantools")
7653 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7654 (description
7655 "This package includes Controller Area Network (CAN) related tools that
7656can be used to:
7657@itemize
7658@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7659@item encode and decode CAN messages
7660@item multiplex simple and extended signals
7661@item diagnose DID encoding and decoding
7662@item dump the CAN decoder output
7663@item test CAN nodes
7664@item generate C source code
7665@item monitor the CAN bus
7666@end itemize")
7667 (license license:expat)))
7668
7669(define-public python-capturer
7670 (package
7671 (name "python-capturer")
7672 (version "3.0")
7673 (source
7674 (origin
7675 (method git-fetch)
7676 (uri (git-reference
7677 (url "https://github.com/xolox/python-capturer")
7678 (commit version)))
7679 (file-name (git-file-name name version))
7680 (sha256
7681 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7682 (build-system pyproject-build-system)
7683 (native-inputs (list python-pytest python-setuptools))
7684 (propagated-inputs (list python-humanfriendly))
7685 (home-page "https://capturer.readthedocs.io")
7686 (synopsis "Capture stdout and stderr streams of the current process")
7687 (description
7688 "The capturer package makes it easy to capture the stdout and stderr
7689streams of the current process and subprocesses. Output can be relayed
7690to the terminal in real time but is also available to the Python program
7691for additional processing.")
7692 (license license:expat)))
7693
7694(define-public python-fastprogress
7695 (package
7696 (name "python-fastprogress")
7697 (version "1.0.3")
7698 (source (origin
7699 (method git-fetch)
7700 (uri (git-reference
7701 (url "https://github.com/fastai/fastprogress")
7702 (commit version)))
7703 (file-name (git-file-name name version))
7704 (sha256
7705 (base32
7706 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7707 (build-system pyproject-build-system)
7708 (arguments
7709 (list #:tests? #f ;there are no tests
7710 #:phases #~(modify-phases %standard-phases
7711 ;; XXX: Fails with: "In procedure utime: No such file
7712 ;; or directory".
7713 (delete 'ensure-no-mtimes-pre-1980))))
7714 (native-inputs (list python-setuptools python-wheel))
7715 (home-page "https://github.com/fastai/fastprogress")
7716 (synopsis "Progress bar for Jupyter Notebook and console")
7717 (description
7718 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7719 (license license:asl2.0)))
7720
7721(define-public python-coloredlogs
7722 (package
7723 (name "python-coloredlogs")
7724 (version "15.0.1")
7725 (source
7726 (origin
7727 (method git-fetch)
7728 (uri (git-reference
7729 (url "https://github.com/xolox/python-coloredlogs")
7730 (commit version)))
7731 (file-name (git-file-name name version))
7732 (sha256
7733 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7734 (build-system pyproject-build-system)
7735 (arguments
7736 (list
7737 #:test-flags
7738 #~(list "-k"
7739 (string-join
7740 (list "not test_auto_install" ; Unclear why this fails.
7741 ;; XXX: Require a "script" executable.
7742 "test_cli_conversion"
7743 "test_empty_conversion"
7744 "test_output_interception")
7745 " and not "))))
7746 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7747 (propagated-inputs (list python-capturer))
7748 (home-page "https://coloredlogs.readthedocs.io")
7749 (synopsis "Colored stream handler for Python's logging module")
7750 (description
7751 "The @code{coloredlogs} package enables colored terminal output for
7752Python's logging module. The @code{ColoredFormatter} class inherits from
7753@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7754messages in color.")
7755 (license license:expat)))
7756
7757(define-public python-editorconfig
7758 (package
7759 (name "python-editorconfig")
7760 (version "0.17.1")
7761 (source
7762 (origin
7763 (method git-fetch)
7764 (uri (git-reference
7765 (url "https://github.com/editorconfig/editorconfig-core-py")
7766 (commit (string-append "v" version))
7767 (recursive? #t)))
7768 (file-name (git-file-name name version))
7769 (sha256
7770 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
7771 (build-system pyproject-build-system)
7772 (arguments
7773 (list
7774 #:phases
7775 #~(modify-phases %standard-phases
7776 (replace 'check
7777 (lambda _
7778 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
7779 (invoke "cmake" ".")
7780 (invoke "ctest" "."))))))
7781 (native-inputs (list cmake python-setuptools python-wheel))
7782 (home-page "https://editorconfig.org/")
7783 (synopsis "EditorConfig bindings for python")
7784 (description "The EditorConfig project consists of a file format for
7785defining coding styles and a collection of text editor plugins that enable
7786editors to read the file format and adhere to defined styles. EditorConfig
7787files are easily readable and they work nicely with version control systems.")
7788 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
7789 (license (list license:bsd-2 license:psfl))))
7790
7791(define-public dosage
7792 (package
7793 (name "dosage")
7794 (version "3.3")
7795 (source
7796 (origin
7797 (method git-fetch)
7798 (uri (git-reference
7799 (url "https://github.com/webcomics/dosage")
7800 (commit version)))
7801 (file-name (git-file-name name version))
7802 (sha256
7803 (base32 "1111hs9f9k0w303vgidlxdngbfp71x6fnc5lfb62jc5kw2sgfn6z"))))
7804 (build-system pyproject-build-system)
7805 (arguments
7806 ;; It requires additional modules for integration tests.
7807 (list #:test-flags #~(list "--ignore=tests/modules/")))
7808 (native-inputs
7809 (list python-pytest
7810 python-responses
7811 python-setuptools
7812 python-setuptools-scm))
7813 (inputs
7814 (list python-imagesize
7815 python-importlib-resources
7816 python-lxml
7817 python-platformdirs
7818 python-requests
7819 python-rich))
7820 (home-page "https://github.com/webcomics/dosage")
7821 (synopsis "Comic strip downloader and archiver")
7822 (description
7823 "Dosage is designed to keep a local copy of specific webcomics and other
7824picture-based content such as Picture of the Day sites. With the
7825@command{dosage} command-line script you can get the latest strip of a
7826webcomic, catch-up to the last strip downloaded, or download a strip for a
7827particular date or index, if possible.")
7828 (license license:expat)))
7829
7830(define-public python-etcd3
7831 (package
7832 (name "python-etcd3")
7833 (version "0.12.0")
7834 (source
7835 (origin
7836 (method git-fetch)
7837 (uri (git-reference
7838 (url "https://github.com/kragniz/python-etcd3")
7839 (commit (string-append "v" version))))
7840 (file-name (git-file-name name version))
7841 (sha256
7842 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
7843 (build-system pyproject-build-system)
7844 (arguments
7845 (list
7846 ;; XXX: Tests require the etcd package.
7847 #:tests? #f
7848 #:test-backend #~'custom
7849 #:test-flags ; Taken from tox.ini.
7850 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
7851 (propagated-inputs
7852 (list python-grpcio python-protobuf python-six python-tenacity))
7853 (native-inputs
7854 (list python-mock python-pifpaf python-pytest python-setuptools))
7855 (home-page "https://github.com/kragniz/python-etcd3")
7856 (synopsis "Python client for the etcd3 API")
7857 (description
7858 "This package provide a Python client for the @code{etcd3} API.")
7859 (license license:asl2.0)))
7860
7861(define-public python-et-xmlfile
7862 (package
7863 (name "python-et-xmlfile")
7864 (version "2.0.0")
7865 (source
7866 (origin
7867 ;; Use a checkout because the PyPI archive does not contain tests.
7868 (method hg-fetch)
7869 (uri (hg-reference
7870 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
7871 (changeset version)))
7872 (file-name (string-append name "-" version "-checkout"))
7873 (sha256
7874 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
7875 (build-system pyproject-build-system)
7876 (native-inputs
7877 (list python-pytest
7878 python-lxml
7879 python-setuptools))
7880 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
7881 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
7882 (description "This Python library is based upon the @code{xmlfile} module
7883from @code{lxml}. It aims to provide a low memory, compatible implementation
7884of @code{xmlfile}.")
7885 (license license:expat)))
7886
7887(define-public python-omero-py
7888 (let ((omero-blitz-version "5.8.2"))
7889 (package
7890 (name "python-omero-py")
7891 (version "5.20.0")
7892 (source
7893 (origin
7894 (method git-fetch)
7895 (uri (git-reference
7896 (url "https://github.com/ome/omero-py")
7897 (commit (string-append "v" version))))
7898 (file-name (git-file-name name version))
7899 (sha256
7900 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
7901 (build-system pyproject-build-system)
7902 (arguments
7903 (list
7904 #:test-flags
7905 #~(list
7906 "-m" "not broken" "-rf" "test" "-s"
7907 ;; TestImport tries to download Java things; TestSessions
7908 ;; and TestBuildQuery require networking.
7909 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
7910 #:modules '((guix build pyproject-build-system)
7911 (guix build utils)
7912 (ice-9 match)
7913 (srfi srfi-1)
7914 (srfi srfi-26))
7915 #:phases
7916 #~(modify-phases %standard-phases
7917 (add-after 'unpack 'find-artifacts
7918 (lambda* (#:key inputs #:allow-other-keys)
7919 (let ((zip-file
7920 (match inputs
7921 (((labels . files) ...)
7922 (find (cut string-suffix?
7923 (string-append "omero-blitz-"
7924 #$omero-blitz-version
7925 "-python.zip")
7926 <>)
7927 files)))))
7928 (setenv "ZIP_FILE"
7929 (or zip-file (error "failed to find artifact file"))))))
7930 ;; Some tests need this, such as TestTempFileManager
7931 (add-after 'build 'set-HOME
7932 (lambda _ (setenv "HOME" "/tmp")))
7933 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
7934 ;; module to load.
7935 (delete 'sanity-check)
7936 ;; The argument parser is picky and interprets the "-real" part as
7937 ;; the first argument.
7938 (add-after 'wrap 'rename-executable
7939 (lambda _
7940 (with-directory-excursion (string-append #$output "/bin")
7941 (rename-file ".omero-real" ".omero")
7942 (substitute* "omero"
7943 (("bin/.omero-real") "bin/.omero"))))))))
7944 (propagated-inputs
7945 (list python-appdirs
7946 python-future
7947 python-numpy
7948 python-pillow
7949 python-pyyaml
7950 python-requests
7951 python-tables
7952 python-zeroc-ice-3.6))
7953 (native-inputs
7954 (list python-portalocker
7955 python-pytest
7956 python-pytest-mock
7957 python-pytest-rerunfailures
7958 python-pytest-xdist
7959 python-setuptools
7960 python-wheel
7961 unzip
7962 (origin
7963 (method url-fetch)
7964 (uri (format #f "\
7965https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
7966openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
7967 omero-blitz-version
7968 omero-blitz-version))
7969 (sha256
7970 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
7971 (home-page "https://github.com/ome/omero-py")
7972 (synopsis "Python bindings to the OMERO.blitz server")
7973 (description "This package provides Python bindings to the OMERO.blitz
7974server.")
7975 (license license:gpl2))))
7976
7977(define-public python-openpyxl
7978 (package
7979 (name "python-openpyxl")
7980 (version "3.1.5")
7981 (source
7982 (origin
7983 (method hg-fetch)
7984 (uri (hg-reference
7985 (url "https://foss.heptapod.net/openpyxl/openpyxl")
7986 (changeset version)))
7987 (file-name (string-append name "-" version "-checkout"))
7988 (sha256
7989 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
7990 (build-system pyproject-build-system)
7991 (arguments
7992 (list
7993 ;; tests: 2577 passed, 17 skipped, 4 deselected, 7 xfailed
7994 #:test-flags
7995 #~(list (string-append "--deselect=openpyxl/xml/tests/"
7996 "test_functions.py::test_iterparse"))))
7997 (native-inputs
7998 (list python-lxml
7999 python-pillow
8000 python-pytest
8001 python-setuptools))
8002 (propagated-inputs
8003 (list python-et-xmlfile))
8004 (home-page "https://openpyxl.readthedocs.io")
8005 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
8006 (description
8007 "This Python library allows reading and writing to the Excel XLSX, XLSM,
8008XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
8009standard.")
8010 (license license:expat)))
8011
8012(define-public python-sinfo
8013 (package
8014 (name "python-sinfo")
8015 (version "1.0.1")
8016 (source
8017 (origin
8018 (method git-fetch)
8019 (uri (git-reference
8020 (url "https://gitlab.com/joelostblom/session_info")
8021 (commit (string-append "v" version))))
8022 (file-name (git-file-name name version))
8023 (sha256
8024 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
8025 (build-system pyproject-build-system)
8026 (arguments
8027 (list #:tests? #f)) ; no tests in PyPI or Git
8028 (native-inputs
8029 (list python-setuptools))
8030 (propagated-inputs
8031 (list python-stdlib-list))
8032 (home-page "https://gitlab.com/joelostblom/session_info")
8033 (synopsis "Output module version information loaded in a Python session")
8034 (description "This package outputs version information for modules loaded
8035in the current session, Python, and the OS.")
8036 (license license:bsd-3)))
8037
8038(define-public python-schedule
8039 (package
8040 (name "python-schedule")
8041 (version "1.2.2")
8042 (source
8043 (origin
8044 (method url-fetch)
8045 (uri (pypi-uri "schedule" version))
8046 (sha256
8047 (base32
8048 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
8049 (build-system pyproject-build-system)
8050 (native-inputs
8051 (list python-pytest python-setuptools python-wheel))
8052 (home-page "https://github.com/dbader/schedule")
8053 (synopsis "Schedule periodic function calls in Python")
8054 (description
8055 "Schedule is an in-process scheduler for periodic jobs that uses the
8056builder pattern for configuration. Schedule lets you run Python functions (or
8057any other callable) periodically at pre-determined intervals using a simple,
8058human-friendly syntax.")
8059 (license license:expat)))
8060
8061;; XXX: This project is unmaintained since 2020, see:
8062;; <https://github.com/scour-project/scour/issues/321>.
8063;;
8064;; The only user is Inkscape, see:
8065;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
8066(define-public python-scour
8067 (package
8068 (name "python-scour")
8069 (version "0.38.2")
8070 (source
8071 (origin
8072 (method git-fetch)
8073 (uri
8074 (git-reference
8075 (url "https://gitlab.com/inkscape/extras/scour")
8076 (commit
8077 (string-append "v" version))))
8078 (file-name (git-file-name name version))
8079 (sha256
8080 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
8081 (build-system pyproject-build-system)
8082 (arguments
8083 (list #:test-backend #~'custom
8084 #:test-flags #~(list "test_scour.py")))
8085 (native-inputs
8086 (list python-setuptools))
8087 (propagated-inputs
8088 (list python-six))
8089 (home-page "https://gitlab.com/inkscape/extras/scour")
8090 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
8091 (description
8092 "The goal of Scour is to output a file that renders identically at a
8093fraction of the size by removing a lot of redundant information created by
8094most SVG editors. Optimization options are typically lossless but can be
8095tweaked for more aggressive cleaning.")
8096 (license license:asl2.0)))
8097
8098(define-public python-mechanize
8099 (package
8100 (name "python-mechanize")
8101 (version "0.4.10")
8102 (source
8103 (origin
8104 (method url-fetch)
8105 (uri (pypi-uri "mechanize" version))
8106 (sha256
8107 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
8108 (build-system pyproject-build-system)
8109 (arguments
8110 ;; XXX: Unclear why tests are failing.
8111 (list #:tests? #f
8112 #:phases
8113 #~(modify-phases %standard-phases
8114 (add-before 'check 'configure-tests
8115 (lambda _
8116 (setenv "GUIX_PYTHONPATH"
8117 (string-append (getcwd) "/test-tools:"
8118 (getenv "GUIX_PYTHONPATH"))))))))
8119 (native-inputs
8120 (list python-html5-parser
8121 python-html5lib
8122 python-lxml
8123 python-service-identity
8124 python-setuptools
8125 python-six
8126 python-twisted
8127 python-wheel))
8128 (propagated-inputs
8129 (list python-html5lib))
8130 (home-page "https://github.com/python-mechanize/mechanize")
8131 (synopsis
8132 "Stateful programmatic web browsing in Python")
8133 (description
8134 "Mechanize implements stateful programmatic web browsing in Python,
8135after Andy Lester’s Perl module WWW::Mechanize.")
8136 (license license:bsd-3)))
8137
8138(define-public python-mediapy
8139 (package
8140 (name "python-mediapy")
8141 (version "1.2.6")
8142 (source
8143 (origin
8144 (method git-fetch)
8145 (uri (git-reference
8146 (url "https://github.com/google/mediapy")
8147 (commit (string-append "v" version))))
8148 (file-name (git-file-name name version))
8149 (sha256
8150 (base32 "0gpbn1bqm6sp692fg7acs3l46xjr70frh3jv4cp3lbixfqmfb3lc"))))
8151 (build-system pyproject-build-system)
8152 (arguments
8153 (list
8154 #:phases
8155 '(modify-phases %standard-phases
8156 (add-after 'unpack 'fix-references
8157 (lambda _
8158 (substitute* "mediapy_test.py"
8159 (("'/bin/bash")
8160 (string-append "'" (which "bash")))))))))
8161 (inputs (list ffmpeg-6))
8162 (propagated-inputs (list python-absl-py
8163 python-ipython
8164 python-matplotlib
8165 python-numpy
8166 python-pillow))
8167 (native-inputs
8168 (list python-flit-core
8169 python-pytest
8170 python-pytest-xdist))
8171 (home-page "https://github.com/google/mediapy")
8172 (synopsis "Read/write/show images and videos in an IPython notebook")
8173 (description "This Python library makes it easy to display images and
8174videos in a notebook.")
8175 (license license:asl2.0)))
8176
8177(define-public python-simpleaudio
8178 (package
8179 (name "python-simpleaudio")
8180 (version "1.0.4")
8181 (source
8182 (origin
8183 (method git-fetch)
8184 (uri (git-reference
8185 (url "https://github.com/hamiltron/py-simple-audio")
8186 (commit version)))
8187 (file-name (git-file-name name version))
8188 (sha256
8189 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
8190 (build-system pyproject-build-system)
8191 (arguments
8192 (list
8193 #:test-backend #~'unittest
8194 #:phases
8195 #~(modify-phases %standard-phases
8196 (add-before 'check 'fix-test-run
8197 (lambda _
8198 (delete-file-recursively "simpleaudio"))))))
8199 (native-inputs (list python-setuptools))
8200 (inputs (list alsa-lib))
8201 (home-page "https://github.com/hamiltron/py-simple-audio")
8202 (synopsis "Simple, asynchronous audio playback for Python 3")
8203 (description
8204 "The @code{simplaudio} package provides cross-platform, dependency-free
8205audio playback capability for Python 3 on OSX, Windows, and Linux.")
8206 (license license:expat))) ; MIT license
8207
8208(define-public python-jsonalias
8209 (package
8210 (name "python-jsonalias")
8211 (version "0.1.2")
8212 (source (origin
8213 (method url-fetch)
8214 (uri (pypi-uri "jsonalias" version))
8215 (sha256
8216 (base32
8217 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
8218 (build-system pyproject-build-system)
8219 (arguments
8220 (list #:tests? #f)) ; no tests in PyPI or Git
8221 (native-inputs
8222 (list python-poetry-core))
8223 (home-page "https://github.com/kevinheavey/jsonalias/")
8224 (synopsis "JSON type alias for Python")
8225 (description
8226 "This package provides a microlibrary that defines a JSON type alias for
8227Python.")
8228 (license license:expat)))
8229
8230(define-public python-jsonargparse
8231 (package
8232 (name "python-jsonargparse")
8233 (version "4.49.0")
8234 (source
8235 (origin
8236 (method git-fetch)
8237 (uri (git-reference
8238 (url "https://github.com/omni-us/jsonargparse/")
8239 (commit (string-append "v" version))))
8240 (file-name (git-file-name name version))
8241 (sha256
8242 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
8243 (build-system pyproject-build-system)
8244 (propagated-inputs
8245 (list python-pyyaml))
8246 (native-inputs
8247 (list python-attrs
8248 python-pydantic
8249 python-pytest
8250 python-requests
8251 python-responses
8252 python-setuptools
8253 python-types-pyyaml
8254 python-types-requests))
8255 (home-page "https://github.com/omni-us/jsonargparse/")
8256 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
8257 (description
8258 "This package lets you implement minimal boilerplate CLIs derived from
8259type hints and parse from command line, config files and environment
8260variables.")
8261 (license license:expat)))
8262
8263(define-public python-pymarshal
8264 (package
8265 (name "python-pymarshal")
8266 (version "2.2.3")
8267 (source (origin
8268 (method url-fetch)
8269 (uri (pypi-uri "pymarshal" version))
8270 (sha256
8271 (base32
8272 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
8273 (build-system pyproject-build-system)
8274 (arguments
8275 ;; Test fails with this error:
8276 ;; "CovReportWarning: Failed to generate report: No data to report."
8277 (list #:tests? #f))
8278 (native-inputs
8279 (list python-pytest python-setuptools python-wheel))
8280 (propagated-inputs (list python-bson python-pyyaml))
8281 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
8282 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
8283 (description "PyMarshal replicates the feature of (un)marshalling structs
8284in Golang.")
8285 (license license:bsd-2)))
8286
8287(define-public python-simplejson
8288 (package
8289 (name "python-simplejson")
8290 (version "3.20.1")
8291 (source
8292 (origin
8293 (method url-fetch)
8294 (uri (pypi-uri "simplejson" version))
8295 (sha256
8296 (base32
8297 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
8298 (build-system pyproject-build-system)
8299 (native-inputs
8300 (list python-pytest python-setuptools))
8301 (home-page "https://simplejson.readthedocs.io/en/latest")
8302 (synopsis
8303 "Json library for Python")
8304 (description
8305 "JSON (JavaScript Object Notation) is a subset of JavaScript
8306syntax (ECMA-262 3rd edition) used as a lightweight data interchange
8307format.
8308
8309Simplejson exposes an API familiar to users of the standard library marshal
8310and pickle modules. It is the externally maintained version of the json
8311library contained in Python 2.6, but maintains compatibility with Python 2.5
8312and (currently) has significant performance advantages, even without using
8313the optional C extension for speedups. Simplejson is also supported on
8314Python 3.3+.")
8315 (license license:x11)))
8316
8317(define-public python-simple-rlp
8318 (package
8319 (name "python-simple-rlp")
8320 (version "0.1.3")
8321 (source
8322 (origin
8323 (method git-fetch)
8324 (uri (git-reference
8325 (url "https://github.com/SamuelHaidu/simple-rlp")
8326 ;; Upstream doesn't tag the git repo.
8327 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
8328 (file-name (git-file-name name version))
8329 (sha256
8330 (base32
8331 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
8332 (build-system pyproject-build-system)
8333 (native-inputs
8334 (list
8335 python-pytest
8336 python-setuptools))
8337 (home-page "https://github.com/SamuelHaidu/simple-rlp")
8338 (synopsis
8339 "Python implementation of RLP (Recursive Length Prefix) encoding")
8340 (description
8341 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
8342Prefix) - Encode and decode data structures.")
8343 (license license:expat)))
8344
8345(define-public python-pyicu
8346 (package
8347 (name "python-pyicu")
8348 (version "2.15.2")
8349 (source
8350 (origin
8351 (method url-fetch)
8352 (uri (pypi-uri "pyicu" version))
8353 (sha256
8354 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
8355 (build-system pyproject-build-system)
8356 (native-inputs
8357 (list pkg-config
8358 python-pytest
8359 python-setuptools
8360 python-six))
8361 (inputs
8362 (list icu4c))
8363 (home-page "https://gitlab.pyicu.org/main/pyicu")
8364 (synopsis "Python extension wrapping the ICU C++ API")
8365 (description
8366 "PyICU is a python extension wrapping the ICU C++ API.")
8367 (license license:x11)))
8368
8369(define-public python-dogtail
8370 (package
8371 (name "python-dogtail")
8372 (version "0.9.11")
8373 (source
8374 (origin
8375 (method url-fetch)
8376 (uri (string-append
8377 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
8378 version ".tar.gz"))
8379 (sha256
8380 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
8381 (build-system pyproject-build-system)
8382 (arguments
8383 (list
8384 #:tests? #f ;TODO Launching dbus for the tests fails
8385 #:phases
8386 #~(modify-phases %standard-phases
8387 (replace 'check
8388 (lambda* (#:key tests? #:allow-other-keys)
8389 (when tests?
8390 (system "Xvfb :1 &")
8391 (setenv "DISPLAY" ":1")
8392 (invoke "dbus-run-session" "--"
8393 "nosetests" "-v" "tests/")))))))
8394 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
8395 (native-inputs
8396 (list python-pynose
8397 gtk+
8398 xorg-server-for-tests
8399 dbus
8400 gsettings-desktop-schemas
8401 gobject-introspection
8402 python-setuptools))
8403 (home-page "https://gitlab.com/dogtail/dogtail/")
8404 (synopsis "GUI test tool and automation framework written in Python")
8405 (description
8406 "Dogtail is a GUI test tool and automation framework written in Python.
8407It uses Accessibility (a11y) technologies to communicate with desktop
8408applications. dogtail scripts are written in Python and executed like any
8409other Python program.")
8410 (license license:gpl2+)))
8411
8412(define-public python-doxyqml
8413 (package
8414 (name "python-doxyqml")
8415 (version "0.5.3")
8416 (source (origin
8417 (method url-fetch)
8418 (uri (pypi-uri "doxyqml" version))
8419 (sha256
8420 (base32
8421 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
8422 (build-system pyproject-build-system)
8423 (arguments
8424 (list #:test-backend #~'custom
8425 #:test-flags #~(list "tests/functional/tests.py")))
8426 (native-inputs
8427 (list python-setuptools))
8428 (home-page "https://agateau.com/projects/doxyqml")
8429 (synopsis "Doxygen input filter for QML files")
8430 (description
8431 "This package provides a Doxygen input filter for QML files.")
8432 (license license:bsd-3)))
8433
8434(define-public python-doxypypy
8435 (package
8436 (name "python-doxypypy")
8437 (version "0.8.8.7")
8438 (source (origin
8439 (method url-fetch)
8440 (uri (pypi-uri "doxypypy" version))
8441 (sha256
8442 (base32
8443 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
8444 (build-system pyproject-build-system)
8445 (arguments
8446 (list
8447 #:test-flags
8448 #~(list "-k" (string-join
8449 ;; Test files are not in UTF-8 format and attmet to
8450 ;; substitute shebang fails, while tests fail with error:
8451 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
8452 ;; File w[387 chars]g.')" !=
8453 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
8454 ;; chars]g.')"
8455 (list "not test_utf16be_bom"
8456 "test_utf16le_bom"
8457 "test_utf32be_bom"
8458 "test_utf32le_bom"
8459 "test_utf8_bom")
8460 " and not "))
8461 #:phases
8462 #~(modify-phases %standard-phases
8463 ;; compile-bytecode phases fails with error: SyntaxError: source
8464 ;; code string cannot contain null bytes.
8465 (add-after 'unpack 'fix-setup.py
8466 (lambda _
8467 (substitute* "setup.py"
8468 (("packages=.*") "packages=['doxypypy'],\n")))))))
8469 (native-inputs
8470 (list python-pytest
8471 python-setuptools
8472 python-wheel))
8473 (propagated-inputs
8474 (list python-chardet))
8475 (home-page "https://github.com/Feneric/doxypypy")
8476 (synopsis "Doxygen filter for Python")
8477 (description
8478 "This package provides a Doxygen filter for Python.")
8479 (license license:gpl2+)))
8480
8481(define-public python-empy
8482 (package
8483 (name "python-empy")
8484 (version "3.3.4")
8485 (source
8486 (origin
8487 (method url-fetch)
8488 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
8489 version ".tar.gz"))
8490 (sha256
8491 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
8492 (build-system pyproject-build-system)
8493 (arguments
8494 (list
8495 #:phases
8496 #~(modify-phases %standard-phases
8497 (replace 'check
8498 (lambda* (#:key tests? #:allow-other-keys)
8499 (when tests?
8500 (invoke "./test.sh")))))))
8501 (native-inputs (list python-setuptools))
8502 (home-page "http://www.alcyone.com/software/empy/")
8503 (synopsis "Templating system for Python")
8504 (description
8505 "EmPy is a system for embedding Python expressions and statements in
8506template text; it takes an EmPy source file, processes it, and produces
8507output. This is accomplished via expansions, which are special signals to the
8508EmPy system and are set off by a special prefix (by default the at sign, @@).
8509EmPy can expand arbitrary Python expressions and statements in this way, as
8510well as a variety of special forms. Textual data not explicitly delimited in
8511this way is sent unaffected to the output, allowing Python to be used in
8512effect as a markup language. Also supported are callbacks via hooks,
8513recording and playback via diversions, and dynamic, chainable filters. The
8514system is highly configurable via command line options and embedded
8515commands.")
8516 (license license:lgpl2.1+)))
8517
8518(define-public python-palettable
8519 (package
8520 (name "python-palettable")
8521 (version "3.3.3")
8522 (source (origin
8523 (method url-fetch)
8524 (uri (pypi-uri "palettable" version))
8525 (sha256
8526 (base32
8527 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8528 (build-system pyproject-build-system)
8529 (native-inputs (list python-pytest python-setuptools python-wheel))
8530 (home-page "https://jiffyclub.github.io/palettable/")
8531 (synopsis "Color palettes for Python")
8532 (description "Palettable (formerly brewer2mpl) is a library of color
8533palettes for Python. It’s written in pure Python with no dependencies, but it
8534can supply color maps for matplotlib. You can use Palettable to customize
8535matplotlib plots or supply colors for a web application.")
8536 (license license:expat)))
8537
8538(define-public python-parse-type
8539 (package
8540 (name "python-parse-type")
8541 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8542 ;; 3.12+; move back to git tag when released.
8543 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8544 (revision . "0")))
8545 (version (git-version "0.6.6"
8546 (assoc-ref properties 'revision)
8547 (assoc-ref properties 'commit)))
8548 (source
8549 (origin
8550 (method git-fetch)
8551 (uri (git-reference
8552 (url "https://github.com/jenisys/parse_type")
8553 (commit (assoc-ref properties 'commit))))
8554 (file-name (git-file-name name version))
8555 (sha256
8556 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8557 (build-system pyproject-build-system)
8558 (arguments
8559 (list
8560 ;; tests: 332 passed, 2 skipped
8561 #:phases
8562 #~(modify-phases %standard-phases
8563 (add-after 'unpack 'fix-pytest-config
8564 ;; To bypass options: --metadata, --html and --junit-xml.
8565 (lambda _
8566 (delete-file "pytest.ini"))))))
8567 (native-inputs
8568 (list python-pytest
8569 python-setuptools
8570 python-setuptools-scm))
8571 (propagated-inputs
8572 (list python-six ;hard dependency
8573 python-parse))
8574 (home-page "https://github.com/jenisys/parse_type")
8575 (synopsis "Extended parse module")
8576 (description "Parse_type extends the python parse module.")
8577 (license license:expat)))
8578
8579(define-public python-parse
8580 (package
8581 (name "python-parse")
8582 (version "1.20.2")
8583 (source
8584 (origin
8585 (method git-fetch)
8586 (uri (git-reference
8587 (url "https://github.com/r1chardj0n3s/parse")
8588 (commit version)))
8589 (file-name (git-file-name name version))
8590 (sha256
8591 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8592 (build-system pyproject-build-system)
8593 (native-inputs (list python-pytest python-setuptools))
8594 (home-page "https://github.com/r1chardj0n3s/parse")
8595 (synopsis "Parse strings")
8596 (description
8597 "Parse strings using a specification based on the Python @code{format()}
8598syntax.")
8599 (license license:x11)))
8600
8601(define-public python-parsley
8602 (package
8603 (name "python-parsley")
8604 (version "1.3")
8605 (source
8606 (origin
8607 (method git-fetch)
8608 (uri (git-reference
8609 (url "https://github.com/pyga/parsley")
8610 (commit version)))
8611 (file-name (git-file-name name version))
8612 (sha256
8613 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8614 (patches
8615 (list
8616 (origin
8617 (method url-fetch)
8618 (uri
8619 (string-append "https://github.com/pyga/parsley/commit/"
8620 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8621 (sha256
8622 (base32
8623 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8624 (build-system pyproject-build-system)
8625 (arguments
8626 (list
8627 #:test-flags #~(list "ometa/test" "terml/test")))
8628 (native-inputs
8629 (list python-pytest
8630 python-setuptools
8631 python-twisted))
8632 (home-page "https://launchpad.net/parsley")
8633 (synopsis "Parsing and pattern matching Python library")
8634 (description
8635 "Parsley is a parsing library using PEG algorithm, so each expression in
8636the grammar rules works like a Python expression. In particular, alternatives
8637are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8638Parsley is an implementation of OMeta, an object-oriented pattern-matching
8639language.")
8640 (license license:expat)))
8641
8642(define-public python-petl
8643 (package
8644 (name "python-petl")
8645 (version "1.7.16")
8646 (source
8647 (origin
8648 (method url-fetch)
8649 (uri (pypi-uri "petl" version))
8650 (sha256
8651 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8652 (build-system pyproject-build-system)
8653 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8654 python-pytest))
8655 (home-page "https://github.com/petl-developers/petl")
8656 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8657processing pipelines.")
8658 (description
8659 "This package provides a library for extracting, transforming and loading
8660tables of data. It can read from and write to databases or files in multiple
8661formats, including:
8662@itemize @bullet
8663@item python objects
8664@item delimited files
8665@item pickle files
8666@item text/XML/JSON/HTML files
8667@item python I/O streams
8668@item Excel XLS/XLSX files
8669@item HDF5 files
8670@end itemize")
8671 (license license:expat)))
8672
8673(define-public python-polib
8674 (package
8675 (name "python-polib")
8676 (version "1.2.0")
8677 (source
8678 (origin
8679 (method git-fetch)
8680 (uri (git-reference
8681 (url "https://github.com/izimobil/polib/")
8682 (commit version)))
8683 (file-name (git-file-name name version))
8684 (sha256
8685 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8686 (build-system pyproject-build-system)
8687 (arguments
8688 (list #:test-backend #~'custom
8689 #:test-flags #~(list "tests/tests.py")))
8690 (native-inputs (list python-setuptools))
8691 (home-page "https://github.com/izimobil/polib/")
8692 (synopsis "Manipulate, create and modify gettext files")
8693 (description
8694 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8695be used to create po files from scratch or to modify existing ones.")
8696 (license license:expat)))
8697
8698(define-public python-polling2
8699 (package
8700 (name "python-polling2")
8701 (version "0.5.0")
8702 (source
8703 (origin
8704 (method git-fetch)
8705 (uri (git-reference
8706 (url "https://github.com/ddmee/polling2")
8707 (commit (string-append "v" version))))
8708 (file-name (git-file-name name version))
8709 (sha256
8710 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8711 (build-system pyproject-build-system)
8712 (arguments
8713 ;; XXX: Additional , in string comparison.
8714 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8715 (native-inputs (list python-mock python-pytest python-setuptools))
8716 (home-page "https://github.com/ddmee/polling2")
8717 (synopsis "Polling utility with many configurable options")
8718 (description "Polling2 is a utility used to wait for a function to return
8719a certain expected condition.")
8720 (license license:expat)))
8721
8722(define-public python-daft
8723 (package
8724 (name "python-daft")
8725 (version "0.1.2")
8726 (source (origin
8727 (method url-fetch)
8728 (uri (pypi-uri "daft" version))
8729 (sha256
8730 (base32
8731 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8732 (build-system pyproject-build-system)
8733 (arguments
8734 (list
8735 #:test-flags
8736 '(list "-k"
8737 (string-append
8738 ;; The following tests compare matplotlib output with
8739 ;; previously generated images. They fail due to minor
8740 ;; differences in where matplotlib places labels.
8741 "not test_bca[png]"
8742 " and not test_classic[png]"
8743 " and not test_deconvolution[png]"
8744 " and not test_exoplanets[png]"
8745 " and not test_fixed[png]"
8746 " and not test_gaia[png]"
8747 " and not test_galex[png]"
8748 " and not test_huey_p_newton[png]"
8749 " and not test_logo[png]"
8750 " and not test_no_circles[png]"
8751 " and not test_no_gray[png]"
8752 " and not test_recursive[png]"
8753 " and not test_thick_lines[png]"
8754 " and not test_weaklensing[png]"
8755 " and not test_wordy[png]"))))
8756 (native-inputs
8757 (list python-pytest
8758 python-setuptools
8759 python-wheel))
8760 (propagated-inputs (list python-matplotlib python-numpy))
8761 (home-page "https://docs.daft-pgm.org/")
8762 (synopsis "PGM rendering library")
8763 (description "Daft is a Python package that uses matplotlib to
8764render pixel-perfect probabilistic graphical models for publication in
8765a journal or on the internet. With a short Python script and an
8766intuitive model-building syntax you can design directed (Bayesian
8767Networks, directed acyclic graphs) and undirected (Markov random fields)
8768models and save them in any formats that matplotlib supports (including
8769PDF, PNG, EPS and SVG).")
8770 (license license:expat)))
8771
8772(define-public python-portalocker
8773 (package
8774 (name "python-portalocker")
8775 (version "2.7.0")
8776 (source (origin
8777 (method url-fetch)
8778 (uri (pypi-uri "portalocker" version))
8779 (sha256
8780 (base32
8781 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
8782 (build-system pyproject-build-system)
8783 (native-inputs (list python-pytest
8784 python-pytest-timeout
8785 python-redis
8786 python-setuptools
8787 python-wheel))
8788 (home-page "https://github.com/WoLpH/portalocker")
8789 (synopsis "Python library for file locking")
8790 (description "Portalocker is a library to provide an easy API to file
8791locking..")
8792 (license license:bsd-3)))
8793
8794(define-public python-poyo
8795 (package
8796 (name "python-poyo")
8797 (version "0.5.0")
8798 (source
8799 (origin
8800 (method url-fetch)
8801 (uri (pypi-uri "poyo" version))
8802 (sha256
8803 (base32
8804 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
8805 (build-system pyproject-build-system)
8806 (native-inputs
8807 (list python-pytest python-setuptools))
8808 (home-page "https://github.com/hackebrot/poyo")
8809 (synopsis "Lightweight YAML Parser for Python")
8810 (description
8811 "This package provides a lightweight YAML Parser for Python. It supports
8812only a chosen subset of the YAML format that is required to parse cookiecutter
8813user configuration files. It does not have support for serializing into YAML
8814and is not compatible with JSON.")
8815 (license license:expat)))
8816
8817(define-public python-expandvars
8818 (package
8819 (name "python-expandvars")
8820 (version "1.1.2")
8821 (source
8822 (origin
8823 (method url-fetch)
8824 (uri (pypi-uri "expandvars" version))
8825 (sha256
8826 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
8827 (build-system pyproject-build-system)
8828 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
8829 (native-inputs
8830 (list python-hatchling python-pytest))
8831 (home-page "https://pypi.org/project/expandvars/")
8832 (synopsis "Expand system variables Unix style")
8833 (description "This module is inspired by GNU bash's variable expansion
8834features. It can be used as an alternative to Python's
8835@code{os.path.expandvars} function. A good use case is reading config files
8836with the flexibility of reading values from environment variables using
8837advanced features like returning a default value if some variable is not
8838defined.")
8839 (license license:expat)))
8840
8841(define-public python-expiringdict
8842 (package
8843 (name "python-expiringdict")
8844 (version "1.2.2")
8845 (source
8846 (origin
8847 (method git-fetch)
8848 (uri (git-reference
8849 (url "https://github.com/mailgun/expiringdict")
8850 (commit (string-append "v" version))))
8851 (file-name (git-file-name name version))
8852 (sha256
8853 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
8854 (build-system pyproject-build-system)
8855 (arguments
8856 ;; Started failing with [email protected], but it's only repr not functionality
8857 ;; so we should be fine.
8858 (list #:test-flags #~'("-v" "-e" "test_repr")))
8859 (native-inputs
8860 (list python-dill python-mock python-pynose python-setuptools))
8861 (home-page "https://github.com/mailgun/expiringdict")
8862 (synopsis "Dictionary with auto-expiring values for caching purposes")
8863 (description
8864 "This Python library provides an ordered dictionary
8865with a maximum capacity and auto-expiring values for caching purposes.
8866Expiration happens on any access, object is locked during cleanup
8867from expired values.")
8868 (license license:asl2.0)))
8869
8870(define-public python-extension-helpers
8871 (package
8872 (name "python-extension-helpers")
8873 (version "1.4.0")
8874 (source
8875 (origin
8876 (method git-fetch) ; no tests in the PyPI tarball
8877 (uri (git-reference
8878 (url "https://github.com/astropy/extension-helpers")
8879 (commit (string-append "v" version))))
8880 (file-name (git-file-name name version))
8881 (sha256
8882 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
8883 (build-system pyproject-build-system)
8884 (arguments
8885 (list
8886 #:test-flags
8887 #~(list "--pyargs" "extension_helpers"
8888 "-k" (string-join
8889 ;; XXX: Tests try to check various compilation options and
8890 ;; fail with some incomparability or trying to download
8891 ;; missing modules.
8892 (list "not test_only_pyproject"
8893 "test_no_setup_py"
8894 "test_limited_api")
8895 " and not "))))
8896 (native-inputs
8897 (list python-pytest
8898 python-setuptools-scm))
8899 (propagated-inputs
8900 (list python-setuptools))
8901 (home-page "https://extension-helpers.readthedocs.io")
8902 (synopsis "Astropy ecosystem utilities for building and installing packages")
8903 (description
8904 "The extension-helpers package includes convenience helpers to assist
8905with building Python packages with compiled C/Cython extensions. It is
8906developed by the Astropy project but is intended to be general and usable by
8907any Python package.")
8908 (license license:bsd-3)))
8909
8910(define-public python-milc
8911 (package
8912 (name "python-milc")
8913 (version "1.9.1")
8914 (source
8915 (origin
8916 (method git-fetch) ;no tests in PyPI archive
8917 (uri (git-reference
8918 (url "https://github.com/clueboard/milc")
8919 (commit version)))
8920 (file-name (git-file-name name version))
8921 (sha256
8922 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
8923 (build-system pyproject-build-system)
8924 (native-inputs
8925 (list python-pytest
8926 python-semver
8927 python-setuptools))
8928 (propagated-inputs
8929 (list python-argcomplete
8930 python-colorama
8931 python-halo
8932 python-platformdirs
8933 python-spinners
8934 python-types-colorama))
8935 (home-page "https://github.com/clueboard/milc")
8936 (synopsis "Python library for command line interface programs")
8937 (description "MILC is a Python library for developing command line
8938interface programs. This library provides features to parse arguments,
8939automatic tab-completion, color support, logging to @code{std}, etc.")
8940 (license license:expat)))
8941
8942(define-public python-extract-dtb
8943 (package
8944 (name "python-extract-dtb")
8945 (version "1.2.3")
8946 (source
8947 (origin
8948 (method git-fetch)
8949 (uri (git-reference
8950 (url "https://github.com/PabloCastellano/extract-dtb/")
8951 (commit version)))
8952 (file-name (git-file-name name version))
8953 (sha256
8954 (base32
8955 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
8956 (build-system pyproject-build-system)
8957 (arguments
8958 (list #:tests? #f)) ;no tests
8959 (native-inputs
8960 (list python-setuptools))
8961 (home-page "https://github.com/PabloCastellano/extract-dtb/")
8962 (synopsis "Extract device tree blobs (DTB) from kernel images")
8963 (description
8964 "This package provides a tool to split a kernel image with appended
8965@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
8966 (license license:gpl3+)))
8967
8968(define-public python-mimeparse
8969 (package
8970 (name "python-mimeparse")
8971 (version "2.0.0")
8972 (source
8973 (origin
8974 (method url-fetch)
8975 (uri (pypi-uri "python_mimeparse" version))
8976 (sha256
8977 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
8978 (build-system pyproject-build-system)
8979 (native-inputs
8980 (list python-pytest
8981 python-setuptools))
8982 (home-page "https://github.com/falconry/python-mimeparse")
8983 (synopsis "Python library for parsing MIME types")
8984 (description
8985 "Mimeparse provides basic functions for parsing MIME type names and
8986matching them against a list of media-ranges.")
8987 (license license:expat)))
8988
8989(define-public python-miniboa
8990 (package
8991 (name "python-miniboa")
8992 (version "1.0.9")
8993 (source
8994 (origin
8995 (method git-fetch) ;no tests in PyPI archive
8996 (uri (git-reference
8997 (url "https://github.com/shmup/miniboa")
8998 (commit (string-append "v" version))))
8999 (file-name (git-file-name name version))
9000 (sha256
9001 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
9002 (build-system pyproject-build-system)
9003 (native-inputs
9004 (list python-pytest
9005 python-setuptools
9006 python-wheel))
9007 (home-page "https://github.com/shmup/miniboa")
9008 (synopsis "Simple, single-threaded Telnet server")
9009 (description
9010 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
9011server.")
9012 (license license:asl2.0)))
9013
9014(define-public python-mir-eval
9015 (package
9016 (name "python-mir-eval")
9017 (version "0.8.2")
9018 (source (origin
9019 (method git-fetch)
9020 (uri (git-reference
9021 (url "https://github.com/mir-evaluation/mir_eval")
9022 (commit version)))
9023 (file-name (git-file-name name version))
9024 (sha256
9025 (base32
9026 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
9027 (build-system pyproject-build-system)
9028 (arguments
9029 (list
9030 #:phases
9031 #~(modify-phases %standard-phases
9032 (add-before 'check 'cd-tests
9033 (lambda _
9034 ;; Move to 'tests' directory because tests read data files from
9035 ;; a relative path.
9036 (chdir "tests"))))))
9037 (propagated-inputs (list python-decorator python-numpy python-scipy))
9038 (native-inputs (list python-matplotlib
9039 python-pytest
9040 python-pytest-mpl
9041 python-setuptools
9042 python-wheel))
9043 (home-page "https://github.com/mir-evaluation/mir_eval")
9044 (synopsis "Common metrics for common audio/music processing tasks")
9045 (description "This is a Python library for computing common heuristic
9046accuracy scores for various music/audio information retrieval/signal
9047processing tasks.")
9048 (license license:expat)))
9049
9050(define-public python-mizani
9051 (package
9052 (name "python-mizani")
9053 (version "0.14.4")
9054 (source
9055 (origin
9056 (method git-fetch)
9057 (uri (git-reference
9058 (url "https://github.com/has2k1/mizani")
9059 (commit (string-append "v" version))))
9060 (file-name (git-file-name name version))
9061 (sha256
9062 (base32 "00n8jbsk35ywa3saypc83p8624kr65xz6m2sbf5js5n17b9m6438"))))
9063 (build-system pyproject-build-system)
9064 (propagated-inputs
9065 (list python-matplotlib
9066 python-numpy
9067 python-pandas
9068 python-scipy))
9069 (native-inputs
9070 (list python-pytest
9071 python-setuptools
9072 python-setuptools-scm
9073 tzdata-for-tests))
9074 (home-page "https://github.com/has2k1/mizani")
9075 (synopsis "Create data visualizations in Python")
9076 (description
9077 "Mizani is a Python package for creating data visualizations. It
9078provides functions and tools to help with the creation of visually appealing
9079and informative visualizations, including scales, transformations and color
9080palettes.")
9081 (license license:bsd-3)))
9082
9083(define-public python-miniupnpc
9084 (package
9085 (name "python-miniupnpc")
9086 (version "2.3.3")
9087 (source
9088 (origin
9089 (method git-fetch)
9090 (uri
9091 (git-reference
9092 ;; The project tags miniupnpd_ as well but with a different version,
9093 ;; where updater may select a wrong version.
9094 (url "https://github.com/miniupnp/miniupnp")
9095 (commit
9096 (string-append
9097 "miniupnpc_" (string-replace-substring version "." "_")))))
9098 (file-name
9099 (git-file-name name version))
9100 (sha256
9101 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
9102 (build-system pyproject-build-system)
9103 (arguments
9104 (list
9105 #:phases
9106 #~(modify-phases %standard-phases
9107 (add-after 'unpack 'subdir
9108 (lambda* (#:key inputs #:allow-other-keys)
9109 (chdir "miniupnpc")
9110 (setenv "CC" #$(cc-for-target))
9111 (substitute* "Makefile"
9112 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
9113 (add-before 'subdir 'remove-kernel-version
9114 ;; Avoid embedding the running kernel version for reproducible builds
9115 (lambda _
9116 (substitute*
9117 "miniupnpc/updateminiupnpcstrings.sh"
9118 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
9119 (replace 'check
9120 (lambda* (#:key tests? #:allow-other-keys)
9121 (when tests?
9122 (invoke "make" "check")))))))
9123 (native-inputs
9124 (list python-setuptools
9125 python-wheel))
9126 (inputs (list python)) ;we are building a Python extension
9127 (synopsis "UPnP client for Python")
9128 (description "Miniupnpc is a client library for Python programs to set up
9129port forwards using @acronym{UPnP, Universal Plug and Play}.")
9130 (home-page "http://miniupnp.free.fr")
9131 (license license:bsd-3)))
9132
9133(define-public python-pyrsistent
9134 (package
9135 (name "python-pyrsistent")
9136 (version "0.20.0")
9137 (home-page "https://github.com/tobgu/pyrsistent")
9138 (source (origin
9139 (method url-fetch)
9140 (uri (pypi-uri "pyrsistent" version))
9141 (sha256
9142 (base32
9143 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
9144 (build-system pyproject-build-system)
9145 (native-inputs
9146 (list python-pytest python-setuptools python-wheel))
9147 (synopsis "Persistent data structures for Python")
9148 (description
9149 "Pyrsistent is a number of persistent collections (by some referred to as
9150functional data structures). Persistent in the sense that they are immutable.
9151
9152All methods on a data structure that would normally mutate it instead return a
9153new copy of the structure containing the requested updates. The original
9154structure is left untouched.")
9155 (license license:expat)))
9156
9157(define-public python-exif-read
9158 (package
9159 (name "python-exif-read")
9160 (version "3.3.2")
9161 (source
9162 (origin
9163 (method git-fetch) ;PyPI doesn't contain the test images
9164 (uri (git-reference
9165 (url "https://github.com/ianare/exif-py")
9166 (commit version)))
9167 (file-name (git-file-name name version))
9168 (sha256
9169 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
9170 (build-system pyproject-build-system)
9171 (native-inputs (list python-pytest python-setuptools python-wheel))
9172 (home-page "https://github.com/ianare/exif-py")
9173 (synopsis "Python library to extract EXIF data from image files")
9174 (description
9175 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
9176files.")
9177 (license license:bsd-3)))
9178
9179(define-public python-pyld
9180 (package
9181 (name "python-pyld")
9182 (version "2.0.4")
9183 (source
9184 (origin
9185 (method git-fetch)
9186 (uri (git-reference
9187 (url "https://github.com/digitalbazaar/pyld")
9188 ;; Not all tags have the 'v' prefix.
9189 (commit (string-append "v" version))))
9190 (file-name (git-file-name name version))
9191 (sha256
9192 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
9193 (build-system pyproject-build-system)
9194 (arguments
9195 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
9196 (list #:tests? #f))
9197 (native-inputs
9198 (list python-lxml
9199 python-setuptools))
9200 (propagated-inputs
9201 (list python-aiohttp
9202 python-cachetools
9203 python-frozendict
9204 python-requests))
9205 (home-page "https://github.com/digitalbazaar/pyld")
9206 (synopsis "Python implementation of the JSON-LD specification")
9207 (description "PyLD is an implementation of the JSON-LD specification.")
9208 (license license:bsd-3)))
9209
9210(define-public python-cli-helpers
9211 (package
9212 (name "python-cli-helpers")
9213 (version "2.7.0")
9214 (source
9215 (origin
9216 (method url-fetch)
9217 (uri (pypi-uri "cli_helpers" version))
9218 (sha256
9219 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
9220 (build-system pyproject-build-system)
9221 (native-inputs
9222 (list python-pytest
9223 python-setuptools))
9224 (propagated-inputs
9225 (list python-configobj
9226 python-tabulate))
9227 (home-page "https://github.com/dbcli/cli_helpers")
9228 (synopsis "Helpers for building command-line apps")
9229 (description
9230 "CLI Helpers is a Python package that makes it easy to perform common
9231tasks when building command-line apps. It's a helper library for command-line
9232interfaces.")
9233 (license license:bsd-3)))
9234
9235(define-public python-click
9236 (package
9237 (name "python-click")
9238 (version "8.4.1")
9239 (source
9240 (origin
9241 (method git-fetch)
9242 (uri (git-reference
9243 (url "https://github.com/pallets/click")
9244 (commit version)))
9245 (file-name (git-file-name name version))
9246 (sha256
9247 (base32 "18fhb6j3fz90088j5xw9vbd9k8xpq0cbk9i7izik4n3q3pm6vq3k"))))
9248 (build-system pyproject-build-system)
9249 (native-inputs
9250 (list less
9251 python-flit-core
9252 python-pytest))
9253 (home-page "https://palletsprojects.com/p/click/")
9254 (synopsis "Command line library for Python")
9255 (description
9256 "Click is a Python package for creating command line interfaces in a
9257composable way with as little code as necessary. Its name stands for
9258\"Command Line Interface Creation Kit\". It's highly configurable but comes
9259with sensible defaults out of the box.")
9260 (license license:bsd-3)))
9261
9262(define-public python-click-7
9263 (package (inherit python-click)
9264 (name "python-click")
9265 (version "7.1.2")
9266 (source
9267 (origin
9268 (method url-fetch)
9269 (uri (pypi-uri "click" version))
9270 (sha256
9271 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
9272 (arguments (list #:tests? #f)) ;no tests in PyPI
9273 (native-inputs
9274 (list python-setuptools))))
9275
9276(define-public python-click-8.1
9277 (package
9278 (inherit python-click)
9279 (name "python-click")
9280 (version "8.1.7")
9281 (source
9282 (origin
9283 (method git-fetch)
9284 (uri (git-reference
9285 (url "https://github.com/pallets/click")
9286 (commit version)))
9287 (file-name (git-file-name name version))
9288 (sha256
9289 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
9290 (native-inputs
9291 (list less
9292 python-pytest
9293 python-setuptools))))
9294
9295(define-public python-click-aliases
9296 (package
9297 (name "python-click-aliases")
9298 (version "1.0.6")
9299 (source
9300 (origin
9301 (method git-fetch)
9302 (uri (git-reference
9303 (url "https://github.com/click-contrib/click-aliases")
9304 (commit (string-append "v" version))))
9305 (file-name (git-file-name name version))
9306 (sha256
9307 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
9308 (build-system pyproject-build-system)
9309 (native-inputs
9310 (list python-pytest
9311 python-poetry-core))
9312 (propagated-inputs
9313 (list python-click))
9314 (home-page "https://github.com/click-contrib/click-aliases")
9315 (synopsis "Enable aliases for Click")
9316 (description
9317 "This package helps to add (mutiple) aliases to a click group or command.")
9318 (license license:expat)))
9319
9320(define-public python-click-option-group
9321 (package
9322 (name "python-click-option-group")
9323 (version "0.5.9")
9324 (source
9325 (origin
9326 (method git-fetch)
9327 (uri (git-reference
9328 (url "https://github.com/click-contrib/click-option-group")
9329 (commit (string-append "v" version))))
9330 (file-name (git-file-name name version))
9331 (sha256
9332 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
9333 (build-system pyproject-build-system)
9334 (native-inputs
9335 (list python-hatch-vcs
9336 python-hatchling
9337 python-pytest))
9338 (propagated-inputs
9339 (list python-click))
9340 (home-page "https://click-option-group.readthedocs.io/")
9341 (synopsis "Option groups missing in Click")
9342 (description
9343 "Click is a package for creating powerful and beautiful command line
9344interfaces (CLI) in Python, but it has no the functionality for creating option
9345groups. The aim of this package is to provide group options with extensible
9346functionality using canonical and clean API (Click-like API as far as
9347possible).")
9348 (license license:bsd-3)))
9349
9350(define-public python-clickgen
9351 (package
9352 (name "python-clickgen")
9353 (version "2.2.5")
9354 (source (origin
9355 (method git-fetch)
9356 (uri (git-reference
9357 (url "https://github.com/ful1e5/clickgen")
9358 (commit (string-append "v" version))))
9359 (file-name (git-file-name name version))
9360 (sha256
9361 (base32
9362 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
9363 (build-system pyproject-build-system)
9364 (arguments
9365 (list
9366 #:test-flags
9367 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
9368 '(list "-k" "not test_clickgen_raises")))
9369 (native-inputs
9370 (list python-pytest
9371 python-setuptools))
9372 (propagated-inputs
9373 (list python-attrs
9374 python-numpy
9375 python-pillow
9376 python-pyyaml
9377 python-toml))
9378 (home-page "https://github.com/ful1e5/clickgen")
9379 (synopsis "The hassle-free cursor building toolbox")
9380 (description
9381 "Clickgen is an API for building X11 and Windows cursors from .png files.
9382clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
9383 (license license:expat)))
9384
9385(define-public python-clickhouse-connect
9386 (package
9387 (name "python-clickhouse-connect")
9388 (version "0.6.1")
9389 (source (origin
9390 (method git-fetch)
9391 (uri (git-reference
9392 (url "https://github.com/ClickHouse/clickhouse-connect")
9393 (commit (string-append "v" version))))
9394 (file-name (git-file-name name version))
9395 (sha256
9396 (base32
9397 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
9398 (build-system pyproject-build-system)
9399 (arguments
9400 (list
9401 #:test-flags
9402 ;; All these tests require docker-compose
9403 '(list "--ignore-glob=tests/integration_tests/*")
9404 #:phases
9405 '(modify-phases %standard-phases
9406 (add-after 'unpack 'patch-pyproject
9407 (lambda _
9408 ;; Our version of pytest is confused by this field.
9409 (substitute* "pyproject.toml"
9410 (("^env_files.*") ""))))
9411 (add-before 'check 'build-extensions
9412 (lambda _
9413 ;; Cython extensions have to be built before running the tests.
9414 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
9415 (propagated-inputs
9416 (list python-arrow
9417 python-certifi
9418 python-lz4
9419 python-numpy
9420 python-orjson
9421 python-pandas
9422 python-pytz
9423 python-setuptools ; For pkg_resources.
9424 python-sqlalchemy
9425 python-urllib3
9426 python-zstandard))
9427 (native-inputs
9428 (list python-cython
9429 python-pytest
9430 python-wheel))
9431 (home-page "https://github.com/ClickHouse/clickhouse-connect")
9432 (synopsis
9433 "ClickHouse database core driver for Python, Pandas, and Superset")
9434 (description
9435 "This package provides a high performance core database driver for
9436connecting ClickHouse to Python, Pandas, and Superset.")
9437 (license license:asl2.0)))
9438
9439(define-public python-cligj
9440 (package
9441 (name "python-cligj")
9442 (version "0.7.2")
9443 (source
9444 (origin
9445 (method url-fetch)
9446 (uri (pypi-uri "cligj" version))
9447 (sha256
9448 (base32
9449 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
9450 (build-system pyproject-build-system)
9451 (native-inputs
9452 (list python-pytest
9453 python-setuptools))
9454 (propagated-inputs
9455 (list python-click))
9456 (home-page "https://github.com/mapbox/cligj")
9457 (synopsis "Click params for command line interfaces to GeoJSON")
9458 (description
9459 "cligj is for Python developers who create command line interfaces
9460for geospatial data. cligj allows you to quickly build consistent,
9461well-tested and interoperable CLIs for handling GeoJSON.")
9462 (license license:bsd-3)))
9463
9464(define-public python-cloup
9465 (package
9466 (name "python-cloup")
9467 (version "3.0.8")
9468 (source (origin
9469 (method url-fetch)
9470 (uri (pypi-uri "cloup" version))
9471 (sha256
9472 (base32
9473 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
9474 (build-system pyproject-build-system)
9475 (propagated-inputs (list python-click))
9476 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9477 (home-page "https://github.com/janLuke/cloup")
9478 (synopsis "Extension library for python-click")
9479 (description
9480 "Cloup enriches Click with several features that make it more expressive
9481and configurable such as option groups, constraints, subcommand aliases,
9482subcommands sections and a themeable HelpFormatter.")
9483 (license license:bsd-3)))
9484
9485(define-public python-jsondiff
9486 (package
9487 (name "python-jsondiff")
9488 (version "2.2.1")
9489 (source
9490 (origin
9491 (method url-fetch)
9492 (uri (pypi-uri "jsondiff" version))
9493 (sha256
9494 (base32
9495 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9496 (build-system pyproject-build-system)
9497 (arguments
9498 (list
9499 #:phases
9500 #~(modify-phases %standard-phases
9501 (add-before 'build 'set-version
9502 (lambda _
9503 (substitute* "pyproject.toml"
9504 (("^version_file.*") "")
9505 (("dynamic = \\[\"version\"\\]")
9506 (string-append "version = \"" #$version "\""))))))))
9507 (propagated-inputs (list python-pyyaml))
9508 (native-inputs
9509 (list python-hypothesis
9510 python-pytest
9511 python-setuptools
9512 python-setuptools-scm
9513 python-wheel))
9514 (home-page "https://github.com/fzumstein/jsondiff")
9515 (synopsis "Compare JSON and JSON-like structures in Python")
9516 (description "@code{jsondiff} is a Python library which lets you compare,
9517diff, and patch JSON and JSON-like structures in Python.")
9518 (license license:expat)))
9519
9520(define-public python-ddlparse
9521 (package
9522 (name "python-ddlparse")
9523 (version "1.10.0")
9524 (source
9525 (origin
9526 (method url-fetch)
9527 (uri (pypi-uri "ddlparse" version))
9528 (sha256
9529 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9530 (build-system pyproject-build-system)
9531 (native-inputs
9532 (list python-pytest python-setuptools))
9533 (propagated-inputs (list python-pyparsing))
9534 (home-page "https://github.com/shinichi-takii/ddlparse")
9535 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9536 (description "This package provides @code{ddlparse}, a Python library to parse
9537and convert DDL to BigQuery JSON schema.")
9538 (license license:bsd-3)))
9539
9540(define-public python-jsonschema
9541 (package
9542 (name "python-jsonschema")
9543 (version "4.26.0")
9544 (source
9545 (origin
9546 (method git-fetch)
9547 (uri (git-reference
9548 (url "https://github.com/Julian/jsonschema")
9549 (commit (string-append "v" version))))
9550 (file-name (git-file-name name version))
9551 (sha256
9552 (base32 "0p89jy7s1agi2zqrsdm56p843k847n9cixjsc12hnzscll37kysk"))))
9553 (build-system pyproject-build-system)
9554 (arguments
9555 (list
9556 ;; tests: 7762 passed, 53 skipped
9557 #:phases
9558 #~(modify-phases %standard-phases
9559 (add-before 'check 'pre-check
9560 (lambda _
9561 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9562 (native-inputs
9563 (list python-hatchling
9564 python-hatch-fancy-pypi-readme
9565 python-hatch-vcs
9566 python-jsonpath-ng
9567 python-pytest))
9568 (propagated-inputs
9569 (list python-attrs
9570 python-jsonschema-specifications
9571 python-referencing
9572 python-rpds-py
9573 ;; [optional]
9574 python-fqdn
9575 python-idna
9576 python-isoduration
9577 python-jsonpointer
9578 python-rfc3339-validator
9579 python-rfc3986-validator
9580 python-rfc3987-syntax ;sanity-check fails without this
9581 python-uri-template
9582 python-webcolors))
9583 (home-page "https://github.com/Julian/jsonschema")
9584 (synopsis "Implementation of JSON Schema for Python")
9585 (description
9586 "Jsonschema is an implementation of JSON Schema for Python.")
9587 (license license:expat)))
9588
9589;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9590;; version.
9591(define-public python-jsonschema-3
9592 (package
9593 (inherit python-jsonschema)
9594 (version "3.2.0")
9595 (source (origin
9596 (method url-fetch)
9597 (uri (pypi-uri "jsonschema" version))
9598 (sha256
9599 (base32
9600 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9601 (arguments
9602 (substitute-keyword-arguments arguments
9603 ((#:tests? _ #t) #f)))
9604 (propagated-inputs
9605 (list python-attrs
9606 python-pyrsistent
9607 python-typing-extensions))
9608 (native-inputs
9609 (list python-setuptools-scm python-twisted
9610 python-setuptools python-wheel))))
9611
9612;; A bare minimal package, mainly to use in tests and reduce closure size.
9613;; Tests are left out in the main package to slim down native-inputs and
9614;; propagated-inputs.
9615(define-public python-jsonschema-minimal
9616 (package/inherit python-jsonschema
9617 (name "python-jsonschema-minimal")
9618 (arguments
9619 (substitute-keyword-arguments arguments
9620 ((#:tests? _ #t) #f)))
9621 (native-inputs
9622 (list python-hatchling
9623 python-hatch-fancy-pypi-readme
9624 python-hatch-vcs))
9625 (propagated-inputs
9626 (list python-attrs
9627 python-jsonschema-specifications
9628 python-referencing
9629 python-rpds-py))))
9630
9631(define-public python-jsonschema-path
9632 (package
9633 (name "python-jsonschema-path")
9634 (version "0.3.2")
9635 (source
9636 (origin
9637 (method url-fetch)
9638 (uri (pypi-uri "jsonschema_path" version))
9639 (sha256
9640 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9641 (build-system pyproject-build-system)
9642 (arguments
9643 (list
9644 #:tests? #false ;there are none
9645 #:phases
9646 '(modify-phases %standard-phases
9647 (add-after 'unpack 'relax-requirements
9648 (lambda _
9649 (substitute* "pyproject.toml"
9650 (("referencing = \">=0.28.0,<0.32.0\"")
9651 "referencing = \">=0.28.0\"")))))))
9652 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9653 python-requests))
9654 (native-inputs (list python-poetry-core))
9655 (home-page "https://github.com/p1c2u/jsonschema-path")
9656 (synopsis "JSONSchema Spec with object-oriented paths")
9657 (description "This package implements object-oriented JSONSchema. It lets
9658you traverse a schema like paths and access a schema on demand with separate
9659dereferencing accessor layer.")
9660 (license license:asl2.0)))
9661
9662(define-public python-jsonschema-objects
9663 (package
9664 (name "python-jsonschema-objects")
9665 (version "0.5.7")
9666 (source
9667 (origin
9668 (method git-fetch)
9669 (uri (git-reference
9670 (url "https://github.com/cwacek/python-jsonschema-objects/")
9671 (commit version)))
9672 (file-name (git-file-name name version))
9673 (sha256
9674 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9675 (build-system pyproject-build-system)
9676 (native-inputs
9677 (list python-pytest
9678 python-pytest-mock
9679 python-setuptools))
9680 (propagated-inputs
9681 (list python-inflection
9682 python-jsonschema
9683 python-markdown))
9684 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9685 (synopsis "Automatic Python binding generation from JSON schemas")
9686 (description
9687 "This package provides an automatic class-based binding to JSON
9688Schemas for use in python.")
9689 (license license:expat)))
9690
9691(define-public python-jsonschema-specifications
9692 (package
9693 (name "python-jsonschema-specifications")
9694 (version "2025.9.1")
9695 (source
9696 (origin
9697 (method git-fetch)
9698 (uri (git-reference
9699 (url "https://github.com/python-jsonschema/jsonschema-specifications")
9700 (commit (string-append "v" version))))
9701 (file-name (git-file-name name version))
9702 (sha256
9703 (base32 "0fxjcq2qqzahfi9jinns2gmrnjq1zf216dr3i480aphabdx1c67z"))))
9704 (build-system pyproject-build-system)
9705 (native-inputs
9706 (list python-hatch-vcs
9707 python-hatchling
9708 python-pytest))
9709 (propagated-inputs
9710 (list python-referencing))
9711 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9712 (synopsis
9713 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9714 (description
9715 "This package provides JSON support files from the JSON Schema
9716Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9717from Python as a referencing-based Schema Registry.")
9718 (license license:expat)))
9719
9720(define-public python-schema
9721 (package
9722 (name "python-schema")
9723 (version "0.7.8")
9724 (source
9725 (origin
9726 (method git-fetch)
9727 (uri (git-reference
9728 (url "https://github.com/keleshev/schema")
9729 (commit (string-append "v" version))))
9730 (file-name (git-file-name name version))
9731 (sha256
9732 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9733 (build-system pyproject-build-system)
9734 (native-inputs
9735 (list python-pytest python-setuptools))
9736 (home-page "https://github.com/keleshev/schema")
9737 (synopsis "Simple data validation library")
9738 (description
9739 "@code{python-schema} is a library for validating Python data
9740structures, such as those obtained from config-files, forms, external
9741services or command-line parsing, converted from JSON/YAML (or
9742something else) to Python data-types.")
9743 (license license:psfl)))
9744
9745(define-public python-kitchen
9746 (package
9747 (name "python-kitchen")
9748 (version "1.2.6")
9749 (source
9750 (origin
9751 (method git-fetch)
9752 (uri (git-reference
9753 (url "https://github.com/fedora-infra/kitchen")
9754 (commit version)))
9755 (file-name (git-file-name name version))
9756 (sha256
9757 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
9758 (build-system pyproject-build-system)
9759 (arguments
9760 (list
9761 #:test-flags
9762 #~(list "kitchen3"
9763 ;; XXX: Unclear why these tests fail.
9764 "-e" "test_invalid_fallback_no_raise"
9765 "-e" "test_internal_generate_combining_table"
9766 "-e" "test_lgettext"
9767 "-e" "test_lngettext"
9768 "-e" "test_easy_gettext_setup_non_unicode")
9769 #:phases
9770 #~(modify-phases %standard-phases
9771 (add-before 'check 'delete-broken-test-files
9772 (lambda _
9773 (delete-file "kitchen3/tests/test__all__.py")
9774 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
9775 (native-inputs (list python-pynose python-setuptools))
9776 (home-page "https://github.com/fedora-infra/kitchen")
9777 (synopsis "Python API for snippets")
9778 (description
9779 "@code{kitchen} module provides a python API for all sorts of little
9780useful snippets of code that everybody ends up writing for their projects but
9781never seem big enough to build an independent release. Use kitchen and stop
9782cutting and pasting that code over and over.")
9783 (license (list license:lgpl2.1+
9784 ;; subprocess.py, test_subprocess.py,
9785 ;; kitchen/pycompat25/defaultdict.py:
9786 license:psfl))))
9787
9788(define-public python-roman
9789 (package
9790 (name "python-roman")
9791 (version "5.2")
9792 (source
9793 (origin
9794 (method git-fetch)
9795 (uri (git-reference
9796 (url "https://github.com/zopefoundation/roman")
9797 (commit version)))
9798 (file-name (git-file-name name version))
9799 (sha256
9800 (base32
9801 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
9802 (build-system pyproject-build-system)
9803 (arguments
9804 (list
9805 #:test-backend #~'unittest
9806 #:test-flags #~(list "discover" "-s" "src")))
9807 (native-inputs (list python-setuptools))
9808 (home-page "https://github.com/zopefoundation/roman")
9809 (synopsis "Integer to Roman numerals converter")
9810 (description
9811 "This package provides a small helper library to convert Arabic Numbers
9812to Roman Numerals.")
9813 (license license:zpl2.1)))
9814
9815(define-public python-rollbar
9816 (package
9817 (name "python-rollbar")
9818 (version "1.3.0")
9819 (source (origin
9820 (method url-fetch)
9821 (uri (pypi-uri "rollbar" version))
9822 (sha256
9823 (base32
9824 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
9825 (build-system pyproject-build-system)
9826 (native-inputs (list python-httpx
9827 python-pytest
9828 python-setuptools
9829 python-webob
9830 python-wheel))
9831 (inputs (list python-requests))
9832 (home-page "https://github.com/rollbar/pyrollbar")
9833 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
9834 (description
9835 "Python SDK for reporting exceptions, errors, and log messages
9836to @url{https://rollbar.com/, Rollbar}.
9837
9838Capabilities include:
9839
9840@itemize @bullet
9841@item Sending messages and exceptions with arbitrary context
9842@item Getting back aggregates
9843@item Debugging production issues
9844@end itemize")
9845 (license license:expat)))
9846
9847(define-public python-pyjwt
9848 (package
9849 (name "python-pyjwt")
9850 (version "2.10.1")
9851 (source
9852 (origin
9853 (method url-fetch)
9854 (uri (pypi-uri "pyjwt" version))
9855 (sha256
9856 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
9857 (build-system pyproject-build-system)
9858 (arguments
9859 (list
9860 ;; tests: 286 passed, 4 skipped, 1 deselected
9861 ;;
9862 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
9863 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
9864 ;; resolution>"
9865 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
9866 (native-inputs
9867 (list python-pytest
9868 python-setuptools))
9869 (propagated-inputs
9870 (if (supported-package? python-cryptography)
9871 (list python-cryptography)
9872 '()))
9873 (home-page "https://github.com/progrium/pyjwt")
9874 (synopsis "JSON Web Token implementation in Python")
9875 (description
9876 "PyJWT is a JSON Web Token implementation written in Python.")
9877 (license license:expat)))
9878
9879(define-public python-pymsgbox
9880 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
9881 (revision "1"))
9882 (package
9883 (name "python-pymsgbox")
9884 (version (git-version "1.0.6" revision commit))
9885 (source
9886 (origin
9887 (method git-fetch)
9888 (uri (git-reference
9889 (url "https://github.com/asweigart/PyMsgBox")
9890 (commit commit)))
9891 (file-name (git-file-name name version))
9892 (sha256
9893 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
9894 (build-system pyproject-build-system)
9895 (arguments
9896 ;; Circular dependency to run tests:
9897 ;; Tests need pyautogui, which depends on pymsgbox.
9898 '(#:tests? #f))
9899 (native-inputs (list python-setuptools python-wheel))
9900 (home-page "https://github.com/asweigart/PyMsgBox")
9901 (synopsis "Python module for JavaScript-like message boxes")
9902 (description
9903 "PyMsgBox is a simple, cross-platform, pure Python module for
9904JavaScript-like message boxes. Types of dialog boxes include:
9905@enumerate
9906@item alert
9907@item confirm
9908@item prompt
9909@item password
9910@end enumerate
9911")
9912 (license license:bsd-3))))
9913
9914(define-public python-pympler
9915 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
9916 (revision "0"))
9917 (package
9918 (name "python-pympler")
9919 (version (git-version "1.1" revision commit))
9920 (source
9921 (origin
9922 (method git-fetch)
9923 (uri (git-reference
9924 (url "https://github.com/pympler/pympler")
9925 (commit commit)))
9926 (file-name (git-file-name name version))
9927 (sha256
9928 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
9929 (build-system pyproject-build-system)
9930 (arguments
9931 (list
9932 #:tests? #f ;FIXME: tests timeout.
9933 #:test-flags
9934 #~(list
9935 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
9936 ;; != 'function (muppy.test_summary.func)'.
9937 ;; See <https://github.com/pympler/pympler/issues/134>.
9938 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
9939 ;; This test times out.
9940 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback"
9941 "--deselect=test/muppy/test_tracker.py::TrackerTest::test_otracker_diff")))
9942 (native-inputs
9943 (list python-pytest python-setuptools))
9944 (home-page "https://pythonhosted.org/Pympler/")
9945 (synopsis "Measure, monitor and analyze memory behavior")
9946 (description
9947 "Pympler is a development tool to measure, monitor and analyze
9948the memory behavior of Python objects in a running Python application.
9949
9950By pympling a Python application, detailed insight in the size and the
9951lifetime of Python objects can be obtained. Undesirable or unexpected
9952runtime behavior like memory bloat and other @samp{pymples} can easily
9953be identified.
9954
9955A web profiling frontend exposes process statistics, garbage
9956visualisation and class tracker statistics.")
9957 (license license:asl2.0))))
9958
9959(define-public python-itsdangerous
9960 (package
9961 (name "python-itsdangerous")
9962 (version "2.2.0")
9963 (source
9964 (origin
9965 (method url-fetch)
9966 (uri (pypi-uri "itsdangerous" version))
9967 (sha256
9968 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
9969 (build-system pyproject-build-system)
9970 (native-inputs
9971 (list python-flit-core
9972 python-freezegun
9973 python-pytest))
9974 (home-page "https://palletsprojects.com/p/itsdangerous/")
9975 (synopsis "Python library for passing data to/from untrusted environments")
9976 (description
9977 "Itsdangerous provides various helpers to pass trusted data to untrusted
9978environments and back.")
9979 (license license:bsd-3)))
9980
9981;; WARNING: This package is a dependency of mesa.
9982(define-public python-pyyaml
9983 (package
9984 (name "python-pyyaml")
9985 (version "6.0.3")
9986 (source
9987 (origin
9988 (method git-fetch)
9989 (uri (git-reference
9990 (url "https://github.com/yaml/pyyaml")
9991 (commit version)))
9992 (file-name (git-file-name name version))
9993 (sha256
9994 (base32 "0w00gkjqx1g8c5gdm9qqznnj7ijzfjqwqgymppqw5lbw38h2hjld"))))
9995 (build-system pyproject-build-system)
9996 (native-inputs
9997 (list python-cython
9998 python-pytest
9999 python-setuptools))
10000 (inputs
10001 (list libyaml))
10002 (home-page "https://pyyaml.org")
10003 (synopsis "YAML parser and emitter for Python")
10004 (description
10005 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
10006complete YAML 1.1 parser, Unicode support, pickle support, capable extension
10007API, and sensible error messages. PyYAML supports standard YAML tags and
10008provides Python-specific tags that represent an arbitrary Python object.")
10009 (license license:expat)))
10010
10011(define-public python-crossenv
10012 (package
10013 (name "python-crossenv")
10014 (version "1.6.1")
10015 (source
10016 (origin
10017 (method git-fetch)
10018 (uri (git-reference
10019 (url "https://github.com/benfogle/crossenv")
10020 (commit (string-append "v" version))))
10021 (file-name (git-file-name name version))
10022 (sha256
10023 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
10024 (build-system pyproject-build-system)
10025 (arguments
10026 (list
10027 ;; XXX: Running test require setting environment variables for
10028 ;; architectures.
10029 #:tests? #f))
10030 (native-inputs (list python-hatchling))
10031 (home-page "https://github.com/benfogle/crossenv")
10032 (synopsis "Cross-compiling virtualenv for Python")
10033 (description
10034 "This package is a tool for cross-compiling extension modules. It
10035creates a special virtual environment such that @command{pip} or
10036@file{setup.py} will cross compile packages for you, usually with no further
10037work on your part.")
10038 (license license:expat)))
10039
10040(define-public python-linkify-it-py
10041 (package
10042 (name "python-linkify-it-py")
10043 (version "2.1.0")
10044 (source (origin
10045 (method git-fetch)
10046 (uri (git-reference
10047 (url "https://github.com/tsutsu3/linkify-it-py")
10048 (commit (string-append "v" version))))
10049 (file-name (git-file-name name version))
10050 (sha256
10051 (base32
10052 "006yvm2pcilq60zb02ijhdma26csynhkffb8wscjmjzbwqq8fzqh"))))
10053 (build-system pyproject-build-system)
10054 (propagated-inputs (list python-uc-micro-py))
10055 (native-inputs (list python-pytest python-setuptools))
10056 (home-page "https://github.com/tsutsu3/linkify-it-py")
10057 (synopsis "Links recognition library with full Unicode support")
10058 (description "This is Python port of
10059@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
10060recognition library with full Unicode support. It has features like:
10061@itemize
10062@item Full unicode support, with @i{astral} characters
10063@item International domains support
10064@item Allows rules extension and custom normalizers.
10065@end itemize")
10066 (license license:expat)))
10067
10068(define-public python-makefun
10069 (package
10070 (name "python-makefun")
10071 ;; Released version fails tests in Python 3.12 due to asyncio
10072 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
10073 (revision . "0")))
10074 (version (git-version "1.16.0"
10075 (assoc-ref properties 'revision)
10076 (assoc-ref properties 'commit)))
10077 (source
10078 (origin
10079 (method git-fetch)
10080 (uri (git-reference
10081 (url "https://github.com/smarie/python-makefun")
10082 (commit (assoc-ref properties 'commit))))
10083 (file-name (git-file-name name version))
10084 (sha256
10085 (base32
10086 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
10087 (build-system pyproject-build-system)
10088 (native-inputs
10089 (list python-pytest
10090 python-pytest-asyncio
10091 python-setuptools
10092 python-setuptools-scm))
10093 (home-page "https://github.com/smarie/python-makefun")
10094 (synopsis "Library to dynamically create python functions")
10095 (description "@code{makefun} helps create functions dynamically with a
10096given signature. It was largely inspired by @code{python-decorator} and
10097@code{functools}.")
10098 (license license:bsd-3)))
10099
10100(define-public python-markdown-it-py
10101 (package
10102 (name "python-markdown-it-py")
10103 (version "4.0.0")
10104 (source
10105 (origin
10106 (method git-fetch)
10107 (uri (git-reference
10108 (url "https://github.com/executablebooks/markdown-it-py")
10109 (commit (string-append "v" version))))
10110 (file-name (git-file-name name version))
10111 (sha256
10112 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
10113 (build-system pyproject-build-system)
10114 (arguments (list #:test-flags #~(list "--benchmark-disable")))
10115 (native-inputs
10116 (list python-flit-core
10117 python-pytest
10118 python-pytest-benchmark
10119 python-pytest-regressions
10120 python-requests))
10121 (propagated-inputs
10122 (list python-commonmark
10123 python-linkify-it-py
10124 python-markdown
10125 python-mdurl
10126 python-mistletoe
10127 python-mistune
10128 python-panflute
10129 python-pyyaml))
10130 (home-page "https://github.com/executablebooks/markdown-it-py")
10131 (synopsis "Python port of markdown-it")
10132 (description
10133 "This is a Python port of @code{markdown-it}, and some of its associated
10134plugins. The driving design philosophy of the port has been to change as
10135little of the fundamental code structure (file names, function name, etc) as
10136possible.")
10137 (license license:expat)))
10138
10139(define-public python-markupsafe
10140 (package
10141 (name "python-markupsafe")
10142 (version "3.0.3")
10143 (source
10144 (origin
10145 (method url-fetch)
10146 (uri (pypi-uri "markupsafe" version))
10147 (sha256
10148 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
10149 (build-system pyproject-build-system)
10150 ;; tests: 79 passed, 1 skipped
10151 (native-inputs
10152 (list python-pytest
10153 python-setuptools))
10154 (home-page "https://markupsafe.palletsprojects.com")
10155 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
10156 (description
10157 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
10158for Python.")
10159 (license license:bsd-3)))
10160
10161(define-public python-jinja2
10162 (package
10163 (name "python-jinja2")
10164 (version "3.1.6")
10165 (source
10166 (origin
10167 (method git-fetch)
10168 (uri (git-reference
10169 (url "https://github.com/pallets/jinja")
10170 (commit version)))
10171 (file-name (git-file-name name version))
10172 (sha256
10173 (base32 "01ds59a1cync34xq7s0q6f50k9nvn2n80zh62qa2a8vnr7fz5nlv"))))
10174 (build-system pyproject-build-system)
10175 (native-inputs
10176 (list python-flit-core
10177 python-pytest
10178 python-trio))
10179 (propagated-inputs
10180 (list python-markupsafe))
10181 (home-page "https://jinja.palletsprojects.com/")
10182 (synopsis "Python template engine")
10183 (description
10184 "Jinja2 is a small but fast and easy to use stand-alone template engine
10185written in pure Python.")
10186 (license license:bsd-3)))
10187
10188(define-public python-jinja2-fragments
10189 (package
10190 (name "python-jinja2-fragments")
10191 (version "1.11.0")
10192 (source
10193 (origin
10194 (method git-fetch)
10195 (uri (git-reference
10196 (url "https://github.com/sponsfreixes/jinja2-fragments")
10197 (commit version)))
10198 (file-name (git-file-name name version))
10199 (sha256
10200 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
10201 (patches
10202 ;; Remove test setup code related to `litestar` and `sanic`
10203 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
10204 (build-system pyproject-build-system)
10205 (arguments
10206 (list
10207 #:test-flags
10208 #~(list "--ignore=tests/test_litestar.py"
10209 "--ignore=tests/test_sanic.py")))
10210 (native-inputs
10211 (list python-fastapi
10212 python-flask
10213 python-pytest
10214 python-pytest-asyncio
10215 python-quart
10216 python-setuptools))
10217 (propagated-inputs
10218 (list python-jinja2))
10219 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
10220 (synopsis "Jinja2 extension for template fragments")
10221 (description
10222 "Render Jinja2 template block as HTML page fragments on Python web
10223frameworks.")
10224 (license license:expat)))
10225
10226(define-public python-pypugjs
10227 (package
10228 (name "python-pypugjs")
10229 (version "5.12.0")
10230 (source
10231 (origin
10232 (method git-fetch)
10233 (uri (git-reference
10234 (url "https://github.com/kakulukia/pypugjs")
10235 (commit (string-append "v" version))))
10236 (file-name (git-file-name name version))
10237 (sha256
10238 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
10239 (build-system pyproject-build-system)
10240 (native-inputs (list python-django
10241 python-jinja2
10242 python-flask
10243 python-mako
10244 python-poetry-core
10245 python-pytest
10246 python-tornado))
10247 (propagated-inputs (list python-charset-normalizer python-six))
10248 (home-page "https://github.com/kakulukia/pypugjs")
10249 (synopsis "Convert Pug source files into different template languages")
10250 (description
10251 "PyPugJS is a high-performance port of PugJS for Python, that converts
10252any @file{.pug} source into different template languages: Django, Jinja2,
10253Mako, and Tornado.")
10254 (license license:expat))) ;; MIT
10255
10256(define-public python-pysrt
10257 (package
10258 (name "python-pysrt")
10259 (version "1.1.2")
10260 (source
10261 (origin
10262 (method git-fetch)
10263 (uri (git-reference
10264 (url "https://github.com/byroot/pysrt")
10265 (commit (string-append "v" version))))
10266 (file-name (git-file-name name version))
10267 (sha256
10268 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
10269 (build-system pyproject-build-system)
10270 (arguments
10271 (list
10272 #:test-backend #~'unittest
10273 #:phases
10274 #~(modify-phases %standard-phases
10275 (add-after 'unpack 'fix-python-incompatibilities
10276 (lambda _
10277 (substitute* (find-files "tests" "\\.py$")
10278 (("assertEquals") "assertEqual")))))))
10279 (propagated-inputs (list python-chardet))
10280 (native-inputs (list python-setuptools))
10281 (home-page "https://github.com/byroot/pysrt")
10282 (synopsis "SubRip Text subtitle parser and writer")
10283 (description
10284 "This package provides a Python library to edit or create
10285SubRip Text files, and additionally a command-line program @command{srt}
10286to shift, split or rescale them.")
10287 (license license:gpl3+)))
10288
10289(define-public python-pystache
10290 (package
10291 (name "python-pystache")
10292 (version "0.6.8")
10293 (source (origin
10294 (method url-fetch)
10295 (uri (pypi-uri "pystache" version))
10296 (sha256
10297 (base32
10298 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
10299 (build-system pyproject-build-system)
10300 (native-inputs (list python-pytest python-setuptools python-wheel))
10301 (home-page "http://defunkt.io/pystache/")
10302 (synopsis "Python logic-less template engine")
10303 (description
10304 "Pystache is a Python implementation of the framework agnostic,
10305logic-free templating system Mustache.")
10306 (license license:expat)))
10307
10308(define-public python-pystack
10309 (package
10310 (name "python-pystack")
10311 (version "1.5.1")
10312 (source
10313 (origin
10314 (method git-fetch)
10315 (uri (git-reference
10316 (url "https://github.com/bloomberg/pystack")
10317 (commit (string-append "v" version))))
10318 (file-name (git-file-name name version))
10319 (sha256
10320 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
10321 (build-system pyproject-build-system)
10322 (arguments
10323 (list
10324 ;; Integration tests need ptrace and gcore (gdb).
10325 #:test-flags #~(list "tests/unit")))
10326 (native-inputs
10327 (list python-cython
10328 python-pkgconfig
10329 python-pytest
10330 python-setuptools))
10331 (inputs
10332 (list elfutils))
10333 (home-page "https://github.com/bloomberg/pystack")
10334 (synopsis "Python stack trace analyzer for core dumps and live processes")
10335 (description
10336 "PyStack analyzes stack frames of running Python processes or Python core
10337dumps. It can inspect what a process is doing or what it was doing when it
10338crashed, without modifying any memory or executing code in the target process.")
10339 (license license:asl2.0)))
10340
10341(define-public python-pystitcher
10342 (package
10343 (name "python-pystitcher")
10344 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
10345 (revision . "0")
10346 (upstream-version . "1.0.5")))
10347 (version (git-version (assoc-ref properties 'upstream-version)
10348 (assoc-ref properties 'revision)
10349 (assoc-ref properties 'commit)))
10350 (source
10351 (origin
10352 (method git-fetch)
10353 (uri (git-reference
10354 (url "https://github.com/captn3m0/pystitcher")
10355 (commit (assoc-ref properties 'commit))))
10356 (file-name (git-file-name name version))
10357 (sha256
10358 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
10359 (build-system pyproject-build-system)
10360 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
10361 (inputs (list python-html5lib
10362 python-markdown
10363 python-pypdf
10364 python-validators))
10365 (home-page "https://github.com/captn3m0/pystitcher")
10366 (synopsis "Declaratively stitch together a PDF file from multiple sources")
10367 (description
10368 "This package stitches your PDF files together, generating customizable
10369bookmarks using a declarative input in the form of a markdown file.")
10370 (license license:expat)))
10371
10372(define-public python-joblib
10373 (package
10374 (name "python-joblib")
10375 (version "1.5.3")
10376 (source
10377 (origin
10378 (method git-fetch)
10379 (uri (git-reference
10380 (url "https://github.com/joblib/joblib")
10381 (commit version)))
10382 (file-name (git-file-name name version))
10383 (sha256
10384 (base32 "0vblgi0mb1jcwgf8f3rslw82g28fjl6n52mwgsm7p7y2nrixdrjb"))))
10385 (build-system pyproject-build-system)
10386 (arguments
10387 (list
10388 ;; tests: 1319 passed, 103 skipped, 3 xpassed, 563 warnings
10389 #:test-flags
10390 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10391 ;; Disabled to avoid having to depend on ipython/jupyter.
10392 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
10393 (native-inputs
10394 (list python-pytest
10395 python-pytest-asyncio
10396 python-pytest-xdist
10397 python-setuptools))
10398 (home-page "https://joblib.readthedocs.io/")
10399 (synopsis "Using Python functions as pipeline jobs")
10400 (description
10401 "Joblib is a set of tools to provide lightweight pipelining in Python.
10402In particular, joblib offers: transparent disk-caching of the output values
10403and lazy re-evaluation (memoize pattern), easy simple parallel computing
10404logging and tracing of the execution.")
10405 (license license:bsd-3)))
10406
10407(define-public python-daemon
10408 (package
10409 (name "python-daemon")
10410 (version "3.1.2")
10411 (source
10412 (origin
10413 (method git-fetch)
10414 (uri (git-reference
10415 (url "https://pagure.io/python-daemon")
10416 (commit (string-append "release/" version))))
10417 (file-name (git-file-name name version))
10418 (sha256
10419 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
10420 (patches
10421 (search-patches "python-daemon-relax-lockfile.patch"))))
10422 (build-system pyproject-build-system)
10423 (arguments
10424 (list
10425 #:phases
10426 #~(modify-phases %standard-phases
10427 (add-after 'unpack 'discard-dynamic-metadata
10428 (lambda _
10429 (substitute* "pyproject.toml"
10430 (("^dynamic = " all)
10431 (format #f "version = ~s~%~a" #$version all))
10432 (("\"(description|readme|version|maintainers)\",")
10433 ""))
10434 (for-each delete-file
10435 '("setup.py"
10436 "test/test_util_metadata.py"
10437 "test/test_setup.py")))))))
10438 (propagated-inputs (list python-filelock))
10439 (native-inputs (list python-testscenarios python-setuptools))
10440 (home-page "https://pagure.io/python-daemon/")
10441 (synopsis "Python library for making a Unix daemon process")
10442 (description
10443 "Python-daemon is a library that assists a Python program to turn itself
10444into a well-behaved Unix daemon process, as specified in PEP 3143.
10445
10446This library provides a @code{DaemonContext} class that manages the following
10447important tasks for becoming a daemon process:
10448@enumerate
10449@item Detach the process into its own process group.
10450@item Set process environment appropriate for running inside a chroot.
10451@item Renounce suid and sgid privileges.
10452@item Close all open file descriptors.
10453@item Change the working directory, uid, gid, and umask.
10454@item Set appropriate signal handlers.
10455@item Open new file descriptors for stdin, stdout, and stderr.
10456@item Manage a specified PID lock file.
10457@item Register cleanup functions for at-exit processing.
10458@end enumerate")
10459 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
10460 (license (list license:asl2.0 license:gpl3+))))
10461
10462(define-public python-annotated-types
10463 (package
10464 (name "python-annotated-types")
10465 (version "0.7.0")
10466 (source
10467 (origin
10468 (method url-fetch)
10469 (uri (pypi-uri "annotated_types" version))
10470 (sha256
10471 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
10472 (build-system pyproject-build-system)
10473 (native-inputs
10474 (list python-hatchling
10475 python-pytest))
10476 (propagated-inputs (list python-typing-extensions))
10477 (home-page "https://github.com/annotated-types/annotated-types")
10478 (synopsis "Reusable constraint types to use with typing.Annotated")
10479 (description "This package provides metadata objects which can be used to
10480represent common constraints such as upper and lower bounds on scalar values and
10481collection sizes, a Predicate marker for runtime checks, and descriptions of how
10482we intend these metadata to be interpreted. In some cases, we also note
10483alternative representations which do not require this package.")
10484 (license license:expat)))
10485
10486(define-public python-anytree
10487 (package
10488 (name "python-anytree")
10489 (version "2.13.0")
10490 (source
10491 (origin
10492 (method git-fetch) ; no tests data in PyPi package
10493 (uri (git-reference
10494 (url "https://github.com/c0fec0de/anytree")
10495 (commit version)))
10496 (file-name (git-file-name name version))
10497 (sha256
10498 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
10499 (build-system pyproject-build-system)
10500 (arguments
10501 (list
10502 #:phases
10503 #~(modify-phases %standard-phases
10504 (add-before 'check 'pre-check
10505 (lambda _
10506 ;; Tests need to write to that direcroty.
10507 (mkdir-p "tests/dotexport/"))))))
10508 (native-inputs
10509 (list graphviz ;for 'dot'
10510 python-pdm-backend
10511 python-pytest
10512 python-pyyaml
10513 python-test2ref))
10514 (home-page "https://github.com/c0fec0de/anytree")
10515 (synopsis "Lightweight tree data library")
10516 (description
10517 "@code{anytree} is a simple, lightweight, and extensible tree data
10518structure for Python.")
10519 (license license:asl2.0)))
10520
10521(define-public kalamine
10522 (package
10523 (name "kalamine")
10524 (version "0.38")
10525 (source
10526 (origin
10527 (method url-fetch)
10528 (uri (pypi-uri "kalamine" version))
10529 (sha256
10530 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10531 (build-system pyproject-build-system)
10532 (arguments
10533 (list
10534 #:phases
10535 #~(modify-phases %standard-phases
10536 (add-before 'check 'make-test-layouts
10537 (lambda _
10538 (apply invoke
10539 (cons* "python" "-m" "kalamine.cli" "build"
10540 (find-files "layouts" "\\.toml")))
10541 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10542 (propagated-inputs
10543 (list python-click
10544 python-livereload
10545 python-lxml
10546 python-progress
10547 python-pyyaml
10548 python-tomli))
10549 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10550 ;; packaged.
10551 (native-inputs
10552 (list python-hatchling python-pytest))
10553 (home-page "https://github.com/OneDeadKey/kalamine")
10554 (synopsis "Keyboard layout maker")
10555 (description
10556 "Kalamine provides a CLI to create advanced keyboard layout from a
10557textual portable description. It also supports layout emulation via web
10558browser.")
10559 (license license:expat)))
10560
10561(define-public python-dm-tree
10562 (package
10563 (name "python-dm-tree")
10564 (version "0.1.9")
10565 (source
10566 (origin
10567 (method url-fetch)
10568 (uri (pypi-uri "dm_tree" version))
10569 (sha256
10570 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10571 (build-system pyproject-build-system)
10572 (arguments
10573 (list #:tests? #f
10574 #:phases
10575 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10576 ;; and USE_SYSTEM_PYBIND11=true.
10577 #~(modify-phases %standard-phases
10578 (add-before 'build 'build-shared-lib
10579 (lambda _
10580 (let* ((pybind11 #$(this-package-input "pybind11"))
10581 (python #$(this-package-input "python"))
10582 (version (python-version python))
10583 (abseil-cpp #$(this-package-input "abseil-cpp")))
10584 ;; Delete default cmake build.
10585 (substitute* "setup.py"
10586 (("ext_modules.*") "")
10587 (("cmdclass.*") ""))
10588 ;; Actual build phase.
10589 (mkdir-p "build/temp/tree/")
10590 (invoke
10591 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10592 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10593 "-fno-semantic-interposition" "-fPIC"
10594 "-I" (string-append pybind11
10595 "/lib/python" version
10596 "/site-packages/pybind11/include")
10597 "-I" (string-append python "/include/python"
10598 version)
10599 "-I" (string-append abseil-cpp "/include")
10600 "-c" "tree/tree.cc"
10601 "-o" "build/temp/tree/tree.o"
10602 "-fvisibility=hidden" "-g0")
10603 (mkdir-p "build/lib/tree")
10604 (invoke
10605 "g++" "-pthread" "-shared"
10606 (string-append "-Wl," "-rpath=" python "/lib")
10607 "-fno-semantic-interposition"
10608 "build/temp/tree/tree.o"
10609 "-L" (string-append python "/lib")
10610 (string-append abseil-cpp "/lib/libabsl_int128.a")
10611 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10612 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10613 (string-append abseil-cpp "/lib/libabsl_strings.a")
10614 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10615 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10616 "-o" "build/lib/tree/_tree.so")))))))
10617 ;; We link the static abseil libraries here to avoid problems in
10618 ;; downstream libraries using potentially different variants of
10619 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10620 (native-inputs
10621 (list python-setuptools))
10622 (inputs
10623 (list pybind11-2
10624 static-abseil-cpp
10625 python))
10626 (propagated-inputs
10627 (list python-absl-py
10628 python-attrs
10629 python-numpy
10630 python-wrapt))
10631 (home-page "https://github.com/deepmind/tree")
10632 (synopsis "Work with nested data structures in Python")
10633 (description "Tree is a python library for working with nested data
10634structures. In a way, @code{tree} generalizes the builtin @code{map} function
10635which only supports flat sequences, and allows you to apply a function to each
10636leaf preserving the overall structure.")
10637 (license license:asl2.0)))
10638
10639(define-public python-pyment
10640 (package
10641 (name "python-pyment")
10642 (version "0.3.4")
10643 (source
10644 (origin
10645 (method git-fetch)
10646 (uri
10647 (git-reference
10648 (url "https://github.com/dadadel/pyment")
10649 (commit (string-append "v" version))))
10650 (file-name (git-file-name name version))
10651 (sha256
10652 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10653 (build-system pyproject-build-system)
10654 (native-inputs (list python-pytest python-setuptools))
10655 (home-page "https://github.com/dadadel/pyment/")
10656 (synopsis "Convert Python docstrings automatically")
10657 (description "Pyment is a command line tool and library that can be
10658used to convert between several docstring styles.")
10659 (license license:gpl3+)))
10660
10661(define-public python-docstring-parser
10662 (package
10663 (name "python-docstring-parser")
10664 (version "0.15")
10665 (source (origin
10666 (method url-fetch)
10667 (uri (pypi-uri "docstring_parser" version))
10668 (sha256
10669 (base32
10670 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10671 (build-system pyproject-build-system)
10672 (native-inputs (list python-poetry-core python-pytest))
10673 (home-page "https://github.com/rr-/docstring_parser")
10674 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10675 (description "This package lets you parse Python docstrings in reST,
10676Google and Numpydoc format.")
10677 (license license:expat)))
10678
10679(define-public python-docutils
10680 (package
10681 (name "python-docutils")
10682 (version "0.22.4")
10683 (source
10684 (origin
10685 (method url-fetch)
10686 (uri (pypi-uri "docutils" version))
10687 (sha256
10688 (base32 "0s4ryafs954ivgb7bifzpbv98vb2mcr0s8wi9nvwpglsvqgkpdad"))))
10689 (build-system pyproject-build-system)
10690 (arguments
10691 (list
10692 #:test-backend #~'custom
10693 #:test-flags #~(list "test/alltests.py")
10694 #:phases
10695 (if (target-hurd?)
10696 #~(modify-phases %standard-phases
10697 (add-before 'check 'fix-errno
10698 (lambda _
10699 ;; Some tests check for an exact error message
10700 ;; Expecting ENOENT == 2.
10701 (substitute* (find-files "test" "\\.py$")
10702 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10703 #~%standard-phases)))
10704 (native-inputs
10705 (list python-flit-core))
10706 (home-page "https://docutils.sourceforge.net/")
10707 (synopsis "Python Documentation Utilities")
10708 (description
10709 "Docutils is a modular system for processing documentation into useful
10710formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10711easy to use markup language, for input.
10712
10713This package provides tools for converting @file{.rst} files to other formats
10714via commands such as @command{rst2man}, as well as supporting Python code.")
10715 ;; Most of the source code is public domain, but some source files are
10716 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10717 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10718
10719(define-public python-docutils-0.19
10720 (hidden-package
10721 (package
10722 (inherit python-docutils)
10723 (version "0.19")
10724 (source (origin
10725 (method url-fetch)
10726 (uri (pypi-uri "docutils" version))
10727 (sha256
10728 (base32
10729 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10730 (native-inputs
10731 (list python-setuptools)))))
10732
10733(define-public python-docx
10734 (package
10735 (name "python-docx")
10736 (version "1.2.0")
10737 (source (origin
10738 (method url-fetch)
10739 (uri (pypi-uri "python_docx" version))
10740 (sha256
10741 (base32
10742 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10743 (build-system pyproject-build-system)
10744 (native-inputs
10745 (list behave
10746 python-pyparsing
10747 python-pytest
10748 python-setuptools
10749 python-wheel))
10750 (propagated-inputs
10751 (list python-lxml python-typing-extensions))
10752 (home-page "https://github.com/python-openxml/python-docx/")
10753 (synopsis "Python library to create and modify Microsoft Word documents")
10754 (description "This Python library can be used to create and update
10755Microsoft Word (.docx) documents.")
10756 (license license:expat)))
10757
10758(define-public python-repoze-lru
10759 (package
10760 (name "python-repoze-lru")
10761 (version "0.7")
10762 (source
10763 (origin
10764 (method url-fetch)
10765 (uri (pypi-uri "repoze.lru" version))
10766 (sha256
10767 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
10768 (build-system pyproject-build-system)
10769 (arguments
10770 (list
10771 #:test-backend #~'unittest
10772 #:test-flags #~(list "discover" "repoze")))
10773 (native-inputs
10774 (list python-setuptools))
10775 (home-page "https://www.repoze.org")
10776 (synopsis "Tiny LRU cache implementation and decorator")
10777 (description
10778 "This package provides a tiny LRU cache implementation and decorator.")
10779 (license license:bsd-4)))
10780
10781(define-public python-reretry
10782 (package
10783 (name "python-reretry")
10784 (version "0.11.8")
10785 (source
10786 (origin
10787 (method git-fetch)
10788 (uri (git-reference
10789 (url "https://github.com/leshchenko1979/reretry")
10790 (commit version)))
10791 (file-name (git-file-name name version))
10792 (sha256
10793 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
10794 (build-system pyproject-build-system)
10795 (native-inputs
10796 (list python-pytest python-pytest-asyncio python-setuptools))
10797 (home-page "https://github.com/leshchenko1979/reretry")
10798 (synopsis "Functional decorator for retrying on exceptions")
10799 (description
10800 "This package is a fork from the retry package, but with some of added
10801community-sourced features. It provides an easy to use, but functional
10802decorator for retrying on exceptions.")
10803 (license license:asl2.0)))
10804
10805(define-public python-restructuredtext-lint
10806 (package
10807 (name "python-restructuredtext-lint")
10808 (version "2.0.2")
10809 (source
10810 (origin
10811 (method git-fetch)
10812 (uri (git-reference
10813 (url "https://github.com/twolfson/restructuredtext-lint")
10814 (commit version)))
10815 (file-name (git-file-name name version))
10816 (sha256
10817 (base32 "1q86a1qd9xwyl5h76b4yk2hpbnbyq6llla7rmnnp9ifrgax6vx6j"))))
10818 (build-system pyproject-build-system)
10819 (arguments (list #:test-backend #~'unittest))
10820 (propagated-inputs (list python-docutils))
10821 (native-inputs (list python-setuptools))
10822 (home-page "https://github.com/twolfson/restructuredtext-lint")
10823 (synopsis "Linter")
10824 (description
10825 "This package provides a linter for the reStructuredText format.")
10826 (license license:unlicense)))
10827
10828(define-public python-click-repl
10829 (package
10830 (name "python-click-repl")
10831 ;; To support Python 3.12, see:
10832 ;; <https://github.com/click-contrib/click-repl/issues/128>.
10833 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
10834 (revision . "1")))
10835 (version (git-version "0.3.0"
10836 (assoc-ref properties 'revision)
10837 (assoc-ref properties 'commit)))
10838 (source
10839 (origin
10840 (method git-fetch)
10841 (uri (git-reference
10842 (url "https://github.com/click-contrib/click-repl")
10843 (commit (assoc-ref properties 'commit))))
10844 (file-name (git-file-name name version))
10845 (sha256
10846 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
10847 (build-system pyproject-build-system)
10848 (native-inputs
10849 (list python-pytest
10850 python-setuptools))
10851 (propagated-inputs
10852 (list python-click
10853 python-prompt-toolkit))
10854 (home-page "https://github.com/click-contrib/click-repl")
10855 (synopsis "REPL plugin for Click")
10856 (description "This package provides a REPL plugin for Click.")
10857 (license license:expat)))
10858
10859(define-public python-pygdbmi
10860 (package
10861 (name "python-pygdbmi")
10862 (version "0.11.0.0")
10863 (source
10864 (origin
10865 (method url-fetch)
10866 (uri (pypi-uri "pygdbmi" version))
10867 (sha256
10868 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
10869 (build-system pyproject-build-system)
10870 (arguments (list #:tests? #f)) ;no tests in PyPI archive
10871 (native-inputs (list python-setuptools python-wheel))
10872 (home-page "https://github.com/cs01/pygdbmi")
10873 (synopsis "Parse gdb machine interface output with Python")
10874 (description "This package provides a parse gdb machine interface output
10875with Python.")
10876 (license license:expat)))
10877
10878(define-public python-pygtrie
10879 (package
10880 (name "python-pygtrie")
10881 (version "2.5.0")
10882 (source
10883 (origin
10884 (method git-fetch)
10885 (uri (git-reference
10886 (url "https://github.com/mina86/pygtrie")
10887 (commit (string-append "v" version))))
10888 (file-name (git-file-name name version))
10889 (sha256
10890 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
10891 (build-system pyproject-build-system)
10892 (arguments
10893 (list
10894 #:test-backend #~'unittest
10895 #:phases
10896 #~(modify-phases %standard-phases
10897 (add-after 'unpack 'set-version
10898 (lambda _
10899 (delete-file "version.py")
10900 (substitute* "setup.py"
10901 (("import version")
10902 "")
10903 (("version\\.get_version\\(\\)")
10904 (format #f "~s" #$version))))))))
10905 (native-inputs (list python-setuptools))
10906 (home-page "https://github.com/mina86/pygtrie")
10907 (synopsis "Pure Python trie data structure implementation")
10908 (description
10909 "This package provides a pure Python trie data structure implementation.")
10910 (license license:asl2.0)))
10911
10912(define-public python-bump2version
10913 (package
10914 (name "python-bump2version")
10915 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
10916 (revision . "1")))
10917 (version (git-version "1.0.1"
10918 (assoc-ref properties 'revision)
10919 (assoc-ref properties 'commit)))
10920 (source
10921 (origin
10922 (method git-fetch)
10923 (uri (git-reference
10924 (url "https://github.com/c4urself/bump2version")
10925 (commit (assoc-ref properties 'commit))))
10926 (file-name (git-file-name name version))
10927 (sha256
10928 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
10929 (build-system pyproject-build-system)
10930 (arguments
10931 ;; XXX: Single flaky failing test.
10932 (list #:test-flags #~(list "-k" "not test_usage_string")))
10933 (native-inputs (list python-pytest python-setuptools python-testfixtures))
10934 (home-page "https://github.com/c4urself/bump2version")
10935 (synopsis "Version-bump your software with a single command!")
10936 (description
10937 "This package provides a small command line tool to simplify releasing
10938software by updating all version strings in your source code by the correct
10939increment. It also creates commits and tags.")
10940 (license license:expat)))
10941
10942(define-public python-deprecated
10943 (package
10944 (name "python-deprecated")
10945 (version "1.3.1")
10946 (source
10947 (origin
10948 (method git-fetch)
10949 (uri (git-reference
10950 (url "https://github.com/tantale/deprecated")
10951 (commit (string-append "v" version))))
10952 (file-name (git-file-name name version))
10953 (sha256
10954 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
10955 (build-system pyproject-build-system)
10956 (native-inputs
10957 (list python-pytest
10958 python-setuptools))
10959 (propagated-inputs
10960 (list python-wrapt))
10961 (home-page "https://github.com/tantale/deprecated")
10962 (synopsis "Python decorator to deprecate classes, functions or methods")
10963 (description
10964 "The @code{deprecated} decorator provides a convenient way to deprecate
10965to deprecate classes, functions or methods.")
10966 (license license:expat)))
10967
10968(define-public python-pygithub
10969 (package
10970 (name "python-pygithub")
10971 (version "2.8.1")
10972 (source
10973 (origin
10974 (method git-fetch)
10975 (uri (git-reference
10976 (url "https://github.com/PyGithub/PyGithub")
10977 (commit (string-append "v" version))))
10978 (file-name (git-file-name name version))
10979 (sha256
10980 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
10981 (build-system pyproject-build-system)
10982 (propagated-inputs
10983 (list python-pyjwt
10984 python-pynacl
10985 python-requests
10986 python-typing-extensions
10987 python-urllib3))
10988 (native-inputs
10989 (list python-responses
10990 python-pytest
10991 python-setuptools
10992 python-setuptools-scm))
10993 (home-page "https://pygithub.readthedocs.io/en/latest/")
10994 (synopsis "Python library for the GitHub API")
10995 (description "This library allows managing GitHub resources such as
10996repositories, user profiles, and organizations in your Python applications,
10997using version 3 of the GitHub application programming interface (API).")
10998 (license license:lgpl3+)))
10999
11000(define-public python-rellu
11001 (package
11002 (name "python-rellu")
11003 (version "0.7")
11004 (source
11005 (origin
11006 (method git-fetch)
11007 (uri (git-reference
11008 (url "https://github.com/robotframework/rellu")
11009 (commit (string-append "v" version))))
11010 (file-name (git-file-name name version))
11011 (sha256
11012 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
11013 (build-system pyproject-build-system)
11014 (native-inputs (list python-pytest python-setuptools))
11015 (propagated-inputs (list python-invoke python-pygithub))
11016 (home-page "https://github.com/robotframework/rellu")
11017 (synopsis "Utilities to create PyPI releases")
11018 (description
11019 "This collection of utilities contains tooling and templates to assist in
11020creating releases on GitHub and publishing them on PyPI. It is designed to be
11021used by Robot Framework and tools and libraries in its ecosystem, but can
11022naturally be used also by other projects.")
11023 (license license:asl2.0)))
11024
11025(define-public python-robotframework
11026 (package
11027 (name "python-robotframework")
11028 (version "7.3.2")
11029 (source
11030 (origin
11031 (method git-fetch) ; no tests in the PyPI archive
11032 (uri (git-reference
11033 (url "https://github.com/robotframework/robotframework")
11034 (commit (string-append "v" version))))
11035 (file-name (git-file-name name version))
11036 (sha256
11037 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
11038 (outputs '("out" "doc"))
11039 (build-system pyproject-build-system)
11040 (arguments
11041 (list
11042 #:modules '((guix build pyproject-build-system)
11043 (guix build utils)
11044 (ice-9 ftw)
11045 (ice-9 match)
11046 (srfi srfi-26))
11047 #:phases
11048 #~(modify-phases %standard-phases
11049 (add-before 'build 'build-and-install-doc
11050 (lambda* (#:key outputs #:allow-other-keys)
11051 (let ((doc (string-append #$output:doc
11052 "/share/doc/robotframework")))
11053 (invoke "invoke" "library-docs" "all")
11054 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
11055 (mkdir-p doc)
11056 (with-directory-excursion "dist"
11057 (define user-guide-dir
11058 (match (scandir "." (cut string-prefix?
11059 "robotframework-userguide-" <>))
11060 ((dir) dir)
11061 (_ (error "could not find the user guide directory"))))
11062 (copy-recursively user-guide-dir doc)))))
11063 (replace 'check
11064 (lambda* (#:key tests? #:allow-other-keys)
11065 (when tests?
11066 ;; TODO: Some acceptance failed and took near 30min to
11067 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
11068 ;; to skip failing ones.
11069 (format #t "Running unit tests...~%")
11070 (invoke "utest/run.py")))))))
11071 (native-inputs
11072 (list python-docutils
11073 python-invoke
11074 python-jsonschema
11075 python-pygments
11076 python-rellu
11077 python-typing-extensions
11078 python-setuptools
11079 `(,python "tk") ;used when building the HTML doc
11080 python-wheel))
11081 (home-page "https://robotframework.org")
11082 (synopsis "Generic automation framework")
11083 (description "Robot Framework is a generic automation framework for
11084acceptance testing, acceptance test driven development (ATDD), and robotic
11085process automation (RPA).")
11086 (license license:asl2.0)))
11087
11088(define-public python-robotframework-datadriver
11089 (package
11090 (name "python-robotframework-datadriver")
11091 (version "1.11.2")
11092 (source
11093 (origin
11094 (method git-fetch) ; no tests in PyPI release
11095 (uri (git-reference
11096 (url "https://github.com/Snooz82/robotframework-datadriver")
11097 (commit version)))
11098 (file-name (git-file-name name version))
11099 (sha256
11100 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
11101 (build-system pyproject-build-system)
11102 (arguments
11103 (list
11104 #:phases
11105 #~(modify-phases %standard-phases
11106 (add-before 'check 'skip-problematic-tests
11107 (lambda _
11108 (for-each delete-file-recursively
11109 (list
11110 ;; The test file 'tab-csv-file-name.tsv' contains
11111 ;; special characters for which there is no locale
11112 ;; in the build environment, causing one test to
11113 ;; fail.
11114 "atest/TestCases/csv_reader_config"
11115 ;; Error in file on line 6: Non-existing setting
11116 ;; 'Test Tags'.
11117 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
11118 (replace 'check
11119 (lambda* (#:key tests? #:allow-other-keys)
11120 (when tests?
11121 (with-directory-excursion "atest"
11122 (invoke "sh" "run_atest.sh"))))))))
11123 (native-inputs
11124 (list python-docutils
11125 python-robotframework-stacktrace
11126 python-setuptools
11127 python-xlrd))
11128 (propagated-inputs
11129 (list python-openpyxl
11130 python-pandas
11131 python-pygments
11132 python-robotframework))
11133 (home-page "https://github.com/Snooz82/robotframework-datadriver")
11134 (synopsis "Data-driven test extension for Robot Framework")
11135 (description "DataDriver is a data-driven extension for Robot Framework.
11136DataDriver uses the Listener Interface of Robot Framework to create new test
11137cases based on a data file that contains the test data. DataDriver supports
11138data files in the CSV, XLS or XLSX formats.")
11139 (license license:asl2.0)))
11140
11141(define-public python-robotframework-pabot
11142 (package
11143 (name "python-robotframework-pabot")
11144 (version "4.2.0")
11145 (source
11146 (origin
11147 ;; There are no tests in the PyPI archive.
11148 (method git-fetch)
11149 (uri (git-reference
11150 (url "https://github.com/mkorpela/pabot")
11151 (commit version)))
11152 (file-name (git-file-name name version))
11153 (sha256
11154 (base32
11155 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
11156 (build-system pyproject-build-system)
11157 (arguments
11158 (list
11159 #:test-flags
11160 #~(list "-k" (string-join
11161 ;; XXX: Maybe it's a bad idea to skip these tests which
11162 ;; failing assertions highlight incomparability issues.
11163 ;;
11164 ;; 93 passed, 23 deselected, 11 warnings
11165 (list "not test_argumentfile_outputs"
11166 "test_dependency_ok"
11167 "test_longnames_in_tests"
11168 "test_multiple_dependencies_ok"
11169 "test_orders"
11170 "test_pabotprerunmodifier"
11171 "test_pabotprerunmodifier_with_prerunmodifier"
11172 "test_pabotprerunmodifier_with_testlevelsplit"
11173 "test_pabotprerunmodifier_with_testlevelsplit_and_"
11174 "test_parallel_execution"
11175 "test_parallel_execution_with_testlevelsplit"
11176 "test_pre_run_with_new_name"
11177 "test_pre_run_with_new_tag"
11178 "test_run_dir_2_then_dir_3"
11179 "test_run_dir_3_then_dir_2"
11180 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
11181 "test_sleep_test_cases_and_group"
11182 "test_stdout_should_display_passed_test"
11183 "test_stdout_should_display_passed_test"
11184 "test_stdout_should_display_passed_test_and_not_"
11185 "test_testlevelsplit_output_task_order"
11186 "test_too_big_testname"
11187 "test_two_orders")
11188 " and not "))
11189 #:phases
11190 #~(modify-phases %standard-phases
11191 (add-after 'unpack 'relax-requirements
11192 (lambda _
11193 (substitute* "setup.cfg"
11194 ;; natsort>=8.2.0
11195 ((">=8.2.0") "")))))))
11196 (native-inputs
11197 (list python-pytest
11198 python-setuptools
11199 python-wheel))
11200 (propagated-inputs
11201 (list python-natsort
11202 python-robotframework
11203 python-robotframework-stacktrace))
11204 (home-page "https://pabot.org")
11205 (synopsis "Parallel test runner for Robot Framework")
11206 (description "Pabot is a parallel executor for Robot Framework tests.")
11207 (license license:asl2.0)))
11208
11209(define-public python-robotframework-stacktrace
11210 (package
11211 (name "python-robotframework-stacktrace")
11212 (version "0.4.1")
11213 (source
11214 (origin
11215 (method git-fetch)
11216 (uri (git-reference
11217 (url "https://github.com/MarketSquare/robotframework-stacktrace")
11218 (commit version)))
11219 (file-name (git-file-name name version))
11220 (sha256
11221 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
11222 (build-system pyproject-build-system)
11223 (arguments
11224 ;; XXX: The test suite fails (see:
11225 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
11226 (list
11227 #:tests? #f
11228 #:phases
11229 #~(modify-phases %standard-phases
11230 (add-after 'unpack 'set-version
11231 (lambda _
11232 (substitute* "setup.py"
11233 (("VERSION =.*")
11234 (string-append "VERSION = '" #$version "'"))))))))
11235 (native-inputs (list python-setuptools))
11236 (propagated-inputs (list python-robotframework))
11237 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
11238 (synopsis "Robot Framework listener to print a stack trace on error")
11239 (description "StackTrace is a Robot Framework listener that prints a stack
11240trace directly to the terminal to ease debugging.")
11241 (license license:asl2.0)))
11242
11243(define-public python-robotframework-sshlibrary
11244 (package
11245 (name "python-robotframework-sshlibrary")
11246 (version "3.8.0")
11247 ;; There are no tests in the PyPI archive.
11248 (source
11249 (origin
11250 (method git-fetch)
11251 (uri (git-reference
11252 (url "https://github.com/robotframework/SSHLibrary")
11253 (commit (string-append "v" version))))
11254 (file-name (git-file-name name version))
11255 (sha256
11256 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
11257 (patches (search-patches
11258 "python-robotframework-sshlibrary-rf5-compat.patch"))))
11259 (build-system pyproject-build-system)
11260 (arguments
11261 (list
11262 #:phases
11263 #~(modify-phases %standard-phases
11264 (add-after 'unpack 'fix-python-incompatibilities
11265 (lambda _
11266 (substitute* (find-files "utest" "\\.py$")
11267 (("assertEquals") "assertEqual"))))
11268 (add-before 'build 'build-and-install-doc
11269 (lambda _
11270 (let ((doc (string-append #$output:doc
11271 "/share/doc/robotframework-sshlibrary")))
11272 (invoke "chmod" "-R" "+w" "docs")
11273 (invoke "invoke" "kw-docs" "project-docs")
11274 (mkdir-p doc)
11275 (for-each delete-file
11276 (find-files "docs" "\\.rst"))
11277 (copy-recursively "docs" doc))))
11278 (replace 'check
11279 (lambda* (#:key tests? #:allow-other-keys)
11280 (when tests?
11281 ;; Some tests require an SSH server; we remove them.
11282 (delete-file "utest/test_client_api.py")
11283 (delete-file "utest/test_scp.py")
11284 (invoke "python" "utest/run.py")))))))
11285 (propagated-inputs
11286 (list python-robotframework python-paramiko python-scp))
11287 (native-inputs
11288 (list openssh
11289 which
11290 ;; To generate the documentation
11291 python-docutils
11292 python-invoke
11293 python-pygments
11294 python-rellu
11295 python-setuptools))
11296 (outputs '("out" "doc"))
11297 (home-page "https://github.com/robotframework/SSHLibrary")
11298 (synopsis "Robot Framework library for SSH and SFTP")
11299 (description
11300 "SSHLibrary is a Robot Framework library providing support for SSH and
11301SFTP. It has the following main usages:
11302@itemize @bullet
11303@item Executing commands on the remote machine, either blocking or non-blocking.
11304@item Writing and reading in an interactive shell.
11305@item Transferring files and directories over SFTP.
11306@item Ensuring that files and directories exist on the remote machine.
11307@end itemize")
11308 (license license:asl2.0)))
11309
11310(define-public python-robotframework-pythonlibcore
11311 (package
11312 (name "python-robotframework-pythonlibcore")
11313 (version "4.4.1")
11314 (source
11315 (origin
11316 (method git-fetch) ;no tests in pypi archive
11317 (uri (git-reference
11318 (url "https://github.com/robotframework/PythonLibCore")
11319 (commit (string-append "v" version))))
11320 (file-name (git-file-name name version))
11321 (sha256
11322 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
11323 (build-system pyproject-build-system)
11324 (arguments
11325 (list
11326 #:test-backend #~'custom
11327 #:test-flags #~(list "utest/run.py")))
11328 (native-inputs
11329 (list python-approvaltests
11330 python-pytest
11331 python-pytest-cov ; This package has a custom way to run tests.
11332 python-pytest-mockito
11333 python-robotframework
11334 python-setuptools))
11335 (home-page "https://github.com/robotframework/PythonLibCore")
11336 (synopsis "Robot Framework Python library tools")
11337 (description
11338 "PythonLibCore provides tools for creating larger test libraries for
11339Robot Framework using Python. The Robot Framework hybrid and dynamic library
11340APIs give more flexibility for library than the static library API, but they
11341also set requirements for libraries which need to be implemented in the
11342library side. PythonLibCore eases the problem by providing a simpler
11343interface and by handling all the requirements towards the Robot Framework
11344library APIs.")
11345 (license license:asl2.0)))
11346
11347(define-public python-robotframework-seleniumlibrary
11348 (package
11349 (name "python-robotframework-seleniumlibrary")
11350 (version "6.8.0")
11351 (source
11352 (origin
11353 (method git-fetch)
11354 (uri (git-reference
11355 (url "https://github.com/robotframework/SeleniumLibrary")
11356 (commit (string-append "v" version))))
11357 (file-name (git-file-name name version))
11358 (sha256
11359 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
11360 (build-system pyproject-build-system)
11361 (arguments
11362 (list
11363 #:test-flags
11364 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
11365 "-k" (string-join
11366 (list "not test_create_firefox_with_options"
11367 "test_create_headless_firefox_with_options"
11368 "test_create_driver_firefox")
11369 " and not "))))
11370 (native-inputs
11371 (list python-approvaltests
11372 python-pytest
11373 python-pytest-mockito
11374 python-setuptools))
11375 (propagated-inputs
11376 (list python-click
11377 python-robotframework
11378 python-robotframework-pythonlibcore
11379 python-selenium))
11380 (home-page "https://github.com/robotframework/SeleniumLibrary")
11381 (synopsis "Web testing library for Robot Framework")
11382 (description "SeleniumLibrary is a web testing library for Robot Framework
11383that utilizes the Selenium tool internally.")
11384 (license license:asl2.0)))
11385
11386(define-public python-robotframework-seleniumscreenshots
11387 (package
11388 (name "python-robotframework-seleniumscreenshots")
11389 (version "0.9.5")
11390 (source
11391 (origin
11392 (method git-fetch)
11393 (uri (git-reference
11394 (url
11395 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11396 (commit version)))
11397 (file-name (git-file-name name version))
11398 (sha256
11399 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
11400 (build-system pyproject-build-system)
11401 (arguments
11402 ;; XXX: The tests require a relatively complicated setup configured in
11403 ;; their CI with Nix (!).
11404 `(#:tests? #f))
11405 (native-inputs (list python-setuptools))
11406 (propagated-inputs
11407 (list python-robotframework python-robotframework-seleniumlibrary))
11408 (home-page
11409 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11410 (synopsis
11411 "Robot Framework library for annotating and cropping screenshots")
11412 (description
11413 "The SeleniumScreenshots library for Robot Framework provides keywords
11414for annotating and cropping screenshots taken with SeleniumLibrary. It is
11415useful for scripting automatically updated screenshots for documentation or
11416for visual regression testing purposes.")
11417 (license license:bsd-3)))
11418
11419(define-public python-rstr
11420 (package
11421 (name "python-rstr")
11422 (version "3.2.2")
11423 (source
11424 (origin
11425 (method git-fetch)
11426 (uri (git-reference
11427 (url "https://github.com/leapfrogonline/rstr")
11428 (commit version)))
11429 (file-name (git-file-name name version))
11430 (sha256
11431 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
11432 (build-system pyproject-build-system)
11433 (native-inputs (list python-pytest
11434 python-setuptools
11435 python-setuptools-scm
11436 python-wheel))
11437 (home-page "https://github.com/leapfrogonline/rstr")
11438 (synopsis "Generate random strings in Python")
11439 (description "This package provides a python module for generating
11440random strings of various types. It could be useful for fuzz testing,
11441generating dummy data, or other applications. It has no dependencies
11442outside the standard library.")
11443 (license license:bsd-3)))
11444
11445(define-public python-scp
11446 (package
11447 (name "python-scp")
11448 (version "0.15.0")
11449 (source
11450 (origin
11451 (method git-fetch)
11452 (uri (git-reference
11453 (url "https://github.com/jbardin/scp.py")
11454 (commit (string-append "v" version))))
11455 (file-name (git-file-name name version))
11456 (sha256
11457 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
11458 (build-system pyproject-build-system)
11459 (arguments (list #:tests? #f)) ;tests require an SSH server
11460 (native-inputs (list python-setuptools))
11461 (propagated-inputs (list python-paramiko))
11462 (home-page "https://github.com/jbardin/scp.py")
11463 (synopsis "SCP protocol module for Python and Paramiko")
11464 (description
11465 "The scp module extends the Paramiko library to send and receive files
11466via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
11467 (license license:gpl2+)))
11468
11469(define-public python-rst-linker
11470 (package
11471 (name "python-rst-linker")
11472 (version "2.6.0")
11473 (source
11474 (origin
11475 (method git-fetch)
11476 (uri (git-reference
11477 (url "https://github.com/jaraco/rst.linker")
11478 (commit (string-append "v" version))))
11479 (file-name (git-file-name name version))
11480 (sha256
11481 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
11482 (build-system pyproject-build-system)
11483 (propagated-inputs (list python-jaraco-context))
11484 (native-inputs
11485 (list python-path
11486 python-jaraco-vcs
11487 python-pytest
11488 python-pytest-subprocess
11489 python-setuptools-scm
11490 python-setuptools))
11491 (home-page "https://github.com/jaraco/rst.linker")
11492 (synopsis "Sphinx plugin to add links and timestamps")
11493 (description
11494 "rst.linker automatically replaces text by a reStructuredText external
11495reference or timestamps. It's primary purpose is to augment the changelog,
11496but it can be used for other documents, too.")
11497 (license license:expat)))
11498
11499(define-public python-feedgenerator
11500 (package
11501 (name "python-feedgenerator")
11502 (version "2.1.0")
11503 (source
11504 (origin
11505 (method url-fetch)
11506 (uri (pypi-uri "feedgenerator" version))
11507 (sha256
11508 (base32
11509 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
11510 (build-system pyproject-build-system)
11511 (native-inputs
11512 (list python-pytest python-setuptools python-wheel))
11513 (propagated-inputs
11514 (list python-pytz))
11515 (home-page "https://github.com/getpelican/feedgenerator")
11516 (synopsis
11517 "Standalone version of Django's Atom/RSS feed generator")
11518 (description
11519 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11520which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11521 (license license:bsd-3)))
11522
11523(define-public python-lsp-jsonrpc
11524 (package
11525 (name "python-lsp-jsonrpc")
11526 (version "1.1.2")
11527 (source
11528 (origin
11529 (method url-fetch)
11530 (uri (pypi-uri "python-lsp-jsonrpc" version))
11531 (sha256
11532 (base32
11533 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11534 (build-system pyproject-build-system)
11535 (native-inputs
11536 (list python-pyflakes
11537 python-pytest
11538 python-setuptools
11539 python-setuptools-scm
11540 python-wheel))
11541 (propagated-inputs
11542 (list python-ujson))
11543 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11544 (synopsis "JSON RPC 2.0 server library")
11545 (description
11546 "This package provides a JSON RPC 2.0 server library for Python.")
11547 (license license:expat)))
11548
11549(define-public python-pydantic
11550 (package
11551 (name "python-pydantic")
11552 (version "2.12.5")
11553 (source
11554 (origin
11555 (method git-fetch)
11556 (uri (git-reference
11557 (url "https://github.com/samuelcolvin/pydantic")
11558 (commit (string-append "v" version))))
11559 (file-name (git-file-name name version))
11560 (sha256
11561 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11562 (build-system pyproject-build-system)
11563 (arguments
11564 (list
11565 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11566 #:test-flags
11567 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11568 (native-inputs
11569 (list tzdata-for-tests
11570 python-dirty-equals-bootstrap
11571 python-faker
11572 python-hatch-fancy-pypi-readme
11573 python-hatchling
11574 python-jsonschema
11575 python-pytest
11576 python-pytest-benchmark
11577 python-pytest-examples
11578 python-pytest-mock
11579 python-pytest-run-parallel
11580 python-pytz))
11581 (propagated-inputs
11582 (list python-annotated-types
11583 python-pydantic-core ;it's hard == requirement, keep it in sync
11584 python-typing-extensions
11585 python-typing-inspection))
11586 (home-page "https://github.com/samuelcolvin/pydantic")
11587 (synopsis "Python data validation and settings management")
11588 (description
11589 "Pydantic enforces type hints at runtime, and provides user friendly
11590errors when data is invalid.")
11591 (license license:expat)))
11592
11593(define-public python-pydantic-core
11594 (package
11595 (name "python-pydantic-core")
11596 (version "2.41.5")
11597 (source
11598 (origin
11599 (method url-fetch)
11600 (uri (pypi-uri "pydantic_core" version))
11601 (sha256
11602 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11603 (build-system pyproject-build-system)
11604 (arguments
11605 (list
11606 #:imported-modules `(,@%cargo-build-system-modules
11607 ,@%pyproject-build-system-modules)
11608 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11609 (guix build pyproject-build-system)
11610 (guix build utils))
11611 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11612 #:test-flags
11613 #~(list "--ignore=tests/benchmarks"
11614 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11615 ;; python-pydantic-core -> python-pydantic ->
11616 ;; python-inline-snapshot -> python-pydantic-core
11617 "--ignore=tests/test_docstrings.py"
11618 "--ignore=tests/test_hypothesis.py"
11619 "--ignore=tests/validators/test_allow_partial.py"
11620 "--ignore=tests/validators/test_frozenset.py"
11621 "--ignore=tests/validators/test_list.py"
11622 "--ignore=tests/validators/test_set.py")
11623 #:phases
11624 #~(modify-phases %standard-phases
11625 (add-after 'unpack 'prepare-cargo-build-system
11626 (lambda args
11627 (for-each (lambda (phase)
11628 (format #t "Running cargo phase: ~a~%" phase)
11629 (apply (assoc-ref cargo:%standard-phases phase)
11630 #:cargo-target #$(cargo-triplet)
11631 args))
11632 '(unpack-rust-crates
11633 configure
11634 check-for-pregenerated-files
11635 patch-cargo-checksums)))))))
11636 (native-inputs
11637 (append
11638 (list maturin
11639 python-dirty-equals-bootstrap
11640 python-pytest
11641 python-pytest-benchmark ;TODO: disable in pyproject.toml
11642 python-pytest-mock
11643 python-pytest-timeout
11644 python-typing-inspection
11645 python-tzdata
11646 rust
11647 `(,rust "cargo"))
11648 (or (and=> (%current-target-system)
11649 (compose list make-rust-sysroot))
11650 '())))
11651 (inputs
11652 (cargo-inputs 'python-pydantic-core))
11653 (propagated-inputs
11654 (list python-typing-extensions))
11655 (home-page "https://github.com/pydantic/pydantic-core")
11656 (synopsis "Core validation logic for pydantic")
11657 (description "This package provides the core functionality for pydantic
11658validation and serialization.")
11659 (license license:expat)))
11660
11661(define-public python-pydantic-cli
11662 (package
11663 (name "python-pydantic-cli")
11664 (version "9.1.0")
11665 (source
11666 (origin
11667 (method git-fetch) ;for tests
11668 (uri (git-reference
11669 (url "https://github.com/mpkocher/pydantic-cli")
11670 (commit (string-append "v" version))))
11671 (file-name (git-file-name name version))
11672 (sha256
11673 (base32
11674 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11675 (build-system pyproject-build-system)
11676 (propagated-inputs
11677 (list python-pydantic))
11678 (native-inputs
11679 (list python-hatchling python-pytest))
11680 (home-page "https://github.com/mpkocher/pydantic-cli")
11681 (synopsis "Turn Pydantic defined data models into CLI tools")
11682 (description
11683 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11684Interfaces} via data models provided in the JSON format.")
11685 (license license:expat)))
11686
11687(define-public python-pydantic-extra-types
11688 (package
11689 (name "python-pydantic-extra-types")
11690 (version "2.10.6")
11691 (source
11692 (origin
11693 (method git-fetch)
11694 (uri (git-reference
11695 (url "https://github.com/pydantic/pydantic-extra-types")
11696 (commit (string-append "v" version))))
11697 (file-name (git-file-name name version))
11698 (sha256
11699 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11700 (build-system pyproject-build-system)
11701 (arguments
11702 (list
11703 ;; tests: 13079 passed, 1 deselected
11704 #:test-flags
11705 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11706 #~(list "--ignore=tests/test_s3.py"
11707 "--deselect=tests/test_coordinate.py::test_json_schema"
11708 ;; XXX: The most of the tests fail, pendulum is optional package
11709 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11710 ;; requires Rust.
11711 "--ignore=tests/test_pendulum_dt.py"
11712 "--ignore=tests/test_json_schema.py")
11713 #:phases
11714 #~(modify-phases %standard-phases
11715 (add-before 'check 'pre-check
11716 (lambda* (#:key inputs #:allow-other-keys)
11717 (setenv "TZ" "UTC")
11718 (setenv "TZDIR" (search-input-directory inputs
11719 "share/zoneinfo")))))))
11720 (native-inputs
11721 (list python-pytest
11722 python-hatchling
11723 tzdata-for-tests))
11724 (propagated-inputs
11725 (list python-pydantic
11726 python-typing-extensions
11727 ;; [optional]
11728 python-cron-converter
11729 ;; python-pendulum
11730 python-phonenumbers
11731 python-pycountry
11732 python-pymongo
11733 python-pytz
11734 python-semver
11735 python-tzdata
11736 python-ulid))
11737 (home-page "https://github.com/pydantic/pydantic-extra-types")
11738 (synopsis "Extra Pydantic types")
11739 (description "This package provides sxtra types for Pydantic.")
11740 (license license:expat)))
11741
11742(define-public python-pydantic-settings
11743 (package
11744 (name "python-pydantic-settings")
11745 (version "2.12.0")
11746 (source
11747 (origin
11748 (method url-fetch)
11749 (uri (pypi-uri "pydantic_settings" version))
11750 (sha256
11751 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11752 (build-system pyproject-build-system)
11753 (arguments
11754 (list
11755 ;; tests: 399 passed, 27 skipped
11756 #:test-flags
11757 ;; XXX: Ignore tests requiring python-ruff.
11758 #~(list "--ignore=tests/test_docs.py")
11759 #:phases
11760 #~(modify-phases %standard-phases
11761 (add-before 'check 'set-home
11762 (lambda _
11763 ;; FileNotFoundError: [Errno 2] No such file or directory:
11764 ;; '/homeless-shelter/
11765 (setenv "HOME" "/tmp"))))))
11766 (native-inputs
11767 (list python-hatchling
11768 python-pytest
11769 python-pytest-examples
11770 python-pytest-mock))
11771 (propagated-inputs
11772 (list python-dotenv
11773 python-pydantic
11774 python-typing-inspection
11775 ;; [optional]
11776 python-pyyaml
11777 python-tomli))
11778 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
11779 (synopsis "Settings management using Pydantic")
11780 (description
11781 "Pydantic Settings provides optional Pydantic features for loading a
11782settings or config class from environment variables or secrets files.")
11783 (license license:expat)))
11784
11785(define-public python-pydoc-markdown
11786 (package
11787 (name "python-pydoc-markdown")
11788 (version "4.8.2")
11789 (source
11790 (origin
11791 (method url-fetch)
11792 (uri (pypi-uri "pydoc_markdown" version))
11793 (sha256
11794 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
11795 (build-system pyproject-build-system)
11796 (arguments
11797 (list
11798 #:tests? #false ;there are none
11799 #:phases
11800 '(modify-phases %standard-phases
11801 ;; This is probably not a good idea, but it wants a rather old
11802 ;; version of docstring-parser.
11803 (add-after 'unpack 'relax-requirements
11804 (lambda _
11805 (substitute* "pyproject.toml"
11806 (("docstring-parser = .*")
11807 "docstring-parser = \"^0\"\n")))))))
11808 (propagated-inputs (list python-click
11809 python-databind-core
11810 python-databind-json
11811 python-docspec
11812 python-docspec-python
11813 python-docstring-parser
11814 python-jinja2
11815 python-nr-util
11816 python-pyyaml
11817 python-requests
11818 python-tomli
11819 python-tomli-w
11820 python-watchdog
11821 python-yapf))
11822 (native-inputs (list python-poetry-core))
11823 (home-page "https://pypi.org/project/pydoc-markdown/")
11824 (synopsis "Create Python API documentation in Markdown format")
11825 (description "Pydoc-Markdown is a tool to create Python API documentation
11826in Markdown format. Instead of executing your Python code like so many other
11827documentation tools, it parses it using docspec instead.")
11828 (license license:expat)))
11829
11830;; XXX: The project is deprecated upstream, still in use by some packages,
11831;; consider to remove when nothing depends on it.
11832(define-public python-pydocstyle
11833 (package
11834 (name "python-pydocstyle")
11835 (version "6.3.0")
11836 (source
11837 (origin
11838 (method git-fetch) ;no tests in PyPI archive
11839 (uri (git-reference
11840 (url "https://github.com/PyCQA/pydocstyle")
11841 (commit version)))
11842 (file-name (git-file-name name version))
11843 (sha256
11844 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
11845 (patches (search-patches
11846 "python-pydocstyle-add-support-for-pep701.patch"))))
11847 (build-system pyproject-build-system)
11848 (arguments
11849 (list
11850 ;; It tries to install with pip.
11851 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
11852 #:phases
11853 #~(modify-phases %standard-phases
11854 (add-after 'unpack 'set-version
11855 (lambda _
11856 (substitute* "pyproject.toml"
11857 (("0.0.0-dev") #$version)))))))
11858 (native-inputs
11859 (list python-poetry-core
11860 python-pytest
11861 python-tomli))
11862 (propagated-inputs
11863 (list python-six
11864 python-snowballstemmer))
11865 (home-page "https://github.com/PyCQA/pydocstyle/")
11866 (synopsis "Python docstring style checker")
11867 (description
11868 "This package provides a style checker for the Python Language
11869Server (PLS).")
11870 (license license:expat)))
11871
11872(define-public python-lsp-server
11873 (package
11874 (name "python-lsp-server")
11875 (version "1.14.0")
11876 (source
11877 (origin
11878 (method git-fetch)
11879 (uri (git-reference
11880 (url "https://github.com/python-lsp/python-lsp-server")
11881 (commit (string-append "v" version))))
11882 (file-name (git-file-name name version))
11883 (sha256
11884 (base32 "1dyp49x844c4mja0qg01nilsbi09w7526izsk3pi5zpylmhmvbk2"))
11885 (patches
11886 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
11887 (build-system pyproject-build-system)
11888 (arguments
11889 (list
11890 #:test-flags
11891 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
11892 "-k"
11893 (string-append
11894 "not test_concurrent_ws_requests " ; flaky
11895 "and not test_pyqt_completion " ; avoid pyqt5
11896 "and not test_pandas_completion")) ; avoid pandas
11897 #:phases
11898 #~(modify-phases %standard-phases
11899 (add-before 'check 'set-HOME
11900 (lambda _ (setenv "HOME" "/tmp"))))))
11901 (propagated-inputs
11902 (list python-black
11903 python-docstring-to-markdown
11904 python-flake8
11905 python-jedi
11906 python-lsp-jsonrpc
11907 python-mccabe
11908 python-pluggy
11909 python-pycodestyle
11910 python-pydocstyle
11911 python-pyflakes
11912 python-pylint
11913 python-rope
11914 python-ujson
11915 python-whatthepatch
11916 python-yapf))
11917 (native-inputs
11918 (list python-flaky
11919 python-matplotlib
11920 python-pytest
11921 python-setuptools
11922 python-setuptools-scm
11923 python-websockets))
11924 (home-page "https://github.com/python-lsp/python-lsp-server")
11925 (synopsis "Python implementation of the Language Server Protocol")
11926 (description
11927 "The Python Language Server @command{pylsp} is an implementation of the
11928Python 3 language specification for the Language Server Protocol (LSP).
11929This tool is used in text editing environments to provide a complete
11930and integrated feature-set for programming Python effectively.")
11931 (license license:expat)))
11932
11933(define-public python-black
11934 (package
11935 (name "python-black")
11936 (version "26.5.1")
11937 (source
11938 (origin
11939 (method git-fetch)
11940 (uri (git-reference
11941 (url "https://github.com/psf/black")
11942 (commit version)))
11943 (file-name (git-file-name name version))
11944 (sha256
11945 (base32 "13fsaasnbgvlnxzsy81mlyp2pjni7fpp1v9gwh7xmq0pzxzai8h8"))))
11946 (build-system pyproject-build-system)
11947 (arguments
11948 (list
11949 ;; tests: 443 passed, 3 skipped, 4 subtests passed
11950 #:test-flags
11951 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
11952 ;; Diffs are not equal.
11953 (string-append "--deselect=tests/test_format.py"
11954 "::test_simple_format"
11955 "[module_docstring_after_comment]"))
11956 #:phases
11957 #~(modify-phases %standard-phases
11958 (add-after 'patch-source-shebangs 'use-absolute-file-names
11959 (lambda* (#:key inputs #:allow-other-keys)
11960 (substitute* (find-files "tests" "\\.py$")
11961 (("#!/usr/bin/env python3")
11962 (string-append
11963 "#!" (search-input-file inputs "/bin/python3")))))))))
11964 (propagated-inputs
11965 (list python-click
11966 python-mypy-extensions
11967 python-packaging
11968 python-pathspec
11969 python-platformdirs
11970 python-pytokens
11971 ;; [optional]
11972 python-aiohttp))
11973 (native-inputs
11974 (list python-hatch-fancy-pypi-readme
11975 python-hatch-vcs
11976 python-hatchling
11977 python-pytest
11978 python-pytest-xdist))
11979 (home-page "https://github.com/psf/black")
11980 (synopsis "The uncompromising code formatter")
11981 (description "Black is the uncompromising Python code formatter.")
11982 (license license:expat)))
11983
11984(define-public python-black-macchiato
11985 (package
11986 (name "python-black-macchiato")
11987 (version "1.3.0")
11988 (source
11989 (origin
11990 (method git-fetch)
11991 (uri (git-reference
11992 (url "https://github.com/wbolster/black-macchiato")
11993 (commit version)))
11994 (file-name (git-file-name name version))
11995 (sha256
11996 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
11997 (build-system pyproject-build-system)
11998 (arguments
11999 (list
12000 #:phases
12001 #~(modify-phases %standard-phases
12002 (add-after 'unpack 'ignore-failing-tests
12003 (lambda _
12004 (substitute* "test_macchiato.py"
12005 (("\\(.*\\n'\\)," all)
12006 (string-append "# " all))))))))
12007 (native-inputs (list python-pytest python-setuptools))
12008 (propagated-inputs (list python-black))
12009 (home-page "https://github.com/wbolster/black-macchiato")
12010 (synopsis "Partial @code{python-black} formatting")
12011 (description
12012 "This package is built on top the @code{python-black} code formatter to
12013enable formatting of partial files.")
12014 (license license:bsd-3)))
12015
12016(define-public python-blinker
12017 (package
12018 (name "python-blinker")
12019 (version "1.9.0")
12020 (source
12021 (origin
12022 (method url-fetch)
12023 (uri (pypi-uri "blinker" version))
12024 (sha256
12025 (base32
12026 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
12027 (build-system pyproject-build-system)
12028 (native-inputs
12029 (list python-flit-core
12030 python-pytest
12031 python-pytest-asyncio))
12032 (home-page "https://pythonhosted.org/blinker/")
12033 (synopsis "Fast, simple object-to-object and broadcast signaling")
12034 (description
12035 "Blinker provides a fast dispatching system that allows any number of
12036interested parties to subscribe to events, or \"signals\".")
12037 (license license:expat)))
12038
12039(define-public pelican
12040 (package
12041 (name "pelican")
12042 (version "4.11.0")
12043 (source
12044 (origin
12045 (method url-fetch)
12046 (uri (pypi-uri "pelican" version))
12047 (sha256
12048 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
12049 (build-system pyproject-build-system)
12050 (arguments
12051 (list
12052 #:test-flags #~(list "-k" (string-append
12053 ;; These tests failed with AssertionError.
12054 "not test_typogrify_ignore_filters"
12055 " and not test_typogrify_ignore_tags"
12056 " and not test_error_on_warning"))))
12057 (native-inputs
12058 (list python-anyio
12059 python-beautifulsoup4
12060 python-lxml
12061 python-pdm-backend
12062 python-pytest
12063 python-smartypants
12064 python-typogrify))
12065 (inputs
12066 (list python-blinker
12067 python-dateutil
12068 ;; Ignoring `guix lint` warning as python-docutils is used to support
12069 ;; reStructuredText processing at runtime.
12070 python-docutils
12071 python-feedgenerator
12072 python-jinja2
12073 python-ordered-set
12074 python-pygments
12075 python-rich
12076 python-tzdata
12077 python-unidecode
12078 python-watchfiles))
12079 (home-page "https://blog.getpelican.com/")
12080 (synopsis "Python-based static site publishing system")
12081 (description
12082 "Pelican is a tool to generate a static blog from reStructuredText,
12083Markdown input files, and more. Pelican uses Jinja2 for templating
12084and is very extensible.")
12085 (license license:agpl3+)))
12086
12087(define-public python-cykhash
12088 (package
12089 (name "python-cykhash")
12090 (version "2.0.1")
12091 (source
12092 (origin
12093 (method url-fetch)
12094 (uri (pypi-uri "cykhash" version))
12095 (sha256
12096 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
12097 (build-system pyproject-build-system)
12098 (arguments
12099 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
12100 (native-inputs
12101 (list python-cython
12102 python-setuptools))
12103 (home-page "https://github.com/realead/cykhash")
12104 (synopsis "Khash-sets and maps")
12105 (description
12106 "This package is a Cython wrapper for khash-sets/maps. It brings
12107functionality of
12108@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
12109Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
12110world is lacking the concept of a (hash-)set. This shortcoming is fixed and
12111efficient (memory- and speedwise compared to pandas) @code{unique} and
12112@code{isin} are implemented. Python-set/dict have a big memory-footprint.
12113For some datatypes the overhead can be reduced by using khash by factor 4-8.")
12114 (license license:expat)))
12115
12116(define-public python-cython
12117 ;; TODO: Move to python-build.
12118 (package
12119 (name "python-cython")
12120 (version "3.2.5")
12121 (source
12122 (origin
12123 (method git-fetch)
12124 (uri (git-reference
12125 (url "https://github.com/cython/cython")
12126 (commit version)))
12127 (file-name (git-file-name name version))
12128 (sha256
12129 (base32 "07n0x4z0ifkhl8hi47amqhqfjc6jlh5dra9r54nlsnwnai83psy1"))))
12130 (build-system pyproject-build-system)
12131 (arguments
12132 (list
12133 #:test-backend #~'custom
12134 #:test-flags
12135 #~(list "runtests.py"
12136 "-vv"
12137 ;; Some tests fail when number of cores are 24, keep on save
12138 ;; minimal count.
12139 "-j" (number->string (min 8 (parallel-job-count)))
12140 "-x" (string-join
12141 (list "annotate_html"
12142 "Debugger"
12143 ;; It fails with AssertionError: Failed doctest test
12144 ;; for complex_numbers_cpp.double_abs.
12145 ;; See: <https://github.com/cython/cython/issues/6528>.
12146 "complex_numbers_cpp"
12147 #$@(if (target-32bit?)
12148 ;; XXX: On 32-bit architectures, running the
12149 ;; parallel tests fails on many-core systems.
12150 ;; See: <https://github.com/cython/cython/issues/2807>.
12151 '("run.parallel"
12152 ;; Test cpp_stl_any.cast_test fails.
12153 ;; See: <https://github.com/cython/cython/issues/5928>.
12154 "cpp_stl_any")
12155 '())
12156 #$@(if (system-hurd?)
12157 '("test_class_ref"
12158 "test_compiler_directives"
12159 "test_lang_version")
12160 '()))
12161 "|"))
12162 #:phases
12163 #~(modify-phases %standard-phases
12164 (add-before 'check 'pre-check
12165 (lambda* (#:key tests? test-flags #:allow-other-keys)
12166 ;; Disable compiler optimizations to greatly reduce the running
12167 ;; time of the test suite.
12168 (setenv "CFLAGS" "-O0")
12169 ;; Some tests require access to "$HOME/.cython".
12170 (setenv "HOME" "/tmp"))))))
12171 (native-inputs
12172 (list libxcrypt
12173 python-setuptools))
12174 ;; we need the full python package and not just the python-wrapper
12175 ;; because we need libpython3.3m.so
12176 (inputs
12177 (list python))
12178 (home-page "https://cython.org/")
12179 (synopsis "C extensions for Python")
12180 (description "Cython is an optimising static compiler for both the Python
12181programming language and the extended Cython programming language. It makes
12182writing C extensions for Python as easy as Python itself.")
12183 (license license:asl2.0)))
12184
12185(define-public python-cython-0
12186 (package
12187 (inherit python-cython)
12188 ;; It's the latest version of 0.29. See
12189 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
12190 (version "0.29.37")
12191 (source
12192 (origin
12193 (method url-fetch)
12194 (uri (pypi-uri "Cython" version))
12195 (sha256
12196 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
12197 (arguments
12198 (list
12199 ;; XXX: Tests are broken with [email protected], but dependent packages
12200 ;; build, so keep it until unnecessary.
12201 #:tests? #f
12202 #:test-backend #~'custom
12203 #:test-flags
12204 #~(list "runtests.py"
12205 "-vv"
12206 "-j" (number->string (parallel-job-count))
12207 ;; XXX: On 32-bit architectures, running the parallel tests
12208 ;; fails on many-core systems, see
12209 ;; <https://github.com/cython/cython/issues/2807>.
12210 #$@(if (target-32bit?)
12211 #~("-x" "run.parallel")
12212 #~())
12213 #$@(if (system-hurd?)
12214 #~("-x" "test_class_ref"
12215 "-x" "test_compiler_directives"
12216 "-x" "test_lang_version")
12217 #~())
12218 ;; This test fails when running on 24 cores.
12219 "-x" "cpp_stl_conversion")
12220 #:phases
12221 #~(modify-phases %standard-phases
12222 (add-after 'unpack 'fix-pyximport-python-3.12
12223 (lambda _
12224 (let ((importlib-util-load-dynamic "\
12225import importlib.util
12226from importlib.machinery import ExtensionFileLoader
12227
12228def load_dynamic(name, path):
12229 loader = ExtensionFileLoader(name, path)
12230 spec = importlib.util.spec_from_file_location(name, loader=loader)
12231 module = importlib.util.module_from_spec(spec)
12232 spec.loader.exec_module(module)
12233 return module
12234"))
12235 (substitute* "pyximport/pyximport.py"
12236 (("^import imp")
12237 importlib-util-load-dynamic)
12238 (("imp\\.load_dynamic")
12239 "load_dynamic")))))
12240 (add-before 'check 'pre-check
12241 ;; some tests require access to "$HOME/.cython"
12242 (lambda _
12243 (setenv "HOME" "/tmp")
12244 ;; Disable compiler optimizations to greatly reduce the running
12245 ;; time of the test suite.
12246 (setenv "CFLAGS" "-O0"))))))))
12247
12248;; XXX: Deprecated on <2026-05-28>.
12249(define-public python-cython-next python-cython)
12250
12251;; NOTE: when upgrading numpy please make sure that python-numba,
12252;; python-pandas and python-scipy still build, as these three packages are
12253;; often used together.
12254(define-public python-numpy
12255 (package
12256 (name "python-numpy")
12257 (version "2.4.6")
12258 (source
12259 (origin
12260 ;; XXX: When switching to Git it fails to find Numpy's fork of Meson
12261 ;; git submodule -- <https://github.com/numpy/meson>.
12262 (method url-fetch)
12263 (uri (string-append
12264 "https://github.com/numpy/numpy/releases/download/v"
12265 version "/numpy-" version ".tar.gz"))
12266 (sha256
12267 (base32 "1nkx73blw298dzdk6blhrsann60cgdy7q6n3q9m785ia9865g8zk"))))
12268 (build-system pyproject-build-system)
12269 (arguments
12270 (list
12271 ;; tests: 47255 passed, 1079 skipped, 32 xfailed, 2 xpassed, 318 warnings
12272 #:modules '((guix build utils)
12273 (guix build pyproject-build-system)
12274 (ice-9 format))
12275 #:test-flags
12276 #~(list "-m" "not slow"
12277 "--numprocesses" (number->string (min 8 (parallel-job-count))))
12278 #:phases
12279 #~(modify-phases %standard-phases
12280 (add-after 'unpack 'fix-executable-paths
12281 (lambda* (#:key inputs #:allow-other-keys)
12282 (substitute* "numpy/distutils/exec_command.py"
12283 (("'/bin/sh'")
12284 (format #f "~s" (which "bash"))))
12285 (substitute* "numpy/meson.build"
12286 ;; Relay on python from the PATH instead of full reference
12287 ;; stored in built wheel.
12288 (("'py.full_path\\(\\)'") "'python'"))
12289 (substitute* "numpy/_core/tests/test_cpu_features.py"
12290 (("/bin/true")
12291 (search-input-file inputs "bin/true")))))
12292 (add-before 'build 'parallelize-build
12293 (lambda _
12294 (setenv "OMP_NUM_THREAD"
12295 (number->string (parallel-job-count)))
12296 (setenv "NPY_NUM_BUILD_JOBS"
12297 (number->string (parallel-job-count)))))
12298 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12299 ;; when the gfortran header is used. Remove gfortran from
12300 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12301 ;; <https://issues.guix.gnu.org/73439#45>.
12302 (add-after 'set-paths 'hide-gfortran
12303 (lambda* (#:key inputs #:allow-other-keys)
12304 (let ((gfortran (assoc-ref inputs "gfortran")))
12305 (setenv "CPLUS_INCLUDE_PATH"
12306 (string-join
12307 (delete (string-append gfortran "/include/c++")
12308 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12309 ":")))))
12310 (add-before 'build 'configure-blas
12311 (lambda _
12312 (call-with-output-file "site.cfg"
12313 (lambda (port)
12314 (format port
12315 "[openblas]
12316libraries = openblas
12317library_dirs = ~a/lib
12318include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
12319 (replace 'check
12320 (lambda* (#:key tests? test-flags #:allow-other-keys)
12321 (when tests?
12322 (with-directory-excursion #$output
12323 (apply invoke "pytest" test-flags)
12324 (let ((pytest-cache (string-append #$output
12325 "/.pytest_cache")))
12326 (when (access? pytest-cache X_OK)
12327 (delete-file-recursively pytest-cache)))))))
12328 ;; The executables provided by this package ('f2py' and 'numpy-config')
12329 ;; only depend on Python. By customizing the wrap phase we can ensure
12330 ;; that we don't add all Python packages listed in native-inputs to
12331 ;; the closure. This significantly reduces the overall closure size.
12332 ;;
12333 ;; See also <https://bugs.gnu.org/25235>.
12334 (replace 'wrap
12335 (lambda* (#:key inputs outputs #:allow-other-keys)
12336 (for-each
12337 (lambda (program)
12338 (wrap-program program
12339 `("GUIX_PYTHONPATH" ":" suffix
12340 ,(list (site-packages inputs outputs)))))
12341 (find-files (in-vicinity #$output "/bin"))))))))
12342 (native-inputs
12343 (list gfortran
12344 python-cython
12345 python-hypothesis
12346 python-meson
12347 python-pytest
12348 python-pytest-xdist))
12349 (inputs
12350 (list bash
12351 openblas))
12352 (home-page "https://numpy.org")
12353 (synopsis "Fundamental package for scientific computing with Python")
12354 (description "NumPy is the fundamental package for scientific computing
12355with Python. It contains among other things: a powerful N-dimensional array
12356object, sophisticated (broadcasting) functions, tools for integrating C/C++
12357and Fortran code, useful linear algebra, Fourier transform, and random number
12358capabilities.")
12359 (properties
12360 '((upstream-name . "numpy")))
12361 (license license:bsd-3)))
12362
12363(define-public python-numpy-1
12364 (package
12365 (inherit python-numpy)
12366 (name "python-numpy")
12367 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
12368 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
12369 ;; in upstream Meson.
12370 ;;
12371 ;; See:
12372 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
12373 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
12374 ;; - file <doc/source/building/understanding_meson.rst>
12375 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
12376 (source
12377 (origin
12378 (method url-fetch)
12379 (uri (string-append
12380 "https://github.com/numpy/numpy/releases/download/v"
12381 version "/numpy-" version ".tar.gz"))
12382 (sha256
12383 (base32
12384 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
12385 (patches (search-patches "python-numpy-gcc-14.patch"))))
12386 (arguments
12387 (list
12388 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
12389 #:modules '((guix build utils)
12390 (guix build pyproject-build-system)
12391 (ice-9 format))
12392 #:phases
12393 #~(modify-phases %standard-phases
12394 (add-after 'unpack 'delete-test-files
12395 (lambda _
12396 ;; These tests depend on older setuptools, see:
12397 ;; <https://github.com/numpy/numpy/issues/27531>.
12398 ;;
12399 ;; E ModuleNotFoundError: No module named
12400 ;; 'distutils.msvccompiler'
12401 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
12402 (delete-file "numpy/distutils/tests/test_system_info.py")))
12403 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12404 ;; when the gfortran header is used. Remove gfortran from
12405 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12406 ;; <https://issues.guix.gnu.org/73439#45>.
12407 (add-after 'set-paths 'hide-gfortran
12408 (lambda* (#:key inputs #:allow-other-keys)
12409 (let ((gfortran (assoc-ref inputs "gfortran")))
12410 (setenv "CPLUS_INCLUDE_PATH"
12411 (string-join
12412 (delete (string-append gfortran "/include/c++")
12413 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12414 ":")))))
12415 (add-before 'build 'relax-gcc-14-strictness
12416 (lambda _
12417 (setenv "CFLAGS"
12418 "-g -O2 -Wno-error=implicit-function-declaration")))
12419 (add-before 'build 'parallelize-build
12420 (lambda _
12421 (setenv "NPY_NUM_BUILD_JOBS"
12422 (number->string (parallel-job-count)))))
12423 (add-before 'build 'configure-blas
12424 (lambda* (#:key inputs #:allow-other-keys)
12425 (call-with-output-file "site.cfg"
12426 (lambda (port)
12427 (format port
12428 "\
12429[openblas]
12430libraries = openblas
12431library_dirs = ~a/lib
12432include_dirs = ~:*~a/include~%"
12433 (dirname (dirname
12434 (search-input-file
12435 inputs "include/openblas_config.h"))))))))
12436 (add-before 'build 'fix-executable-paths
12437 (lambda* (#:key inputs #:allow-other-keys)
12438 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
12439 ;; instead of /bin/sh.
12440 (substitute* "numpy/distutils/exec_command.py"
12441 (("'/bin/sh'")
12442 (format #f "~s" (search-input-file inputs "bin/bash"))))
12443 ;; Don't try to call '/bin/true' specifically.
12444 (substitute* "numpy/core/tests/test_cpu_features.py"
12445 (("/bin/true") (search-input-file inputs "bin/true")))))
12446 (replace 'check
12447 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
12448 (when tests?
12449 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
12450 "-j" (number->string (parallel-job-count))
12451 ;; Contrary to scipy, the runtests.py script of numpy
12452 ;; does *not* automatically provide -n when -j is used
12453 ;; (see: https://github.com/numpy/numpy/issues/21359).
12454 "--" "-n" (number->string (parallel-job-count))
12455 ;; Disable Pytest Warnings, they are resolved in the
12456 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
12457 ;; applied to fixtures have no effect,
12458 ;; DeprecationWarning.
12459 "-p" "no:warnings"
12460 "-k" (string-append
12461 ;; These tests may fail on 32-bit systems (see:
12462 ;; https://github.com/numpy/numpy/issues/18387).
12463 "not test_float_remainder_overflow "
12464 "and not test_pareto "
12465 ;; The 'test_rint_big_int' test fails on older
12466 ;; x86_64 CPUs such as the Core 2 Duo (see:
12467 ;; https://github.com/numpy/numpy/issues/22170).
12468 "and not test_rint_big_int "
12469 ;; They fail to detect compiler.
12470 "and not test_compile1 "
12471 "and not test_compile2 "
12472 ;; Due to disabled warnings
12473 "and not test_getattr_warning "
12474 "and not test_integer_signs "
12475 "and not test_implicit_cast_float_to_int_fails "
12476 "and not test_integer_signs "
12477 ;; The huge_array test is too large for 32-bit (see:
12478 ;; https://bugs.gentoo.org/843599 and
12479 ;; https://bugs.gentoo.org/846548).
12480 ;; TestKind.test_all is a Fortran type failure
12481 ;; that may be toolchain or environment related.
12482 #$@(if (or (target-x86?) (target-arm32?))
12483 `(" and not test_identityless_reduction_huge_array"
12484 " and not (TestKind and test_all)")
12485 '())
12486 ;; This test fails with a Fortran failure (16
12487 ;; expected but got -1), due to the fact that it
12488 ;; requires a 64-bit system.
12489 #$@(if (or (target-x86-32?) (target-arm32?))
12490 `(" and not test_int")
12491 '())
12492 ;; These tests fail when building from aarch64-linux.
12493 #$@(if (target-arm32?)
12494 `(" and not test_features"
12495 " and not test_unary_spurious_fpexception")
12496 '())
12497 ;; These tests seem to fail on machines without
12498 ;; an FPU is still under investigation upstream.
12499 ;; https://github.com/numpy/numpy/issues/20635
12500 #$@(if (target-riscv64?)
12501 `(" and not test_fp_noncontiguous")
12502 '())
12503 ;; They also fail with gcc-14
12504 " and not test_float"
12505 " and not test_fpclass"
12506
12507 ;; These tests fail with gcc-14
12508 " and not test_context_locality"
12509 " and not test_cosh"
12510 " and not test_default_policy_singleton"
12511 " and not test_exp_exceptions"
12512 " and not test_half_fpe"
12513 " and not test_owner_is_base"
12514 " and not test_policy_propagation"
12515 " and not test_set_policy"
12516 " and not test_sinh"
12517 " and not test_square_values"
12518 " and not test_sum"
12519 " and not test_switch_owner"
12520 " and not test_thread_locality"
12521
12522 ;; These tests depend on older setuptools, see:
12523 ;; <https://github.com/numpy/numpy/issues/27531>.
12524 " and not test_api_importable"
12525 " and not test_all_modules_are_expected_2")))))
12526 ;; See comment for custom python-numpy wrap phase above.
12527 (replace 'wrap
12528 (lambda* (#:key inputs outputs #:allow-other-keys)
12529 (for-each
12530 (lambda (program)
12531 (wrap-program program
12532 `("GUIX_PYTHONPATH" ":" suffix
12533 ,(list (site-packages inputs outputs)))))
12534 (find-files (in-vicinity #$output "/bin"))))))))
12535 (native-inputs
12536 (list python-hypothesis
12537 python-meson
12538 python-pytest
12539 python-pytest-xdist
12540 python-setuptools
12541 python-typing-extensions
12542 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12543 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12544 ;; <https://github.com/numpy/numpy/issues/24318>.
12545 gcc ;fevn.h c[++] include must precede fortran's
12546 gfortran))
12547 (inputs (list bash openblas))))
12548
12549(define-deprecated/public-alias python-numpy-2 python-numpy)
12550
12551(define-public python-numpysane
12552 (package
12553 (name "python-numpysane")
12554 (version "0.43")
12555 (source
12556 (origin
12557 (method git-fetch)
12558 (uri (git-reference
12559 (url "https://github.com/dkogan/numpysane.git")
12560 (commit (string-append "v" version))))
12561 (file-name (git-file-name name version))
12562 (sha256
12563 (base32 "1ls1nrdcizscdpv4712jr7wiaxkmryrai7w0ci06fiq5haq54hrn"))))
12564 (build-system pyproject-build-system)
12565 (arguments
12566 (list
12567 #:phases
12568 #~(modify-phases %standard-phases
12569 (add-after 'unpack 'patch
12570 (lambda* (#:key inputs outputs #:allow-other-keys)
12571 (let* ((numpy (assoc-ref inputs "python-numpy"))
12572 (site (site-packages inputs `(("out" . ,numpy)))))
12573 (substitute* "Makefile.common.header"
12574 ;; See: <https://github.com/dkogan/numpysane/issues/3>.
12575 (("pkg-config --cflags-only-I numpy")
12576 (format #f "echo -I~a/numpy/_core/include" site))))))
12577 (replace 'check
12578 (lambda _
12579 (setenv "CC"
12580 #$(cc-for-target))
12581 (invoke "make" "check"))))))
12582 (propagated-inputs (list python-numpy))
12583 (native-inputs (list perl pkg-config python-setuptools))
12584 (home-page "https://github.com/dkogan/numpysane")
12585 (synopsis "More-reasonable core functionality for numpy")
12586 (description
12587 "This package provides more-reasonable core functionality for numpy.
12588
12589A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12590
12591numpysane has:
12592@itemize
12593@item easier broadcasting
12594@item nicer array manipulation
12595@item array concatenation
12596@item manipulation of dimensions
12597@item broadcast-aware inner product
12598@item broadcast-aware outer product
12599@item broadcast-aware 2-norm
12600@item broadcast-aware matrix multiplication
12601@end itemize
12602")
12603 (license license:lgpl2.0+)))
12604
12605(define-public python-numpy-documentation
12606 (package
12607 (inherit python-numpy)
12608 (name "python-numpy-documentation")
12609 (arguments
12610 (list
12611 #:tests? #f ;we're only generating the documentation
12612 #:phases
12613 #~(modify-phases %standard-phases
12614 (add-after 'unpack 'avoid-external-deps
12615 (lambda _
12616 ;; XXX: Avoid search-button to avoid sphinx error
12617 ;; TemplateNotFound('search-button.html')
12618 (substitute* "doc/source/conf.py"
12619 (("\"search-button\",") ""))
12620 ;; XXX: Avoid theme-switcher to avoid sphinx error
12621 ;; TemplateNotFound('theme-switcher.html')
12622 (substitute* "doc/source/conf.py"
12623 (("\"theme-switcher\",") ""))
12624 ;; XXX: Avoid version-switcher because it depends on the value
12625 ;; of external https://numpy.org/doc/_static/versions.json
12626 (substitute* "doc/source/conf.py"
12627 (("\"version-switcher\",") ""))))
12628 (add-before 'build 'add-gnu-freefont-to-texmf
12629 (lambda _
12630 ;; XXX: The Sphinx-generated tex output specifies the GNU
12631 ;; FreeFont font to be searched via its extension, which uses
12632 ;; kpathsea instead of fontconfig and fail (see:
12633 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12634 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12635 ;; GUIX_TEXMF.
12636 (mkdir-p "texmf-dist/fonts/opentype/public")
12637 (symlink (string-append
12638 #$(this-package-native-input "font-gnu-freefont")
12639 "/share/fonts/opentype")
12640 (string-append
12641 (getcwd) "/"
12642 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12643 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12644 (getcwd) "/texmf-dist"))))
12645 (replace 'build
12646 (lambda _
12647 (chdir "doc")
12648 (let ((sphinxopts (string-append
12649 "SPHINXOPTS=-j"
12650 (number->string (parallel-job-count)))))
12651 ;; Do not treat warnings as errors.
12652 (substitute* "Makefile"
12653 ((" -WT ") " -T "))
12654 (setenv "HOME" "/tmp")
12655 ;; Build the PDF documentation.
12656 (invoke "make" "latex-build" sphinxopts)
12657 ;; FIXME: PDF build fails
12658 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12659 ;; Build the HTML documentation
12660 (invoke "make" "html" sphinxopts)
12661 ;; Build the Info documentation. The issues worked around
12662 ;; below can be tracked at
12663 ;; https://github.com/numpy/numpy/issues/12278.
12664 (substitute* "source/conf.py"
12665 ;; The root document should be "index", not "contents".
12666 (("\"contents\"") "'index'")
12667 ;; Disable Sphinx extensions that produce broken Texinfo.
12668 ((".*'numpydoc'.*") "")
12669 ((".*'sphinx.ext.autodoc'.*") "")
12670 ((".*'sphinx.ext.autosummary'.*") ""))
12671 (invoke "make" "info" sphinxopts))))
12672 (replace 'install
12673 (lambda _
12674 (let* ((data (string-append #$output "/share"))
12675 (doc (string-append data "/doc/numpy"))
12676 (html (string-append doc "/html"))
12677 (info (string-append data "/info")))
12678 ;; Install the HTML documentation.
12679 (mkdir-p html)
12680 (copy-recursively "build/html" html)
12681 ;; Install the PDF reference and user manuals.
12682 ;; FIXME:
12683 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12684 ;; (install-file "build/latex/numpy-user.pdf" doc)
12685 ;; Install the info manual.
12686 (install-file "build/texinfo/numpy.info" info)
12687 (symlink (string-append html "/_images")
12688 (string-append info "/numpy-figures"))))))))
12689 (native-inputs
12690 (list font-gnu-freefont
12691 perl
12692 python-breathe
12693 python-ipython
12694 python-jupyterlite-sphinx
12695 python-matplotlib
12696 python-numpy
12697 python-numpydoc
12698 python-pandas
12699 python-pydata-sphinx-theme
12700 python-scipy ;used by matplotlib
12701 python-setuptools
12702 python-sphinx
12703 python-sphinx-copybutton
12704 python-sphinx-design
12705 texinfo
12706 (texlive-local-tree
12707 (list texlive-cbfonts
12708 texlive-cm-super
12709 texlive-cmap
12710 texlive-expdlist
12711 texlive-fandol
12712 texlive-greek-fontenc
12713 texlive-latexmk
12714 texlive-polyglossia
12715 texlive-xetex
12716 texlive-xindy))))
12717 (inputs '())
12718 (propagated-inputs '())
12719 (synopsis "Documentation for the @code{python-numpy} package")
12720 (description "This package provides the complete NumPy documentation in
12721the Texinfo, and HTML formats.")))
12722
12723(define-public python-numpy-stl
12724 (package
12725 (name "python-numpy-stl")
12726 (version "3.2.0")
12727 (source
12728 (origin
12729 (method url-fetch)
12730 (uri (pypi-uri "numpy_stl" version))
12731 (sha256
12732 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12733 (build-system pyproject-build-system)
12734 (native-inputs
12735 (list python-cython
12736 python-pytest
12737 python-setuptools
12738 python-wheel))
12739 (propagated-inputs
12740 (list python-numpy
12741 python-utils))
12742 (home-page "https://github.com/WoLpH/numpy-stl/")
12743 (synopsis "Read, write and modify binary/ASCII STL files library")
12744 (description
12745 "Library to make reading, writing and modifying both binary and ascii STL
12746files, file format native to the stereolithography CAD software created by 3D
12747Systems, easy.")
12748 (license license:bsd-3)))
12749
12750(define-public python-npx
12751 (package
12752 (name "python-npx")
12753 (version "0.1.6")
12754 (source
12755 (origin
12756 (method git-fetch) ; no source archive in PyPI
12757 (uri (git-reference
12758 (url "https://github.com/sigma-py/npx")
12759 (commit (string-append "v" version))))
12760 (file-name (git-file-name name version))
12761 (sha256
12762 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
12763 (build-system pyproject-build-system)
12764 (native-inputs
12765 (list python-networkx
12766 python-pytest
12767 python-setuptools
12768 python-wheel))
12769 (propagated-inputs
12770 (list python-numpy))
12771 (home-page "https://github.com/nschloe/npx")
12772 (synopsis "Extensions for NumPy")
12773 (description "NumPy is a large library used everywhere in scientific
12774computing. That's why breaking backwards-compatibility comes at a
12775significant cost and is almost always avoided, even if the API of some
12776methods is arguably lacking. This package provides drop-in wrappers
12777\"fixing\" those.")
12778 (license license:bsd-3)))
12779
12780(define-public python-munch
12781 (package
12782 (name "python-munch")
12783 (version "4.0.0")
12784 (source
12785 (origin
12786 (method url-fetch)
12787 (uri (pypi-uri "munch" version))
12788 (sha256
12789 (base32
12790 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
12791 (build-system pyproject-build-system)
12792 (native-inputs
12793 (list python-astroid
12794 python-pytest
12795 python-setuptools
12796 python-wheel))
12797 (home-page "https://github.com/Infinidat/munch")
12798 (synopsis "Dot-accessible dictionary")
12799 (description "Munch is a dot-accessible dictionary similar to JavaScript
12800objects.")
12801 (license license:expat)))
12802
12803(define-public python-colormath2
12804 (package
12805 (name "python-colormath2")
12806 (version "3.0.3")
12807 (source
12808 (origin
12809 (method git-fetch)
12810 (uri (git-reference
12811 (url "https://github.com/bkmgit/python-colormath2")
12812 (commit version)))
12813 (file-name (git-file-name name version))
12814 (sha256
12815 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
12816 (build-system pyproject-build-system)
12817 (propagated-inputs (list python-networkx python-numpy))
12818 (native-inputs (list python-nose2 python-setuptools))
12819 (home-page "https://github.com/bkmgit/python-colormath2")
12820 (synopsis "Color math and conversion library")
12821 (description
12822 "This is a Python library for color math and conversions.")
12823 (license license:bsd-3)))
12824
12825(define-public python-pam
12826 (package
12827 (name "python-pam")
12828 (version "2.0.2")
12829 (source
12830 (origin
12831 (method git-fetch)
12832 (uri (git-reference
12833 (url "https://github.com/FirefighterBlu3/python-pam")
12834 (commit (string-append "v" version))))
12835 (file-name (git-file-name name version))
12836 (sha256
12837 (base32 "05fvf9rg4h7sigzvipm1ghq34zk6i8na7wkyk905nvk4gdhln7ri"))))
12838 (build-system pyproject-build-system)
12839 (arguments
12840 (list
12841 #:test-flags
12842 #~(list "-k"
12843 (string-append " not __normal_"
12844 " and not __env_requires_"
12845 " and not __getenv"
12846 " and not __putenv"
12847 " and not __unset"
12848 " and not _setenv"
12849 " and not _env_set"
12850 " and not __pam_end"
12851 " and not _session_unauthenticated"))
12852 #:phases
12853 #~(modify-phases %standard-phases
12854 (add-after 'unpack 'bake-pam
12855 (lambda* (#:key inputs #:allow-other-keys)
12856 (substitute* "src/pam/__internals.py"
12857 (("find_library\\(\"(pam|pam_misc)\"\\)" all lib)
12858 (string-append
12859 "\""
12860 (search-input-file inputs
12861 (string-append "lib/lib" lib ".so"))
12862 "\"")))))
12863 (add-before 'check 'fix-test-config
12864 (lambda _
12865 (substitute* "pyproject.toml"
12866 (("\"test_\\*.py\"")
12867 (format
12868 #f "[~{~s~^,~}]"
12869 (map basename (find-files "tests" "test_.*\\.py$"))))
12870 (("norecursedirs = (\".*\")" all dirs)
12871 (string-append "norecursedirs = [" dirs "]"))))))))
12872 (inputs (list linux-pam))
12873 (propagated-inputs (list python-six))
12874 (native-inputs (list python-pytest
12875 python-setuptools))
12876 (home-page "https://github.com/FirefighterBlu3/python-pam")
12877 (synopsis "Python PAM module")
12878 (description "This package provides a Python module to interface with
12879@acronym{PAM, pluggable authentication modules}.")
12880 (license license:expat)))
12881
12882(define-public python-pyspnego
12883 (package
12884 (name "python-pyspnego")
12885 (version "0.8.0")
12886 (source (origin
12887 (method url-fetch)
12888 (uri (pypi-uri "pyspnego" version))
12889 (sha256
12890 (base32
12891 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
12892 (build-system pyproject-build-system)
12893 (native-inputs
12894 (list python-pytest python-pytest-mock python-setuptools python-wheel))
12895 (propagated-inputs
12896 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
12897 (home-page "https://github.com/jborean93/pyspnego")
12898 (synopsis "Python SPNEGO library")
12899 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
12900Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
12901parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
12902readable format.")
12903 (license license:expat)))
12904
12905(define-public python-pygit2
12906 (package
12907 (name "python-pygit2")
12908 (version "1.18.2")
12909 (source
12910 (origin
12911 (method url-fetch)
12912 (uri (pypi-uri "pygit2" version))
12913 (sha256
12914 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
12915 (build-system pyproject-build-system)
12916 (propagated-inputs (list python-cffi libgit2))
12917 (native-inputs (list python-pytest python-setuptools python-wheel))
12918 (home-page "https://github.com/libgit2/pygit2")
12919 (synopsis "Python bindings for libgit2")
12920 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
12921 ;; GPL2.0 only, with linking exception.
12922 (license license:gpl2)))
12923
12924(define-public python-patiencediff
12925 (package
12926 (name "python-patiencediff")
12927 (version "0.2.15")
12928 (source
12929 (origin
12930 (method url-fetch)
12931 (uri (pypi-uri "patiencediff" version))
12932 (sha256
12933 (base32
12934 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
12935 (build-system pyproject-build-system)
12936 (arguments
12937 (list
12938 #:phases #~(modify-phases %standard-phases
12939 ;; Fails because bin/patiencediff expects two files to diff
12940 (delete 'sanity-check))))
12941 (native-inputs (list python-pytest python-setuptools python-wheel))
12942 (home-page "https://www.breezy-vcs.org/")
12943 (synopsis "Python implementation of the patiencediff algorithm")
12944 (description
12945 "This package contains a Python implementation of the @code{patiencediff}
12946algorithm. Patiencediff provides a good balance of performance, nice output for
12947humans, and implementation simplicity.")
12948 (license license:gpl2+)))
12949
12950(define-public python-merge3
12951 (package
12952 (name "python-merge3")
12953 (version "0.0.16")
12954 (source
12955 (origin
12956 (method git-fetch)
12957 (uri (git-reference
12958 (url "https://github.com/breezy-team/merge3")
12959 (commit (string-append "v" version))))
12960 (file-name (git-file-name name version))
12961 (sha256
12962 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
12963 (build-system pyproject-build-system)
12964 (arguments (list #:test-backend #~'unittest))
12965 (native-inputs (list python-setuptools))
12966 (home-page "https://github.com/breezy-team/merge3")
12967 (synopsis "Python implementation of 3-way merge")
12968 (description "This Python library implements 3-way merge for text.")
12969 (license license:gpl2+)))
12970
12971(define-public python-fancycompleter
12972 (package
12973 (name "python-fancycompleter")
12974 (version "0.9.1")
12975 (source
12976 (origin
12977 (method git-fetch)
12978 (uri (git-reference
12979 (url "https://github.com/pdbpp/fancycompleter")
12980 (commit version)))
12981 (file-name (git-file-name name version))
12982 (sha256
12983 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
12984 (build-system pyproject-build-system)
12985 (arguments
12986 (list
12987 #:phases
12988 #~(modify-phases %standard-phases
12989 (add-after 'unpack 'fix-setup.py
12990 (lambda _
12991 (substitute* "setup.py"
12992 ((".*setupmeta.*")
12993 "")
12994 (("versioning=.*")
12995 (string-append "version='" #$version "',"))
12996 ((".*pyrepl.*") ; broken on Python 3
12997 "")))))))
12998 (native-inputs (list python-pytest python-setuptools))
12999 (home-page "https://github.com/pdbpp/fancycompleter")
13000 (synopsis "TAB completion library for Python")
13001 (description
13002 "@code{fancycompleter} is a module that adds TAB completion to the
13003interactive prompt. It is an extension of the @code{rlcompleter} module from
13004the standard Python library.")
13005 (license license:bsd-3)))
13006
13007(define-public python-ipdb
13008 (package
13009 (name "python-ipdb")
13010 (version "0.13.13")
13011 (source
13012 (origin
13013 (method git-fetch)
13014 (uri (git-reference
13015 (url "https://github.com/gotcha/ipdb")
13016 (commit version)))
13017 (file-name (git-file-name name version))
13018 (sha256
13019 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
13020 (build-system pyproject-build-system)
13021 (arguments (list #:test-backend #~'unittest))
13022 (native-inputs (list python-setuptools))
13023 (propagated-inputs (list python-ipython python-toml python-decorator))
13024 (home-page "https://github.com/gotcha/ipdb")
13025 (synopsis "IPython-enhanced Python debugger (pdb)")
13026 (description
13027 "@code{ipdb} exports functions to access the IPython debugger, which
13028features tab completion, syntax highlighting, better tracebacks and better
13029introspection than Python's standard @command{pdb} debugger, with which it
13030shares the same interface.")
13031 (license license:bsd-3)))
13032
13033(define-public python-ipfsspec
13034 (package
13035 (name "python-ipfsspec")
13036 (version "0.4.0")
13037 (source
13038 (origin
13039 (method url-fetch)
13040 (uri (pypi-uri "ipfsspec" version))
13041 (sha256
13042 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
13043 (build-system pyproject-build-system)
13044 (arguments
13045 (list
13046 #:test-flags
13047 '(list "-m not local_gw"
13048 ;; Require local gateway
13049 "--ignore=test/test_gateway.py"
13050 ;; Require internet
13051 "--ignore=test/test_async.py"
13052 "--ignore=test/test_ipfs.py")))
13053 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
13054 (native-inputs
13055 (list python-pytest
13056 python-pytest-asyncio
13057 python-setuptools
13058 python-wheel))
13059 (home-page "https://github.com/fsspec/ipfsspec")
13060 (synopsis "Read-only implementation of fsspec for IPFS")
13061 (description "This package provides a read-only implementation of
13062@code{fsspec} for IPFS.")
13063 (license license:expat)))
13064
13065(define-public python-pdftotext
13066 (package
13067 (name "python-pdftotext")
13068 (version "3.0.0")
13069 (source
13070 (origin
13071 (method url-fetch)
13072 (uri (pypi-uri "pdftotext" version))
13073 (sha256
13074 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
13075 (build-system pyproject-build-system)
13076 (native-inputs (list python-pytest python-setuptools python-wheel))
13077 (inputs (list poppler))
13078 (home-page "https://github.com/jalan/pdftotext")
13079 (synopsis "Simple PDF text extraction")
13080 (description "Pdftotext is a Python library of PDF text extraction.")
13081 (license license:expat)))
13082
13083(define-public python-pluginbase
13084 (package
13085 (name "python-pluginbase")
13086 (version "1.0.1")
13087 (source
13088 (origin
13089 (method git-fetch)
13090 (uri (git-reference
13091 (url "https://github.com/mitsuhiko/pluginbase")
13092 (commit (string-append "v" version))))
13093 (file-name (git-file-name name version))
13094 (sha256
13095 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
13096 (build-system pyproject-build-system)
13097 (arguments
13098 (list
13099 #:phases
13100 #~(modify-phases %standard-phases
13101 (replace 'check
13102 (lambda* (#:key tests? #:allow-other-keys)
13103 (when tests?
13104 (invoke "make" "test")))))))
13105 (native-inputs (list python-pytest python-setuptools))
13106 (home-page "https://github.com/mitsuhiko/pluginbase")
13107 (synopsis "Simple but flexible plugin system for Python")
13108 (description
13109 "PluginBase is a library useful in the development of flexible plugin
13110systems in Python.")
13111 (license license:bsd-3)))
13112
13113(define-public python-node-semver
13114 (package
13115 (name "python-node-semver")
13116 (version "0.8.1")
13117 (source
13118 (origin
13119 (method git-fetch)
13120 (uri (git-reference
13121 (url "https://github.com/podhmo/python-node-semver")
13122 (commit version)))
13123 (file-name (git-file-name name version))
13124 (sha256
13125 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
13126 (build-system pyproject-build-system)
13127 (native-inputs (list python-pytest python-setuptools))
13128 (home-page "https://github.com/podhmo/python-node-semver")
13129 (synopsis "Python port of node-semver")
13130 (description
13131 "This module provides a Python version of node-semver, a semantic version
13132parser for Node.js.")
13133 (license license:expat)))
13134
13135(define-public python-norns
13136 (package
13137 (name "python-norns")
13138 (version "0.1.6")
13139 (source
13140 (origin
13141 (method git-fetch)
13142 (uri (git-reference
13143 (url "https://github.com/simonvh/norns")
13144 (commit version)))
13145 (file-name (git-file-name name version))
13146 (sha256
13147 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
13148 (patches
13149 (search-patches "python-norns-nose.patch"))))
13150 (build-system pyproject-build-system)
13151 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
13152 (native-inputs (list python-setuptools))
13153 (home-page "https://github.com/simonvh/norns")
13154 (synopsis "Simple YAML-based config module")
13155 (description "This package provides a simple YAML-based config module.")
13156 (license license:expat)))
13157
13158(define-public python-patch-ng
13159 (package
13160 (name "python-patch-ng")
13161 (version "1.18.1")
13162 (source
13163 (origin
13164 (method git-fetch)
13165 (uri (git-reference
13166 (url "https://github.com/conan-io/python-patch-ng")
13167 (commit version)))
13168 (file-name (git-file-name name version))
13169 (sha256
13170 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
13171 (build-system pyproject-build-system)
13172 (arguments
13173 (list
13174 #:test-backend #~'custom
13175 #:test-flags #~(list "tests/run_tests.py" "-v")))
13176 (native-inputs (list python-pytest python-setuptools))
13177 (home-page "https://github.com/conan-io/python-patch-ng")
13178 (synopsis "Python library to parse and apply unified diffs")
13179 (description
13180 "Patch NG (New Generation) is a command and Python library to parse and
13181apply unified diffs. It has features such as:
13182@itemize
13183@item automatic correction of common patch formatting corruption
13184@item patch format detection (SVN, Hg, Git)
13185@item nice diffstat histogram.
13186@end itemize")
13187 (license license:expat)))
13188
13189(define-public python-numpydoc
13190 (package
13191 (name "python-numpydoc")
13192 (version "1.10.0")
13193 (source
13194 (origin
13195 (method url-fetch)
13196 (uri (pypi-uri "numpydoc" version))
13197 (sha256
13198 (base32
13199 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
13200 (build-system pyproject-build-system)
13201 (arguments
13202 (list
13203 #:test-flags
13204 '(list "numpydoc/tests"
13205 "-k" (string-append
13206 ;; TODO: unclear why these fail.
13207 "not test_MyClass and not test_my_function "
13208 ;; This test compares installed vs source absolute file
13209 ;; names.
13210 "and not test_source_file_name_with_properties"))))
13211 (propagated-inputs (list python-sphinx python-tomli))
13212 (native-inputs
13213 (list python-matplotlib python-pytest python-setuptools))
13214 (home-page "https://pypi.org/project/numpydoc/")
13215 (synopsis "Numpy's Sphinx extensions")
13216 (description "Sphinx extension to support docstrings in Numpy format.")
13217 (license license:bsd-2)))
13218
13219(define-public python-numexpr
13220 (package
13221 (name "python-numexpr")
13222 (version "2.14.1")
13223 (source
13224 (origin
13225 (method git-fetch)
13226 (uri (git-reference
13227 (url "https://github.com/pydata/numexpr")
13228 (commit (string-append "v" version))))
13229 (file-name (git-file-name name version))
13230 (sha256
13231 (base32 "1zbpi7whjh6sccn1fndii735gv14kjaaqm3c3w1g2ry0z9948v9v"))))
13232 (build-system pyproject-build-system)
13233 (arguments
13234 (list
13235 ;; tests: 6039 passed, 1 warning
13236 #:test-flags #~(list "--pyargs" "numexpr")
13237 #:phases
13238 #~(modify-phases %standard-phases
13239 (add-before 'check 'remove-local-source
13240 (lambda _
13241 (delete-file-recursively "numexpr"))))))
13242 (native-inputs
13243 (list python-pytest
13244 python-setuptools))
13245 (propagated-inputs
13246 (list python-numpy))
13247 (home-page "https://github.com/pydata/numexpr")
13248 (synopsis "Fast numerical expression evaluator for NumPy")
13249 (description
13250 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
13251expressions that operate on arrays are accelerated and use less memory than
13252doing the same calculation in Python. In addition, its multi-threaded
13253capabilities can make use of all your cores, which may accelerate
13254computations, most specially if they are not memory-bounded (e.g. those using
13255transcendental functions).")
13256 (license license:expat)))
13257
13258(define-public python-cycler
13259 (package
13260 (name "python-cycler")
13261 (version "0.12.1")
13262 (source
13263 (origin
13264 (method git-fetch) ;no tests in PyPI archive
13265 (uri (git-reference
13266 (url "https://github.com/matplotlib/cycler")
13267 (commit (string-append "v" version))))
13268 (file-name (git-file-name name version))
13269 (sha256
13270 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
13271 (build-system pyproject-build-system)
13272 (native-inputs
13273 (list python-pytest
13274 python-setuptools))
13275 (home-page "https://matplotlib.org/cycler/")
13276 (synopsis "Composable keyword argument iterator")
13277 (description
13278 "When using @code{matplotlib} and plotting more than one line, it is
13279common to want to be able to want to be able to cycle over one or more artist
13280styles; but the plotting logic can quickly become involved.
13281To address this and enable easy cycling over arbitrary @code{kwargs}, the
13282@code{Cycler} class was developed.")
13283 (license license:bsd-3)))
13284
13285(define-public python-colorspacious
13286 (package
13287 (name "python-colorspacious")
13288 (version "1.1.2")
13289 (source
13290 (origin
13291 (method git-fetch)
13292 (uri (git-reference
13293 (url "https://github.com/njsmith/colorspacious")
13294 (commit (string-append "v" version))))
13295 (file-name (git-file-name name version))
13296 (sha256
13297 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
13298 (build-system pyproject-build-system)
13299 (arguments (list #:tests? #f)) ; No tests.
13300 (propagated-inputs (list python-numpy))
13301 (native-inputs (list python-pytest python-setuptools))
13302 (home-page "https://github.com/njsmith/colorspacious")
13303 (synopsis "Python library for colorspace conversions")
13304 (description
13305 "@code{colorspacious} is a Python library that lets you convert between
13306colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
13307 (license license:expat)))
13308
13309(define-public python-propcache
13310 (package
13311 (name "python-propcache")
13312 (version "0.2.1")
13313 (source
13314 (origin
13315 (method url-fetch)
13316 (uri (pypi-uri "propcache" version))
13317 (sha256
13318 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
13319 (build-system pyproject-build-system)
13320 (arguments
13321 (list
13322 #:test-flags
13323 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13324 "--ignore=tests/test_benchmarks.py")
13325 #:phases
13326 '(modify-phases %standard-phases
13327 (add-after 'unpack 'patch-build-system
13328 (lambda _
13329 ;; XXX: I don't know how to tell it to build the extensions in
13330 ;; place.
13331 (substitute* "packaging/pep517_backend/_backend.py"
13332 (("build_inplace=False") "build_inplace=True")))))))
13333 (native-inputs
13334 (list python-cython
13335 python-expandvars
13336 python-pytest
13337 python-pytest-xdist
13338 python-setuptools
13339 python-tomli))
13340 (home-page "https://github.com/aio-libs/propcache")
13341 (synopsis "Accelerated property cache")
13342 (description "The module provides a fast implementation of cached
13343properties for Python 3.9+.")
13344 (license license:asl2.0)))
13345
13346(define-public python-proto-matcher
13347 (package
13348 (name "python-proto-matcher")
13349 (version "0.0.3")
13350 (source
13351 (origin
13352 (method git-fetch)
13353 (uri (git-reference
13354 (url "https://github.com/dayfine/proto-matcher")
13355 (commit version)))
13356 (file-name (git-file-name name version))
13357 (sha256
13358 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
13359 (build-system pyproject-build-system)
13360 (native-inputs (list python-pytest python-setuptools))
13361 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
13362 (propagated-inputs (list python-protobuf python-pyhamcrest))
13363 (home-page "https://github.com/dayfine/proto-matcher")
13364 (synopsis "PyHamcrest test matchers for protocol buffers")
13365 (description
13366 "This package provides the following PyHamcrest test matchers, that
13367enable matching a protocol buffer message:
13368@table @code
13369@item equals_proto
13370Test the argument equals the given protobuf message.
13371@item approximately
13372Test the argument equals the given protobuf message, while comparing any float
13373field using approximation.
13374@item ignoring_field_paths
13375Test the argument equals the given protobuf message, while ignoring those
13376fields specified in the field paths.
13377@item ignoring_repeated_field_ordering
13378Test the argument equals the given protobuf message, ignoring the ordering of
13379any repeated field.
13380@item partially
13381Test the argument partially equals the given protobuf message, i.e. if a field
13382is in the argument but not in the expected message, it's ignored in the
13383comparison.
13384@end table")
13385 (license license:asl2.0)))
13386
13387(define-public python-matplotlib
13388 (package
13389 (name "python-matplotlib")
13390 (version "3.10.9")
13391 (source
13392 (origin
13393 (method git-fetch)
13394 (uri (git-reference
13395 (url "https://github.com/matplotlib/matplotlib")
13396 (commit (string-append "v" version))))
13397 (file-name (git-file-name name version))
13398 (sha256
13399 (base32 "1mff6s0nldfgdczjrfkkg68j2sx9l7jpslbcyq0d4slhnkx1lp2g"))))
13400 (build-system pyproject-build-system)
13401 (arguments
13402 (list
13403 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
13404 #:configure-flags
13405 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
13406 "-Dsystem-freetype=true"
13407 "-Dsystem-qhull=true"))
13408 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
13409 #:test-flags
13410 #~(list "-m" "not network"
13411 "-n" (number->string (parallel-job-count))
13412 ;; Run the installed tests, which is what we want since not
13413 ;; everything gets built in the source directory.
13414 "--pyargs" "matplotlib"
13415 "-k"
13416 (string-join
13417 (list
13418 ;; XXX: Disable all image comparison tests because we're using
13419 ;; a newer version of FreeType than matplotlib expects. This
13420 ;; leads to minor differences throughout the tests.
13421 "not image_comparison"
13422 "check_figures_equal"
13423 "png" ;disables many problematic image tests
13424 "test_figure_legend_outside"
13425 "test_ft2font_get_kerning"
13426 "test_normal_axes"
13427 "test_get_tightbbox_polar"
13428 ;; The invisible line ordering test fails due to a too short
13429 ;; timeout (see:
13430 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
13431 "test_invisible_Line_rendering"
13432 ;; The determinism check test is not deterministic (see:
13433 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
13434 "test_determinism_check")
13435 " and not "))
13436 #:phases
13437 #~(modify-phases %standard-phases
13438 (add-after 'unpack 'patch-commands
13439 (lambda _
13440 (substitute* "lib/matplotlib/tests/test_animation.py"
13441 (("/bin/sh") (which "sh")))))
13442 (add-after 'unpack 'patch-dlopen
13443 (lambda* (#:key inputs #:allow-other-keys)
13444 (substitute* "src/_c_internal_utils.cpp"
13445 (("libX11.so.6")
13446 (search-input-file inputs "lib/libX11.so.6")))))
13447 (add-before 'build 'configure-environment
13448 (lambda* (#:key inputs #:allow-other-keys)
13449 ;; Fix rounding errors when using the x87 FPU.
13450 (when (string-prefix? "i686" #$(%current-system))
13451 (setenv "CFLAGS" "-ffloat-store"))))
13452 (add-before 'check 'chdir
13453 (lambda _
13454 ;; Step out of the source directory to avoid interference.
13455 (chdir "/tmp"))))))
13456 (propagated-inputs
13457 (list python-contourpy
13458 python-cycler
13459 python-dateutil
13460 python-fonttools-minimal
13461 python-importlib-resources
13462 python-kiwisolver
13463 python-numpy
13464 python-packaging
13465 python-pillow
13466 python-pyparsing
13467 `(,python "tk")))
13468 (inputs
13469 (list cairo
13470 freetype
13471 glib
13472 libpng
13473 qhull
13474 tcl
13475 tk))
13476 (native-inputs
13477 (list pkg-config
13478 python-meson
13479 pybind11
13480 python-pytest
13481 python-pytest-timeout
13482 python-pytest-xdist
13483 python-setuptools
13484 python-setuptools-scm))
13485 (home-page "https://matplotlib.org/")
13486 (synopsis "2D plotting library for Python")
13487 (description
13488 "Matplotlib is a Python 2D plotting library which produces publication
13489quality figures in a variety of hardcopy formats and interactive environments
13490across platforms. Matplotlib can be used in Python scripts, the python and
13491ipython shell, web application servers, and six graphical user interface
13492toolkits.")
13493 (license license:psfl)))
13494
13495(define-public python-matplotlib-documentation
13496 (package
13497 (inherit python-matplotlib)
13498 (name "python-matplotlib-documentation")
13499 (arguments
13500 (list
13501 #:tests? #f ;we're only generating documentation
13502 #:phases
13503 #~(modify-phases %standard-phases
13504 (add-after 'unpack 'avoid-external-deps
13505 (lambda _
13506 ;; XXX: Avoid theme-switcher to avoid sphinx error
13507 ;; TemplateNotFound('theme-switcher.html')
13508 ;; XXX: Avoid version-switcher because it depends on an
13509 ;; external file, and we pack only one version anyway.
13510 (substitute* "doc/conf.py"
13511 (("\
13512\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
13513 "\"navbar_end\": ["))))
13514 (replace 'build
13515 (lambda _
13516 (setenv "HOME" "/tmp")
13517 (chdir "doc")
13518 (invoke "make" "html" "info"
13519 ;; Don't abort on warnings; build in parallel.
13520 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
13521 (replace 'install
13522 (lambda _
13523 (let* ((data (string-append #$output "/share"))
13524 (doc (string-append data "/doc/matplotlib"))
13525 (info (string-append data "/info"))
13526 (html (string-append doc "/html")))
13527 (mkdir-p html)
13528 (copy-recursively "build/html" html)
13529 (install-file "build/texinfo/matplotlib.info" info)
13530 ;; The "matplotlib-figures" directory contains are a subset of
13531 ;; the images produced for the html target; simply create a
13532 ;; symlink to it, saving about 11 MiB.
13533 (symlink (string-append html "/_images")
13534 (string-append info "/matplotlib-figures"))))))))
13535 ;; Move all propagated inputs to inputs. *-documentation packages are
13536 ;; expected to be installed as standalone leaf packages, and not as
13537 ;; libraries with propagated inputs.
13538 (propagated-inputs '())
13539 (inputs (append
13540 (package-inputs python-matplotlib)
13541 (package-propagated-inputs python-matplotlib)))
13542 (native-inputs
13543 (list ffmpeg ;for matplotlib animation support
13544 graphviz
13545 inkscape/pinned
13546 python-colorspacious
13547 python-ipython
13548 python-ipykernel
13549 python-ipywidgets
13550 python-matplotlib
13551 python-mpl-sphinx-theme
13552 python-numpydoc
13553 python-pyyaml
13554 python-scipy
13555 python-setuptools
13556 ;; XXX: investigate how to build using a newer version of sphinx.
13557 python-sphinx-6
13558 python-sphinx-copybutton
13559 python-sphinx-design
13560 python-sphinx-gallery
13561 python-sphinx-tags
13562 python-sphinxcontrib-svg2pdfconverter
13563 python-sphinxcontrib-video
13564 texinfo
13565 texlive-dvipng-bin
13566 (texlive-local-tree
13567 (list texlive-amsfonts
13568 texlive-amsmath
13569 texlive-babel
13570 texlive-cm-super
13571 texlive-etoolbox
13572 texlive-expdlist
13573 texlive-fontspec
13574 texlive-times
13575 texlive-type1cm
13576 texlive-underscore
13577 texlive-unicode-math))))
13578 (synopsis "Documentation for the @code{python-matplotlib} package")))
13579
13580(define-public python-matplotlib-inline
13581 (package
13582 (name "python-matplotlib-inline")
13583 (version "0.1.7")
13584 (source
13585 (origin
13586 (method url-fetch)
13587 (uri (pypi-uri "matplotlib_inline" version))
13588 (sha256
13589 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13590 (build-system pyproject-build-system)
13591 (arguments
13592 (list
13593 ;; Tests disabled because of a circular dependency with IPython.
13594 #:tests? #f
13595 #:phases
13596 #~(modify-phases %standard-phases
13597 ;; Disabled because of a circular dependency with IPython.
13598 (delete 'sanity-check))))
13599 (native-inputs
13600 (list python-setuptools))
13601 (propagated-inputs
13602 (list python-matplotlib
13603 python-traitlets))
13604 (home-page "https://github.com/ipython/matplotlib-inline")
13605 (synopsis "Inline Matplotlib backend for Jupyter")
13606 (description
13607 "This package provides a Matplotlib inline back-end for IPython and
13608Jupyter.")
13609 (license license:bsd-3)))
13610
13611(define-public python-matplotlib-venn
13612 (package
13613 (name "python-matplotlib-venn")
13614 (version "1.1.2")
13615 (source
13616 (origin
13617 (method url-fetch)
13618 (uri (pypi-uri "matplotlib-venn" version))
13619 (sha256
13620 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13621 (build-system pyproject-build-system)
13622 (native-inputs (list python-pytest
13623 python-setuptools
13624 python-shapely
13625 python-wheel))
13626 (propagated-inputs
13627 (list python-matplotlib python-numpy python-scipy))
13628 (home-page "https://github.com/konstantint/matplotlib-venn")
13629 (synopsis "Plot area-proportional Venn diagrams")
13630 (description
13631 "This package provides tools for plotting area-proportional two- and
13632three-way Venn diagrams in @code{matplotlib}.")
13633 (license license:expat)))
13634
13635(define-public python-matplotx
13636 (package
13637 (name "python-matplotx")
13638 (version "0.3.10")
13639 (source
13640 (origin
13641 (method git-fetch)
13642 (uri (git-reference
13643 (url "https://github.com/nschloe/matplotx")
13644 (commit (string-append "v" version))))
13645 (file-name (git-file-name name version))
13646 (sha256
13647 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13648 (build-system pyproject-build-system)
13649 (arguments
13650 (list
13651 #:test-flags
13652 ;; This test fails with ValueError: not enough values to unpack.
13653 #~(list "--deselect" "tests/test_spy.py::test_cli"
13654 ;; XXX: unknown failure
13655 "--deselect" "tests/test_spy.py::test_png")))
13656 (native-inputs
13657 (list python-imageio
13658 python-meshzoo
13659 python-pytest
13660 python-scipy-minimal
13661 python-setuptools
13662 python-scikit-fem))
13663 (propagated-inputs
13664 (list python-matplotlib
13665 python-numpy
13666 ;; [optional]
13667 python-networkx
13668 python-pypng
13669 python-scipy))
13670 (home-page "https://github.com/nschloe/matplotx")
13671 (synopsis "Minimal matplotlib styles")
13672 (description
13673 "This package includes some extensions for Matplotlib to create clean
13674plots with a minimalistic style.")
13675 (license license:expat)))
13676
13677(define-public python-cplot
13678 (package
13679 (name "python-cplot")
13680 (version "0.9.3")
13681 (source
13682 (origin
13683 (method git-fetch)
13684 (uri (git-reference
13685 (url "https://github.com/nschloe/cplot")
13686 (commit (string-append "v" version))))
13687 (file-name (git-file-name name version))
13688 (sha256
13689 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13690 (build-system pyproject-build-system)
13691 (native-inputs
13692 (list python-pytest
13693 python-setuptools))
13694 (propagated-inputs
13695 (list python-matplotlib
13696 python-matplotx
13697 python-npx
13698 python-numpy))
13699 (home-page "https://github.com/nschloe/cplot")
13700 (synopsis "Plot complex-valued functions")
13701 (description "@code{cplot} is a Python library for plotting
13702complex-valued functions.")
13703 (license license:gpl3+)))
13704
13705(define-public python-cppheaderparser
13706 (package
13707 (name "python-cppheaderparser")
13708 (version "2.7.4")
13709 (source
13710 (origin
13711 (method url-fetch)
13712 (uri (pypi-uri "CppHeaderParser" version))
13713 (sha256
13714 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13715 (build-system pyproject-build-system)
13716 (arguments
13717 (list
13718 #:tests? #f)) ; no tests
13719 (propagated-inputs (list python-ply))
13720 (native-inputs (list python-setuptools python-wheel))
13721 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13722 (synopsis
13723 "Parse C++ header files and generate a data structure representing the class")
13724 (description
13725 "CppHeaderParser is a pure python module that will parse C++ header files
13726and generate a data structure representing the class.")
13727 (license license:bsd-3)))
13728
13729(define-public python-cppy
13730 (package
13731 (name "python-cppy")
13732 (version "1.3.1")
13733 (source
13734 (origin
13735 (method git-fetch)
13736 (uri (git-reference
13737 (url "https://github.com/nucleic/cppy")
13738 (commit version)))
13739 (file-name (git-file-name name version))
13740 (sha256
13741 (base32 "16g0f9kjyybmlxy9w5bbxm98g7wqhcvh4pw77r0jk3dgd11lkvzy"))))
13742 (build-system pyproject-build-system)
13743 (arguments
13744 (list #:tests? #f)) ;there is just one test coping include directory
13745 (native-inputs
13746 (list python-setuptools
13747 python-setuptools-scm))
13748 (home-page "https://github.com/nucleic/cppy")
13749 (synopsis "C++ header library for Python extension modules")
13750 (description "This package is a small C++ header library which makes it
13751easier to write Python extension modules. The primary feature is a
13752@code{PyObject} smart pointer which automatically handles reference counting
13753and provides convenience methods for performing common object operations.")
13754 (license license:bsd-3)))
13755
13756(define-public python-perfplot
13757 (package
13758 (name "python-perfplot")
13759 (version "0.10.2")
13760 (source
13761 (origin
13762 (method git-fetch)
13763 (uri (git-reference
13764 (url "https://github.com/nschloe/perfplot")
13765 (commit (string-append "v" version))))
13766 (file-name (git-file-name name version))
13767 (sha256
13768 (base32 "1j73m8v9l8bhf79qa9apj6lcw1afxbvdq4mrn0yb31541dhrxvkf"))))
13769 (build-system pyproject-build-system)
13770 (native-inputs
13771 (list python-flit-core
13772 python-pytest))
13773 (propagated-inputs
13774 (list python-matplotlib
13775 python-matplotx
13776 python-numpy
13777 python-rich))
13778 (home-page "https://github.com/nschloe/perfplot")
13779 (synopsis "Performance plots for Python code snippets")
13780 (description "@code{perfplot} extends Python's timeit by testing
13781snippets with input parameters (e.g., the size of an array) and plotting
13782the results.")
13783 (license license:gpl3+)))
13784
13785(define-public python-persist-queue
13786 (package
13787 (name "python-persist-queue")
13788 (version "1.1.0")
13789 (source
13790 (origin
13791 (method git-fetch)
13792 (uri (git-reference
13793 (url "https://github.com/peter-wangxu/persist-queue")
13794 (commit (string-append "v" version))))
13795 (file-name (git-file-name name version))
13796 (sha256
13797 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
13798 (build-system pyproject-build-system)
13799 (native-inputs
13800 (list python-pytest
13801 python-pytest-asyncio
13802 python-setuptools))
13803 (propagated-inputs
13804 (list python-aiofiles
13805 python-aiosqlite
13806 python-cbor2
13807 python-dbutils
13808 python-msgpack))
13809 (home-page "https://github.com/peter-wangxu/persist-queue")
13810 (synopsis "Thread-safe disk based persistent queue in Python")
13811 (description
13812 "This package provides a thread-safe disk (file and sqlite) based
13813persistent queue in Python.")
13814 (license license:bsd-3)))
13815
13816(define-public python-pycodestyle
13817 (package
13818 (name "python-pycodestyle")
13819 (version "2.14.0")
13820 (source
13821 (origin
13822 (method url-fetch) ;git has no the same version tag as PyPI
13823 (uri (pypi-uri "pycodestyle" version))
13824 (sha256
13825 (base32 "10xpcy8m54cvnk4a37j4cwrjl9lprlcwkpmbs3wry23qs8bvbdf4"))))
13826 (build-system pyproject-build-system)
13827 (arguments
13828 (list
13829 #:test-backend #~'custom
13830 #:test-flags
13831 ;; Taken from Tox config
13832 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
13833 #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")))
13834 (native-inputs
13835 (list python-setuptools))
13836 (home-page "https://pycodestyle.readthedocs.io/")
13837 (synopsis "Python style guide checker")
13838 (description "@code{pycodestyle} (formerly pep8) is a tool to check
13839Python code against some of the style conventions in
13840@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
13841 (license license:expat)))
13842
13843(define-public python-pycollada
13844 (package
13845 (name "python-pycollada")
13846 (version "0.9.2")
13847 (source
13848 (origin
13849 (method git-fetch)
13850 (uri (git-reference
13851 (url "https://github.com/pycollada/pycollada")
13852 (commit (string-append "v" version))))
13853 (file-name (git-file-name name version))
13854 (sha256
13855 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
13856 (build-system pyproject-build-system)
13857 (native-inputs
13858 (list python-pytest
13859 python-setuptools))
13860 (propagated-inputs
13861 (list python-numpy
13862 python-dateutil))
13863 (home-page "https://pycollada.readthedocs.io")
13864 (synopsis "Reading and writing collada documents library")
13865 (description
13866 "This package implements a functionality for creating, editing and
13867loading @url{https://www.khronos.org/collada/,COLLADA},which is a
13868COLLAborative Design Activity for establishing an interchange file format for
13869interactive 3D applications.
13870
13871The library allows you to load a COLLADA file and interact with it as a python
13872object. In addition, it supports creating a collada python object from
13873scratch, as well as in-place editing.")
13874 (license license:bsd-3)))
13875
13876(define-public python-pyct
13877 (package
13878 (name "python-pyct")
13879 (version "0.5.0")
13880 (source
13881 (origin
13882 (method url-fetch)
13883 (uri (pypi-uri "pyct" version))
13884 (sha256
13885 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
13886 (build-system pyproject-build-system)
13887 (arguments
13888 (list
13889 #:test-flags
13890 ;; These tests want to download example data from the internet.
13891 '(list "-k" (string-append
13892 "not test_examples_with_use_test_data"
13893 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
13894 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
13895 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
13896 (propagated-inputs (list python-param python-pyyaml))
13897 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
13898 (home-page "https://github.com/holoviz-dev/pyct")
13899 (synopsis "Common packaging tasks")
13900 (description
13901 "This Python package provides utilities to run common packaging tasks,
13902e.g. copy examples, fetch data, etc.")
13903 (license license:bsd-3)))
13904
13905(define-public python-multidict
13906 (package
13907 (name "python-multidict")
13908 (version "6.7.0")
13909 (source
13910 (origin
13911 (method git-fetch)
13912 (uri (git-reference
13913 (url "https://github.com/aio-libs/multidict/")
13914 (commit (string-append "v" version))))
13915 (file-name (git-file-name name version))
13916 (sha256
13917 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
13918 (build-system pyproject-build-system)
13919 (arguments
13920 (list
13921 ;; tests: 1395 passed
13922 #:test-flags
13923 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13924 "--ignore-glob=tests/test_*_benchmarks.py")))
13925 (native-inputs
13926 (list python-objgraph
13927 python-psutil
13928 python-pytest
13929 python-setuptools))
13930 (home-page "https://github.com/aio-libs/multidict/")
13931 (synopsis "Multidict implementation")
13932 (description
13933 "Multidict is dict-like collection of key-value pairs where key might be
13934occurred more than once in the container.")
13935 (license license:asl2.0)))
13936
13937(define-public python-orderedmultidict
13938 (package
13939 (name "python-orderedmultidict")
13940 (version "1.0.1")
13941 (source
13942 (origin
13943 (method url-fetch)
13944 (uri (pypi-uri "orderedmultidict" version))
13945 (sha256
13946 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
13947 (build-system pyproject-build-system)
13948 (propagated-inputs
13949 (list python-six))
13950 (native-inputs
13951 (list python-pytest
13952 python-setuptools))
13953 (home-page "https://github.com/gruns/orderedmultidict")
13954 (synopsis "Python Ordered Multivalue Dictionary - omdict")
13955 (description "This package contains a library for ordered multivalue
13956dictionaries. A multivalue dictionary is a dictionary that can store
13957multiple values for the same key. An ordered multivalue dictionary is a
13958multivalue dictionary that retains the order of insertions and deletions.")
13959 (license license:unlicense)))
13960
13961(define-public python-autopage
13962 (package
13963 (name "python-autopage")
13964 (version "0.5.1")
13965 (source (origin
13966 (method url-fetch)
13967 (uri (pypi-uri "autopage" version))
13968 (sha256
13969 (base32
13970 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
13971 (build-system pyproject-build-system)
13972 (arguments
13973 (list
13974 #:phases
13975 #~(modify-phases %standard-phases
13976 (add-before 'check 'disable-e2e-tests
13977 (lambda _
13978 ;; These tests rely on KeyboardInterrupts which do not
13979 ;; work in the build container.
13980 (delete-file "autopage/tests/test_end_to_end.py"))))))
13981 (native-inputs
13982 (list python-pypa-build
13983 python-setuptools
13984 python-wheel
13985 ;; For tests.
13986 python-fixtures
13987 python-pytest
13988 python-testtools))
13989 (home-page "https://github.com/zaneb/autopage")
13990 (synopsis "Automatic paging for console output")
13991 (description
13992 "Autopage is a Python library to automatically display terminal output
13993from a program in a @dfn{pager} such as @command{less}.")
13994 (license license:asl2.0)))
13995
13996(define-public python-dirty-equals
13997 (package
13998 (name "python-dirty-equals")
13999 (version "0.11.0")
14000 (source
14001 (origin
14002 (method git-fetch)
14003 (uri (git-reference
14004 (url "https://github.com/samuelcolvin/dirty-equals")
14005 (commit (string-append "v" version))))
14006 (file-name (git-file-name name version))
14007 (sha256
14008 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
14009 (build-system pyproject-build-system)
14010 ;; tests: 551 passed, 60 skipped
14011 (native-inputs
14012 (list python-hatchling
14013 python-pydantic
14014 python-pytest
14015 python-pytest-examples
14016 tzdata-for-tests))
14017 (home-page "https://dirty-equals.helpmanual.io/")
14018 (synopsis "Do dirty (but useful) things with equals")
14019 (description
14020 "@code{dirty-equals} is a Python library that (mis)uses the
14021@code{__eq__} method to make code (generally unit tests) more declarative
14022and therefore easier to read and write.")
14023 (license license:expat)))
14024
14025(define-public python-dirty-equals-bootstrap
14026 (hidden-package
14027 (package
14028 (inherit python-dirty-equals)
14029 (name "python-dirty-equals-bootstrap")
14030 (arguments
14031 (list #:tests? #f))
14032 (native-inputs
14033 (list python-hatchling)))))
14034
14035(define-public python-distutils-extra
14036 (package
14037 (name "python-distutils-extra")
14038 (version "2.38")
14039 (source
14040 (origin
14041 (method url-fetch)
14042 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
14043 version "/+download/python-distutils-extra-"
14044 version ".tar.gz"))
14045 (sha256
14046 (base32
14047 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
14048 (build-system pyproject-build-system)
14049 (arguments
14050 (list #:tests? #f)) ;tests are outdated and broken
14051 (native-inputs (list python-setuptools python-wheel))
14052 (home-page "https://launchpad.net/python-distutils-extra/")
14053 (synopsis "Enhancements to Python's distutils")
14054 (description
14055 "The python-distutils-extra module enables you to easily integrate
14056gettext support, themed icons, and scrollkeeper-based documentation into
14057Python's distutils.")
14058 (license license:gpl2)))
14059
14060(define-public python-olefile
14061 (package
14062 (name "python-olefile")
14063 (version "0.47")
14064 (source
14065 (origin
14066 (method git-fetch)
14067 (uri (git-reference
14068 (url "https://github.com/decalage2/olefile")
14069 (commit (string-append "v" version))))
14070 (file-name (git-file-name name version))
14071 (sha256
14072 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
14073 (build-system pyproject-build-system)
14074 (native-inputs
14075 (list python-pytest
14076 python-setuptools))
14077 (home-page "https://www.decalage.info/python/olefileio")
14078 (synopsis "Read and write Microsoft OLE2 files")
14079 (description
14080 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
14081Storage or Compound Document, Microsoft Office). It is an improved version of
14082the OleFileIO module from PIL, the Python Image Library.")
14083 (license license:bsd-3)))
14084
14085(define-public python-property-cached
14086 (package
14087 (name "python-property-cached")
14088 (version "1.6.4")
14089 (source
14090 (origin
14091 (method url-fetch)
14092 (uri (pypi-uri "property-cached" version ".zip"))
14093 (sha256
14094 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
14095 (patches
14096 (search-patches "python-property-cached-asyncio-3_11.patch"))))
14097 (build-system pyproject-build-system)
14098 (arguments
14099 (list
14100 ;; AssertionError.
14101 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
14102 (native-inputs (list python-freezegun python-pytest unzip
14103 python-setuptools python-wheel))
14104 (home-page "https://github.com/althonos/property-cached/")
14105 (synopsis "Decorator for caching properties in classes")
14106 (description "This package provides a decorator for caching properties in
14107classes. It is forked from @code{cached-property}.")
14108 (license license:bsd-3)))
14109
14110(define-public python-pdf2image
14111 (package
14112 (name "python-pdf2image")
14113 (version "1.17.0")
14114 (source
14115 (origin
14116 (method git-fetch)
14117 (uri (git-reference
14118 (url "https://github.com/Belval/pdf2image")
14119 (commit (string-append "v" version))))
14120 (file-name (git-file-name name version))
14121 (sha256
14122 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
14123 (build-system pyproject-build-system)
14124 (arguments
14125 (list
14126 ;; The following excluded tests assume hardcoded binary paths to
14127 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
14128 #:test-flags
14129 #~(list "--exclude=^test_use_poppler_path$"
14130 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
14131 (propagated-inputs (list python-pillow))
14132 (inputs (list poppler))
14133 (native-inputs (list python-pynose which python-setuptools))
14134 (home-page "https://github.com/Belval/pdf2image")
14135 (synopsis
14136 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
14137 (description
14138 "This package provides a Python API wrapping the @command{pdftoppm} and
14139@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
14140Python list with elements of type @code{PIL.Image} (from the
14141@code{python-pillow} library).")
14142 (license license:expat)))
14143
14144(define-public python-pikepdf
14145 (package
14146 (name "python-pikepdf")
14147 (version "8.15.1")
14148 (source
14149 (origin
14150 (method git-fetch)
14151 (uri (git-reference
14152 (url "https://github.com/pikepdf/pikepdf")
14153 (commit (string-append "v" version))))
14154 (file-name (git-file-name name version))
14155 (sha256
14156 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
14157 (build-system pyproject-build-system)
14158 (native-inputs
14159 (list pybind11-2
14160 python-attrs
14161 python-hypothesis
14162 python-setuptools-scm
14163 python-psutil
14164 python-pytest
14165 python-pytest-timeout
14166 python-pytest-xdist
14167 python-dateutil
14168 python-xmp-toolkit
14169 python-tomli
14170 python-setuptools))
14171 (inputs
14172 (list qpdf))
14173 (propagated-inputs
14174 (list python-deprecated python-lxml python-packaging python-pillow))
14175 (home-page "https://github.com/pikepdf/pikepdf")
14176 (synopsis "Read and write PDFs with Python")
14177 (description
14178 "pikepdf is a Python library for reading and writing PDF files.")
14179 (license license:mpl2.0)))
14180
14181(define-public python-pillow
14182 (package
14183 (name "python-pillow")
14184 (version "12.2.0")
14185 (source
14186 (origin
14187 (method git-fetch)
14188 (uri (git-reference
14189 (url "https://github.com/python-pillow/Pillow")
14190 (commit version)))
14191 (file-name (git-file-name name version))
14192 (sha256
14193 (base32 "140ynzxpazq6gq041bhkzx314z4kkzv3wlmvph68a0nkj9nqa3pg"))))
14194 (build-system pyproject-build-system)
14195 (arguments
14196 (list
14197 #:phases
14198 #~(modify-phases %standard-phases
14199 (add-after 'unpack 'patch-ldconfig
14200 (lambda _
14201 (substitute* "setup.py"
14202 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
14203 (replace 'check
14204 (lambda* (#:key tests? #:allow-other-keys)
14205 (when tests?
14206 (setenv "HOME" (getcwd))
14207 (invoke "python" "selftest.py" "--installed")
14208 (invoke "python" "-m" "pytest" "-vv")))))))
14209 (native-inputs (list pybind11
14210 python-defusedxml
14211 python-markdown2
14212 python-olefile
14213 python-pytest
14214 python-setuptools
14215 python-trove-classifiers))
14216 (inputs (list freetype
14217 lcms
14218 libjpeg-turbo
14219 libtiff
14220 libwebp
14221 openjpeg
14222 zlib))
14223 (home-page "https://python-pillow.github.io/")
14224 (synopsis "Fork of the Python Imaging Library")
14225 (description
14226 "The Python Imaging Library adds image processing capabilities to your
14227Python interpreter. This library provides extensive file format support, an
14228efficient internal representation, and fairly powerful image processing
14229capabilities. The core image library is designed for fast access to data
14230stored in a few basic pixel formats. It should provide a solid foundation for
14231a general image processing tool.")
14232 (properties `((cpe-name . "pillow")))
14233 (license (license:x11-style
14234 "https://github.com/python-pillow/Pillow/blob/12.2.0/LICENSE"
14235 "MIT-CMU License"))))
14236
14237(define-public python-pillow-avif-plugin
14238 (package
14239 (name "python-pillow-avif-plugin")
14240 (version "1.5.5")
14241 (source
14242 (origin
14243 (method git-fetch)
14244 (uri (git-reference
14245 (url "https://github.com/fdintino/pillow-avif-plugin/")
14246 (commit (string-append "v" version))))
14247 (file-name (git-file-name name version))
14248 (sha256
14249 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
14250 (build-system pyproject-build-system)
14251 (propagated-inputs (list python-requests))
14252 (native-inputs (list python-packaging
14253 python-pillow
14254 python-pytest
14255 python-setuptools))
14256 (inputs (list libavif))
14257 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
14258 (synopsis "Pillow plugin that adds avif support via libavif")
14259 (description
14260 "This package provides a pillow plugin that adds avif support via
14261libavif.")
14262 (license license:expat)))
14263
14264(define-public python-pillow-heif
14265 (package
14266 (name "python-pillow-heif")
14267 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
14268 ;; commit is taken from the master branch.
14269 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
14270 (revision . "0")))
14271 (version (git-version "1.3.0"
14272 (assoc-ref properties 'revision)
14273 (assoc-ref properties 'commit)))
14274 (source
14275 (origin
14276 (method git-fetch)
14277 (uri (git-reference
14278 (url "https://github.com/bigcat88/pillow_heif")
14279 (commit (assoc-ref properties 'commit))))
14280 (file-name (git-file-name name version))
14281 (sha256
14282 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
14283 (build-system pyproject-build-system)
14284 (inputs (list libheif))
14285 (propagated-inputs (list python-pillow))
14286 (native-inputs (list opencv ; for opencv-python
14287 python-defusedxml
14288 python-numpy
14289 python-packaging
14290 python-pympler
14291 python-pytest
14292 python-setuptools))
14293 (home-page "https://github.com/bigcat88/pillow_heif")
14294 (synopsis "Python interface for libheif library")
14295 (description "This package provides Python bindings for the libheif library
14296and a plugin for Pillow.")
14297 (license license:bsd-3)))
14298
14299(define-public python-pillow-jxl-plugin
14300 (package
14301 (name "python-pillow-jxl-plugin")
14302 (version "1.3.7")
14303 (source
14304 (origin
14305 (method git-fetch)
14306 (uri (git-reference
14307 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14308 (commit (string-append "v" version))))
14309 (file-name (git-file-name name version))
14310 (sha256
14311 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
14312 (build-system pyproject-build-system)
14313 (arguments
14314 (list
14315 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
14316 ;; in Guix.
14317 #:tests? #f
14318 #:imported-modules `(,@%cargo-build-system-modules
14319 ,@%pyproject-build-system-modules)
14320 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
14321 (guix build pyproject-build-system)
14322 (guix build utils))
14323 #:phases
14324 #~(modify-phases %standard-phases
14325 (add-after 'unpack 'prepare-cargo-build-system
14326 (lambda args
14327 (for-each (lambda (phase)
14328 (format #t "Running cargo phase: ~a~%" phase)
14329 (apply (assoc-ref cargo:%standard-phases phase)
14330 #:cargo-target #$(cargo-triplet)
14331 args))
14332 '(unpack-rust-crates
14333 configure
14334 check-for-pregenerated-files
14335 patch-cargo-checksums))))
14336 (add-after 'unpack 'patch-pyproject
14337 (lambda _
14338 ;; maturin failed to parse pyproject.toml.
14339 (substitute* "pyproject.toml"
14340 (("^license-files = .*") "")))))))
14341 (propagated-inputs (list python-brotli
14342 python-packaging
14343 python-pillow))
14344 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
14345 (native-inputs (list maturin
14346 python-numpy
14347 python-pytest
14348 rust
14349 `(,rust "cargo")))
14350 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
14351 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14352 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
14353 (description "This package provides pillow plugin for JPEG-XL, using Rust
14354for bindings.")
14355 (license license:gpl3+)))
14356
14357(define-public python-jxlpy
14358 (package
14359 (name "python-jxlpy")
14360 (version "0.9.5")
14361 (source
14362 (origin
14363 (method git-fetch)
14364 (uri (git-reference
14365 (url "https://github.com/olokelo/jxlpy")
14366 (commit version)))
14367 (file-name (git-file-name name version))
14368 (sha256
14369 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
14370 (build-system pyproject-build-system)
14371 (arguments (list #:tests? #f)) ; no tests, just examples
14372 (inputs (list libjxl))
14373 (propagated-inputs (list python-cython))
14374 (native-inputs (list python-cython python-setuptools))
14375 (home-page "https://github.com/olokelo/jxlpy")
14376 (synopsis "JPEG XL integration in Python")
14377 (description "This package provides Cython-based Python bindings for
14378libjxl, as well as a pillow plugin.")
14379 (license license:expat)))
14380
14381(define-public python-pixelmatch
14382 (package
14383 (name "python-pixelmatch")
14384 (version "0.3.0")
14385 (source
14386 (origin
14387 (method git-fetch)
14388 (uri (git-reference
14389 (url "https://github.com/whtsky/pixelmatch-py")
14390 (commit (string-append "v" version))))
14391 (file-name (git-file-name name version))
14392 (sha256
14393 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
14394 (build-system pyproject-build-system)
14395 (arguments
14396 ;; XXX: PIL.UnidentifiedImageError despite images being present.
14397 (list #:tests? #f))
14398 (native-inputs
14399 (list python-poetry-core
14400 python-pillow
14401 python-pytest
14402 python-pytest-benchmark))
14403 (home-page "https://github.com/whtsky/pixelmatch-py")
14404 (synopsis "Pixel-level image comparison library")
14405 (description
14406 "This package provides a pixel-level image comparison library for Python,
14407originally created to compare screenshots in tests. Its features include
14408accurate anti-aliased pixels detection and perceptual color difference
14409metrics.")
14410 (license license:isc)))
14411
14412(define-public python-imagecodecs
14413 (package
14414 (name "python-imagecodecs")
14415 (version "2025.8.2")
14416 (source
14417 (origin
14418 (method url-fetch)
14419 (uri (pypi-uri "imagecodecs" version))
14420 (sha256
14421 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
14422 (modules '((guix build utils)))
14423 (snippet #~(for-each delete-file
14424 ;; Delete pre-generated Cython files.
14425 (find-files "imagecodecs" "_.*\\.c$")))))
14426 (build-system pyproject-build-system)
14427 (arguments
14428 (list
14429 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
14430 #:test-flags
14431 ;; Some of those tests are flaky.
14432 #~(list "-k" "not test_cms_identity_transforms")
14433 #:phases
14434 #~(modify-phases %standard-phases
14435 (add-after 'unpack 'create-configuration
14436 (lambda _
14437 ;; By default everything is enabled. We can selectively disable
14438 ;; extensions (and thus dependencies) by deleting them from the
14439 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
14440 (call-with-output-file "imagecodecs_distributor_setup.py"
14441 (lambda (port)
14442 (format port "\
14443def customize_build(EXTENSIONS, OPTIONS):
14444~{ del EXTENSIONS[~s]~%~}~%"
14445 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
14446 ;; Those rely on unpackaged inputs.
14447 "aec" "avif" "bitshuffle" "brunsli" "deflate"
14448 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
14449 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
14450 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
14451 "zlibng" "zopfli"))))))
14452 (add-after 'unpack 'fix-sanity-check
14453 (lambda _
14454 ;; XXX: Don't exit twice. The generated script already does that.
14455 (substitute* "imagecodecs/__main__.py"
14456 (("sys\\.exit\\(main\\(\\)\\)")
14457 ""))))
14458 (add-before 'check 'configure-tests
14459 (lambda _
14460 (setenv "HOME" (getcwd)))))))
14461 (inputs
14462 (list brotli
14463 c-blosc
14464 c-blosc2
14465 giflib
14466 lcms
14467 libheif
14468 libjpeg-turbo
14469 libpng
14470 libtiff
14471 libwebp
14472 lz4
14473 lzfse
14474 snappy
14475 xz
14476 zlib
14477 `(,zstd "lib")))
14478 (propagated-inputs
14479 (list python-numpy python-matplotlib python-tifffile))
14480 (native-inputs
14481 (list python-cython python-pytest python-setuptools))
14482 (home-page "https://www.lfd.uci.edu/~gohlke/")
14483 (synopsis "Image transformation, compression, and decompression codecs")
14484 (description
14485 "Imagecodecs is a Python library that provides block-oriented, in-memory
14486buffer transformation, compression, and decompression functions for use in the
14487tifffile, czifile, and other scientific image input/output modules.")
14488 (license license:bsd-3)))
14489
14490(define-public python-property-manager
14491 (package
14492 (name "python-property-manager")
14493 (version "3.0")
14494 (source
14495 (origin
14496 (method git-fetch)
14497 (uri (git-reference
14498 (url "https://github.com/xolox/python-property-manager")
14499 (commit version)))
14500 (file-name (git-file-name name version))
14501 (sha256
14502 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
14503 (build-system pyproject-build-system)
14504 (native-inputs (list python-pytest python-setuptools))
14505 (propagated-inputs
14506 (list python-verboselogs
14507 python-humanfriendly
14508 python-coloredlogs))
14509 (home-page "https://github.com/xolox/python-property-manager")
14510 (synopsis "Useful property variants for Python programming")
14511 (description
14512 "The @code{property-manager} package defines several custom property
14513variants for Python programming including required properties,writable
14514properties, cached properties, etc.")
14515 (license license:expat)))
14516
14517(define-public python-executing
14518 (package
14519 (name "python-executing")
14520 (version "2.2.0")
14521 (source
14522 (origin
14523 (method url-fetch)
14524 (uri (pypi-uri "executing" version))
14525 (sha256
14526 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
14527 (build-system pyproject-build-system)
14528 (arguments
14529 (list
14530 #:test-flags
14531 ;; Test needs IPython
14532 #~(list "-k" "not test_two_statement_lookups")
14533 #:phases
14534 #~(modify-phases %standard-phases
14535 (add-after 'unpack 'fix-tests
14536 (lambda _
14537 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
14538 (substitute* "pyproject.toml"
14539 (("ignore_missing_imports = true.*")
14540 "ignore_missing_imports = true
14541
14542[tool.pytest.ini_options]
14543python_functions = \"test_\"\n")))))))
14544 (native-inputs
14545 (list python-asttokens
14546 python-littleutils
14547 python-pytest
14548 python-rich
14549 python-setuptools
14550 python-setuptools-scm
14551 python-wheel))
14552 (home-page "https://github.com/alexmojaki/executing")
14553 (synopsis "Get information about what a Python frame is currently doing")
14554 (description "This package lets you get information about what a frame is
14555currently doing, particularly the AST node being executed.")
14556 (license license:expat)))
14557
14558(define-public python-executor
14559 (package
14560 (name "python-executor")
14561 (version "23.2")
14562 (source
14563 (origin
14564 (method git-fetch)
14565 (uri (git-reference
14566 (url "https://github.com/xolox/python-executor")
14567 (commit version)))
14568 (file-name (git-file-name name version))
14569 (sha256
14570 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14571 (build-system pyproject-build-system)
14572 (arguments
14573 (list #:tests? #f)) ;TODO: tests require root/sudo
14574 (native-inputs (list python-mock python-pytest python-setuptools))
14575 (propagated-inputs
14576 (list python-six
14577 python-property-manager
14578 python-fasteners
14579 python-virtualenv))
14580 (home-page "https://github.com/xolox/python-executor")
14581 (synopsis "Programmer friendly subprocess wrapper")
14582 (description
14583 "The @code{executor} package is a simple wrapper for Python’s subprocess
14584module that makes it very easy to handle subprocesses on UNIX systems with
14585proper escaping of arguments and error checking currently doing, particularly
14586the AST node being executed.")
14587 (license license:expat)))
14588
14589(define-public python-roifile
14590 (package
14591 (name "python-roifile")
14592 (version "2025.5.10")
14593 (source
14594 (origin
14595 (method url-fetch)
14596 (uri (pypi-uri "roifile" version))
14597 (sha256
14598 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14599 (build-system pyproject-build-system)
14600 (arguments (list #:tests? #f)) ; There are none.
14601 (native-inputs (list python-setuptools))
14602 (propagated-inputs (list python-numpy))
14603 (home-page "https://www.lfd.uci.edu/~gohlke/")
14604 (synopsis "Read and write ImageJ ROI format")
14605 (description "Roifile is a Python library to read, write, create, and plot
14606ImageJ ROIs, an undocumented and ImageJ application specific format to store
14607regions of interest, geometric shapes, paths, text, etc for image overlays.")
14608 (license license:bsd-3)))
14609
14610(define-public python-lfdfiles
14611 (package
14612 (name "python-lfdfiles")
14613 (version "2026.4.30")
14614 (source
14615 (origin
14616 (method url-fetch)
14617 (uri (pypi-uri "lfdfiles" version))
14618 (sha256
14619 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14620 (modules '((guix build utils)))
14621 (snippet
14622 ;; Delete pre-generated Cython files.
14623 #~(begin
14624 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14625 (delete-file "lfdfiles/conftest.py")))))
14626 (build-system pyproject-build-system)
14627 (arguments
14628 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14629 (list #:tests? #f))
14630 (native-inputs (list python-setuptools))
14631 (propagated-inputs (list python-click python-numpy python-tifffile))
14632 (home-page "https://www.lfd.uci.edu/~gohlke/")
14633 (synopsis "Work with LFD data files")
14634 (description
14635 "Lfdfiles is a Python library and console script for reading, writing,
14636converting, and viewing many of the proprietary file formats used to store
14637experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14638 (license license:bsd-3)))
14639
14640;; ~8Mo of test files.
14641(define python-av-testdata
14642 (file-union
14643 "python-av-testdata"
14644 (cons*
14645 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14646 `(,(string-append "pyav-curated/" file)
14647 ,(origin
14648 (method url-fetch)
14649 (uri (string-append "https://pyav.org/datasets/" file))
14650 (sha256
14651 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14652 (map
14653 (match-lambda
14654 ((file . hash)
14655 (list (string-append "fate-suite/" file)
14656 (origin
14657 (method url-fetch)
14658 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14659 (sha256 (base32 hash))))))
14660 '(("aac/latm_stereo_to_51.ts" .
14661 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14662 ("h264/extradata-reload-multi-stsd.mov" .
14663 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14664 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14665 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14666 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14667 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14668 ("h264/interlaced_crop.mp4" .
14669 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14670 ("hap/HAPQA_NoSnappy_127x1.mov" .
14671 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14672 ("mkv/codec_delay_opus.mkv" .
14673 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14674 ("mov/displaymatrix.mov" .
14675 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14676 ("mov/mov-1elist-ends-last-bframe.mov" .
14677 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14678 ("mov/white_zombie_scrunch-part.mov" .
14679 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14680 ("mpeg2/mpeg2_field_encoding.ts" .
14681 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14682 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14683 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14684 ("mxf/track_01_v02.mxf" .
14685 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14686 ("png1/55c99e750a5fd6_50314226.png" .
14687 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14688 ("qtrle/aletrek-rle.mov" .
14689 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14690 ("sub/MovText_capability_tester.mp4" .
14691 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14692 ("sub/vobsub.sub" .
14693 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14694
14695(define-public python-av
14696 (package
14697 (name "python-av")
14698 (version "16.0.1")
14699 (source
14700 (origin
14701 (method url-fetch)
14702 (uri (pypi-uri "av" version))
14703 (sha256
14704 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14705 (build-system pyproject-build-system)
14706 (arguments
14707 (list
14708 ;; Upstream is not great in responding to open issues or change requests.
14709 ;; See:
14710 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14711 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14712 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14713 #:test-flags
14714 ;; Writing to custom IO requires network access.
14715 #~(list "-k" "not test_writing_to_custom_io_dash")
14716 #:phases
14717 #~(modify-phases %standard-phases
14718 (add-before 'check 'pre-check
14719 (lambda _
14720 ;; This would otherwise interfere with finding the installed
14721 ;; av when running tests.
14722 (delete-file-recursively "av")
14723 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14724 (substitute* "tests/common.py"
14725 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14726 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14727 (native-inputs
14728 (list pkg-config
14729 python-cython
14730 python-numpy
14731 python-pillow
14732 python-pytest
14733 python-setuptools))
14734 (inputs (list ffmpeg))
14735 (home-page "https://github.com/PyAV-Org/PyAV")
14736 (synopsis "Pythonic bindings for FFmpeg's libraries")
14737 (description
14738 "PyAV is a Python library that allows for direct and precise manipulation
14739of media through containers, streams, packets, codecs, and frames. It provides
14740access to the powerful FFmpeg libraries while managing the complex details as
14741much as possible.
14742PyAV also facilitates data transformation and integration with
14743other packages such as Numpy and Pillow. However, working with media is a
14744challenging task and PyAV cannot abstract it away or make all the best decisions
14745for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14746be necessary. Nonetheless, PyAV is an essential tool when working with media
14747that requires its specific capabilities.")
14748 (license license:bsd-3)))
14749
14750(define-public python-ffmpeg-python
14751 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
14752 (package
14753 (name "python-ffmpeg-python")
14754 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
14755 (revision . "0")))
14756 (version (git-version "0.2.0"
14757 (assoc-ref properties 'revision)
14758 (assoc-ref properties 'commit)))
14759 (source
14760 (origin
14761 (method git-fetch)
14762 (uri (git-reference
14763 (url "https://github.com/kkroening/ffmpeg-python.git")
14764 (commit (assoc-ref properties 'commit))))
14765 (file-name (git-file-name name version))
14766 (sha256
14767 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
14768 (build-system pyproject-build-system)
14769 (arguments
14770 (list
14771 #:test-flags
14772 #~(list "-k" "not test_pipe and not test__probe")
14773 #:phases
14774 #~(modify-phases %standard-phases
14775 (add-after 'unpack 'hardcode-ffmpeg
14776 (lambda* (#:key inputs #:allow-other-keys)
14777 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
14778 (substitute* "ffmpeg/_run.py"
14779 (("cmd='ffmpeg'")
14780 (string-append "cmd='" ffmpeg "'")))
14781 (substitute* "ffmpeg/tests/test_ffmpeg.py"
14782 (("out_file.compile\\(\\) == \\['ffmpeg'")
14783 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
14784 (inputs (list ffmpeg))
14785 (propagated-inputs (list python-future))
14786 (native-inputs (list python-future
14787 python-numpy
14788 python-pytest
14789 python-pytest-mock
14790 python-setuptools))
14791 (home-page "https://github.com/kkroening/ffmpeg-python")
14792 (synopsis "Python bindings for FFmpeg with complex filtering support")
14793 (description
14794 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
14795Python terms, taking care of running ffmpeg with the correct command-line
14796arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
14797 (license license:asl2.0)))
14798
14799(define-public python-imageio-ffmpeg
14800 (package
14801 (name "python-imageio-ffmpeg")
14802 (version "0.6.0")
14803 (source
14804 (origin
14805 (method url-fetch)
14806 (uri (pypi-uri "imageio_ffmpeg" version))
14807 (sha256
14808 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
14809 (build-system pyproject-build-system)
14810 (arguments
14811 (list
14812 #:tests? #f ;XXX: tests require network access to get FFmpeg data
14813 #:phases
14814 #~(modify-phases %standard-phases
14815 (add-after 'unpack 'hardcode-ffmpeg
14816 (lambda* (#:key inputs #:allow-other-keys)
14817 (substitute* "imageio_ffmpeg/_utils.py"
14818 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
14819 (string-append "(" all " or \""
14820 (search-input-file inputs "bin/ffmpeg")
14821 "\")"))))))))
14822 (native-inputs
14823 (list python-setuptools
14824 python-wheel))
14825 (inputs
14826 (list ffmpeg))
14827 (home-page "https://github.com/imageio/imageio-ffmpeg")
14828 (synopsis "FFMPEG wrapper for Python")
14829 (description
14830 "This package provides an FFMPEG wrapper for working with video files.
14831It implements generator functions for reading and writing data to and from
14832FFMPEG, reliably terminating the process when done.")
14833 (license license:bsd-2)))
14834
14835(define-public python-imageio
14836 (package
14837 (name "python-imageio")
14838 (version "2.36.1")
14839 (source
14840 (origin
14841 (method url-fetch)
14842 (uri (pypi-uri "imageio" version))
14843 (sha256
14844 (base32
14845 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
14846 (build-system pyproject-build-system)
14847 (arguments
14848 (list
14849 #:test-flags #~(list "-m" "not needs_internet"
14850 ;; This attempts to load libGL.so (provided by mesa)
14851 ;; at the Python store path (sys.base_prefix?).
14852 "-k" "not test_findlib2"
14853 "--ignore" "tests/test_freeimage.py")
14854 #:phases
14855 #~(modify-phases %standard-phases
14856 (add-after 'unpack 'fix-source
14857 (lambda* (#:key inputs #:allow-other-keys)
14858 (substitute* "imageio/core/util.py"
14859 (("\"/var/tmp\"")
14860 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
14861 (propagated-inputs
14862 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
14863 (native-inputs
14864 (list python-fsspec
14865 python-pytest
14866 python-setuptools))
14867 (home-page "https://imageio.github.io/")
14868 (synopsis "Library for reading and writing a wide range of image data")
14869 (description
14870 "Imageio is a Python library that provides an easy interface to read and
14871write a wide range of image data, including animated images, video, volumetric
14872data, and scientific formats.")
14873 (license license:bsd-2)))
14874
14875(define-public python-pyudorandom
14876 ;; Releases are not tagged in Git:
14877 ;; https://github.com/mewwts/pyudorandom/issues/3
14878 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
14879 (revision "0"))
14880 (package
14881 (name "python-pyudorandom")
14882 (version (git-version "1.0.0" revision commit))
14883 (source
14884 (origin
14885 (method git-fetch)
14886 (uri (git-reference
14887 (url "https://github.com/mewwts/pyudorandom")
14888 (commit commit)))
14889 (file-name (git-file-name name version))
14890 (sha256
14891 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
14892 (build-system pyproject-build-system)
14893 (arguments (list #:test-backend #~'unittest))
14894 (native-inputs (list python-setuptools))
14895 (home-page "https://github.com/mewwts/pyudorandom")
14896 (synopsis "Generate pseudorandom numbers by using algebra")
14897 (description
14898 "The @code{pyudorandom} module lets you iterate over a list
14899in a non-succsessive, yet deterministic way based on integer modulo.
14900It comes in handy when you want to mix up the items, but don't need
14901any guarantees of randomness. It might be slow on small data,
14902but shall be significantly faster than @code{random.shuffle}
14903for longer lists.")
14904 (license license:expat))))
14905
14906(define-public python-pyvips
14907 (package
14908 (name "python-pyvips")
14909 (version "3.1.1")
14910 (source
14911 (origin
14912 (method git-fetch) ; PyPI does not include test helpers
14913 (uri (git-reference
14914 (url "https://github.com/libvips/pyvips")
14915 (commit (string-append "v" version))))
14916 (file-name (git-file-name name version))
14917 (sha256
14918 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
14919 (build-system pyproject-build-system)
14920 (native-inputs
14921 (list pkg-config
14922 python-pytest
14923 python-setuptools
14924 python-wheel))
14925 (inputs
14926 (list glib vips))
14927 (propagated-inputs
14928 (list python-cffi python-pkgconfig))
14929 (home-page "https://github.com/libvips/pyvips")
14930 (synopsis "Python bindings for VIPS")
14931 (description "The @code{pyvips} package provides Python bindings for VIPS,
14932a multithreaded image-processing system with low memory needs.")
14933 (license license:expat)))
14934
14935;; WARNING: This package is a dependency of mesa.
14936;; There are no users in python-xyz for this package, consider to adopt closer
14937;; to Mesa.
14938(define-public python-pycparser
14939 (package
14940 (name "python-pycparser")
14941 (version "2.22")
14942 (source
14943 (origin
14944 (method url-fetch)
14945 (uri (pypi-uri "pycparser" version))
14946 (sha256
14947 (base32
14948 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
14949 (outputs '("out" "doc"))
14950 (build-system pyproject-build-system)
14951 (arguments
14952 (list
14953 #:test-backend #~'unittest
14954 #:phases
14955 #~(modify-phases %standard-phases
14956 (add-after 'install 'install-doc
14957 (lambda _
14958 (let* ((data (string-append #$output:doc "/share"))
14959 (doc (string-append data "/doc/" #$name "-" #$version))
14960 (examples (string-append doc "/examples")))
14961 (mkdir-p examples)
14962 (for-each (lambda (file)
14963 (copy-file (string-append "." file)
14964 (string-append doc file)))
14965 '("/README.rst" "/CHANGES" "/LICENSE"))
14966 (copy-recursively "examples" examples)))))))
14967 (native-inputs
14968 (list python-setuptools))
14969 (home-page "https://github.com/eliben/pycparser")
14970 (synopsis "C parser in Python")
14971 (description
14972 "Pycparser is a complete parser of the C language, written in pure Python
14973using the PLY parsing library. It parses C code into an AST and can serve as
14974a front-end for C compilers or analysis tools.")
14975 (license license:bsd-3)))
14976
14977(define-public python-pywavelets
14978 (package
14979 (name "python-pywavelets")
14980 (version "1.8.0")
14981 (home-page "https://github.com/PyWavelets/pywt")
14982 (source (origin
14983 (method url-fetch)
14984 (uri (pypi-uri "pywavelets" version))
14985 (sha256
14986 (base32
14987 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
14988 (build-system pyproject-build-system)
14989 (arguments
14990 (list
14991 #:test-flags '(list "--pyargs" "pywt")
14992 #:phases
14993 #~(modify-phases %standard-phases
14994 ;; The compiled libraries are only in the output at this point,
14995 ;; but they are needed to run tests.
14996 ;; FIXME: This should be handled by the pyargs pytest argument,
14997 ;; but is not for some reason.
14998 (add-before 'check 'pre-check
14999 (lambda _ (chdir #$output))))))
15000 (native-inputs
15001 (list meson
15002 ninja
15003 pkg-config
15004 python-cython
15005 python-meson
15006 python-numpy
15007 python-pytest))
15008 (propagated-inputs
15009 (list python-numpy python-scipy))
15010 (synopsis "Wavelet transforms in Python")
15011 (description
15012 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
15013mathematical basis functions that are localized in both time and frequency.
15014Wavelet transforms are time-frequency transforms employing wavelets. They are
15015similar to Fourier transforms, the difference being that Fourier transforms are
15016localized only in frequency instead of in time and frequency.")
15017 (license license:expat)))
15018
15019(define-public python-pywal
15020 (package
15021 (name "python-pywal")
15022 (version "3.3.0")
15023 (source
15024 (origin
15025 (method git-fetch)
15026 (uri (git-reference
15027 (url "https://github.com/dylanaraps/pywal")
15028 (commit version)))
15029 (file-name (git-file-name name version))
15030 (sha256
15031 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
15032 (build-system pyproject-build-system)
15033 (arguments
15034 `(#:phases
15035 (modify-phases %standard-phases
15036 (add-before 'check 'fix-home-directory
15037 (lambda _
15038 ;; Tests fail with "Permission denied: '/homeless-shelter'".
15039 (setenv "HOME" "/tmp"))))))
15040 (native-inputs
15041 (list python-pytest
15042 python-setuptools))
15043 (inputs
15044 (list imagemagick))
15045 (home-page "https://github.com/dylanaraps/pywal")
15046 (synopsis "Color palette generator and applicator")
15047 (description
15048 "Pywal is a tool that generates a color palette from the dominant colors
15049in an image. It then applies the colors system-wide and on-the-fly in all of
15050your favourite programs.")
15051 (license license:expat)))
15052
15053(define-public python-pywal16
15054 (package
15055 (name "python-pywal16")
15056 (version "3.8.10")
15057 (source
15058 (origin
15059 (method url-fetch)
15060 (uri (pypi-uri "pywal16" version))
15061 (sha256
15062 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
15063 (build-system pyproject-build-system)
15064 (arguments
15065 (list
15066 #:phases
15067 '(modify-phases %standard-phases
15068 (add-before 'check 'set-HOME
15069 (lambda _ (setenv "HOME" "/tmp"))))))
15070 (native-inputs
15071 (list imagemagick
15072 python-pytest
15073 python-setuptools))
15074 (home-page "https://github.com/eylles/pywal16")
15075 (synopsis "16 colors fork of pywal")
15076 (description
15077 "Pywal16 is a tool that generates a color palette from the dominant
15078colors in an image. It then applies the colors system-wide and on-the-fly in
15079all of your favorite programs.")
15080 (license license:expat)))
15081
15082(define-public python-click-didyoumean
15083 (package
15084 (name "python-click-didyoumean")
15085 (version "0.3.1")
15086 (source
15087 (origin
15088 (method git-fetch) ;no tests in PyPI archive
15089 (uri (git-reference
15090 (url "https://github.com/click-contrib/click-didyoumean")
15091 (commit (string-append "v" version))))
15092 (file-name (git-file-name name version))
15093 (sha256
15094 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
15095 (build-system pyproject-build-system)
15096 (native-inputs
15097 (list python-poetry-core python-pytest))
15098 (propagated-inputs
15099 (list python-click))
15100 (home-page "https://github.com/timofurrer/click-didyoumean")
15101 (synopsis "Git-like did-you-mean feature in Click")
15102 (description
15103 "This plugin enables git-like did-you-mean feature in Click.")
15104 (license license:expat)))
15105
15106(define-public python-pywinrm
15107 (package
15108 (name "python-pywinrm")
15109 (version "0.5.0")
15110 (source
15111 (origin
15112 (method git-fetch)
15113 (uri (git-reference
15114 (url "https://github.com/diyan/pywinrm/")
15115 (commit (string-append "v" version))))
15116 (file-name (git-file-name name version))
15117 (sha256
15118 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
15119 (build-system pyproject-build-system)
15120 (propagated-inputs
15121 (list python-requests python-requests-ntlm python-xmltodict))
15122 (native-inputs
15123 (list python-mock python-pytest python-setuptools))
15124 (home-page "https://github.com/diyan/pywinrm/")
15125 (synopsis "Python library for Windows Remote Management (WinRM)")
15126 (description
15127 "pywinrm is a Python client for the Windows Remote Management (WinRM)
15128service. It allows you to invoke commands on target Windows machines from
15129any machine that can run Python.")
15130 (license license:expat)))
15131
15132(define-public python-manimpango
15133 (package
15134 (name "python-manimpango")
15135 (version "0.5.0")
15136 (source
15137 (origin
15138 (method git-fetch) ; no tests data in PyPi package
15139 (uri (git-reference
15140 (url "https://github.com/ManimCommunity/ManimPango")
15141 (commit (string-append "v" version))))
15142 (file-name (git-file-name name version))
15143 (sha256
15144 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
15145 (build-system pyproject-build-system)
15146 (arguments
15147 (list
15148 #:phases
15149 #~(modify-phases %standard-phases
15150 (add-before 'check 'build-extensions
15151 (lambda _
15152 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
15153 (native-inputs
15154 (list pkg-config
15155 python-cython
15156 python-pytest
15157 python-setuptools
15158 python-wheel))
15159 (inputs
15160 (list pango))
15161 (home-page "https://manimpango.manim.community/")
15162 (synopsis "Bindings for Pango for using with Manim")
15163 (description
15164 "Python bindings for ManimPango which is a C binding for Pango,
15165using Cython.
15166
15167ManimPango is internally used in Manim to render (non-LaTeX) text.")
15168 (license license:expat)))
15169
15170(define-public python-cairocffi
15171 (package
15172 (name "python-cairocffi")
15173 (version "1.7.1")
15174 (source
15175 (origin
15176 ;; The PyPI archive does not include the documentation, so use Git.
15177 (method git-fetch)
15178 (uri (git-reference
15179 (url "https://github.com/Kozea/cairocffi")
15180 (commit (string-append "v" version))))
15181 (file-name (git-file-name name version))
15182 (sha256
15183 (base32
15184 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
15185 (build-system pyproject-build-system)
15186 (outputs '("out" "doc"))
15187 (inputs
15188 (list glib gtk+ gdk-pixbuf cairo))
15189 (native-inputs
15190 (list python-flit-core
15191 python-numpy
15192 python-pikepdf
15193 python-pytest
15194 python-sphinx
15195 python-sphinx-rtd-theme))
15196 (propagated-inputs
15197 (list python-xcffib)) ; used at run time
15198 (arguments
15199 (list
15200 #:phases
15201 #~(modify-phases %standard-phases
15202 (add-after 'unpack 'patch-paths
15203 (lambda* (#:key inputs #:allow-other-keys)
15204 (substitute* "cairocffi/__init__.py"
15205 ;; Hack the dynamic library loading mechanism.
15206 (("find_library\\(library_name\\)")
15207 "\"found\"")
15208 (("filenames = \\(library_filename,\\) \\+ filenames")
15209 "pass")
15210 (("libcairo.so.2")
15211 (search-input-file inputs "/lib/libcairo.so.2")))
15212 (substitute* "cairocffi/pixbuf.py"
15213 (("libgdk_pixbuf-2.0.so.0")
15214 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
15215 (("libgobject-2.0.so.0")
15216 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
15217 (("libglib-2.0.so.0")
15218 (search-input-file inputs "/lib/libglib-2.0.so.0"))
15219 (("libgdk-3.so.0")
15220 (search-input-file inputs "/lib/libgdk-3.so.0")))))
15221 (add-after 'install 'install-doc
15222 (lambda* (#:key inputs #:allow-other-keys)
15223 (let* ((data (string-append #$output:doc "/share"))
15224 (doc (string-append data "/doc/" #$name "-" #$version))
15225 (html (string-append doc "/html")))
15226 (setenv "LD_LIBRARY_PATH"
15227 (string-append (assoc-ref inputs "cairo") "/lib" ":"
15228 (assoc-ref inputs "gdk-pixbuf") "/lib"))
15229 (setenv "LANG" "en_US.UTF-8")
15230 (mkdir-p html)
15231 (for-each (lambda (file)
15232 (copy-file (string-append "." file)
15233 (string-append doc file)))
15234 '("/README.rst" "/NEWS.rst"))
15235 (system* "python" "setup.py" "build_sphinx")
15236 (copy-recursively "docs/_build/html" html)))))))
15237 (home-page "https://github.com/Kozea/cairocffi")
15238 (synopsis "Python bindings and object-oriented API for Cairo")
15239 (description
15240 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
15241Python bindings and object-oriented API for cairo. Cairo is a 2D vector
15242graphics library with support for multiple backends including image buffers,
15243PNG, PostScript, PDF, and SVG file output.")
15244 (license license:bsd-3)))
15245
15246(define-public python-decorator
15247 (package
15248 (name "python-decorator")
15249 (version "5.2.1")
15250 (source
15251 (origin
15252 (method url-fetch)
15253 (uri (pypi-uri "decorator" version))
15254 (sha256
15255 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
15256 (build-system pyproject-build-system)
15257 (arguments
15258 (list #:test-backend #~'custom
15259 #:test-flags #~(list "tests/test.py")))
15260 (native-inputs
15261 (list python-setuptools))
15262 (home-page "https://pypi.org/project/decorator/")
15263 (synopsis "Python module to simplify usage of decorators")
15264 (description
15265 "The aim of the decorator module is to simplify the usage of decorators
15266for the average programmer, and to popularize decorators usage giving examples
15267of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
15268etc. The core of this module is a decorator factory.")
15269 (license license:expat)))
15270
15271(define-public python-drmaa
15272 (package
15273 (name "python-drmaa")
15274 (version "0.7.7")
15275 (source
15276 (origin
15277 (method url-fetch)
15278 (uri (pypi-uri "drmaa" version))
15279 (sha256
15280 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
15281 (build-system pyproject-build-system)
15282 ;; The test suite requires libdrmaa which is provided by the cluster
15283 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
15284 ;; should be set to the path of the libdrmaa library.
15285 (arguments
15286 (list
15287 #:tests? #f
15288 #:phases
15289 #~(modify-phases %standard-phases
15290 ;; Loading the library fails because DRMAA_LIBRARY_PATH
15291 ;; is not configured.
15292 (delete 'sanity-check))))
15293 (native-inputs (list python-setuptools))
15294 (home-page "https://pypi.org/project/drmaa/")
15295 (synopsis "Python bindings for the DRMAA library")
15296 (description
15297 "A Python package for Distributed Resource Management (DRM) job
15298submission and control. This package is an implementation of the DRMAA 1.0
15299Python language binding specification.")
15300 (license license:bsd-3)))
15301
15302(define-public python-grako
15303 (package
15304 (name "python-grako")
15305 (version "3.99.9")
15306 (source
15307 (origin
15308 (method url-fetch)
15309 (uri (pypi-uri "grako" version ".zip"))
15310 (sha256
15311 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
15312 (snippet
15313 #~(begin (use-modules (guix build utils))
15314 (substitute* "grako/grammars.py"
15315 (("from collections import defaultdict, Mapping")
15316 (string-append "from collections import defaultdict\n"
15317 "from collections.abc import Mapping")))
15318 (substitute* '("grako/util.py"
15319 "grako/walkers.py")
15320 (("collections\\.Mapping") "collections.abc.Mapping"))))))
15321 (build-system pyproject-build-system)
15322 ;; XXX: Test file 'grako.ebnf' is missing from archive.
15323 (arguments (list #:tests? #f))
15324 (native-inputs (list unzip python-pytest python-setuptools))
15325 (home-page "https://pypi.org/project/grako")
15326 (synopsis "EBNF parser generator")
15327 (description
15328 "Grako takes a grammar in a variation of EBNF as input, and outputs a
15329memoizing PEG/Packrat parser in Python.")
15330 (license license:bsd-3)))
15331
15332(define-public python-grandalf
15333 (package
15334 (name "python-grandalf")
15335 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
15336 (version "0.8")
15337 (source
15338 (origin
15339 (method git-fetch)
15340 (uri (git-reference
15341 (url "https://github.com/bdcht/grandalf")
15342 (commit (string-append "v" version))))
15343 (file-name (git-file-name name version))
15344 (sha256
15345 (base32 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))
15346 (patches
15347 (list
15348 (origin
15349 (method url-fetch)
15350 (uri
15351 (string-append "https://github.com/bdcht/grandalf/commit/"
15352 "e61df12f00124b615a220cfcd58dd6f89d226264.patch"))
15353 (sha256
15354 (base32 "1p0315flsg4frpadcnn7fh41y5k3cdz4h722v6ri88a3s6hcpd36")))))))
15355 (build-system pyproject-build-system)
15356 (arguments
15357 (list
15358 #:phases
15359 #~(modify-phases %standard-phases
15360 (add-before 'build 'patch-requirements
15361 (lambda _
15362 (substitute* "setup.py"
15363 (("install_requires=\\['pyparsing'],") "")))))))
15364 (native-inputs
15365 (list python-setuptools python-pytest))
15366 (propagated-inputs
15367 (list python-numpy python-ply))
15368 (home-page "https://github.com/bdcht/grandalf")
15369 (synopsis "Graph and drawing algorithms framework")
15370 (description
15371 "Grandalf is a Python package made for experimentations with graphs
15372drawing algorithms. It is written in pure Python, and currently implements
15373two layouts: the Sugiyama hierarchical layout and the force-driven or energy
15374minimization approach. While not as fast or featured as graphviz or other
15375libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
15376than thousands of nodes, while keeping the source code simple enough to tweak
15377and hack any part of it for experimental purpose. With a total of about 1500
15378lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
15379in less than 600 lines. The energy minimization approach is comprised of only
15380250 lines!
15381
15382Grandalf does only 2 not-so-simple things:
15383@itemize
15384@item computing the nodes (x,y) coordinates (based on provided nodes
15385dimensions, and a chosen layout)
15386@item routing the edges with lines or nurbs
15387@end itemize
15388
15389It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
15390will help you find where to draw things like nodes and edges, but it’s up to
15391you to actually draw things with your favorite toolkit.")
15392 ;; The user can choose either license.
15393 (license (list license:gpl2 license:epl1.0))))
15394
15395(define-public python-gridmap
15396 ;; XXX: Project is unmaintained since 2020-08-24, see:
15397 ;; <https://github.com/pygridtools/gridmap/issues/99>.
15398 (package
15399 (name "python-gridmap")
15400 (version "0.15.0")
15401 (source
15402 (origin
15403 (method git-fetch)
15404 (uri (git-reference
15405 (url "https://github.com/pygridtools/gridmap")
15406 (commit (string-append "v" version))))
15407 (file-name (git-file-name name version))
15408 (sha256
15409 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
15410 (build-system pyproject-build-system)
15411 (arguments
15412 (list #:tests? #f ;XXX: freezes or timeout
15413 #:test-backend #~'nose))
15414 (native-inputs
15415 (list ;; python-pynose
15416 python-setuptools))
15417 (propagated-inputs
15418 (list python-cherrypy
15419 python-cloudpickle
15420 python-psutil
15421 python-drmaa
15422 python-pyzmq))
15423 (home-page "https://github.com/pygridtools/gridmap")
15424 (synopsis "Create jobs on a cluster directly from Python")
15425 (description
15426 "Gridmap is a Python package to allow you to easily create jobs on the
15427cluster directly from Python. You can directly map Python functions onto the
15428cluster without needing to write any wrapper code yourself.")
15429 (license license:gpl3+)))
15430
15431(define-public python-honcho
15432 (package
15433 (name "python-honcho")
15434 (version "2.0.0")
15435 (source
15436 (origin
15437 (method git-fetch)
15438 (uri (git-reference
15439 (url "https://github.com/nickstenning/honcho")
15440 (commit (string-append "v" version))))
15441 (file-name (git-file-name name version))
15442 (sha256
15443 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
15444 (build-system pyproject-build-system)
15445 (arguments
15446 ;; Tests below fail with the error
15447 ;; ValueError: The 'honcho.export.xxx' package was not installed
15448 ;; in a way that PackageLoader understands.
15449 ;; Probably safe because it's testing for different init systems.
15450 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
15451 "--ignore" "tests/test_export_runit.py"
15452 "--ignore" "tests/test_export_supervisord.py"
15453 "--ignore" "tests/test_export_systemd.py"
15454 "--ignore" "tests/test_export_upstart.py")))
15455 (native-inputs
15456 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
15457 (propagated-inputs
15458 (list python-colorama))
15459 (home-page "https://github.com/nickstenning/honcho")
15460 (synopsis "Manage Procfile-based applications")
15461 (description
15462 "A Procfile is a file which describes how to run an application
15463consisting of several processes. honcho starts all listed processes.
15464The output of all running processes is collected by honcho and
15465displayed.")
15466 (license license:expat)))
15467
15468(define-public python-hsluv
15469 (package
15470 (name "python-hsluv")
15471 (version "5.0.4")
15472 (source
15473 (origin
15474 (method url-fetch)
15475 (uri (pypi-uri "hsluv" version))
15476 (sha256
15477 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
15478 (build-system pyproject-build-system)
15479 (native-inputs
15480 (list python-pytest python-setuptools))
15481 (home-page "https://www.hsluv.org")
15482 (synopsis "Human-friendly HSL colour space implemented in Python")
15483 (description
15484 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
15485@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
15486component that allows you to span all the available chroma as a neat
15487percentage.")
15488 (license license:expat)))
15489
15490(define-public python-pebble
15491 (package
15492 (name "python-pebble")
15493 (version "5.1.3")
15494 (source
15495 (origin
15496 (method git-fetch)
15497 (uri (git-reference
15498 (url "https://github.com/noxdafox/pebble")
15499 (commit version)))
15500 (file-name (git-file-name name version))
15501 (sha256
15502 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
15503 (build-system pyproject-build-system)
15504 (native-inputs (list python-pytest python-setuptools))
15505 (home-page "https://github.com/noxdafox/pebble")
15506 (synopsis "Threading and multiprocessing for Python")
15507 (description
15508 "Pebble aims to help manage threads and processes in an easier way. It
15509wraps Python's standard library threading and multiprocessing objects.")
15510 (license license:lgpl3+)))
15511
15512(define-public python-pexpect
15513 (package
15514 (name "python-pexpect")
15515 (version "4.9.0")
15516 (source
15517 (origin
15518 (method url-fetch)
15519 (uri (pypi-uri "pexpect" version))
15520 (sha256
15521 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
15522 (build-system pyproject-build-system)
15523 (arguments
15524 (list
15525 #:test-flags
15526 ;; The socket tests can hang (most often, but not only, when run in
15527 ;; parallel, see: <https://github.com/pexpect/pexpect/issues/809>)
15528 #~(list "--ignore=tests/test_socket.py"
15529 "--ignore=tests/test_socket_fd.py"
15530 "-k" (string-join
15531 (list
15532 ;; Disable failing test, see
15533 ;; <https://github.com/pexpect/pexpect/issues/568>.
15534 "not test_bash"
15535 ;; Fails with attempt to find OpenSSL.
15536 "test_large_stdout_stream"
15537 ;; Tests fail while trying to find
15538 ;; tmp-pexpect-xxxxxxxxxxxx directories.
15539 "test_run_uses_env"
15540 "test_run_uses_env_path"
15541 "test_run_uses_env_path_over_path"
15542 "test_spawn_uses_env"
15543 ;; Fails with assertion error: assert 0 == 500
15544 "test_before_across_chunks"
15545 ;; Bash is enough for tests.
15546 "test_zsh")
15547 " and not "))
15548 #:phases
15549 #~(modify-phases %standard-phases
15550 (add-before 'check 'prepare-tests
15551 (lambda _
15552 (substitute* (find-files "tests")
15553 (("/bin/bash") (which "bash"))
15554 (("/bin/echo") (which "echo"))
15555 (("/bin/ls") (which "ls"))
15556 (("/bin/which") (which "which"))
15557 ;; Many tests try to use the /bin directory which is not
15558 ;; present in the build environment. Use one that's non-empty
15559 ;; and unlikely to change.
15560 (("/bin'") "/dev'")))))))
15561 (native-inputs
15562 (list bash ;full Bash for 'test_replwrap.py'
15563 man-db
15564 python-pytest
15565 python-setuptools
15566 which))
15567 (propagated-inputs
15568 (list python-ptyprocess))
15569 (home-page "https://pexpect.readthedocs.org/")
15570 (synopsis "Controlling interactive console applications")
15571 (description
15572 "Pexpect is a pure Python module for spawning child applications;
15573controlling them; and responding to expected patterns in their output. Pexpect
15574works like Don Libes’ Expect. Pexpect allows your script to spawn a child
15575application and control it as if a human were typing commands.")
15576 (license license:isc)))
15577
15578(define-public python-sexpdata
15579 (package
15580 (name "python-sexpdata")
15581 (version "1.0.2")
15582 (source
15583 (origin
15584 (method url-fetch)
15585 (uri (pypi-uri "sexpdata" version))
15586 (sha256
15587 (base32
15588 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15589 (build-system pyproject-build-system)
15590 (arguments
15591 (list #:tests? #f)) ; no tests
15592 (native-inputs (list python-setuptools python-wheel))
15593 (home-page "https://github.com/jd-boyd/sexpdata")
15594 (synopsis "S-expression parser for Python")
15595 (description
15596 "Sexpdata is an S-expression parser/serializer. It has load and dump
15597functions like pickle, json or PyYAML module.")
15598 (license license:bsd-3)))
15599
15600(define-public python-pathable
15601 (package
15602 (name "python-pathable")
15603 (version "0.4.3")
15604 (source
15605 (origin
15606 (method url-fetch)
15607 (uri (pypi-uri "pathable" version))
15608 (sha256
15609 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15610 (build-system pyproject-build-system)
15611 (arguments (list #:tests? #false)) ;there are none
15612 (native-inputs (list python-poetry-core))
15613 (home-page "https://github.com/p1c2u/pathable")
15614 (synopsis "Object-oriented paths")
15615 (description "With this package you can traverse resources like paths and
15616access resources on demand with separate accessor layer.")
15617 (license license:asl2.0)))
15618
15619(define-public python-importlib-resources
15620 (package
15621 (name "python-importlib-resources")
15622 (version "6.5.2")
15623 (source (origin
15624 (method url-fetch)
15625 (uri (pypi-uri "importlib_resources" version))
15626 (sha256
15627 (base32
15628 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15629 (build-system pyproject-build-system)
15630 (native-inputs
15631 (list python-jaraco-test
15632 python-jaraco-collections
15633 python-pytest
15634 python-setuptools
15635 python-setuptools-scm
15636 python-zipp))
15637 (home-page "https://importlib-resources.readthedocs.io/")
15638 (synopsis "Read resources from Python packages")
15639 (description
15640 "@code{importlib_resources} is a backport of Python 3's standard library
15641@code{importlib.resources} module for Python 2.7, and Python 3.")
15642 (license license:asl2.0)))
15643
15644(define-public python-importlib-metadata
15645 (package
15646 (name "python-importlib-metadata")
15647 (version "8.7.0")
15648 (source
15649 (origin
15650 (method url-fetch)
15651 (uri (pypi-uri "importlib_metadata" version))
15652 (sha256
15653 (base32
15654 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15655 (build-system pyproject-build-system)
15656 (arguments
15657 (list #:test-flags #~(list "tests")))
15658 (native-inputs
15659 (list python-jaraco-test
15660 python-packaging-bootstrap
15661 python-pyfakefs
15662 python-pytest-bootstrap
15663 python-setuptools
15664 python-setuptools-scm))
15665 (propagated-inputs
15666 (list python-zipp))
15667 (home-page "https://importlib-metadata.readthedocs.io/")
15668 (synopsis "Read metadata from Python packages")
15669 (description
15670 "@code{importlib_metadata} is a library which provides an API for
15671accessing an installed Python package's metadata, such as its entry points or
15672its top-level name. This functionality intends to replace most uses of
15673@code{pkg_resources} entry point API and metadata API. Along with
15674@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15675need to use the older and less efficient @code{pkg_resources} package.")
15676 (license license:asl2.0)))
15677
15678(define-public python-importlib-metadata-argparse-version
15679 (package
15680 (name "python-importlib-metadata-argparse-version")
15681 (version "2.0.1")
15682 (home-page
15683 "https://github.com/mondeja/importlib-metadata-argparse-version")
15684 (source
15685 (origin
15686 (method git-fetch)
15687 (uri (git-reference
15688 (url home-page)
15689 (commit (string-append "v" version))))
15690 (file-name (git-file-name name version))
15691 (sha256
15692 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15693 (build-system pyproject-build-system)
15694 (native-inputs (list python-pytest python-hatchling))
15695 (synopsis "Get Python package version more efficiently")
15696 (description
15697 "This package provides an @code{argparse} action to define CLI version
15698with a delayed call to @code{importlib.metadata}, avoiding to load this module
15699when not needed.")
15700 (license license:bsd-3)))
15701
15702(define-public python-importmagic
15703 (package
15704 (name "python-importmagic")
15705 (version "0.1.7")
15706 (source
15707 (origin
15708 (method git-fetch)
15709 (uri (git-reference
15710 (url "https://github.com/alecthomas/importmagic")
15711 (commit version)))
15712 (file-name (git-file-name name version))
15713 (sha256
15714 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15715 (build-system pyproject-build-system)
15716 (native-inputs (list python-pytest python-setuptools))
15717 (home-page "https://github.com/alecthomas/importmagic")
15718 (synopsis "Library for adding, removing and managing Python imports")
15719 (description
15720 "Importmagic is a Python library for automatically managing imports by
15721finding unresolved symbols in Python code and their corresponding imports.")
15722 (license license:bsd-3)))
15723
15724(define-public python-inotify-simple
15725 (package
15726 (name "python-inotify-simple")
15727 (version "1.3.5")
15728 (source
15729 (origin
15730 (method git-fetch)
15731 (uri (git-reference
15732 (url "https://github.com/chrisjbillington/inotify_simple")
15733 (commit version)))
15734 (file-name (git-file-name name version))
15735 (sha256
15736 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15737 (build-system pyproject-build-system)
15738 (arguments
15739 (list
15740 #:test-backend #~'custom
15741 #:test-flags #~(list "example.py")))
15742 (native-inputs (list python-setuptools))
15743 (home-page "https://github.com/chrisjbillington/inotify_simple")
15744 (synopsis "Simple wrapper around inotify library")
15745 (description
15746 "@code{inotify-simple} is a simple wrapper around inotify library.")
15747 (license license:bsd-3)))
15748
15749(define-public python-interface-meta
15750 (package
15751 (name "python-interface-meta")
15752 (version "1.3.0")
15753 (source
15754 (origin
15755 (method url-fetch)
15756 (uri (pypi-uri "interface_meta" version))
15757 (sha256
15758 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
15759 (build-system pyproject-build-system)
15760 (native-inputs (list python-poetry-core python-pytest))
15761 (home-page "https://github.com/matthewwardrop/interface_meta")
15762 (synopsis
15763 "API for enforced method signatures and consistent documentation")
15764 (description
15765 "This package provides a convenient way to expose an extensible API with
15766enforced method signatures and consistent documentation.")
15767 (license license:expat)))
15768
15769(define-public python-jaraco-itertools
15770 (package
15771 (name "python-jaraco-itertools")
15772 (version "6.4.3")
15773 (source
15774 (origin
15775 (method git-fetch)
15776 (uri (git-reference
15777 (url "https://github.com/jaraco/jaraco.itertools")
15778 (commit (string-append "v" version))))
15779 (file-name (git-file-name name version))
15780 (sha256
15781 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
15782 (build-system pyproject-build-system)
15783 (arguments
15784 (list #:tests? #f)) ;no tests
15785 (native-inputs
15786 (list python-setuptools
15787 python-setuptools-scm))
15788 (propagated-inputs
15789 (list python-inflect
15790 python-more-itertools))
15791 (home-page "https://github.com/jaraco/jaraco.itertools")
15792 (synopsis "Tools for working with iterables")
15793 (description
15794 "This package provides an utility collection based on no longer
15795maintained @code{jaraco.util}.")
15796 (license license:expat)))
15797
15798(define-public python-jaraco-logging
15799 (package
15800 (name "python-jaraco-logging")
15801 (version "3.4.0")
15802 (source
15803 (origin
15804 (method git-fetch)
15805 (uri (git-reference
15806 (url "https://github.com/jaraco/jaraco.logging")
15807 (commit (string-append "v" version))))
15808 (file-name (git-file-name name version))
15809 (sha256
15810 (base32 "0c13wxbmk0rl1jd0fxp3p7qpsps8lj6p2wlkny2ng5z4qn21ahhi"))))
15811 (build-system pyproject-build-system)
15812 (native-inputs
15813 (list python-pytest
15814 python-setuptools
15815 python-setuptools-scm))
15816 (propagated-inputs
15817 (list python-tempora))
15818 (home-page "https://github.com/jaraco/jaraco.logging")
15819 (synopsis "Support for Python's logging facility")
15820 (description
15821 "This package allows soliciting log-level info from command-line
15822parameters.")
15823 (license license:expat)))
15824
15825(define-public python-jaraco-packaging
15826 (package
15827 (name "python-jaraco-packaging")
15828 (version "9.4.0") ;the latest version compatible with [email protected]
15829 (source
15830 (origin
15831 (method url-fetch)
15832 (uri (pypi-uri "jaraco.packaging" version))
15833 (sha256
15834 (base32
15835 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
15836 (build-system pyproject-build-system)
15837 (arguments
15838 (list #:tests? #f)) ;no tests in PyPI archive
15839 (native-inputs
15840 (list python-setuptools
15841 python-setuptools-scm))
15842 (propagated-inputs
15843 (list python-pypa-build
15844 python-virtualenv
15845 python-domdf-python-tools
15846 python-jaraco-context
15847 python-sphinx))
15848 (home-page "https://github.com/jaraco/jaraco.packaging")
15849 (synopsis "Tools to supplement packaging Python releases")
15850 (description
15851 "This package provides various tools to supplement packaging Python
15852releases.")
15853 (license license:expat)))
15854
15855(define-public python-jaraco-vcs
15856 (package
15857 (name "python-jaraco-vcs")
15858 (version "2.4.1")
15859 (source
15860 (origin
15861 (method git-fetch)
15862 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
15863 (commit (string-append "v" version))))
15864 (file-name (git-file-name name version))
15865 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
15866 (build-system pyproject-build-system)
15867 (arguments
15868 (list
15869 #:test-flags
15870 ;; Ignore doctests.
15871 #~(list "--ignore-glob=jaraco/vcs/*.py")))
15872 (propagated-inputs (list python-jaraco-classes
15873 python-jaraco-path
15874 python-jaraco-versioning
15875 python-more-itertools
15876 python-packaging
15877 python-dateutil
15878 python-tempora))
15879 (native-inputs (list python-pygments
15880 python-pytest
15881 python-pytest-home
15882 python-setuptools
15883 python-setuptools-scm))
15884 (home-page "https://github.com/jaraco/jaraco.vcs")
15885 (synopsis "Utilities for working with VCS repositories")
15886 (description
15887 "This package provides facilities for working with VCS repositories in
15888Python.")
15889 (license license:expat)))
15890
15891(define-public python-jaraco-versioning
15892 (package
15893 (name "python-jaraco-versioning")
15894 (version "1.1.0")
15895 (source
15896 (origin
15897 (method git-fetch)
15898 (uri (git-reference
15899 (url "https://github.com/jaraco/jaraco.versioning")
15900 (commit (string-append "v" version))))
15901 (file-name (git-file-name name version))
15902 (sha256
15903 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
15904 (build-system pyproject-build-system)
15905 (arguments
15906 (list
15907 #:phases
15908 #~(modify-phases %standard-phases
15909 ;; doctest started failing with python-packaging 26.2
15910 (add-after 'unpack 'fix-doc-test
15911 (lambda _
15912 (substitute* "jaraco/versioning.py"
15913 (("<Version") "<SummableVersion")))))))
15914 (propagated-inputs (list python-packaging))
15915 (native-inputs
15916 (list python-pytest python-setuptools python-setuptools-scm))
15917 (home-page "https://github.com/jaraco/jaraco.versioning")
15918 (synopsis "Version manipulation utils")
15919 (description
15920 "This package builds upon @code{python-packaging} to provide more
15921sophisticated version manipulation.")
15922 (license license:expat)))
15923
15924(define-public python-simplegeneric
15925 (package
15926 (name "python-simplegeneric")
15927 (version "0.8.1")
15928 (source
15929 (origin
15930 (method url-fetch)
15931 (uri (pypi-uri "simplegeneric" version ".zip"))
15932 (sha256
15933 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
15934 (build-system pyproject-build-system)
15935 (arguments
15936 (list
15937 #:test-backend #~'custom
15938 #:test-flags #~(list "-m" "simplegeneric")))
15939 (native-inputs
15940 (list unzip python-setuptools))
15941 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
15942 (synopsis "Python module for simple generic functions")
15943 (description
15944 "The simplegeneric module lets you define simple single-dispatch generic
15945functions, akin to Python’s built-in generic functions like @code{len()},
15946@code{iter()} and so on. However, instead of using specially-named methods,
15947these generic functions use simple lookup tables, akin to those used by
15948e.g. @code{pickle.dump()} and other generic functions found in the Python
15949standard library.")
15950 (license license:zpl2.1)))
15951
15952(define-public python-ipython-genutils
15953 ;; TODO: This package is retired, check if can be removed, see description.
15954 (package
15955 (name "python-ipython-genutils")
15956 (version "0.1.0")
15957 (source
15958 (origin
15959 (method url-fetch)
15960 (uri (pypi-uri "ipython_genutils" version))
15961 (sha256
15962 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
15963 (build-system pyproject-build-system)
15964 (arguments `(#:tests? #f)) ; no tests
15965 (native-inputs
15966 (list python-setuptools))
15967 (home-page "https://ipython.org")
15968 (synopsis "Vestigial utilities from IPython")
15969 (description
15970 "This package provides retired utilities from IPython. No packages
15971outside IPython/Jupyter should depend on it.
15972
15973This package shouldn't exist. It contains some common utilities shared by
15974Jupyter and IPython projects during The Big Split. As soon as possible, those
15975packages will remove their dependency on this, and this package will go
15976away.")
15977 (license license:bsd-3)))
15978
15979;;; Variant used to break a cycle with python-ipykernel.
15980(define-public python-ipyparallel-bootstrap
15981 (hidden-package
15982 (package
15983 (name "python-ipyparallel-bootstrap")
15984 (version "9.0.1")
15985 (source
15986 (origin
15987 (method url-fetch)
15988 (uri (pypi-uri "ipyparallel" version))
15989 (sha256
15990 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
15991 (build-system pyproject-build-system)
15992 (arguments
15993 (list
15994 #:tests? #f
15995 #:phases #~(modify-phases %standard-phases
15996 ;; The python-ipykernel is normally propagated but is
15997 ;; removed from this package to break the cycle.
15998 (delete 'sanity-check))))
15999 (native-inputs
16000 (list python-hatchling))
16001 (propagated-inputs
16002 (list python-dateutil
16003 python-decorator
16004 python-entrypoints
16005 python-ipython
16006 ;; python-ipykernel is omitted here to break a cycle.
16007 python-jupyter-client-bootstrap
16008 python-psutil
16009 python-pyzmq
16010 python-tornado
16011 python-tqdm
16012 python-traitlets))
16013 (home-page "https://ipython.org/")
16014 (synopsis "Interactive Parallel Computing with IPython")
16015 (description
16016 "@code{ipyparallel} is a Python package and collection of CLI scripts
16017for controlling clusters for Jupyter. @code{ipyparallel} contains the
16018following CLI scripts:
16019@enumerate
16020@item ipcluster - start/stop a cluster
16021@item ipcontroller - start a scheduler
16022@item ipengine - start an engine
16023@end enumerate")
16024 (license license:bsd-3))))
16025
16026(define-public python-ipyparallel
16027 (package
16028 (inherit python-ipyparallel-bootstrap)
16029 (name "python-ipyparallel")
16030 (arguments
16031 (list
16032 #:test-flags
16033 ;; Disable warning because DeprecationWarnings make tests fail.
16034 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
16035 (native-inputs
16036 (modify-inputs native-inputs
16037 (append python-ipython
16038 python-pytest
16039 python-pytest-asyncio
16040 python-pytest-tornado
16041 python-testpath)))
16042 (propagated-inputs
16043 (modify-inputs propagated-inputs
16044 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
16045 (append python-ipykernel)))
16046 (properties (alist-delete 'hidden? (package-properties
16047 python-ipyparallel-bootstrap)))))
16048
16049;; TODO: Package python-jupysql which is the maintained fork of this one.
16050(define-public python-ipython-sql
16051 (package
16052 (name "python-ipython-sql")
16053 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
16054 (revision . "0")))
16055 (version (git-version "0.5.0"
16056 (assoc-ref properties 'revision)
16057 (assoc-ref properties 'commit)))
16058 (source
16059 (origin
16060 (method git-fetch)
16061 (uri (git-reference
16062 (url "https://github.com/catherinedevlin/ipython-sql")
16063 (commit (assoc-ref properties 'commit))))
16064 (file-name (git-file-name name version))
16065 (sha256
16066 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
16067 (build-system pyproject-build-system)
16068 (arguments
16069 (list #:tests? #f ;Fail because of prettytable.
16070 #:phases
16071 #~(modify-phases %standard-phases
16072 (replace 'check
16073 (lambda* (#:key tests? #:allow-other-keys)
16074 (setenv "HOME" (getcwd))
16075 (if tests?
16076 (invoke "ipython" "-c"
16077 "import pytest; pytest.main(['.'])")
16078 (format #t "test suite not run.~%")))))))
16079 (native-inputs (list python-pytest python-setuptools))
16080 (propagated-inputs
16081 (list python-ipython
16082 python-ipython-genutils
16083 python-prettytable
16084 python-sqlalchemy-2
16085 python-sqlparse))
16086 (home-page "https://github.com/catherinedevlin/ipython-sql")
16087 (synopsis "RDBMS access via IPython")
16088 (description "This library connects to a database, using SQLAlchemy URL
16089connect strings, then issue SQL commands within IPython or IPython Notebook.")
16090 (license license:expat)))
16091
16092(define-public python-optree
16093 (package
16094 (name "python-optree")
16095 (version "0.14.0")
16096 (source
16097 (origin
16098 (method git-fetch)
16099 (uri (git-reference
16100 (url "https://github.com/metaopt/optree")
16101 (commit (string-append "v" version))))
16102 (file-name (git-file-name name version))
16103 (sha256
16104 (base32
16105 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
16106 (build-system pyproject-build-system)
16107 (arguments
16108 (list
16109 #:test-flags
16110 ;; These tests fails due to a circular import
16111 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
16112 " and not test_import_no_warnings"))))
16113 (propagated-inputs (list python-typing-extensions))
16114 (native-inputs
16115 (list python-pytest
16116 python-setuptools
16117 python-wheel
16118 cmake-minimal
16119 pybind11-2))
16120 (home-page "https://github.com/metaopt/optree")
16121 (synopsis "Optimized PyTree Utilities")
16122 (description "This package contains operations on PyTrees (a tree made of
16123container data structures in Python).")
16124 (license license:asl2.0)))
16125
16126(define-public python-backcall
16127 (package
16128 (name "python-backcall")
16129 (version "0.2.0")
16130 (source
16131 (origin
16132 (method git-fetch)
16133 (uri (git-reference
16134 (url "https://github.com/takluyver/backcall/")
16135 (commit version)))
16136 (file-name (git-file-name name version))
16137 (sha256
16138 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
16139 (build-system pyproject-build-system)
16140 (native-inputs (list python-flit-core python-pytest))
16141 (home-page "https://github.com/takluyver/backcall/")
16142 (synopsis "Specifications for callback functions passed in to an API")
16143 (description
16144 "If your code lets other people supply callback functions, it's important
16145to specify the function signature you expect, and check that functions support
16146that. Adding extra parameters later would break other peoples code unless
16147you're careful. The @code{backcall} package provides a way of specifying the
16148callback signature using a prototype function.")
16149 (license license:bsd-3)))
16150
16151(define-public python-pubmed-parser
16152 (package
16153 (name "python-pubmed-parser")
16154 (version "0.5.1")
16155 (source (origin
16156 (method git-fetch)
16157 (uri (git-reference
16158 (url "https://github.com/titipata/pubmed_parser")
16159 (commit version)))
16160 (file-name (git-file-name name version))
16161 (sha256
16162 (base32
16163 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
16164 (build-system pyproject-build-system)
16165 (arguments (list #:tests? #f)) ;; Tests require internet
16166 (native-inputs
16167 (list python-setuptools))
16168 (propagated-inputs
16169 (list python-lxml
16170 python-numpy
16171 python-requests
16172 python-six ;hard dependency
16173 python-unidecode))
16174 (home-page "https://titipata.github.io/pubmed_parser/")
16175 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
16176 (description
16177 "This package provides a Python parser for Pubmed Open-Access Subset and
16178MEDLINE XML repository.")
16179 (license license:expat)))
16180
16181(define-public python-pure-eval
16182 (package
16183 (name "python-pure-eval")
16184 (version "0.2.3")
16185 (source
16186 (origin
16187 (method url-fetch)
16188 (uri (pypi-uri "pure_eval" version))
16189 (sha256
16190 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
16191 (build-system pyproject-build-system)
16192 (native-inputs
16193 (list python-pytest
16194 python-setuptools
16195 python-setuptools-scm
16196 python-wheel))
16197 (home-page "https://github.com/alexmojaki/pure_eval")
16198 (synopsis "Python library to evaluate abstract syntax tree nodes")
16199 (description "The @code{pure_eval} Python library can safely evaluate
16200abstract syntax tree (AST) nodes without side effects.")
16201 (license license:expat)))
16202
16203(define-public python-puremagic
16204 (package
16205 (name "python-puremagic")
16206 (version "1.28")
16207 (source
16208 (origin
16209 (method git-fetch) ;no tests in PyPI archive
16210 (uri (git-reference
16211 (url "https://github.com/cdgriffith/puremagic")
16212 (commit version)))
16213 (file-name (git-file-name name version))
16214 (sha256
16215 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
16216 (build-system pyproject-build-system)
16217 (native-inputs
16218 (list python-pytest python-setuptools python-wheel))
16219 (home-page "https://github.com/cdgriffith/puremagic")
16220 (synopsis "Pure Python implementation of magic file detection")
16221 (description
16222 "This package implements a functionality that will identify a file based
16223off it's magic numbers.")
16224 (license license:expat)))
16225
16226(define-public python-ast-decompiler
16227 (package
16228 (name "python-ast-decompiler")
16229 (version "0.7.0")
16230 (source
16231 (origin
16232 (method url-fetch)
16233 (uri (pypi-uri "ast_decompiler" version))
16234 (sha256
16235 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
16236 ;; We need to manually create an __init__.py file under the tests/
16237 ;; directory, since it is not included in the distributed
16238 ;; version. (See:
16239 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
16240 (modules '((guix build utils)))
16241 (snippet '(call-with-output-file "tests/__init__.py"
16242 (const #t)))))
16243 (build-system pyproject-build-system)
16244 (native-inputs (list python-flit-core python-pytest))
16245 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
16246 (synopsis
16247 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
16248 (description
16249 "This library provides functionality to decompile @acronym{AST, Abstract
16250Syntax Tree} objects, as generated by the standard library @code{ast} module,
16251to Python code.")
16252 (license license:asl2.0)))
16253
16254(define-public python-asttokens
16255 (package
16256 (name "python-asttokens")
16257 (version "3.0.1")
16258 (source
16259 (origin
16260 (method git-fetch)
16261 (uri (git-reference
16262 (url "https://github.com/gristlabs/asttokens")
16263 (commit (string-append "v" version))))
16264 (file-name (git-file-name name version))
16265 (sha256 (base32 "1qqi7dygcv58czrsafc4gf41prfb6shd0crx33kd9wypk0v29afn"))))
16266 (build-system pyproject-build-system)
16267 (native-inputs
16268 (list python-astroid
16269 python-pytest
16270 python-setuptools
16271 python-setuptools-scm))
16272 (home-page "https://github.com/gristlabs/asttokens")
16273 (synopsis "Python library to annotate abstract syntax trees")
16274 (description "The @code{asttokens} module annotates Python abstract syntax
16275trees (ASTs) with the positions of tokens and text in the source code that
16276generated them. It makes it possible for tools that work with logical AST
16277nodes to find the particular text that resulted in those nodes, for example
16278for automated refactoring or highlighting.")
16279 (license license:asl2.0)))
16280
16281(define-public python-littleutils
16282 (package
16283 (name "python-littleutils")
16284 (version "0.2.4")
16285 (source
16286 (origin
16287 (method url-fetch)
16288 (uri (pypi-uri "littleutils" version))
16289 (sha256
16290 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
16291 (build-system pyproject-build-system)
16292 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
16293 (native-inputs
16294 (list python-setuptools
16295 python-setuptools-scm
16296 python-wheel))
16297 (home-page "https://github.com/alexmojaki/littleutils")
16298 (synopsis "Python utility function collection")
16299 (description "@code{littleutils} is a small collection of Python utility
16300functions, useful in the context of writing unit tests among other uses.")
16301 (license license:expat)))
16302
16303(define-public python-ipython
16304 (package
16305 (name "python-ipython")
16306 (version "9.8.0")
16307 (source
16308 (origin
16309 (method git-fetch)
16310 (uri (git-reference
16311 (url "https://github.com/ipython/ipython")
16312 (commit version)))
16313 (file-name (git-file-name name version))
16314 (sha256
16315 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
16316 (build-system pyproject-build-system)
16317 (arguments
16318 (list
16319 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
16320 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
16321 #:test-backend #~'custom
16322 ;; XXX: It's a workaround to fix the error with module import
16323 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
16324 ;; <https://codeberg.org/guix/guix/issues/2108>.
16325 #:test-flags
16326 #~(list "-m" "pytest" "-vv"
16327 "-k" (string-join
16328 ;; These need git.
16329 (list "not test_json_getsysinfo"
16330 "IPython.utils.sysinfo.sys_info"
16331 ;; Failed: DID NOT RAISE
16332 "test_timeit_raise_on_interrupt"
16333 "test_script_raise_on_interrupt"
16334 "test_time_raise_on_interrupt")
16335 " and not "))
16336 #:phases
16337 #~(modify-phases %standard-phases
16338 (add-before 'check 'pre-check
16339 (lambda _
16340 (setenv "HOME" "/tmp"))))))
16341 (propagated-inputs
16342 (list python-decorator
16343 python-ipython-pygments-lexers
16344 python-jedi
16345 python-matplotlib-inline
16346 python-pexpect
16347 python-prompt-toolkit
16348 python-pygments
16349 python-stack-data
16350 python-traitlets
16351 python-typing-extensions))
16352 (native-inputs
16353 (list python-pytest
16354 python-pytest-asyncio
16355 python-setuptools
16356 python-testpath
16357 ;; [extra]
16358 ;; python-curio ;deprecated
16359 ;; python-ipykernel ;cycles
16360 ;; python-jupyter-ai ;not packaged
16361 python-matplotlib
16362 ;; python-nbclient ;cycles
16363 python-nbformat
16364 python-numpy
16365 python-pandas
16366 python-trio))
16367 (home-page "https://ipython.org")
16368 (synopsis "IPython is a tool for interactive computing in Python")
16369 (description
16370 "IPython provides a rich architecture for interactive computing with:
16371Powerful interactive shells, a browser-based notebook, support for interactive
16372data visualization, embeddable interpreters and tools for parallel
16373computing.")
16374 (properties '((cpe-name . "ipython")))
16375 (license license:bsd-3)))
16376
16377(define-public python-ipython-documentation
16378 (package
16379 (inherit python-ipython)
16380 (name "python-ipython-documentation")
16381 (version (package-version python-ipython))
16382 (arguments
16383 (list
16384 #:phases
16385 #~(modify-phases %standard-phases
16386 (add-after 'unpack 'set-pythonpath
16387 (lambda _
16388 ;; Ensure this fixed (via the
16389 ;; "python-ipython-documentation-chars.patch" patch) copy of
16390 ;; IPython gets used.
16391 (setenv "PYTHONPATH" (string-append (getcwd)))))
16392 (delete 'build)
16393 (delete 'check)
16394 (replace 'install
16395 (lambda* (#:key outputs #:allow-other-keys)
16396 (let* ((data (string-append #$output "/share"))
16397 (doc (string-append data "/doc/" #$name "-" #$version))
16398 (html (string-append doc "/html"))
16399 (info (string-append data "/info")))
16400 (invoke "make" "-C" "docs" "info" "html"
16401 (string-append "SPHINXOPTS=-j"
16402 (number->string (parallel-job-count))))
16403 (install-file "COPYING.rst" doc)
16404 (copy-recursively "examples" (string-append doc "/examples"))
16405 ;; Install HTML documentation.
16406 (copy-recursively "docs/build/html" html)
16407 ;; Likewise for the info manual.
16408 (install-file "docs/build/texinfo/ipython.info" info)
16409 (symlink (string-append html "/_images")
16410 (string-append info "/ipython-figures"))))))))
16411 (native-inputs
16412 (list graphviz
16413 python-docrepr
16414 python-ipykernel
16415 python-sphinx
16416 python-sphinx-rtd-theme
16417 python-sphinx-toml
16418 texinfo))))
16419
16420;; A bare minimal package, mainly to use in tests and reduce closure
16421;; size. Tests are left out in the main package to slim down native-inputs.
16422(define-public python-ipython-minimal
16423 (package/inherit python-ipython
16424 (name "python-ipython-minimal")
16425 (arguments
16426 (list #:tests? #f))
16427 (native-inputs
16428 (list python-setuptools))))
16429
16430(define-public python-ipython-pygments-lexers
16431 (package
16432 (name "python-ipython-pygments-lexers")
16433 (version "1.1.1")
16434 (source
16435 (origin
16436 (method git-fetch)
16437 (uri (git-reference
16438 (url "https://github.com/ipython/ipython-pygments-lexers/")
16439 (commit version)))
16440 (file-name (git-file-name name version))
16441 (sha256
16442 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
16443 (build-system pyproject-build-system)
16444 (propagated-inputs (list python-pygments))
16445 (native-inputs (list python-flit-core python-pytest))
16446 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
16447 (synopsis "Plugin for IPython code sessions")
16448 (description
16449 "This package defines a variety of Pygments lexers for highlighting IPython
16450code.")
16451 (license license:bsd-3)))
16452
16453(define-public python-pydbus
16454 (package
16455 (name "python-pydbus")
16456 (version "0.6.0")
16457 (source
16458 (origin
16459 (method url-fetch)
16460 (uri (pypi-uri "pydbus" version))
16461 (sha256
16462 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
16463 (build-system pyproject-build-system)
16464 (arguments
16465 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
16466 #:phases
16467 #~(modify-phases %standard-phases
16468 (add-after 'unpack 'fix-comparability-with-pygobject
16469 (lambda _
16470 (substitute* "pydbus/_inspect3.py"
16471 (("getargspec")
16472 "getfullargspec")))))))
16473 (native-inputs
16474 (list python-setuptools
16475 python-wheel))
16476 (propagated-inputs
16477 (list python-pygobject))
16478 (home-page "https://github.com/LEW21/pydbus")
16479 (synopsis "Pythonic D-Bus library")
16480 (description
16481 "Pydbus provides a pythonic interface to the D-Bus message bus system.
16482Pydbus can be used to access remote objects and also for object publication.
16483It is based on PyGI, the Python GObject Introspection bindings, which is the
16484recommended way to use GLib from Python.")
16485 (license license:lgpl2.1+)))
16486
16487(define-public python-dbus-1.2
16488 (package
16489 (name "python-dbus")
16490 (version "1.2.18")
16491 (source
16492 (origin
16493 (method url-fetch)
16494 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
16495 "dbus-python-" version ".tar.gz"))
16496 (sha256
16497 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
16498 (build-system gnu-build-system)
16499 (native-inputs
16500 (list pkg-config
16501 python-setuptools))
16502 (inputs
16503 `(("python" ,python-wrapper)
16504 ("dbus-glib" ,dbus-glib)))
16505 (synopsis "Python bindings for D-bus")
16506 (description "python-dbus provides bindings for libdbus, the reference
16507implementation of D-Bus.")
16508 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
16509 (license license:expat)))
16510
16511(define-public python-dasbus
16512 (package
16513 (name "python-dasbus")
16514 (version "1.7")
16515 (source
16516 (origin
16517 (method git-fetch)
16518 (uri (git-reference
16519 (url "https://github.com/dasbus-project/dasbus")
16520 (commit (string-append "v" version))))
16521 (file-name (git-file-name name version))
16522 (sha256
16523 (base32 "1dii0skg7pqi4jhy1dkshqmn49i5ngq92sw7w7j4sxd3g8pjhj46"))))
16524 (build-system pyproject-build-system)
16525 (arguments
16526 (list
16527 #:phases
16528 #~(modify-phases %standard-phases
16529 (replace 'check
16530 (lambda* (#:key tests? (test-flags '()) #:allow-other-keys)
16531 (when tests?
16532 (apply invoke "dbus-launch" "pytest" "-vv" test-flags)))))))
16533 (native-inputs
16534 (list dbus
16535 python-hatchling
16536 python-pytest
16537 python-setuptools))
16538 (propagated-inputs
16539 (list python-pygobject))
16540 (home-page "https://dasbus.readthedocs.io/")
16541 (synopsis "DBus library in Python")
16542 (description
16543 "This DBus library is written in Python, based on GLib and inspired by
16544@code{pydbus}.")
16545 (license license:lgpl2.1+)))
16546
16547(define-public python-notify2
16548 (package
16549 (name "python-notify2")
16550 (version "0.3.1")
16551 (source
16552 (origin
16553 (method url-fetch)
16554 (uri (pypi-uri "notify2" version))
16555 (sha256
16556 (base32
16557 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
16558 (build-system pyproject-build-system)
16559 (arguments (list #:tests? #f)) ; tests depend on system state
16560 (native-inputs (list python-setuptools))
16561 (propagated-inputs (list python-dbus))
16562 (home-page "https://bitbucket.org/takluyver/pynotify2")
16563 (synopsis "Python interface to D-Bus notifications")
16564 (description
16565 "Pynotify2 provides a Python interface for sending D-Bus notifications.
16566It is a reimplementation of pynotify in pure Python, and an alternative to
16567the GObject Introspection bindings to libnotify for non-GTK applications.")
16568 (license (list license:bsd-2
16569 license:lgpl2.1+))))
16570
16571;; beautifulsoup4 has a totally different namespace than 3.x,
16572;; and pypi seems to put it under its own name, so I guess we should too
16573(define-public python-beautifulsoup4
16574 (package
16575 (name "python-beautifulsoup4")
16576 (version "4.14.3")
16577 (source
16578 (origin
16579 (method url-fetch)
16580 (uri (pypi-uri "beautifulsoup4" version))
16581 (sha256
16582 (base32
16583 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
16584 (build-system pyproject-build-system)
16585 (native-inputs
16586 (list python-hatchling
16587 python-pytest))
16588 (propagated-inputs
16589 (list python-soupsieve
16590 python-typing-extensions
16591 ;; [optional]
16592 python-cchardet
16593 python-chardet
16594 python-charset-normalizer
16595 python-html5lib
16596 python-lxml))
16597 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
16598 (synopsis "Python screen-scraping library")
16599 (description
16600 "Beautiful Soup is a Python library designed for rapidly setting up
16601screen-scraping projects. It offers Pythonic idioms for navigating,
16602searching, and modifying a parse tree, providing a toolkit for
16603dissecting a document and extracting what you need. It automatically
16604converts incoming documents to Unicode and outgoing documents to UTF-8.")
16605 (license license:expat)))
16606
16607(define-public python-beautifulsoup4-bootstrap
16608 (hidden-package
16609 (package/inherit python-beautifulsoup4
16610 (arguments
16611 (list #:tests? #f))
16612 (native-inputs
16613 (list python-hatchling))
16614 (propagated-inputs '()))))
16615
16616
16617(define-public python-netifaces
16618 (package
16619 (name "python-netifaces")
16620 (version "0.11.0")
16621 (source
16622 (origin
16623 (method url-fetch)
16624 (uri (pypi-uri "netifaces" version))
16625 (sha256
16626 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16627 (build-system pyproject-build-system)
16628 (arguments
16629 (list
16630 #:test-backend #~'custom
16631 #:test-flags #~(list "test.py")))
16632 (native-inputs (list python-setuptools))
16633 (home-page "https://github.com/al45tair/netifaces")
16634 (synopsis "Python module for portable network interface information")
16635 (description
16636 "Netifaces is a Python module providing information on network
16637interfaces in an easy and portable manner.")
16638 (license license:expat)))
16639
16640(define-public python-networkx
16641 (package
16642 (name "python-networkx")
16643 (version "3.4.2")
16644 (source
16645 (origin
16646 (method url-fetch)
16647 (uri (pypi-uri "networkx" version))
16648 (sha256
16649 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16650 (build-system pyproject-build-system)
16651 (arguments
16652 (list
16653 #:test-flags
16654 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16655 (native-inputs
16656 (list python-pytest
16657 python-pytest-xdist
16658 python-setuptools
16659 python-wheel))
16660 (propagated-inputs
16661 (list python-decorator))
16662 (home-page "https://networkx.github.io/")
16663 (synopsis "Python module for creating and manipulating graphs and networks")
16664 (description
16665 "NetworkX is a Python package for the creation, manipulation, and study
16666of the structure, dynamics, and functions of complex networks.")
16667 (license license:bsd-3)))
16668
16669(define-public python-datrie
16670 (package
16671 (name "python-datrie")
16672 (version "0.8.3")
16673 (source
16674 (origin
16675 (method git-fetch)
16676 (uri (git-reference
16677 (url "https://github.com/kmike/datrie")
16678 (commit version)))
16679 (file-name (git-file-name name version))
16680 (sha256
16681 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16682 (build-system pyproject-build-system)
16683 (arguments
16684 (list
16685 #:phases
16686 #~(modify-phases %standard-phases
16687 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16688 (lambda* (#:key inputs #:allow-other-keys)
16689 (let* ((headers (search-input-directory inputs
16690 "include/datrie"))
16691 (base (dirname (dirname headers))))
16692 (symlink headers "libdatrie/datrie")
16693 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16694 (add-before 'build 'relax-gcc-14-strictness
16695 (lambda _
16696 (setenv "CFLAGS"
16697 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16698 (native-inputs
16699 (list python-cython python-hypothesis python-pytest python-setuptools))
16700 (inputs (list libdatrie))
16701 (home-page "https://github.com/kmike/datrie")
16702 (synopsis "Fast, efficiently stored trie for Python")
16703 (description
16704 "This package provides a fast, efficiently stored trie implementation for
16705Python.")
16706 (license license:lgpl2.1+)))
16707
16708(define-public python-amply
16709 (package
16710 (name "python-amply")
16711 (version "0.1.6")
16712 (source
16713 (origin
16714 (method url-fetch)
16715 (uri (pypi-uri "amply" version))
16716 (sha256
16717 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16718 (build-system pyproject-build-system)
16719 (native-inputs
16720 (list python-pytest
16721 python-setuptools
16722 python-setuptools-scm
16723 python-wheel))
16724 (propagated-inputs
16725 (list python-docutils
16726 python-pyparsing))
16727 (home-page "https://github.com/willu47/amply")
16728 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16729 (description
16730 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16731structures.")
16732 (license license:epl1.0)))
16733
16734(define-public python-pulp
16735 ;; When updating, check snakemake@N builds still fine, see:
16736 ;; <https://codeberg.org/guix/guix/issues/4782>.
16737 (package
16738 (name "python-pulp")
16739 (version "2.4")
16740 (source
16741 (origin
16742 (method url-fetch)
16743 (uri (pypi-uri "PuLP" version))
16744 (sha256
16745 (base32
16746 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
16747 (build-system pyproject-build-system)
16748 (arguments
16749 ;; TODO: They need a special setup, see:
16750 ;; <https://codeberg.org/guix/guix/pulls/4908>.
16751 (list #:tests? #f))
16752 (native-inputs
16753 (list python-setuptools))
16754 (propagated-inputs
16755 (list python-amply))
16756 (home-page "https://github.com/coin-or/pulp")
16757 (synopsis "Linear Programming modeler")
16758 (description
16759 "PuLP is a Linear Programming modeler written in Python. PuLP can
16760generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
16761solve linear problems.")
16762 (license license:expat)))
16763
16764(define-public python-py-partiql-parser
16765 (package
16766 (name "python-py-partiql-parser")
16767 (version "0.6.3")
16768 (source
16769 (origin
16770 (method git-fetch)
16771 (uri (git-reference
16772 (url "https://github.com/getmoto/py-partiql-parser")
16773 (commit version)))
16774 (file-name (git-file-name name version))
16775 (sha256
16776 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
16777 (build-system pyproject-build-system)
16778 (native-inputs
16779 (list python-hatchling
16780 python-pytest))
16781 (home-page "https://pypi.org/project/py-partiql-parser/")
16782 (synopsis "Pure Python PartiQL Parser")
16783 (description
16784 "This package provides a tokenizer/parser/executor for the PartiQL
16785language, in Python.")
16786 (license license:expat)))
16787
16788(define-public python-py-tes
16789 (package
16790 (name "python-py-tes")
16791 (version "0.4.2")
16792 (source
16793 (origin
16794 (method git-fetch)
16795 (uri (git-reference
16796 (url "https://github.com/ohsu-comp-bio/py-tes")
16797 (commit version)))
16798 (file-name (git-file-name name version))
16799 (sha256
16800 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
16801 (build-system pyproject-build-system)
16802 (native-inputs
16803 (list python-pytest python-requests-mock python-setuptools))
16804 (propagated-inputs
16805 (list python-attrs python-dateutil python-future python-requests))
16806 (home-page "https://github.com/ohsu-comp-bio/py-tes")
16807 (synopsis "Library for communicating with the GA4GH Task Execution API")
16808 (description "This package provides a library for communicating with the
16809GA4GH Task Execution API.")
16810 (license license:expat)))
16811
16812(define-public python-altgraph
16813 (package
16814 (name "python-altgraph")
16815 (version "0.17.4")
16816 (source
16817 (origin
16818 (method url-fetch)
16819 (uri (pypi-uri "altgraph" version))
16820 (sha256
16821 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
16822 (build-system pyproject-build-system)
16823 (native-inputs (list python-pytest python-setuptools python-wheel))
16824 (home-page "https://altgraph.readthedocs.io")
16825 (synopsis "Python graph network package")
16826 (description
16827"This package provides tools for constructing graphs, BFS and DFS
16828traversals, topological sort, shortest paths, and more with graphviz
16829output.")
16830 (license license:expat)))
16831
16832(define-public python-pyqrcode
16833 (package
16834 (name "python-pyqrcode")
16835 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
16836 (revision . "0")))
16837 (version (git-version "1.2.1"
16838 (assoc-ref properties 'revision)
16839 (assoc-ref properties 'commit)))
16840 (source
16841 (origin
16842 (method git-fetch)
16843 (uri (git-reference
16844 (url "https://github.com/mnooner256/pyqrcode")
16845 (commit (assoc-ref properties 'commit))))
16846 (file-name (git-file-name name version))
16847 (sha256
16848 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
16849 (build-system pyproject-build-system)
16850 (arguments (list #:test-backend #~'nose))
16851 (native-inputs (list python-pynose python-pypng python-setuptools))
16852 (home-page "https://github.com/mnooner256/pyqrcode")
16853 (synopsis "QR code generator")
16854 (description
16855 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
16856PNG and terminal output.")
16857 (license license:bsd-3)))
16858
16859(define-public python-seaborn
16860 ;; TODO: Move to (gnu packages statistics).
16861 (package
16862 (name "python-seaborn")
16863 ;; 0.13.2 (2024-01-25), the latest release contains known
16864 ;; incompatibilities, see:
16865 ;; <https://github.com/mwaskom/seaborn/issues/3892>,
16866 ;; <https://github.com/mwaskom/seaborn/issues/3893>.
16867 (properties '((commit . "32088bbc3adc611b7118e57fce6d4ed096a76a29")
16868 (revision . "0")))
16869 (version (git-version "0.13.2"
16870 (assoc-ref properties 'revision)
16871 (assoc-ref properties 'commit)))
16872 (source
16873 (origin
16874 (method git-fetch)
16875 (uri (git-reference
16876 (url "https://github.com/mwaskom/seaborn")
16877 (commit (assoc-ref properties 'commit))))
16878 (file-name (git-file-name name version))
16879 (sha256
16880 (base32 "1d2aig4kpjc8lcvk1sp824ksy1vl17dd36s4zryhjhmz5b0idqx3"))))
16881 (build-system pyproject-build-system)
16882 (arguments
16883 (list
16884 ;; tests: 2359 passed, 16 skipped, 6 xfailed
16885 #:test-flags
16886 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16887 (native-inputs
16888 (list python-flit-core
16889 python-pytest
16890 python-pytest-xdist))
16891 (propagated-inputs
16892 (list python-matplotlib
16893 python-numpy
16894 python-pandas
16895 python-scipy
16896 python-statsmodels))
16897 (home-page "https://seaborn.pydata.org/")
16898 (synopsis "Statistical data visualization")
16899 (description
16900 "Seaborn is a library for making attractive and informative statistical
16901graphics in Python. It is built on top of matplotlib and tightly integrated
16902with the PyData stack, including support for numpy and pandas data structures
16903and statistical routines from scipy and statsmodels.")
16904 (license license:bsd-3)))
16905
16906(define-public python-session-info
16907 (package
16908 (name "python-session-info")
16909 (version "1.0.0")
16910 (source
16911 (origin
16912 (method git-fetch)
16913 (uri (git-reference
16914 (url "https://gitlab.com/joelostblom/session_info")
16915 (commit version)))
16916 (file-name (git-file-name name version))
16917 (sha256
16918 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
16919 (build-system pyproject-build-system)
16920 (arguments (list #:tests? #f)) ; No tests.
16921 (native-inputs (list python-setuptools))
16922 (propagated-inputs (list python-stdlib-list))
16923 (home-page "https://gitlab.com/joelostblom/session_info")
16924 (synopsis "Output version information for modules currently loaded")
16925 (description
16926 "This package outputs version information for modules loaded in the current
16927session, Python, and the OS.")
16928 (license license:bsd-3)))
16929
16930(define-public python-mpmath
16931 (package
16932 (name "python-mpmath")
16933 (version "1.3.0")
16934 (source
16935 (origin
16936 (method git-fetch)
16937 (uri (git-reference
16938 (url "https://github.com/fredrik-johansson/mpmath")
16939 (commit version)))
16940 (file-name (git-file-name name version))
16941 (sha256
16942 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
16943 (build-system pyproject-build-system)
16944 (native-inputs
16945 (list python-pytest
16946 python-setuptools
16947 python-setuptools-scm))
16948 (home-page "https://mpmath.org")
16949 (synopsis "Arbitrary-precision floating-point arithmetic in python")
16950 (description
16951 "@code{mpmath} can be used as an arbitrary-precision substitute for
16952Python's float/complex types and math/cmath modules, but also does much
16953more advanced mathematics.")
16954 (license license:bsd-3)))
16955
16956(define-public python-bigfloat
16957 (package
16958 (name "python-bigfloat")
16959 (version "0.4.0")
16960 (source
16961 (origin
16962 (method url-fetch)
16963 (uri (pypi-uri "bigfloat" version))
16964 (sha256
16965 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
16966 (snippet '(delete-file "mpfr.c"))))
16967 (build-system pyproject-build-system)
16968 (arguments
16969 (list
16970 #:test-flags
16971 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
16972 ;; but I don't know what to do about it.
16973 '(list "-k" "not test_hash")
16974 #:phases
16975 '(modify-phases %standard-phases
16976 (add-before 'build 'cythonize
16977 (lambda _ (invoke "cython" "mpfr.pyx"))))))
16978 (inputs (list mpfr))
16979 (native-inputs
16980 (list python-cython python-pytest python-setuptools python-wheel))
16981 (propagated-inputs
16982 (list python-six))
16983 (home-page "https://github.com/mdickinson/bigfloat")
16984 (synopsis "Arbitrary precision floating-point arithmetic for Python")
16985 (description
16986 "This package provides a Python interface to the MPFR library for
16987multiprecision arithmetic.")
16988 (license license:lgpl3+)))
16989
16990(define-public python-plac
16991 (package
16992 (name "python-plac")
16993 (version "1.4.3")
16994 (source
16995 (origin
16996 (method git-fetch)
16997 (uri (git-reference
16998 (url "https://github.com/ialbert/plac")
16999 (commit (string-append "v" version))))
17000 (file-name (git-file-name name version))
17001 (sha256
17002 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
17003 (build-system pyproject-build-system)
17004 (arguments
17005 (list
17006 #:phases
17007 #~(modify-phases %standard-phases
17008 (add-after 'unpack 'fix-tkinter
17009 (lambda _
17010 (substitute* "plac_tk.py"
17011 (("from Tkinter import Tk")
17012 "from tkinter import Tk")
17013 (("from ScrolledText import ScrolledText")
17014 "from tkinter.scrolledtext import ScrolledText")))))))
17015 (native-inputs
17016 (list (list python "tk") python-pytest python-setuptools))
17017 (home-page "https://github.com/ialbert/plac")
17018 (synopsis "Command line arguments parser")
17019 (description
17020 "This package can generate command line parameters from function
17021signatures.")
17022 (license license:bsd-3)))
17023
17024(define-public python-q
17025 (package
17026 (name "python-q")
17027 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
17028 (revision . "0")))
17029 (version (git-version "2.7"
17030 (assoc-ref properties 'revision)
17031 (assoc-ref properties 'commit)))
17032 (source
17033 (origin
17034 (method git-fetch)
17035 (uri (git-reference
17036 (url "https://github.com/zestyping/q")
17037 (commit (assoc-ref properties 'commit))))
17038 (file-name (git-file-name name version))
17039 (sha256
17040 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
17041 (build-system pyproject-build-system)
17042 (arguments
17043 (list
17044 ;; Deduced from the makefile.
17045 #:test-backend #~'custom
17046 #:test-flags #~(list "test/test_basic.py")
17047 #:phases
17048 #~(modify-phases %standard-phases
17049 (add-before 'check 'configure-tests
17050 (lambda* (#:key tests? #:allow-other-keys)
17051 (when tests?
17052 (setenv "TMPDIR" "/tmp")))))))
17053 (native-inputs (list python-setuptools))
17054 (home-page "https://github.com/zestyping/q")
17055 (synopsis "Quick-and-dirty debugging output for tired programmers")
17056 (description
17057 "q is a Python module for \"print\" style of debugging Python code. It
17058provides convenient short API for print out of values, tracebacks, and
17059falling into the Python interpreter.")
17060 (license license:asl2.0)))
17061
17062(define-public python-qnorm
17063 (package
17064 (name "python-qnorm")
17065 (version "0.9.0")
17066 (source
17067 (origin
17068 (method git-fetch)
17069 (uri (git-reference
17070 (url "https://github.com/Maarten-vd-Sande/qnorm")
17071 (commit (string-append "v" version))))
17072 (file-name (git-file-name name version))
17073 (sha256
17074 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
17075 (build-system pyproject-build-system)
17076 (arguments
17077 (list
17078 #:phases
17079 #~(modify-phases %standard-phases
17080 (add-after 'unpack 'fix-pandas-3
17081 (lambda _
17082 ;; Pandas 3.0 removed the implicit engine fallback that used
17083 ;; to switch to the Python engine whenever sep=None was
17084 ;; passed without an explicit 'engine', which get_delim()
17085 ;; relied on for delimiter auto-detection
17086 ;; Try removing the phase on the next update.
17087 (substitute* "qnorm/util.py"
17088 (("table, sep=None, iterator=True")
17089 "table, sep=None, engine=\"python\", iterator=True")))))))
17090 (propagated-inputs
17091 (list python-numba python-numpy python-pandas
17092 ;; XXX: pandas optional dependencies.
17093 python-tables python-pyarrow python-fastparquet))
17094 (native-inputs (list python-setuptools))
17095 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
17096 (synopsis "Quantile normalization")
17097 (description
17098 "This tool implements quantile normalization. It properly resolves rank
17099ties, which is important when ties happen frequently, such as when working
17100with discrete numbers (integers) in count tables. This implementation should
17101be relatively fast, and can use multiple cores to sort the columns and
17102tie-resolvement is accelerated by numba.")
17103 (license license:expat)))
17104
17105(define-public python-quantlaw
17106 (package
17107 (name "python-quantlaw")
17108 (version "0.0.7")
17109 (source
17110 (origin
17111 (method git-fetch)
17112 (uri (git-reference
17113 (url "https://github.com/Quantlaw/quantlaw")
17114 (commit (string-append "v" version))))
17115 (file-name (git-file-name name version))
17116 (sha256
17117 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
17118 (build-system pyproject-build-system)
17119 (arguments
17120 (list
17121 #:test-flags
17122 #~(list "-k"
17123 ;; test expects network access
17124 "not test_load_statue_names")))
17125 (native-inputs (list python-pytest python-setuptools))
17126 (propagated-inputs (list python-beautifulsoup4 python-networkx
17127 python-pandas python-regex python-requests))
17128 (home-page "https://quantlaw.readthedocs.io/")
17129 (synopsis "Coding utilities for quantitative legal studies")
17130 (description
17131 "This package provides coding utilities for quantitative legal studies.")
17132 (license license:bsd-3)))
17133
17134(define-public python-singledispatch
17135 (package
17136 (name "python-singledispatch")
17137 (version "4.0.0")
17138 (source
17139 (origin
17140 (method url-fetch)
17141 (uri (pypi-uri "singledispatch" version))
17142 (sha256
17143 (base32
17144 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
17145 (build-system pyproject-build-system)
17146 (native-inputs
17147 (list python-pytest
17148 python-setuptools
17149 python-six ; required for conversion, not at run-time
17150 python-wheel))
17151 (home-page
17152 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
17153 (synopsis "Backport of singledispatch feature from Python 3.4")
17154 (description
17155 "This library brings functools.singledispatch from Python 3.4 to Python
171562.6-3.3.")
17157 (license license:expat)))
17158
17159(define-public python-pyzmq
17160 (package
17161 (name "python-pyzmq")
17162 (version "27.1.0")
17163 (source
17164 (origin
17165 (method git-fetch)
17166 (uri (git-reference
17167 (url "https://github.com/zeromq/pyzmq")
17168 (commit (string-append "v" version))))
17169 (file-name (git-file-name name version))
17170 (sha256
17171 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
17172 (build-system pyproject-build-system)
17173 (arguments
17174 (list
17175 #:test-flags
17176 '(list "-m" "not flaky")
17177 #:phases
17178 #~(modify-phases %standard-phases
17179 (add-before 'build 'configure
17180 (lambda _
17181 ;; Our zeromq package is built with '--enable-drafts'; also
17182 ;; enable draft support for pyzmq so the draft test passes.
17183 (setenv "ZMQ_DRAFT_API" "1")
17184 ;; Make sure to prevent building bundled libzmq.
17185 (setenv "PYZMQ_NO_BUNDLE" "1")))
17186 (add-before 'check 'delete-source
17187 ;; To prevent loading it and skip build extensions one more times.
17188 (lambda _
17189 (delete-file-recursively "zmq"))))))
17190 (native-inputs
17191 (list cmake-minimal
17192 ;; python-cffi ; for PyPy
17193 python-cython
17194 python-packaging
17195 python-pytest
17196 python-pytest-asyncio
17197 python-scikit-build-core
17198 python-tornado))
17199 (inputs
17200 (list libsodium
17201 zeromq))
17202 (home-page "https://github.com/zeromq/pyzmq")
17203 (synopsis "Python bindings for 0MQ")
17204 (description
17205 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
17206 (license license:bsd-4)))
17207
17208(define-public python-immutabledict
17209 (package
17210 (name "python-immutabledict")
17211 (version "4.2.0")
17212 (source
17213 (origin
17214 (method url-fetch)
17215 (uri (pypi-uri "immutabledict" version))
17216 (sha256
17217 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
17218 (build-system pyproject-build-system)
17219 (native-inputs
17220 (list python-poetry-core python-pytest))
17221 (home-page "https://github.com/corenting/immutabledict")
17222 (synopsis "Immutable wrapper around dictionaries")
17223 (description
17224 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
17225It implements the complete mapping interface and can be used as a drop-in
17226replacement for dictionaries where immutability is desired.")
17227 (license license:expat)))
17228
17229(define-public python-emoji
17230 (package
17231 (name "python-emoji")
17232 (version "2.12.1")
17233 (source
17234 (origin
17235 (method url-fetch)
17236 (uri (pypi-uri "emoji" version))
17237 (sha256
17238 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
17239 (build-system pyproject-build-system)
17240 (propagated-inputs (list python-typing-extensions))
17241 (native-inputs
17242 (list python-pytest
17243 python-setuptools
17244 python-wheel))
17245 (home-page "https://github.com/carpedm20/emoji/")
17246 (synopsis "Emoji terminal output for Python")
17247 (description
17248 "This package provides Emoji terminal output for Python. The
17249entire set of Emoji codes as defined by the Unicode Consortium is supported in
17250addition to a bunch of aliases.")
17251 (license license:bsd-3)))
17252
17253;; TODO: Remove this package when upgrading python-gh-md-to-html to the
17254;; latest version. The latest gh-md-to-html does not build successfully from
17255;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
17256;; version 1.21.2 from failing.
17257;; https://issues.guix.gnu.org/72102
17258;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
17259(define-public python-emoji-for-gh-md-to-html
17260 (package
17261 (inherit python-emoji)
17262 (version "1.6.1")
17263 (source
17264 (origin
17265 (method url-fetch)
17266 (uri (pypi-uri "emoji" version))
17267 (sha256
17268 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
17269
17270(define-public python-sarge
17271 (package
17272 (name "python-sarge")
17273 (version "0.1.7.post1") ;post release only to correct errors in metadata
17274 (source
17275 (origin
17276 (method git-fetch)
17277 (uri (git-reference
17278 (url "https://github.com/vsajip/sarge")
17279 (commit version)))
17280 (file-name (git-file-name name version))
17281 (sha256
17282 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
17283 (build-system pyproject-build-system)
17284 (native-inputs (list python-pytest python-setuptools))
17285 (home-page "https://docs.red-dove.com/sarge/")
17286 (synopsis "Subprocess wrapper with command pipeline functionality")
17287 (description "@code{sarge} is a wrapper for subprocess which provides
17288command pipeline functionality.")
17289 (license license:bsd-3)))
17290
17291(define-public python-sentry-sdk
17292 ;; TODO: Move to (gnu packages python-web).
17293 (package
17294 (name "python-sentry-sdk")
17295 (version "2.59.0")
17296 (source
17297 (origin
17298 (method git-fetch)
17299 (uri (git-reference
17300 (url "https://github.com/getsentry/sentry-python")
17301 (commit version)))
17302 (file-name (git-file-name name version))
17303 (sha256
17304 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
17305 (build-system pyproject-build-system)
17306 (arguments
17307 (list
17308 ;; tests: 2119 passed, 128 skipped, 224 warnings
17309 #:test-flags
17310 #~(list "--durations=10"
17311 "--numprocesses" (number->string (parallel-job-count))
17312 ;; The whole test suite is quite shaky, may fail unpredictably
17313 ;; and depends on many additional inputs to enable all
17314 ;; integration tests.
17315 "-k" (string-join
17316 (list "not test_aggregates"
17317 "test_aggregates_deprecated"
17318 (string-append "test_aggregates_explicitly_disabled"
17319 "_session_tracking_request_mode")
17320 (string-append "test_aggregates_explicitly_disabled"
17321 "_session_tracking_request"
17322 "_mode_deprecated")
17323 "test_auto_session_tracking_with_aggregates[False]"
17324 "test_auto_session_tracking_with_aggregates[True]"
17325 "test_basic"
17326 "test_default_attributes"
17327 "test_default_release"
17328 (string-append "test_ensure_integration_enabled"
17329 "_no_original_function_enabled")
17330 "test_logger_with_all_attributes"
17331 "test_merging"
17332 (string-append "test_session_mode_defaults_to"
17333 "_request_mode_in_wsgi_handler"))
17334 " and not "))
17335 #:phases
17336 #~(modify-phases %standard-phases
17337 (add-after 'unpack 'fix-pytest-config
17338 (lambda _
17339 ;; Tests run in debug mode which generats a lot of noise.
17340 (delete-file "tox.ini")
17341 (substitute* "pyproject.toml"
17342 (("addopts =.*") "")))))))
17343 (native-inputs
17344 (list nss-certs-for-test
17345 python-brotli
17346 python-jsonschema
17347 python-mock
17348 python-pysocks
17349 python-pytest
17350 python-pytest-aiohttp
17351 python-pytest-asyncio
17352 python-pytest-localserver
17353 python-pytest-timeout
17354 python-pytest-xdist
17355 python-responses
17356 python-setuptools
17357 python-socksio))
17358 (propagated-inputs
17359 (list python-certifi
17360 python-urllib3
17361 ;; [optional]
17362 ;; python-unleashclient
17363 python-aiohttp
17364 ;; python-anthropic
17365 ;; python-apache-beam
17366 ;; python-arq
17367 python-asttokens
17368 ;; python-asyncpg
17369 ;; python-blinker
17370 ;; python-bottle
17371 ;; python-celery
17372 ;; python-celery-redbeat
17373 ;; python-chalice
17374 ;; python-clickhouse-driver
17375 ;; python-django
17376 python-executing
17377 ;; python-falcon
17378 ;; python-fastapi
17379 ;; python-flask
17380 ;; python-google-genai
17381 ;; python-grpcio
17382 python-httpcore
17383 ;; python-httpx
17384 ;; python-huey
17385 ;; python-huggingface-hub
17386 ;; python-langchain
17387 ;; python-langgraph
17388 ;; python-launchdarkly-server-sdk
17389 ;; python-litellm
17390 ;; python-litestar
17391 ;; python-loguru
17392 ;; python-markupsafe
17393 ;; python-mcp
17394 ;; python-openai
17395 ;; python-openfeature-sdk
17396 ;; python-opentelemetry-distro
17397 ;; python-protobuf
17398 ;; python-pure-eval
17399 ;; python-pydantic-ai
17400 ;; python-pymongo
17401 ;; python-pyspark
17402 ;; python-quart
17403 ;; python-rq
17404 ;; python-sanic
17405 ;; python-sqlalchemy
17406 ;; python-starlette
17407 ;; python-starlite
17408 ;; python-statsig
17409 ;; python-tiktoken
17410 #;python-tornado))
17411 (home-page "https://github.com/getsentry/sentry-python")
17412 (synopsis "Python SDK for Sentry")
17413 (description "This package provides a Python SDK for the Sentry
17414application monitoring and error tracking software.")
17415 (license license:bsd-2)))
17416
17417;; A bare minimal package, mainly to use in tests and reduce closure
17418;; size. Tests are left out in the main package to slim down native-inputs.
17419(define-public python-sentry-sdk-minimal
17420 (package/inherit python-sentry-sdk
17421 (name "python-sentry-sdk-minimal")
17422 (arguments
17423 (list #:tests? #f))
17424 (native-inputs
17425 (list python-setuptools))
17426 (propagated-inputs
17427 (list python-certifi
17428 python-urllib3))))
17429
17430(define-public python-pep440
17431 (package
17432 (name "python-pep440")
17433 (version "0.1.2")
17434 (source
17435 (origin
17436 (method url-fetch)
17437 (uri (pypi-uri "pep440" version))
17438 (sha256
17439 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
17440 (build-system pyproject-build-system)
17441 (arguments
17442 ;; This checks for "pep440" in the output, but we actually print
17443 ;; ".pep440-real" due to wrapping.
17444 (list #:test-flags '(list "-k" "not test_cli_help")))
17445 (propagated-inputs (list python-check-manifest python-mypy python-pytest
17446 python-pytest-console-scripts python-pytest-cov))
17447 (native-inputs (list python-flit-core))
17448 (home-page "https://pypi.org/project/pep440/")
17449 (synopsis "Utils to check whether versions number match PEP 440")
17450 (description
17451 "This package provides a simple package with utils to check whether
17452versions number match PEP 440.")
17453 (license license:expat)))
17454
17455(define-public python-pyproject-metadata
17456 (package
17457 (name "python-pyproject-metadata")
17458 (version "0.11.0")
17459 (source
17460 (origin
17461 (method git-fetch)
17462 (uri (git-reference
17463 (url "https://github.com/FFY00/python-pyproject-metadata")
17464 (commit version)))
17465 (file-name (git-file-name name version))
17466 (sha256
17467 (base32 "0f838jc5m8f3f4gazzsidhk6x2d359g53ysa0bp0fw11jsv1n2vp"))))
17468 (build-system pyproject-build-system)
17469 (propagated-inputs (list python-packaging))
17470 (native-inputs
17471 (list python-flit-core python-pytest python-tomli))
17472 (home-page "https://github.com/FFY00/python-pyproject-metadata")
17473 (synopsis "Dataclass for PEP 621 metadata")
17474 (description "This project does not implement the parsing of
17475@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
17476data structure representing PEP 621 metadata (already parsed), it will
17477validate this input and generate a PEP 643-compliant metadata
17478file (e.g. @file{PKG-INFO}).")
17479 (license license:expat)))
17480
17481(define-public python-meson
17482 (package
17483 (name "python-meson")
17484 (version "0.19.0")
17485 (source
17486 (origin
17487 (method git-fetch)
17488 (uri (git-reference
17489 (url "https://github.com/mesonbuild/meson-python")
17490 (commit version)))
17491 (file-name (git-file-name name version))
17492 (sha256
17493 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
17494 (build-system pyproject-build-system)
17495 ;; tests: 124 passed, 16 skipped
17496 (native-inputs
17497 (list git-minimal/pinned
17498 patchelf
17499 python-pytest
17500 python-pytest-mock))
17501 (propagated-inputs
17502 (list meson
17503 ninja
17504 python-cython
17505 python-packaging
17506 python-pyproject-metadata))
17507 (home-page "https://github.com/mesonbuild/meson-python")
17508 (synopsis "Meson Python build backend (PEP 517)")
17509 (description "This package provides a PEP 517 build backend that makes
17510use of the Meson build system.")
17511 (license license:expat)))
17512
17513;; XXX: Deprecated on <2026-01-26>.
17514(define-deprecated/public-alias python-meson-python python-meson)
17515;;; Deprecated on 2026-03-02.
17516(define-deprecated-package meson-python python-meson)
17517
17518(define-public python-mfusepy
17519 (package
17520 (name "python-mfusepy")
17521 (version "3.1.1")
17522 (source
17523 (origin
17524 (method git-fetch)
17525 (uri (git-reference
17526 (url "https://github.com/mxmlnkn/mfusepy")
17527 (commit (string-append "v" version))))
17528 (file-name (git-file-name name version))
17529 (sha256
17530 (base32 "04vsmmh1zpy8cxxrj9dqiqajisn95skg3wqr8dgqck25780v3c4k"))))
17531 (build-system pyproject-build-system)
17532 (native-inputs (list python-setuptools))
17533 (inputs (list fuse))
17534 (arguments
17535 (list
17536 #:tests? #f ; Tests require fuse kernel module
17537 #:phases
17538 #~(modify-phases %standard-phases
17539 (add-after 'unpack 'embed-libfuse
17540 (lambda* (#:key inputs #:allow-other-keys)
17541 (substitute* "mfusepy.py"
17542 (("^(_libfuse_path = )os\\.environ\\.get.+$" _ pre)
17543 (format #f "~a\"~a\"\n"
17544 pre (search-input-file inputs "/lib/libfuse3.so")))))))))
17545 (home-page "https://github.com/mxmlnkn/mfusepy")
17546 (synopsis "Ctypes bindings for the high-level API in libfuse 2 and 3")
17547 (description "Ctypes bindings for the high-level API in libfuse 2 and 3.")
17548 (license license:isc)))
17549
17550(define-public python-mccabe
17551 (package
17552 (name "python-mccabe")
17553 (version "0.7.0")
17554 (source
17555 (origin
17556 (method url-fetch)
17557 (uri (pypi-uri "mccabe" version))
17558 (sha256
17559 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
17560 (build-system pyproject-build-system)
17561 (arguments
17562 (list
17563 ;; Test fixtures are not released yet, see
17564 ;; <https://github.com/PyCQA/mccabe/issues/93>
17565 #:tests? #f))
17566 (native-inputs
17567 (list python-toml
17568 python-setuptools
17569 python-wheel))
17570 (home-page "https://github.com/PyCQA/mccabe")
17571 (synopsis "McCabe checker, plugin for flake8")
17572 (description
17573 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
17574complexity of Python source code.")
17575 (license license:expat)))
17576
17577(define-public python-autoflake8
17578 (package
17579 (name "python-autoflake8")
17580 (version "0.4.0")
17581 (source (origin
17582 (method git-fetch) ;for tests
17583 (uri (git-reference
17584 (url "https://github.com/fsouza/autoflake8")
17585 (commit (string-append "v" version))))
17586 (file-name (git-file-name name version))
17587 (sha256
17588 (base32
17589 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
17590 (build-system pyproject-build-system)
17591 (native-inputs
17592 (list python-aiofiles
17593 python-poetry-core
17594 python-pytest
17595 python-pytest-xdist))
17596 (propagated-inputs (list python-pyflakes))
17597 (home-page "https://github.com/fsouza/autoflake8")
17598 (synopsis "Automatically fix issues reported by flake8")
17599 (description "Tool to automatically fix some issues reported by
17600@command{flake8}.")
17601 (license license:expat)))
17602
17603(define-public python-flake8
17604 (package
17605 (name "python-flake8")
17606 (version "7.3.0")
17607 (source
17608 (origin
17609 (method git-fetch)
17610 (uri (git-reference
17611 (url "https://github.com/pycqa/flake8")
17612 (commit version)))
17613 (file-name (git-file-name name version))
17614 (sha256
17615 (base32 "0dva22djb3pdrizghvs5r1k7vr1j3khs0k9z8y6dz4ga50dli4bm"))))
17616 (build-system pyproject-build-system)
17617 (native-inputs
17618 (list python-pytest
17619 python-setuptools))
17620 (propagated-inputs
17621 (list python-mccabe
17622 python-pycodestyle
17623 python-pyflakes))
17624 (home-page "https://flake8.pycqa.org/en/latest/")
17625 (synopsis "The modular source code checker: pep8, pyflakes and co")
17626 (description
17627 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
17628 (license license:expat)))
17629
17630(define-public python-flake8-blind-except
17631 (package
17632 (name "python-flake8-blind-except")
17633 (version "0.2.1")
17634 (source
17635 (origin
17636 (method git-fetch)
17637 (uri (git-reference
17638 (url "https://github.com/elijahandrews/flake8-blind-except")
17639 (commit (string-append "v" version))))
17640 (file-name (git-file-name name version))
17641 (sha256
17642 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
17643 (build-system pyproject-build-system)
17644 (arguments (list #:tests? #f)) ;no tests
17645 (native-inputs (list python-setuptools))
17646 (propagated-inputs (list python-pycodestyle))
17647 (home-page "https://github.com/elijahandrews/flake8-blind-except")
17648 (synopsis "Check for blind @code{except:} statements")
17649 (description
17650 "This package provides a flake8 extension that checks for blind
17651@code{except:} statements.")
17652 (license license:expat)))
17653
17654(define-public python-flake8-bugbear
17655 (package
17656 (name "python-flake8-bugbear")
17657 (version "24.10.31")
17658 (source
17659 (origin
17660 (method url-fetch)
17661 (uri (pypi-uri "flake8_bugbear" version))
17662 (sha256
17663 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17664 (build-system pyproject-build-system)
17665 (native-inputs
17666 (list python-hypothesmith
17667 python-pytest
17668 python-setuptools
17669 python-wheel))
17670 (propagated-inputs
17671 (list python-attrs
17672 python-flake8))
17673 (home-page "https://github.com/PyCQA/flake8-bugbear")
17674 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17675 (description
17676 "This package contains a plugin for Flake8 finding likely bugs and design
17677problems in your program. It contains warnings that don't belong in pyflakes
17678and pycodestyle.")
17679 (license license:expat)))
17680
17681(define-public python-flake8-continuation
17682 (package
17683 (name "python-flake8-continuation")
17684 (version "1.0.5")
17685 (source
17686 (origin
17687 (method git-fetch)
17688 (uri (git-reference
17689 (url "https://github.com/planetlabs/flake8-continuation")
17690 (commit version)))
17691 (file-name (git-file-name name version))
17692 (sha256
17693 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17694 (build-system pyproject-build-system)
17695 (arguments
17696 (list
17697 #:phases
17698 #~(modify-phases %standard-phases
17699 (add-after 'unpack 'remove-python-six-dependency
17700 (lambda _
17701 (substitute* "flake8_continuation.py"
17702 (("import six|six\\.moves\\.")
17703 ""))
17704 (substitute* "setup.py"
17705 ((", \"six\"")
17706 "")))))))
17707 (native-inputs (list python-pytest python-setuptools))
17708 (propagated-inputs (list python-flake8 python-pycodestyle))
17709 (home-page "https://github.com/planetlabs/flake8-continuation")
17710 (synopsis "Flake8 Line Continuation Plugin")
17711 (description
17712 "A Flake8 plugin that checks for the line continuation style to be in the
17713preferred method according to PEP-8, specifically:
17714@quotation
17715The preferred way of wrapping long lines is by using Python's implied line
17716continuation inside parentheses, brackets and braces. Long lines can be
17717broken over multiple lines by wrapping expressions in parentheses. These
17718should be used in preference to using a backslash for line continuation.
17719@end quotation")
17720 (license license:asl2.0)))
17721
17722(define-public python-flake8-debugger
17723 (package
17724 (name "python-flake8-debugger")
17725 (version "4.1.2")
17726 (source
17727 (origin
17728 (method git-fetch)
17729 (uri (git-reference
17730 (url "https://github.com/jbkahn/flake8-debugger")
17731 (commit version)))
17732 (file-name (git-file-name name version))
17733 (sha256
17734 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
17735 (build-system pyproject-build-system)
17736 (native-inputs (list python-poetry-core python-pytest python-setuptools))
17737 (propagated-inputs (list python-flake8 python-pycodestyle))
17738 (home-page "https://github.com/jbkahn/flake8-debugger")
17739 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
17740 (description
17741 "This package provides a Flake8 plugin that checks for @code{ipdb} and
17742@code{pdb} imports and set traces, as well as @code{from
17743IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
17744@code{InteractiveShellEmbed()()}.")
17745 (license license:expat)))
17746
17747(define-public python-flake8-implicit-str-concat
17748 (package
17749 (name "python-flake8-implicit-str-concat")
17750 (version "0.5.0")
17751 (source
17752 (origin
17753 (method url-fetch)
17754 (uri (pypi-uri "flake8_implicit_str_concat" version))
17755 (sha256
17756 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
17757 (build-system pyproject-build-system)
17758 (arguments
17759 (list
17760 #:tests? #f)) ; no tests in PiPY or git checkout
17761 (native-inputs
17762 (list python-hatchling))
17763 (propagated-inputs
17764 (list python-attrs
17765 python-more-itertools))
17766 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
17767 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
17768 (description
17769 "This is a plugin for the Python code checking tool Flake8 to encourage
17770correct string literal concatenation.
17771
17772It looks for style problems like implicitly concatenated string literals on
17773the same line (which can be introduced by the code formatting tool Black), or
17774unnecessary plus operators for explicit string literal concatenation.")
17775 (license license:expat)))
17776
17777(define-public python-flake8-print
17778 (package
17779 (name "python-flake8-print")
17780 (version "5.0.0")
17781 (source
17782 (origin
17783 (method url-fetch)
17784 (uri (pypi-uri "flake8-print" version))
17785 (sha256
17786 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
17787 (build-system pyproject-build-system)
17788 (arguments
17789 (list
17790 #:tests? #f)) ; no tests in PiPY or git checkout
17791 (native-inputs
17792 (list python-poetry-core))
17793 (propagated-inputs
17794 (list python-flake8
17795 python-pycodestyle))
17796 (home-page "https://github.com/jbkahn/flake8-print")
17797 (synopsis "Print statement checker plugin for Flake8")
17798 (description
17799 "This plugin for Flake8 checks for @code{print} statements in Python
17800files.")
17801 (license license:expat)))
17802
17803(define-public python-flake8-pyi
17804 (package
17805 (name "python-flake8-pyi")
17806 (version "26.5.0")
17807 (source
17808 (origin
17809 (method git-fetch)
17810 (uri (git-reference
17811 (url "https://github.com/ambv/flake8-pyi")
17812 (commit version)))
17813 (file-name (git-file-name name version))
17814 (sha256
17815 (base32 "006shfi8a99ysfac5s7fizx8f5w9hz3pl551kp9q1883rh1rfd5m"))))
17816 (build-system pyproject-build-system)
17817 (arguments
17818 (list
17819 #:phases
17820 #~(modify-phases %standard-phases
17821 (add-after 'unpack 'fix-pytest-config
17822 (lambda _
17823 ;; Prevent full threads utilization.
17824 (substitute* "pyproject.toml"
17825 (("-nauto") "")))))))
17826 (native-inputs
17827 (list python-hatch-vcs
17828 python-hatchling
17829 python-pytest))
17830 (propagated-inputs
17831 (list python-attrs
17832 python-flake8
17833 python-pyflakes))
17834 (home-page "https://github.com/ambv/flake8-pyi")
17835 (synopsis "Flake8 plugin for type hinting stub files")
17836 (description
17837 "This package contains a plugin that provides specializations for type
17838hinting stub files, especially interesting for linting typeshed. It adds the
17839@file{.pyi} extension to the default value of the @code{--filename}
17840command-line argument to Flake8. This means stubs are linted by default with
17841this plugin enabled, without needing to explicitly list every file. It
17842modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
17843expressions after the entire file has been read. This enables support for
17844first-class forward references that stub files use.")
17845 (license license:expat)))
17846
17847(define-public python-flake8-quotes
17848 (package
17849 (name "python-flake8-quotes")
17850 (version "3.4.0")
17851 (source
17852 (origin
17853 (method url-fetch)
17854 (uri (pypi-uri "flake8-quotes" version))
17855 (sha256
17856 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
17857 (build-system pyproject-build-system)
17858 (native-inputs
17859 (list python-pytest
17860 python-setuptools
17861 python-wheel))
17862 (propagated-inputs
17863 (list python-flake8))
17864 (home-page "https://github.com/zheller/flake8-quotes/")
17865 (synopsis "Flake8 lint for quotes")
17866 (description "This package provides a Flake8 lint for quotes.")
17867 (license license:expat)))
17868
17869(define-public python-flake8-todo
17870 (package
17871 (name "python-flake8-todo")
17872 (version "0.7")
17873 (source
17874 (origin
17875 (method git-fetch)
17876 (uri (git-reference
17877 (url "https://github.com/schlamar/flake8-todo")
17878 (commit (string-append "v" version))))
17879 (file-name (git-file-name name version))
17880 (sha256
17881 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
17882 (build-system pyproject-build-system)
17883 (arguments (list #:tests? #f)) ; No tests.
17884 (native-inputs (list python-setuptools))
17885 (propagated-inputs (list python-pycodestyle))
17886 (home-page "https://github.com/schlamar/flake8-todo")
17887 (synopsis "TODO notes checker, plugin for flake8")
17888 (description
17889 "This package provides the @code{flake8-todo} Python module, a
17890TODO notes checker plugin for flake8.")
17891 (license license:expat)))
17892
17893(define-public python-flake8-isort
17894 (package
17895 (name "python-flake8-isort")
17896 (version "7.0.0")
17897 (source
17898 (origin
17899 (method git-fetch)
17900 (uri (git-reference
17901 (url "https://github.com/gforcada/flake8-isort")
17902 (commit version)))
17903 (file-name (git-file-name name version))
17904 (sha256
17905 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
17906 (build-system pyproject-build-system)
17907 (arguments (list #:test-backend #~'custom
17908 #:test-flags #~(list "run_tests.py")))
17909 (native-inputs (list python-hatchling python-pytest))
17910 (propagated-inputs (list python-flake8 python-isort))
17911 (home-page "https://github.com/gforcada/flake8-isort")
17912 (synopsis "Flake8 plugin integrating isort")
17913 (description
17914 "This package provides a flake8 plugin that integrates isort,
17915extending flake8 so that it can warn about badly sorted Python import
17916directives.")
17917 (license license:gpl2+)))
17918
17919(define-public python-autoflake
17920 (package
17921 (name "python-autoflake")
17922 (version "2.3.1")
17923 (source
17924 (origin
17925 (method url-fetch)
17926 (uri (pypi-uri "autoflake" version))
17927 (sha256
17928 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
17929 (build-system pyproject-build-system)
17930 (arguments
17931 (list
17932 #:phases
17933 #~(modify-phases %standard-phases
17934 (replace 'check
17935 (lambda _
17936 (invoke "python" "test_autoflake.py"))))))
17937 (native-inputs
17938 (list python-hatchling))
17939 (propagated-inputs
17940 (list python-pyflakes))
17941 (home-page "https://github.com/myint/autoflake")
17942 (synopsis "Removes unused imports and unused variables")
17943 (description
17944 "@code{autoflake} removes unused imports and unused variables from Python
17945code as reported by @code{pyflakes}.
17946
17947By default, it only removes unused imports for modules that are part of the
17948standard library. Removal of unused variables is also disabled by default.
17949It also removes useless @code{pass} statements.")
17950 (license license:expat)))
17951
17952(define-public python-mistune
17953 (package
17954 (name "python-mistune")
17955 (version "3.2.1")
17956 (source
17957 (origin
17958 (method git-fetch)
17959 (uri (git-reference
17960 (url "https://github.com/lepture/mistune")
17961 (commit (string-append "v" version))))
17962 (file-name (git-file-name name version))
17963 (sha256
17964 (base32 "1zcfky6rr860mdbjxs1h0lhla39g8s3048xdnb24y0lnyj3h80gh"))))
17965 (build-system pyproject-build-system)
17966 (native-inputs
17967 (list python-pytest
17968 python-setuptools))
17969 (home-page "https://github.com/lepture/mistune")
17970 (synopsis "Markdown parser in pure Python")
17971 (description
17972 "This package provides a fast markdown parser in pure Python.")
17973 (license license:bsd-3)))
17974
17975(define-public python-markdown
17976 (package
17977 (name "python-markdown")
17978 (version "3.10.2")
17979 (source
17980 (origin
17981 (method git-fetch)
17982 (uri (git-reference
17983 (url "https://github.com/Python-Markdown/markdown")
17984 (commit version)))
17985 (file-name (git-file-name name version))
17986 (sha256
17987 (base32 "1i7hn91zhg5blykvsdzr1hq00p8xqysdh1l73iypx9pd2pdvk7w9"))))
17988 (build-system pyproject-build-system)
17989 (native-inputs
17990 (list python-pyyaml
17991 python-setuptools))
17992 (home-page "https://python-markdown.github.io/")
17993 (synopsis "Python implementation of Markdown")
17994 (description
17995 "This package provides a Python implementation of John Gruber's
17996Markdown. The library features international input, various Markdown
17997extensions, and several HTML output formats. A command line wrapper
17998markdown_py is also provided to convert Markdown files to HTML.")
17999 (license license:bsd-3)))
18000
18001(define-public python-markdown2
18002 (package
18003 (name "python-markdown2")
18004 (version "2.5.3")
18005 (source
18006 (origin
18007 (method git-fetch) ; no tests data in PyPi package
18008 (uri (git-reference
18009 (url "https://github.com/trentm/python-markdown2")
18010 (commit version)))
18011 (file-name (git-file-name name version))
18012 (sha256
18013 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
18014 (build-system pyproject-build-system)
18015 (arguments
18016 (list
18017 #:test-backend #~'custom
18018 #:test-flags #~(list "test.py" "--" "-knownfailure")
18019 #:phases
18020 #~(modify-phases %standard-phases
18021 (add-before 'check 'pre-check
18022 (lambda _
18023 (chdir "test"))))))
18024 (native-inputs
18025 (list ;; python-pygments ;optional, tests fail when added
18026 ;; python-wavedrom ;optional, not packaged
18027 ;; python-latex2mathml ;optional, not packaged
18028 python-setuptools))
18029 (home-page "https://github.com/trentm/python-markdown2")
18030 (synopsis "Fast and complete Python implementation of Markdown")
18031 (description
18032 "This package provides a fast and complete Python implementation of
18033Markdown. It was written to closely match the behaviour of the original
18034Perl-implemented Markdown.pl. It also comes with a number of
18035extensions (called @code{extras}) for things like syntax coloring, tables,
18036header-ids.")
18037 (license license:expat)))
18038
18039(define-public python-mdx-include
18040 (package
18041 (name "python-mdx-include")
18042 (version "1.4.2")
18043 (source
18044 (origin
18045 (method git-fetch)
18046 (uri (git-reference
18047 (url "https://github.com/neurobin/mdx_include")
18048 (commit (string-append "v" version))))
18049 (file-name (git-file-name name version))
18050 (sha256
18051 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
18052 (build-system pyproject-build-system)
18053 (arguments
18054 (list
18055 #:test-backend #~'unittest
18056 #:phases
18057 (let* ((django-hello-url "\
18058https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1805973951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
18060 (django-hello
18061 (origin
18062 (method url-fetch)
18063 (uri django-hello-url)
18064 (sha256 (base32 "\
1806513bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
18066 #~(modify-phases %standard-phases
18067 (add-before 'check 'disable-test-requiring-network
18068 (lambda _
18069 (substitute* "mdx_include/test/test.py"
18070 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
18071 (string-append pre "__off__test_" post "("))
18072 (((string-join (string-split #$django-hello-url #\.) "\\."))
18073 #+django-hello))))))))
18074 (native-inputs (list python-setuptools))
18075 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
18076 (home-page "https://github.com/neurobin/mdx_include")
18077 (synopsis "Python Markdown extension to include local or remote files")
18078 (description "Include extension for Python Markdown. It lets you include
18079local or remote (downloadable) files into your markdown at arbitrary
18080positions.
18081
18082This project is motivated by markdown-include and provides the same
18083functionalities with some extras.")
18084 (license license:bsd-3)))
18085
18086(define-public python-ptyprocess
18087 (package
18088 (name "python-ptyprocess")
18089 (version "0.7.0")
18090 (source
18091 (origin
18092 (method url-fetch)
18093 (uri (pypi-uri "ptyprocess" version))
18094 (sha256
18095 (base32
18096 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
18097 (build-system pyproject-build-system)
18098 (native-inputs
18099 (list python-flit-core
18100 python-pytest))
18101 (home-page "https://github.com/pexpect/ptyprocess")
18102 (synopsis "Run a subprocess in a pseudo terminal")
18103 (description
18104 "This package provides a Python library used to launch a subprocess in a
18105pseudo terminal (pty), and interact with both the process and its pty.")
18106 (license license:isc)))
18107
18108(define-public python-configshell-fb
18109 (package
18110 (name "python-configshell-fb")
18111 (version "1.1.30")
18112 (source
18113 (origin
18114 (method url-fetch)
18115 (uri (pypi-uri "configshell-fb" version))
18116 ;; XXX: Snippet below is required because on v1.1.30 the source code
18117 ;; has configshell_fb as softlink to configshell and guix
18118 ;; pyproject-build-system doesn't work with symlinks very well.
18119 ;;
18120 ;; This package is only used in spdk for now and it's crucial to keep
18121 ;; it locked on version and keep the snipped for spdk to build
18122 ;; successfully.
18123 (snippet #~(begin
18124 (use-modules (guix build utils))
18125 (delete-file "setup.py")
18126 (delete-file-recursively "configshell_fb")
18127 (rename-file "configshell" "configshell_fb")))
18128 (sha256
18129 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
18130 (build-system pyproject-build-system)
18131 (arguments
18132 (list #:tests? #f)) ;; this package has no tests
18133 (native-inputs
18134 (list python-setuptools
18135 python-six
18136 python-wheel))
18137 (propagated-inputs
18138 (list python-pyparsing))
18139 (home-page "https://github.com/open-iscsi/configshell-fb")
18140 (synopsis "Framework to implement simple but nice CLIs")
18141 (description
18142 "This package provides a framework to implement simple but nice CLIs.")
18143 (license license:asl2.0)))
18144
18145(define-public python-configupdater
18146 (package
18147 (name "python-configupdater")
18148 (version "3.2")
18149 (source
18150 (origin
18151 (method git-fetch)
18152 (uri (git-reference
18153 (url "https://github.com/pyscaffold/configupdater")
18154 (commit (string-append "v" version))))
18155 (file-name (git-file-name name version))
18156 (sha256
18157 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
18158 (build-system pyproject-build-system)
18159 (native-inputs
18160 (list python-pytest python-setuptools python-setuptools-scm))
18161 (home-page "https://github.com/pyscaffold/configupdater")
18162 (synopsis "Parser like ConfigParser but for updating configuration files")
18163 (description
18164 "ConfigUpdater is a Python library for updating INI configuration files
18165while preserving the original file's formatting, structure, and comments.
18166Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
18167targeted changes--keeping comments, section ordering, key-value pair
18168ordering, and original casing intact.")
18169 (license license:expat)))
18170
18171(define-public python-crccheck
18172 (package
18173 (name "python-crccheck")
18174 (version "1.3.0")
18175 (source
18176 (origin
18177 (method git-fetch) ; no tests in PyPI
18178 (uri (git-reference
18179 (url "https://github.com/MartinScharrer/crccheck")
18180 (commit (string-append "v" version))))
18181 (file-name (git-file-name name version))
18182 (sha256
18183 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
18184 (build-system pyproject-build-system)
18185 (native-inputs (list python-pytest python-setuptools python-wheel))
18186 (home-page "https://github.com/MartinScharrer/crccheck")
18187 (synopsis "Calculation library for CRCs and checksums")
18188 (description "@code{crccheck} is a calculation library for CRCs and
18189checksums. It implement more than a hundred checksum routines.")
18190 (license license:gpl3+)))
18191
18192(define-public python-crashtest
18193 (package
18194 (name "python-crashtest")
18195 (version "0.4.1")
18196 (source
18197 (origin
18198 (method git-fetch)
18199 (uri (git-reference
18200 (url "https://github.com/sdispater/crashtest")
18201 (commit version)))
18202 (file-name (git-file-name name version))
18203 (sha256
18204 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
18205 (build-system pyproject-build-system)
18206 (native-inputs (list python-poetry-core python-pytest))
18207 (home-page "https://github.com/sdispater/crashtest")
18208 (synopsis "Manage Python errors with ease")
18209 (description
18210 "Python library that makes exceptions handling and inspection easier.")
18211 (license license:expat)))
18212
18213(define-public python-pysendfile
18214 (package
18215 (name "python-pysendfile")
18216 (version "2.0.1")
18217 (source
18218 (origin
18219 (method git-fetch)
18220 (uri (git-reference
18221 (url "https://github.com/giampaolo/pysendfile")
18222 (commit (string-append "release-" version))))
18223 (file-name (git-file-name name version))
18224 (sha256
18225 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
18226 (build-system pyproject-build-system)
18227 (arguments
18228 (list
18229 #:phases
18230 #~(modify-phases %standard-phases
18231 (replace 'check
18232 (lambda* (#:key tests? #:allow-other-keys)
18233 (when tests?
18234 (setenv "HOME" "/tmp")
18235 (invoke "make" "test")))))))
18236 (native-inputs (list python-pytest python-setuptools))
18237 (propagated-inputs (list python-pyasynchat))
18238 (home-page "https://github.com/giampaolo/pysendfile")
18239 (synopsis "Python interface to sendfile(2)")
18240 (description "The @code{pysendfile} Python library provides an interface to
18241the @code{sendfile(2)} system call.")
18242 (license license:expat)))
18243
18244(define-public python-pyftpdlib
18245 (package
18246 (name "python-pyftpdlib")
18247 (version "1.5.10")
18248 (source
18249 (origin
18250 (method url-fetch)
18251 (uri (pypi-uri "pyftpdlib" version))
18252 (sha256
18253 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
18254 (build-system pyproject-build-system)
18255 ;; Using Pytest instead of the Makefile causes the command line tests to
18256 ;; fail on unknown Pytest arguments.
18257 (arguments
18258 (list
18259 #:test-flags
18260 #~(list
18261 "-k" "not TestCommandLineParser"
18262 ;; These contains flaky tests.
18263 "--deselect=pyftpdlib/test/test_functional.py"
18264 "--deselect=pyftpdlib/test/test_functional_ssl.py")))
18265 (native-inputs
18266 (list python-psutil
18267 python-pytest
18268 python-setuptools
18269 python-wheel))
18270 (propagated-inputs
18271 (list python-pyopenssl
18272 python-pysendfile))
18273 (home-page "https://github.com/giampaolo/pyftpdlib/")
18274 (synopsis "Asynchronous and scalable Python FTP server library")
18275 (description "The Python FTP server library provides a high-level
18276interface to write efficient, scalable and asynchronous FTP servers with
18277Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
18278RFC-959} FTP server implementation available for Python, and has the following
18279traits:
18280@itemize
18281@item
18282It is lightweight, fast and scalable.
18283@item
18284It uses the @code{sendfile(2)} system call for uploads.
18285@item
18286It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
18287asynchronously.
18288@item
18289It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
18290IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
18291RFC-2640}) and MLSD/MLST commands (RFC-3659).
18292@item
18293It has a flexible system of @samp{authorizers} able to manage both
18294@samp{virtual} and @samp{real} users.
18295@end itemize")
18296 (license license:expat)))
18297
18298(define-public python-fonttools
18299 (package
18300 (name "python-fonttools")
18301 (version "4.59.2")
18302 (source
18303 (origin
18304 (method url-fetch)
18305 (uri (pypi-uri "fonttools" version ".tar.gz"))
18306 (sha256
18307 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
18308 (build-system pyproject-build-system)
18309 (arguments
18310 (list
18311 #:tests? (not (%current-target-system))
18312 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
18313 ;; 3 subtests passed
18314 #:test-flags
18315 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
18316 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
18317 (string-join ls "::")))
18318 ;; XXX: Some test data is not included in PyPI archive,
18319 ;; remove when switched to git-fetch.
18320 '(("cffLib/cffLib_test.py" "CffLibTest"
18321 "test_reading_supplement_encoding")
18322 ("tfmLib/tfmLib_test.py"
18323 "test_read_boundary_char")
18324 ("tfmLib/tfmLib_test.py"
18325 "test_read_fontdimens_vanilla")
18326 ("tfmLib/tfmLib_test.py"
18327 "test_read_fontdimens_mathex")
18328 ("tfmLib/tfmLib_test.py"
18329 "test_read_fontdimens_mathsy")
18330 ("voltLib/volttofea_test.py" "ToFeaTest"
18331 "test_cli_vtp")
18332 ("voltLib/volttofea_test.py" "ToFeaTest"
18333 "test_group_order"))))))
18334 (native-inputs
18335 (list python-pytest
18336 python-setuptools))
18337 ;; All of them are listed as extras_require.
18338 (propagated-inputs
18339 (list python-brotli
18340 python-lxml
18341 python-unicodedata2
18342 python-zopfli))
18343 (home-page "https://github.com/fonttools/fonttools")
18344 (synopsis "Tools to manipulate font files")
18345 (description
18346 "FontTools/TTX is a library to manipulate font files from Python. It
18347supports reading and writing of TrueType/OpenType fonts, reading and writing
18348of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
18349also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
18350from an XML-based format.")
18351 (license license:expat)))
18352
18353;;; Tests are left out in the main package to avoid cycles.
18354;; XXX: When updating, solve comment in python-cu2qu.
18355(define-public python-fonttools-minimal
18356 (hidden-package
18357 (package
18358 (inherit python-fonttools)
18359 (name "python-fonttools-minimal")
18360 (arguments '(#:tests? #f))
18361 (native-inputs
18362 (list python-setuptools))
18363 (propagated-inputs '()))))
18364
18365(define-public python-ly
18366 (package
18367 (name "python-ly")
18368 (version "0.9.9")
18369 (source
18370 (origin
18371 (method git-fetch)
18372 (uri (git-reference
18373 (url "https://github.com/frescobaldi/python-ly")
18374 (commit (string-append "v" version))))
18375 (file-name (git-file-name name version))
18376 (sha256
18377 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
18378 (build-system pyproject-build-system)
18379 (arguments
18380 (list
18381 #:phases
18382 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
18383 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
18384 #~(modify-phases %standard-phases
18385 (add-after 'unpack 'inject-data
18386 (lambda _
18387 (substitute* "tests/musicxml.xsd"
18388 (((string-join (string-split #$namespace-url #\.) "\\."))
18389 #$(origin
18390 (method url-fetch)
18391 (uri namespace-url)
18392 (sha256 (base32 "\
183931j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
18394 (((string-join (string-split #$xlink-url #\.) "\\."))
18395 #$(origin
18396 (method url-fetch)
18397 (uri xlink-url)
18398 (sha256 (base32 "\
183990jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
18400 (native-inputs (list python-hatchling python-lxml python-pytest))
18401 (synopsis "Tool and library for manipulating LilyPond files")
18402 (description
18403 "This package provides a Python library to parse, manipulate or create
18404documents in LilyPond format. A command line program ly is also provided that
18405can be used to do various manipulations with LilyPond files.")
18406 (home-page "https://pypi.org/project/python-ly/")
18407 (license license:gpl2+)))
18408
18409(define-public python-appdirs
18410 (package
18411 (name "python-appdirs")
18412 (version "1.4.4")
18413 (source
18414 (origin
18415 (method url-fetch)
18416 (uri (pypi-uri "appdirs" version))
18417 (sha256
18418 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
18419 (build-system pyproject-build-system)
18420 (arguments (list #:test-backend #~'unittest))
18421 (native-inputs (list python-setuptools))
18422 (home-page "https://github.com/ActiveState/appdirs")
18423 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
18424 (description
18425 "This module provides a portable way of finding out where user data
18426should be stored on various operating systems.")
18427 (license license:expat)))
18428
18429(define-public python-gorilla
18430 (package
18431 (name "python-gorilla")
18432 (version "0.5.0")
18433 (source
18434 (origin
18435 (method git-fetch)
18436 (uri (git-reference
18437 (url "https://github.com/christophercrouzet/gorilla")
18438 (commit (string-append "v" version))))
18439 (file-name (git-file-name name version))
18440 (sha256
18441 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
18442 (build-system pyproject-build-system)
18443 (arguments (list #:test-backend #~'unittest))
18444 (native-inputs (list python-setuptools))
18445 (home-page "https://github.com/christophercrouzet/gorilla")
18446 (synopsis "Convenient monkey patching with Python")
18447 (description
18448 "Gorilla is a Python library that provides a convenient approach to
18449monkey patching. Monkey patching is the process of modifying module and
18450class attributes at runtime with the purpose of replacing or extending
18451third-party code.")
18452 (license license:expat)))
18453
18454(define-public python-llfuse
18455 (package
18456 (name "python-llfuse")
18457 (version "1.5.1")
18458 (source
18459 (origin
18460 (method git-fetch)
18461 (uri (git-reference
18462 (url "https://github.com/python-llfuse/python-llfuse")
18463 (commit (string-append "release-" version))))
18464 (file-name (git-file-name name version))
18465 (sha256
18466 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
18467 (build-system pyproject-build-system)
18468 (arguments
18469 (list
18470 #:test-flags
18471 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
18472 #:phases
18473 #~(modify-phases %standard-phases
18474 (add-before 'build 'build-cython
18475 (lambda _
18476 (invoke "python" "setup.py" "build_cython"))))))
18477 (inputs (list fuse-2 attr))
18478 (native-inputs
18479 (list pkg-config python-cython python-pytest python-setuptools))
18480 (synopsis "Python bindings for FUSE")
18481 (description
18482 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
18483 (home-page "https://github.com/python-llfuse/python-llfuse")
18484 (license license:lgpl2.0+)))
18485
18486(define-public python-msgpack
18487 (package
18488 (name "python-msgpack")
18489 (version "1.1.2")
18490 (source
18491 (origin
18492 (method url-fetch)
18493 (uri (pypi-uri "msgpack" version))
18494 (sha256
18495 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
18496 (build-system pyproject-build-system)
18497 (native-inputs
18498 (list python-pytest
18499 python-setuptools))
18500 (home-page "https://msgpack.org/")
18501 (synopsis "MessagePack (de)serializer")
18502 (description "MessagePack is a fast, compact binary serialization format,
18503suitable for similar data to JSON. This package provides CPython bindings for
18504reading and writing MessagePack data.")
18505 (license license:asl2.0)))
18506
18507(define-public python-openstep-plist
18508 (package
18509 (name "python-openstep-plist")
18510 (version "0.5.2")
18511 (source
18512 (origin
18513 (method git-fetch)
18514 (uri (git-reference
18515 (url "https://github.com/fonttools/openstep-plist")
18516 (commit (string-append "v" version))))
18517 (file-name (git-file-name name version))
18518 (sha256
18519 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
18520 (build-system pyproject-build-system)
18521 (native-inputs
18522 (list python-cython
18523 python-pytest
18524 python-setuptools-scm
18525 python-setuptools))
18526 (home-page "https://github.com/fonttools/openstep-plist")
18527 (synopsis "OpenStep plist parser and writer")
18528 (description
18529 "This package provides a parser for the \"old style\" OpenStep property
18530list format (also known as ASCII plist), written in Cython.")
18531 (license license:expat)))
18532
18533(define-public python-resolvelib
18534 (package
18535 (name "python-resolvelib")
18536 ;; Use latest commit, because last release, 1.2.1 is incompatible
18537 ;; with python-packaging 26,
18538 (properties '((commit . "a0cb7c50b78028f840b238d8e1c391e0546f2325")
18539 (revision . "0")))
18540 (version (git-version "1.2.1"
18541 (assoc-ref properties 'revision)
18542 (assoc-ref properties 'commit)))
18543 (source
18544 (origin
18545 (method git-fetch)
18546 (uri (git-reference
18547 (url "https://github.com/sarugaku/resolvelib")
18548 (commit (assoc-ref properties 'commit))))
18549 (file-name (git-file-name name version))
18550 (sha256
18551 (base32 "1f00jlcv7fal4y6iyvqsycc6b5mkvxgc0jdddbkm1jcci1qy1yfl"))))
18552 (build-system pyproject-build-system)
18553 (native-inputs
18554 (list python-packaging
18555 python-pytest
18556 python-setuptools
18557 python-wheel))
18558 (home-page "https://github.com/sarugaku/resolvelib")
18559 (synopsis "Abstract dependencies resolver")
18560 (description
18561 "The ResolveLib library provides a @code{Resolver} class that includes
18562dependency resolution logic.")
18563 (license license:isc)))
18564
18565;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
18566;; 2022. It is now read-only.
18567(define-public python-commonmark
18568 (package
18569 (name "python-commonmark")
18570 (version "0.9.1")
18571 (source
18572 (origin
18573 (method url-fetch)
18574 (uri (pypi-uri "commonmark" version))
18575 (sha256
18576 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
18577 (build-system pyproject-build-system)
18578 (native-inputs
18579 (list python-setuptools))
18580 (home-page "https://github.com/readthedocs/commonmark.py")
18581 (synopsis "Python parser for the CommonMark Markdown spec")
18582 (description
18583 "This module is a pure Python port of jgm's @code{commonmark.js}, a
18584Markdown parser and renderer for the CommonMark specification, using only
18585native modules.")
18586 (license license:bsd-3)))
18587
18588(define-public python-immutables
18589 (package
18590 (name "python-immutables")
18591 (version "0.21")
18592 (source
18593 (origin
18594 (method git-fetch)
18595 (uri (git-reference
18596 (url "https://github.com/MagicStack/immutables")
18597 (commit (string-append "v" version))))
18598 (file-name (git-file-name name version))
18599 (sha256
18600 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
18601 (build-system pyproject-build-system)
18602 (arguments
18603 (list #:phases #~(modify-phases %standard-phases
18604 (add-after 'unpack 'remove-mypy-dependency
18605 (lambda _
18606 (delete-file "tests/test_mypy.py")
18607 (delete-file "tests/conftest.py"))))))
18608 (native-inputs
18609 (list python-pytest python-setuptools python-wheel))
18610 (home-page "https://github.com/MagicStack/immutables")
18611 (synopsis "High-performance immutable mapping type for Python")
18612 (description
18613 "An immutable mapping type for Python. The underlying datastructure is a
18614Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
18615functional languages.")
18616 (license license:asl2.0)))
18617
18618(define-public python-prettytable
18619 (package
18620 (name "python-prettytable")
18621 (version "3.12.0")
18622 (source
18623 (origin
18624 (method url-fetch)
18625 (uri (pypi-uri "prettytable" version))
18626 (sha256
18627 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
18628 (build-system pyproject-build-system)
18629 (native-inputs
18630 (list python-hatchling
18631 python-hatch-vcs
18632 python-pytest
18633 python-pytest-lazy-fixtures
18634 python-setuptools-scm))
18635 (propagated-inputs
18636 (list python-wcwidth))
18637 (home-page "https://github.com/jazzband/prettytable")
18638 (synopsis "Display tabular data in an ASCII table format")
18639 (description
18640 "A library designed to represent tabular data in visually appealing ASCII
18641tables. PrettyTable allows for selection of which columns are to be printed,
18642independent alignment of columns (left or right justified or centred) and
18643printing of sub-tables by specifying a row range.")
18644 (license license:bsd-3)))
18645
18646(define-public python-rtf-tokenize
18647 (package
18648 (name "python-rtf-tokenize")
18649 (version "1.0.1")
18650 (source (origin
18651 (method url-fetch)
18652 (uri (pypi-uri "rtf_tokenize" version))
18653 (sha256
18654 (base32
18655 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
18656 (build-system pyproject-build-system)
18657 (native-inputs (list python-pytest python-setuptools python-wheel))
18658 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
18659 (synopsis "Simple RTF tokenizer")
18660 (description "This package is a simple RTF tokenizer.")
18661 (license license:gpl2+)))
18662
18663(define-public python-sniffio
18664 (package
18665 (name "python-sniffio")
18666 (version "1.3.1")
18667 (source
18668 (origin
18669 (method url-fetch)
18670 (uri (pypi-uri "sniffio" version))
18671 (sha256
18672 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18673 (build-system pyproject-build-system)
18674 (arguments
18675 (list
18676 #:test-flags
18677 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18678 (native-inputs
18679 (list python-pytest python-setuptools))
18680 (home-page "https://github.com/python-trio/sniffio")
18681 (synopsis "Detect which async library a program is running under")
18682 (description
18683 "This package detects which async library a program is running under. It
18684supports multiple async I/O packages, like Trio, and asyncio.")
18685 ;; Either license applies.
18686 (license (list license:expat license:asl2.0))))
18687
18688(define-public python-snuggs
18689 (package
18690 (name "python-snuggs")
18691 (version "1.4.7")
18692 (source (origin
18693 (method url-fetch)
18694 (uri (pypi-uri "snuggs" version))
18695 (sha256
18696 (base32
18697 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18698 (build-system pyproject-build-system)
18699 (propagated-inputs (list python-numpy python-pyparsing))
18700 (native-inputs (list python-hypothesis python-pytest python-setuptools
18701 python-wheel))
18702 (home-page "https://github.com/mapbox/snuggs")
18703 (synopsis "Snuggs are S-expressions for Numpy")
18704 (description "Snuggs are S-expressions for Numpy.")
18705 (license license:expat)))
18706
18707(define-public python-geojson
18708 (package
18709 (name "python-geojson")
18710 (version "3.2.0")
18711 (source
18712 (origin
18713 (method url-fetch)
18714 (uri (pypi-uri "geojson" version))
18715 (sha256
18716 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18717 (build-system pyproject-build-system)
18718 (native-inputs (list python-pytest python-setuptools))
18719 (home-page "https://github.com/jazzband/geojson")
18720 (synopsis "Python bindings and utilities for GeoJSON")
18721 (description
18722 "This package provides Python bindings and utilities for
18723@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18724structures.")
18725 (license license:bsd-3)))
18726
18727;; pyowm only accepts a version less than version 3.
18728(define-public python-geojson-for-pyowm
18729 (package
18730 (inherit python-geojson)
18731 (version "2.5.0")
18732 (source
18733 (origin
18734 (method url-fetch)
18735 (uri (pypi-uri "geojson" version))
18736 (sha256
18737 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
18738 (arguments
18739 ;; https://github.com/jazzband/geojson/issues/175
18740 (list #:tests? #f))))
18741
18742(define-public python-gpxpy
18743 (package
18744 (name "python-gpxpy")
18745 (version "1.6.2")
18746 (source
18747 (origin
18748 (method url-fetch)
18749 (uri (pypi-uri "gpxpy" version))
18750 (sha256
18751 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
18752 (build-system pyproject-build-system)
18753 (arguments
18754 (list #:test-backend #~'unittest))
18755 (native-inputs
18756 (list python-setuptools))
18757 (home-page "https://github.com/tkrajina/gpxpy")
18758 (synopsis "Python GPX parser")
18759 (description "GPX file parser and GPS track manipulation library.")
18760 (license license:asl2.0)))
18761
18762(define-public python-get-version
18763 (package
18764 (name "python-get-version")
18765 (version "3.5.5")
18766 (source
18767 (origin
18768 (method url-fetch)
18769 (uri (pypi-uri "get_version" version))
18770 (sha256
18771 (base32
18772 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
18773 (build-system pyproject-build-system)
18774 (arguments
18775 ;; XXX: No tests in PyPI and building from GitHub fails because of the
18776 ;; lack of git metadata in the checkout.
18777 (list #:tests? #f))
18778 (native-inputs (list python-flit-core))
18779 (propagated-inputs (list python-dunamai))
18780 (home-page "https://github.com/flying-sheep/get_version")
18781 (synopsis "Version helper in the spirit of versioneer")
18782 (description
18783 "This package provides a version helper that lets you automatically use
18784the latest @code{vX.X.X} Git tag as the version in your Python package. It
18785also supports getting the version from Python source distributions or, once
18786your package is installed, via @code{pkg_resources} (part of
18787@code{setuptools}).")
18788 (license license:gpl3+)))
18789
18790(define-public python-filetype
18791 (package
18792 (name "python-filetype")
18793 (version "1.2.0")
18794 (source
18795 (origin
18796 (method url-fetch)
18797 (uri (pypi-uri "filetype" version))
18798 (sha256
18799 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
18800 (build-system pyproject-build-system)
18801 (native-inputs (list python-pytest
18802 python-pytest-benchmark
18803 python-setuptools
18804 python-wheel))
18805 (home-page "https://github.com/h2non/filetype.py")
18806 (synopsis "Infer file type and MIME type of any file/buffer")
18807 (description "@code{filetype} is a small and dependency free Python
18808package to infer file type and MIME type checking the magic numbers
18809signature of a file or buffer.")
18810 (license license:expat)))
18811
18812(define-public python-cachelib
18813 (package
18814 (name "python-cachelib")
18815 (version "0.13.0")
18816 (source
18817 (origin
18818 (method url-fetch)
18819 (uri (pypi-uri "cachelib" version))
18820 (sha256
18821 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
18822 (build-system pyproject-build-system)
18823 (arguments
18824 ;; These tests use a remote connection.
18825 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
18826 "--ignore" "tests/test_mongodb_cache.py")))
18827 (native-inputs
18828 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
18829 (home-page "https://github.com/pallets-eco/cachelib")
18830 (synopsis "Collection of cache libraries")
18831 (description "Cachelib is a library extracted from @code{werkzeug} which
18832provides a collection of cache libraries in the same API interface.")
18833 (license license:bsd-3)))
18834
18835(define-public python-pylru
18836 (package
18837 (name "python-pylru")
18838 (version "1.2.0")
18839 (source
18840 (origin
18841 (method git-fetch)
18842 (uri (git-reference
18843 (url "https://github.com/jlhutch/pylru")
18844 (commit (string-append "v" version))))
18845 (file-name (git-file-name name version))
18846 (sha256
18847 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
18848 (build-system pyproject-build-system)
18849 (arguments
18850 (list
18851 #:test-backend #~'custom
18852 #:test-flags #~(list "test.py")))
18853 (native-inputs (list python-pytest python-setuptools))
18854 (home-page "https://github.com/jlhutch/pylru")
18855 (synopsis "Least recently used (LRU) cache implementation")
18856 (description
18857 "Pylru implements a true LRU cache along with several support classes.
18858Pylru provides a cache class with a simple dict interface. It also provides
18859classes to wrap any object that has a dict interface with a cache. Both
18860write-through and write-back semantics are supported. Pylru also provides
18861classes to wrap functions in a similar way, including a function decorator.")
18862 (license license:gpl2+)))
18863
18864(define-public python-legacy-api-wrap
18865 (package
18866 (name "python-legacy-api-wrap")
18867 (version "1.5")
18868 (source
18869 (origin
18870 (method url-fetch)
18871 (uri (pypi-uri "legacy_api_wrap" version))
18872 (sha256
18873 (base32
18874 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
18875 (build-system pyproject-build-system)
18876 (native-inputs
18877 (list python-hatch-docstring-description
18878 python-hatch-vcs
18879 python-hatchling
18880 python-pytest
18881 python-typer))
18882 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
18883 (synopsis "Legacy API wrapper")
18884 (description "This module defines a decorator to wrap legacy APIs. The
18885primary use case is APIs defined before keyword-only parameters existed.")
18886 (license license:gpl3+)))
18887
18888(define-public python-langdetect
18889 (package
18890 (name "python-langdetect")
18891 (version "1.0.9")
18892 (source
18893 (origin
18894 (method url-fetch)
18895 (uri (pypi-uri "langdetect" version))
18896 (sha256
18897 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
18898 (build-system pyproject-build-system)
18899 (native-inputs
18900 (list python-pytest
18901 python-setuptools))
18902 (propagated-inputs
18903 (list python-six))
18904 (home-page "https://github.com/Mimino666/langdetect")
18905 (synopsis "Language detection library")
18906 (description
18907 "This library is a port of Nakatani Shuyo's language-detection library
18908(version from 03/03/2014) to Python.")
18909 (license license:expat)))
18910
18911(define-public python-pyasn1
18912 (package
18913 (name "python-pyasn1")
18914 (version "0.6.3")
18915 (source
18916 (origin
18917 (method git-fetch)
18918 (uri (git-reference
18919 (url "https://github.com/pyasn1/pyasn1")
18920 (commit (string-append "v" version))))
18921 (file-name (git-file-name name version))
18922 (sha256
18923 (base32 "0b22m94j163nikfkl031hgrfasb6wgqp3374b8dbr84jalkl0ykw"))))
18924 (build-system pyproject-build-system)
18925 (arguments
18926 (list #:test-backend #~'unittest
18927 #:test-flags #~(list "discover" "tests")))
18928 (native-inputs
18929 (list python-setuptools))
18930 (home-page "https://github.com/pyasn1/pyasn1")
18931 (synopsis "ASN.1 types and codecs")
18932 (description
18933 "This is an implementation of ASN.1 types and codecs in Python. It is
18934suitable for a wide range of protocols based on the ASN.1 specification.")
18935 (license license:bsd-2)))
18936
18937(define-public python-pyasn1-modules
18938 (package
18939 (name "python-pyasn1-modules")
18940 (version "0.4.2")
18941 (source
18942 (origin
18943 (method url-fetch)
18944 (uri (pypi-uri "pyasn1_modules" version))
18945 (sha256
18946 (base32
18947 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
18948 (build-system pyproject-build-system)
18949 (arguments
18950 (list #:test-backend #~'unittest
18951 #:test-flags #~(list "discover" "tests")))
18952 (native-inputs
18953 (list python-setuptools))
18954 (propagated-inputs
18955 (list python-pyasn1))
18956 (home-page "https://github.com/pyasn1/pyasn1-modules")
18957 (synopsis "ASN.1 codec implementations")
18958 (description
18959 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
18960implementations of ASN.1-based codecs and protocols.")
18961 (license license:bsd-3)))
18962
18963(define-public python-asn1tools
18964 (package
18965 (name "python-asn1tools")
18966 (version "0.167.0")
18967 (source
18968 (origin
18969 (method url-fetch)
18970 (uri (pypi-uri "asn1tools" version))
18971 (sha256
18972 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
18973 (build-system pyproject-build-system)
18974 (arguments
18975 (list
18976 #:test-flags
18977 #~(list "-k" (string-join
18978 ;; Tests fail with error: IndexError: string index out of
18979 ;; range. It may be some incompatibility with pyparsing,
18980 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
18981 (list "not test_c_source"
18982 "test_command_line_generate_c_source_oer"
18983 "test_command_line_generate_c_source_uper"
18984 "test_command_line_generate_rust_source_uper"
18985 "test_missing_parameterized_value"
18986 "test_c_source"
18987 "test_parse_parameterization")
18988 " and not "))))
18989 (native-inputs
18990 (list python-pytest
18991 python-setuptools
18992 python-wheel))
18993 (propagated-inputs
18994 (list python-bitstruct
18995 python-diskcache
18996 python-prompt-toolkit
18997 python-pyparsing))
18998 (home-page "https://github.com/eerimoq/asn1tools")
18999 (synopsis "ASN.1 parsing, encoding and decoding")
19000 (description "This package provides ASN.1 parsing, encoding and decoding
19001for Python, including constraints checking. It supports several
19002codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
19003for OER and UPER.")
19004 (license license:expat)))
19005
19006(define-public python-idna
19007 (package
19008 (name "python-idna")
19009 (version "3.18")
19010 (source
19011 (origin
19012 (method git-fetch)
19013 (uri (git-reference
19014 (url "https://github.com/kjd/idna")
19015 (commit (string-append "v" version))))
19016 (file-name (git-file-name name version))
19017 (sha256
19018 (base32 "0phrdwf6gqjpbs5kv3y6wbkvvpmq6kmjby674s8b9f6dsgzz4wpn"))))
19019 (build-system pyproject-build-system)
19020 (native-inputs
19021 (list python-flit-core python-pytest))
19022 (home-page "https://github.com/kjd/idna")
19023 (synopsis "Internationalized domain names in applications")
19024 (description
19025 "This is a library to support the Internationalised Domain Names in
19026Applications (IDNA) protocol as specified in RFC 5891. This version of the
19027protocol is often referred to as “IDNA2008” and can produce different results
19028from the earlier standard from 2003. The library is also intended to act as a
19029suitable drop-in replacement for the “encodings.idna” module that comes with
19030the Python standard library but currently only supports the older 2003
19031specification.")
19032 (license license:bsd-4)))
19033
19034(define-public python-libsass
19035 (package
19036 (name "python-libsass")
19037 (version "0.23.0")
19038 (source
19039 (origin
19040 ;; PyPI tarball is missing some test files.
19041 (method git-fetch)
19042 (uri (git-reference
19043 (url "https://github.com/sass/libsass-python")
19044 (commit version)))
19045 (file-name (git-file-name name version))
19046 (sha256
19047 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
19048 (build-system pyproject-build-system)
19049 (arguments
19050 '(#:phases
19051 (modify-phases %standard-phases
19052 ;; Use Guix package of libsass instead of compiling from a checkout.
19053 (add-before 'build 'set-libsass
19054 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
19055 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
19056 ;; https://github.com/sass/libsass-python/issues/440. It passed with
19057 ;; [email protected] which requires rebuild the world (1200+ packages),
19058 ;; remove when v3.6.5 is available.
19059 (add-before 'check 'silent-failing-tests
19060 (lambda _
19061 (substitute* "sasstests.py"
19062 (("def test_build_one")
19063 "def __off_test_build_one")
19064 (("def test_stack_trace_formatting")
19065 "def __off_test_stack_trace_formatting"))))
19066 (replace 'check
19067 (lambda* (#:key tests? #:allow-other-keys)
19068 (when tests?
19069 (invoke "pytest" "sasstests.py"))))
19070 (add-after 'install 'delete-test
19071 (lambda* (#:key inputs outputs #:allow-other-keys)
19072 ;; Delete sasstests.py because it attempts to open a file
19073 ;; that is not installed when loaded, which breaks the sanity
19074 ;; check.
19075 (delete-file (string-append
19076 (assoc-ref outputs "out")
19077 "/lib/python"
19078 (python-version
19079 (dirname (dirname
19080 (search-input-file inputs "bin/python"))))
19081 "/site-packages/sasstests.py")))))))
19082 (native-inputs
19083 (list python-pytest python-setuptools python-werkzeug python-wheel))
19084 (inputs
19085 (list libsass))
19086 (home-page "https://sass.github.io/libsass-python/")
19087 (synopsis "Straightforward binding of libsass for Python")
19088 (description
19089 "This package provides a simple Python extension module @code{sass} which
19090is binding LibSass.")
19091 (license license:expat)))
19092
19093;; It may be removed after 2026-01-24.
19094(define-deprecated/public-alias python-path-bootstrap python-path)
19095
19096(define-public python-pip-run
19097 (package
19098 (name "python-pip-run")
19099 (version "8.8.0")
19100 (source
19101 (origin
19102 (method git-fetch)
19103 (uri (git-reference
19104 (url "https://github.com/jaraco/pip-run")
19105 (commit (string-append "v" version))))
19106 (file-name (git-file-name name version))
19107 (sha256
19108 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
19109 (build-system pyproject-build-system)
19110 (arguments
19111 (list
19112 #:tests? (not (%current-target-system))
19113 #:test-flags
19114 #~(list "-k" (string-append
19115 ;; Do not test the myproject.toml build as it tries
19116 ;; to pull dependencies from the internet.
19117 "not project "
19118 ;; These tests attempt to install dependencies from
19119 ;; the network and fail.
19120 "and not test_pkg_imported "
19121 "and not test_pkg_loaded_from_alternate_index "
19122 "and not test_pkg_loaded_from_url "))))
19123 (native-inputs
19124 (list python-nbformat
19125 python-pygments
19126 python-pytest
19127 python-setuptools
19128 python-setuptools-scm))
19129 (propagated-inputs
19130 (list python-autocommand
19131 python-packaging
19132 python-path
19133 python-pip))
19134 (home-page "https://github.com/jaraco/pip-run")
19135 (synopsis "Dynamic dependency loader for Python")
19136 (description "The @command{pip-run} command provides on-demand temporary
19137package installation for a single interpreter run. It replaces this series of
19138commands:
19139@example
19140$ virtualenv --python pythonX.X --system-site-packages /tmp/env
19141$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
19142$ /tmp/env/bin/python ...
19143$ rm -rf /tmp/env
19144@end example")
19145 (license license:expat)))
19146
19147;; It may be removed after 2026-01-24.
19148(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
19149
19150(define-public python-libarchive-c
19151 (package
19152 (name "python-libarchive-c")
19153 (version "5.2")
19154 (source (origin
19155 (method url-fetch)
19156 (uri (pypi-uri "libarchive_c" version))
19157 (sha256
19158 (base32
19159 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
19160 (build-system pyproject-build-system)
19161 (arguments
19162 (list
19163 #:phases
19164 #~(modify-phases %standard-phases
19165 (add-before 'build 'reference-libarchive
19166 (lambda* (#:key inputs #:allow-other-keys)
19167 ;; Retain the absolute file name of libarchive.so.
19168 (substitute* "libarchive/ffi.py"
19169 (("find_library\\('archive'\\)")
19170 (string-append
19171 "'"
19172 (search-input-file inputs "/lib/libarchive.so")
19173 "'"))))))))
19174 (native-inputs
19175 (list python-setuptools python-wheel python-pytest))
19176 (inputs
19177 (list libarchive))
19178 (home-page "https://github.com/Changaco/python-libarchive-c")
19179 (synopsis "Python interface to libarchive")
19180 (description
19181 "This package provides Python bindings to libarchive, a C library to
19182access possibly compressed archives in many different formats. It uses
19183Python's @code{ctypes} foreign function interface (FFI).")
19184 (license license:lgpl2.0+)))
19185
19186(define-public python-file
19187 (package/inherit file
19188 (name "python-file")
19189 (build-system pyproject-build-system)
19190 (arguments
19191 (list
19192 #:tests? #f ;no tests
19193 #:phases
19194 #~(modify-phases %standard-phases
19195 (add-before 'build 'change-directory
19196 (lambda _
19197 (chdir "python")))
19198 (add-before 'build 'set-library-file-name
19199 (lambda* (#:key inputs #:allow-other-keys)
19200 (substitute* "magic.py"
19201 (("find_library\\('magic'\\)")
19202 (format #f "~s" (search-input-file inputs
19203 "lib/libmagic.so")))))))))
19204 (inputs (list file))
19205 (native-inputs (cons* python-setuptools
19206 (if (%current-target-system)
19207 (list this-package)
19208 '())))
19209 (synopsis "Python bindings to the libmagic file type guesser")
19210 (description "This package provides Python bindings to the libmagic file
19211type guesser.
19212
19213Note that this module and the @code{python-magic} module both provide a
19214@file{magic.py} file; these two modules, which are different and were
19215developed separately, both serve the same purpose: provide Python bindings for
19216libmagic.")))
19217
19218(define-public python-pydemumble
19219 (package
19220 (name "python-pydemumble")
19221 (version "0.0.1")
19222 (source
19223 (origin
19224 (method git-fetch)
19225 (uri (git-reference
19226 (url "https://github.com/angr/pydemumble")
19227 (commit (string-append "v" version))))
19228 (file-name (git-file-name name version))
19229 (sha256
19230 (base32 "1hg5ywdsfyynn9hlr0xkafsv8i53b0s332f29ll13kk01630y0jp"))
19231 (patches (search-patches "python-pydemumble-system-nanobind.patch"))))
19232 (build-system pyproject-build-system)
19233 (arguments
19234 (list
19235 #:test-flags
19236 #~(list "discover" "-s" "tests")
19237 #:phases
19238 #~(modify-phases %standard-phases
19239 (add-after 'unpack 'set-demumble-source
19240 (lambda* _
19241 ;; demumble is only a binary and not intended to be used as
19242 ;; a library. Therefore, python-pydemumble creates it's own
19243 ;; bindings for demumble, which are autogenerated from C code.
19244 (substitute* "CMakeLists.txt"
19245 (("src/demumble")
19246 #+(package-source demumble))))))))
19247 (native-inputs (list python-nanobind python-scikit-build-core))
19248 (home-page "https://github.com/angr/pydemumble")
19249 (synopsis "Python library for demangling symbol names")
19250 (description
19251 "This package provides a Python wrapper library for @code{demumble}, which
19252is a tool to demangle C++, Rust, and Swift symbol names.")
19253 (license license:bsd-2)))
19254
19255(define-public python-pydevd
19256 (package
19257 (name "python-pydevd")
19258 (version "3.2.3")
19259 (source
19260 (origin
19261 (method git-fetch)
19262 (uri (git-reference
19263 (url "https://github.com/fabioz/PyDev.Debugger")
19264 (commit (string-append
19265 "pydev_debugger_"
19266 (string-join (string-split version #\.) "_")))))
19267 (modules '((guix build utils)))
19268 (snippet '(begin
19269 ;; Delete pre-built binaries.
19270 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
19271 ;; This source is generated via Cython.
19272 (delete-file "_pydevd_bundle/pydevd_cython.c")))
19273 (file-name (git-file-name name version))
19274 (sha256
19275 (base32
19276 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
19277 (build-system pyproject-build-system)
19278 (arguments
19279 (list
19280 #:test-flags
19281 #~(list "-n" (number->string (parallel-job-count))
19282 "-m" "not flaky"
19283 "-k"
19284 (string-join
19285 (list
19286 ;; The two "break_01" tests have been failing on
19287 ;; Python 3.10:
19288 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
19289 "not test_set_pydevd_break_01 "
19290 ;; the GUI event loop requires an X server.
19291 "test_gui_event_loop_custom"
19292 ;; This test validates that 'pydevd' is not in the
19293 ;; exception message, but it is due to being part
19294 ;; of the build file name present in the message.
19295 "test_evaluate_exception_trace"
19296 ;; This test fail with TimeoutError, no message on stderr.
19297 "test_soft_terminate"
19298 "test_debugger_case_deadlock_interrupt_thread"
19299 ;; subprocess.CalledProcessError
19300 ;; Python 3.11/3.12 specific issue:
19301 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
19302 "test_find_main_thread_id")
19303 " and not "))
19304 #:phases
19305 #~(modify-phases %standard-phases
19306 (add-after 'unpack 'fix-tests
19307 (lambda _
19308 (substitute* "tests_python/test_convert_utilities.py"
19309 ;; Add missing trailing '/'.
19310 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
19311 (string-append all "/")))))
19312 (add-after 'unpack 'patch-command-paths
19313 (lambda* (#:key inputs #:allow-other-keys)
19314 (substitute* "_pydevd_bundle/pydevd_api.py"
19315 (("'kill'")
19316 (format #f "~s" (search-input-file inputs "bin/kill")))
19317 (("'pgrep'")
19318 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
19319 (add-after 'unpack 'generate-sources
19320 (lambda _
19321 (setenv "PYTHONPATH" (getcwd))
19322 (invoke "python" "build_tools/build.py")))
19323 (add-after 'unpack 'adjust-attach-binary-name
19324 (lambda _
19325 (substitute*
19326 '("pydevd_tracing.py"
19327 "pydevd_attach_to_process/add_code_to_python_process.py")
19328 (("def get_(target|python_helper_lib)_filename.*" all)
19329 (format #f "~a return ~s~%" all
19330 (string-append #$output "/lib/attach.so"))))))
19331 (add-after 'unpack 'patch-gdb
19332 (lambda* (#:key inputs #:allow-other-keys)
19333 (substitute*
19334 "pydevd_attach_to_process/add_code_to_python_process.py"
19335 (("'gdb',")
19336 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
19337 (add-after 'build 'build-attach-linux-binary
19338 (lambda _
19339 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
19340 "-fPIC" "-nostartfiles"
19341 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
19342 (add-before 'check 'pre-check
19343 (lambda* (#:key tests? #:allow-other-keys)
19344 (when tests?
19345 (setenv "PYDEVD_USE_CYTHON" "YES"))))
19346 (add-after 'install 'install-attach-binary
19347 (lambda _
19348 (install-file "attach.so"
19349 (string-append #$output "/lib"))))
19350 ;; Some modules aren't designed to be loadable by themselves, such
19351 ;; as 'pydev_app_engine_debug_startup' and fail.
19352 (delete 'sanity-check))))
19353 (native-inputs
19354 (list python-cython
19355 python-numpy
19356 python-psutil
19357 python-pytest
19358 python-pytest-xdist
19359 python-setuptools
19360 python-trio
19361 python-untangle
19362 python-wheel))
19363 (inputs (list coreutils gdb/pinned procps))
19364 (home-page "https://github.com/fabioz/PyDev.Debugger/")
19365 (synopsis "Python debugger")
19366 (description "PyDev.Debugger is a capable Python debugger used in PyDev
19367and other @acronym{IDEs, Integrated Development Environments}.")
19368 (license license:epl1.0)))
19369
19370(define-public python-debugpy
19371 (package
19372 (name "python-debugpy")
19373 (version "1.8.17")
19374 (source
19375 (origin
19376 (method git-fetch)
19377 (uri (git-reference ;no tests in PyPI archive
19378 (url "https://github.com/microsoft/debugpy")
19379 (commit (string-append "v" version))))
19380 (file-name (git-file-name name version))
19381 (modules '((guix build utils)))
19382 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
19383 ;; attach binary.
19384 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
19385 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
19386 (sha256
19387 (base32
19388 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
19389 (build-system pyproject-build-system)
19390 (arguments
19391 (list
19392 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
19393 #:phases
19394 #~(modify-phases %standard-phases
19395 (add-after 'unpack 'patch-sh-in-tests
19396 (lambda _
19397 (substitute* "tests/debugpy/test_run.py"
19398 (("#!/bin/sh")
19399 (string-append "#!" (which "sh"))))))
19400 (add-before 'build 'configure
19401 (lambda _
19402 ;; This adjusts the behavior of debugpy to load pydevd from
19403 ;; Python site packages.
19404 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
19405 (native-inputs
19406 (list python-setuptools
19407 python-versioneer))
19408 (propagated-inputs
19409 (list python-pydevd))
19410 (home-page "https://aka.ms/debugpy")
19411 (synopsis "Debug Adapter Protocol Python implementation")
19412 (description "An implementation of the Debug Adapter Protocol for
19413Python.")
19414 (license license:expat)))
19415
19416(define-public python-debian
19417 (package
19418 (name "python-debian")
19419 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
19420 (version "0.1.49")
19421 (source
19422 (origin
19423 ;; Use git-fetch, as pypi doesn't include test suite.
19424 (method git-fetch)
19425 (uri (git-reference
19426 (url home-page)
19427 (commit version)))
19428 (file-name (git-file-name name version))
19429 (sha256
19430 (base32
19431 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
19432 (modules '((guix build utils)))
19433 (snippet
19434 #~(begin
19435 ;; python-apt, apt and dpkg are not yet available in guix,
19436 ;; and these tests heavily depend on them.
19437 (for-each delete-file
19438 '("lib/debian/tests/test_deb822.py"
19439 "lib/debian/tests/test_debfile.py"))
19440
19441 ;; for reproducible builds, otherwise python-debian
19442 ;; generates a _version.py including the date
19443 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
19444 (substitute* "lib/debian/_version.py"
19445 (("__CHANGELOG_VERSION__") #$version))))))
19446 (build-system pyproject-build-system)
19447 (native-inputs
19448 (list python-pytest python-setuptools))
19449 (propagated-inputs
19450 (list python-six python-chardet))
19451 (synopsis "Debian package related modules")
19452 (description
19453 "This package provides Python modules that abstract many formats of
19454Debian-related files, such as:
19455@itemize
19456@item Debtags information;
19457@item @file{debian/changelog} files;
19458@item packages files, pdiffs;
19459@item control files of single or multiple RFC822-style paragraphs---e.g.
19460 @file{debian/control}, @file{.changes}, @file{.dsc};
19461@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
19462 contained files and meta-information.
19463@end itemize")
19464 ;; Modules are either GPLv2+ or GPLv3+.
19465 (license license:gpl3+)))
19466
19467(define-public python-json-spec
19468 (package
19469 (name "python-json-spec")
19470 (version "0.12.0")
19471 (source
19472 (origin
19473 (method git-fetch) ;no tests in PyPI archive
19474 (uri (git-reference
19475 (url "https://github.com/johnnoone/json-spec")
19476 (commit version)))
19477 (file-name (git-file-name name version))
19478 (sha256
19479 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
19480 (build-system pyproject-build-system)
19481 (native-inputs
19482 (list python-pytest
19483 python-poetry-core))
19484 (propagated-inputs
19485 (list python-termcolor)) ;for the CLI
19486 (home-page "https://json-spec.readthedocs.io/")
19487 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
19488 (description
19489 "This Python library implements several JSON specs, like JSON Schema,
19490JSON Reference and JSON Pointer.")
19491 (license license:bsd-3)))
19492
19493(define-public python-fastbencode
19494 (package
19495 (name "python-fastbencode")
19496 (version "0.3.9")
19497 (source
19498 (origin
19499 (method git-fetch)
19500 (uri (git-reference
19501 (url "https://github.com/breezy-team/fastbencode")
19502 (commit (string-append "v" version))))
19503 (file-name (git-file-name name version))
19504 (sha256
19505 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
19506 (build-system pyproject-build-system)
19507 (arguments
19508 (list
19509 #:test-backend #~'unittest
19510 #:test-flags #~(list "tests.test_suite")
19511 #:imported-modules (append %cargo-build-system-modules
19512 %pyproject-build-system-modules)
19513 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
19514 (guix build pyproject-build-system)
19515 (guix build utils))
19516 #:phases
19517 #~(modify-phases %standard-phases
19518 (add-after 'unpack 'prepare-cargo-build-system
19519 (lambda args
19520 (for-each
19521 (lambda (phase)
19522 (format #t "Running cargo phase: ~a~%" phase)
19523 (apply (assoc-ref cargo:%standard-phases phase)
19524 #:cargo-target #$(cargo-triplet)
19525 args))
19526 '(unpack-rust-crates
19527 configure
19528 check-for-pregenerated-files
19529 patch-cargo-checksums)))))))
19530 (inputs (cargo-inputs 'fastbencode))
19531 (native-inputs
19532 (append
19533 (list python-setuptools-rust
19534 rust
19535 `(,rust "cargo"))
19536 (or (and=> (%current-target-system)
19537 (compose list make-rust-sysroot))
19538 '())))
19539 (home-page "https://github.com/breezy-team/fastbencode")
19540 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
19541 (description
19542 "The fastbencode Python package implements the bencode serialization
19543format for storing and transmitting loosely structured data, originally used
19544by BitTorrent.
19545
19546The format can encode four different types of values: byte strings, integers,
19547lists, and dictionaries (associative arrays). It's simple and unaffected by
19548endianness,
19549
19550This package includes both a pure-Python version and an optional C extension
19551based on Cython. Both provide the same functionality, but the C version has
19552significantly better performance.")
19553 (license (list license:expat ; _bencode_py.py
19554 license:gpl2+)))) ; __init__.py
19555
19556(define-public python-fastjsonschema
19557 (package
19558 (name "python-fastjsonschema")
19559 (version "2.21.1")
19560 (source
19561 (origin
19562 (method git-fetch) ; no tests in PyPI release
19563 (uri (git-reference
19564 (url "https://github.com/horejsek/python-fastjsonschema")
19565 (commit (string-append "v" version))))
19566 (file-name (git-file-name name version))
19567 (sha256
19568 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
19569 (build-system pyproject-build-system)
19570 (arguments
19571 (list
19572 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
19573 (native-inputs
19574 (list python-json-spec
19575 python-jsonschema
19576 python-pytest
19577 python-pytest-benchmark
19578 python-setuptools))
19579 (home-page "https://github.com/horejsek/python-fastjsonschema")
19580 (synopsis "Fast Python implementation of JSON schema")
19581 (description
19582 "This library implements validation of JSON documents by JSON schema for
19583drafts 04, 06 and 07.")
19584 (license license:bsd-3)))
19585
19586(define-public python-nbformat
19587 (package
19588 (name "python-nbformat")
19589 (version "5.10.4")
19590 ;; The PyPi release tarball lacks some test cases and test data.
19591 (source (origin
19592 (method git-fetch)
19593 (uri (git-reference
19594 (url "https://github.com/jupyter/nbformat")
19595 (commit (string-append "v" version))))
19596 (sha256
19597 (base32
19598 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
19599 (file-name (git-file-name name version))))
19600 (build-system pyproject-build-system)
19601 (arguments
19602 (list
19603 #:phases
19604 #~(modify-phases %standard-phases
19605 ;; We don't want to use hatch-nodejs just to get a version string.
19606 (add-after 'unpack 'patch-pyproject
19607 (lambda _
19608 (substitute* "pyproject.toml"
19609 ((", \"hatch-nodejs-version\"") "")
19610 (("dynamic = \\[\"version\"\\]")
19611 (string-append "version = \"" #$version "\""))))))))
19612 (propagated-inputs
19613 (list python-fastjsonschema python-jsonschema python-jupyter-core
19614 python-traitlets))
19615 (native-inputs
19616 (list python-hatchling
19617 python-pep440
19618 python-pytest
19619 python-testpath))
19620 (home-page "https://jupyter.org")
19621 (synopsis "Jupyter Notebook format")
19622 (description "This package provides the reference implementation of the
19623Jupyter Notebook format and Python APIs for working with notebooks.")
19624 (license license:bsd-3)))
19625
19626(define-public python-nb-clean
19627 (package
19628 (name "python-nb-clean")
19629 (version "4.0.1")
19630 (source
19631 (origin
19632 (method git-fetch) ; no tests in PyPI
19633 (uri (git-reference
19634 (url "https://github.com/srstevenson/nb-clean")
19635 (commit version)))
19636 (file-name (git-file-name name version))
19637 (sha256
19638 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
19639 (build-system pyproject-build-system)
19640 (native-inputs (list python-poetry-core
19641 python-pytest
19642 python-pytest-mock))
19643 (propagated-inputs (list python-nbformat))
19644 (home-page "https://github.com/srstevenson/nb-clean")
19645 (synopsis "Clean Jupyter notebooks for versioning")
19646 (description "This package cleans Jupyter notebooks of cell execution
19647counts, metadata, outputs, and empty cells, preparing them for committing to
19648version control. It provides a Git filter to automatically clean notebooks
19649before they're staged, and can also be used with other version control
19650systems, as a command line tool, and as a Python library.")
19651 (license license:isc)))
19652
19653(define-public python-entrypoints
19654 (package
19655 (name "python-entrypoints")
19656 (version "0.4")
19657 (source
19658 (origin
19659 (method url-fetch)
19660 (uri (pypi-uri "entrypoints" version))
19661 (sha256
19662 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
19663 (build-system pyproject-build-system)
19664 (native-inputs
19665 (list python-flit-core
19666 python-pytest))
19667 (home-page "https://github.com/takluyver/entrypoints")
19668 (synopsis "Discover and load entry points from installed Python packages")
19669 (description "Entry points are a way for Python packages to advertise
19670objects with some common interface. The most common examples are
19671@code{console_scripts} entry points, which define shell commands by
19672identifying a Python function to run. The @code{entrypoints} module contains
19673functions to find and load entry points.")
19674 (license license:expat)))
19675
19676(define-public python-epc
19677 (package
19678 (name "python-epc")
19679 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
19680 (revision . "0")))
19681 (version (git-version "0.0.5"
19682 (assoc-ref properties 'revision)
19683 (assoc-ref properties 'commit)))
19684 (source
19685 (origin
19686 (method git-fetch)
19687 (uri (git-reference
19688 (url "https://github.com/tkf/python-epc")
19689 (commit (assoc-ref properties 'commit))))
19690 (file-name (git-file-name name version))
19691 (sha256
19692 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
19693 (build-system pyproject-build-system)
19694 (arguments (list #:test-backend #~'nose))
19695 (propagated-inputs (list python-sexpdata))
19696 (native-inputs (list python-pynose python-setuptools))
19697 (home-page "https://github.com/tkf/python-epc")
19698 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
19699 (description
19700 "Python-EPC can call elisp functions from Python and Python functions
19701from elisp.")
19702 (license license:gpl3)))
19703
19704(define-public python-forex-python
19705 (package
19706 (name "python-forex-python")
19707 (version "1.5")
19708 (source
19709 (origin
19710 (method git-fetch)
19711 (uri (git-reference
19712 (url "https://github.com/MicroPyramid/forex-python")
19713 (commit version)))
19714 (file-name (git-file-name name version))
19715 (sha256
19716 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19717 (build-system pyproject-build-system)
19718 (arguments (list #:tests? #f)) ; Tests require online data.
19719 (native-inputs (list python-setuptools))
19720 (propagated-inputs (list python-requests python-simplejson))
19721 (home-page "https://github.com/MicroPyramid/forex-python")
19722 (synopsis "Foreign exchange rates and currency conversion")
19723 (description
19724 "@code{python-forex-python} can be used to manipulate foreign
19725exchange rates and to operate currency conversions.
19726
19727Features:
19728@itemize
19729@item List all currency rates.
19730@item BitCoin price for all currencies.
19731@item Converting amount to BitCoins.
19732@item Get historical rates for any day since 1999.
19733@item Conversion rate for one currency(ex; USD to INR).
19734@item Convert amount from one currency to other.('USD 10$' to INR).
19735@item Currency symbols.
19736@item Currency names.
19737@end itemize")
19738 (license license:expat)))
19739
19740(define-public python-simpleeval
19741 (package
19742 (name "python-simpleeval")
19743 (version "0.9.12")
19744 (source
19745 (origin
19746 (method git-fetch)
19747 (uri (git-reference
19748 (url "https://github.com/danthedeckie/simpleeval")
19749 (commit version)))
19750 (file-name (git-file-name name version))
19751 (sha256
19752 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
19753 (build-system pyproject-build-system)
19754 (native-inputs (list python-pytest python-setuptools))
19755 (home-page "https://github.com/danthedeckie/simpleeval")
19756 (synopsis "Simple, safe single expression evaluator library")
19757 (description
19758 "This package provides a quick single file library for easily adding
19759evaluatable expressions into python projects. Say you want to allow a user
19760to set an alarm volume, which could depend on the time of day, alarm level,
19761how many previous alarms had gone off, and if there is music playing at the
19762time.")
19763 (license license:expat)))
19764
19765(define-public python-haas
19766 ;; A recent revision is required to avoid obsoleted dependencies.
19767 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
19768 (revision "0"))
19769 (package
19770 (name "python-haas")
19771 (version (git-version "0.9.0" revision commit))
19772 (source
19773 (origin
19774 (method git-fetch)
19775 (uri (git-reference
19776 (url "https://github.com/scalative/haas")
19777 (commit commit)))
19778 (file-name (git-file-name name version))
19779 (sha256
19780 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
19781 (build-system pyproject-build-system)
19782 (propagated-inputs
19783 (list python-stevedore))
19784 (native-inputs
19785 (list python-coverage
19786 python-pytest
19787 python-setuptools
19788 python-testfixtures))
19789 (home-page "https://github.com/scalative/haas")
19790 (synopsis "Extensible Python test runner")
19791 (description "Haas is a python test runner that is backward-compatible
19792with Python's built-in unittest test-cases, but supports more advanced
19793features, such as project-specific plugins.")
19794 (license license:bsd-3))))
19795
19796(define-public python-okonomiyaki
19797 (package
19798 (name "python-okonomiyaki")
19799 (version "3.0.0")
19800 (source
19801 (origin
19802 (method git-fetch)
19803 (uri (git-reference
19804 (url "https://github.com/enthought/okonomiyaki/")
19805 (commit version)))
19806 (file-name (git-file-name name version))
19807 (sha256
19808 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
19809 (build-system pyproject-build-system)
19810 (arguments
19811 (list
19812 #:phases
19813 #~(modify-phases %standard-phases
19814 ;; Unknown platform.
19815 (add-before 'check 'delete-fail-tests
19816 (lambda _
19817 (delete-file-recursively
19818 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
19819 (native-inputs
19820 (list python-distro
19821 python-haas
19822 python-jsonschema
19823 python-packaging
19824 python-parameterized
19825 python-pytest
19826 python-setuptools
19827 python-testfixtures
19828 python-zipfile2))
19829 (home-page "https://github.com/enthought/okonomiyaki/")
19830 (synopsis "Python library to deal with Enthought-specific metadata")
19831 (description
19832 "Okonomiyaki is a self-contained library aiming at consolidating
19833low-level code used in Enthought-specific egg and runtime archives.")
19834 (license license:bsd-3)))
19835
19836(define-public python-nbconvert
19837 (package
19838 (name "python-nbconvert")
19839 (version "7.17.0")
19840 (source
19841 (origin
19842 (method url-fetch)
19843 (uri (pypi-uri "nbconvert" version))
19844 (sha256
19845 (base32
19846 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
19847 (build-system pyproject-build-system)
19848 (arguments
19849 (list
19850 #:test-flags
19851 '(list "-k"
19852 (string-append
19853 ;; These tests require pyppeteer, not yet
19854 ;; available in Guix.
19855 "not test_webpdf_with_chromium"
19856 " and not test_webpdf.py"
19857 ;; These tests require ipywidgets, which would
19858 ;; introduce a dependency cycle.
19859 " and not test_execute_widgets_from_nbconvert"
19860 " and not test_execute_multiple_notebooks"
19861
19862 ;; This test calls nbconvert itself via "sys.executable -m
19863 ;; nbconvert". It's probably harmless.
19864 " and not test_default_config"))
19865 #:phases
19866 #~(modify-phases %standard-phases
19867 (add-after 'unpack 'fix-paths
19868 (lambda* (#:key inputs #:allow-other-keys)
19869 ;; Use pandoc binary from input.
19870 (substitute* "nbconvert/utils/pandoc.py"
19871 (("'pandoc'")
19872 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
19873 ;; Same for LaTeX.
19874 (substitute* "nbconvert/exporters/pdf.py"
19875 (("\"xelatex\"")
19876 (format #f "~s" (search-input-file inputs "bin/xelatex")))
19877 (("\"bibtex\"")
19878 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
19879 ;; Likewise for Inkscape.
19880 (substitute* "nbconvert/preprocessors/svg2pdf.py"
19881 (("inkscape_path = which\\(\"inkscape\")")
19882 (format #f "inkscape_path = ~s"
19883 (search-input-file inputs "bin/inkscape"))))))
19884 (add-after 'unpack 'ignore-deprecation-warnings
19885 (lambda _
19886 (substitute* "pyproject.toml"
19887 (("\"ignore:nbconvert.utils" m)
19888 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
19889 m)))))
19890 (add-before 'check 'pre-check
19891 (lambda _
19892 ;; Tests depend on templates installed to output.
19893 (setenv "JUPYTER_PATH"
19894 (string-append #$output "/share/jupyter:"
19895 (getenv "JUPYTER_PATH")))
19896 ;; jupyter-core demands this
19897 (setenv "JUPYTER_PLATFORM_DIRS" "1")
19898 ;; Tests need writable HOME and TEXMFVAR.
19899 (setenv "HOME" "/tmp")
19900 (setenv "TEXMFVAR" "/tmp"))))))
19901 (inputs
19902 (list inkscape/pinned pandoc))
19903 (native-inputs
19904 (list python-flaky
19905 python-hatchling
19906 python-ipykernel
19907 ;; Adding ipywidgets would create a cycle.
19908 ;;python-ipywidgets
19909 python-pytest
19910 (texlive-local-tree
19911 (list texlive-adjustbox
19912 texlive-booktabs
19913 texlive-caption
19914 texlive-enumitem
19915 texlive-eurosym
19916 texlive-fancyvrb
19917 texlive-float
19918 texlive-fontspec
19919 texlive-grffile
19920 texlive-jknapltx
19921 texlive-parskip
19922 texlive-pdfcol
19923 texlive-rsfs
19924 texlive-soul
19925 texlive-tcolorbox
19926 texlive-titling
19927 texlive-ulem
19928 texlive-unicode-math
19929 texlive-upquote
19930 texlive-xetex))))
19931 (propagated-inputs
19932 (list python-beautifulsoup4
19933 python-bleach
19934 python-defusedxml
19935 python-jinja2
19936 python-jupyter-core
19937 python-jupyterlab-pygments
19938 python-markupsafe
19939 python-mistune
19940 python-nbclient
19941 python-nbformat
19942 python-packaging
19943 python-pandocfilters
19944 python-pygments
19945 python-tinycss2
19946 python-traitlets
19947 ;; Required, even if [serve] is not used.
19948 python-tornado
19949 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
19950 texlive-adjustbox
19951 texlive-amsmath
19952 texlive-booktabs
19953 texlive-caption
19954 texlive-collection-basic
19955 texlive-enumitem
19956 texlive-environ
19957 texlive-etoolbox
19958 texlive-eurosym
19959 texlive-etoolbox
19960 texlive-fancyvrb
19961 texlive-float
19962 texlive-fontspec
19963 texlive-geometry
19964 texlive-grffile
19965 texlive-hyperref
19966 texlive-infwarerr
19967 texlive-jknapltx
19968 texlive-kvoptions
19969 texlive-lm
19970 texlive-lm-math
19971 texlive-mathpazo
19972 texlive-parskip
19973 texlive-pdfcol
19974 texlive-pgf
19975 texlive-rsfs
19976 texlive-soul
19977 texlive-stringenc
19978 texlive-tcolorbox
19979 texlive-titling
19980 texlive-tools
19981 texlive-trimspaces
19982 texlive-ucs
19983 texlive-ulem
19984 texlive-unicode-math
19985 texlive-upquote
19986 texlive-xcolor
19987 texlive-xetex
19988 texlive-zapfding))
19989 (home-page "https://jupyter.org")
19990 (synopsis "Converting Jupyter Notebooks")
19991 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
19992notebooks to various other formats via Jinja templates. It allows you to
19993convert an @code{.ipynb} notebook file into various static formats including:
19994
19995@enumerate
19996@item HTML
19997@item LaTeX
19998@item PDF
19999@item Reveal JS
20000@item Markdown (md)
20001@item ReStructured Text (rst)
20002@item executable script
20003@end enumerate\n")
20004 (license license:bsd-3)))
20005
20006(define-public python-ipywidgets
20007 (package
20008 (name "python-ipywidgets")
20009 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
20010 (version "8.1.4")
20011 (source
20012 (origin
20013 (method url-fetch)
20014 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
20015 (uri (pypi-uri "ipywidgets" version))
20016 (sha256
20017 (base32
20018 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
20019 (build-system pyproject-build-system)
20020 (native-inputs
20021 (list python-ipykernel
20022 python-jsonschema
20023 python-pytest
20024 python-pytz
20025 python-setuptools))
20026 (propagated-inputs
20027 (list python-comm
20028 python-ipython
20029 python-jupyterlab-widgets
20030 python-traitlets
20031 python-widgetsnbextension))
20032 (home-page "https://ipython.org")
20033 (synopsis "IPython HTML widgets for Jupyter")
20034 (description "Ipywidgets are interactive HTML widgets for Jupyter
20035notebooks and the IPython kernel. Notebooks come alive when interactive
20036widgets are used. Users gain control of their data and can visualize changes
20037in the data.")
20038 (license license:bsd-3)))
20039
20040(define-public python-jsbeautifier
20041 (package
20042 (name "python-jsbeautifier")
20043 (version "1.15.3")
20044 (home-page "https://github.com/beautify-web/js-beautify")
20045 (source
20046 (origin
20047 (method git-fetch)
20048 (uri (git-reference
20049 (url home-page)
20050 (commit (string-append "v" version))))
20051 (file-name (git-file-name name version))
20052 (sha256
20053 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
20054 (build-system pyproject-build-system)
20055 (arguments
20056 (list
20057 #:phases
20058 #~(modify-phases %standard-phases
20059 (add-after 'unpack 'chdir
20060 (lambda _
20061 (chdir "python")
20062 (rename-file "setup-js.py" "setup.py"))))))
20063 (propagated-inputs (list python-editorconfig python-six))
20064 (native-inputs (list python-pytest python-setuptools))
20065 (synopsis "JavaScript unobfuscator and beautifier")
20066 (description
20067 "This packages provides tooling to beautify, unpack or deobfuscate
20068JavaScript, leveraging popular online obfuscators.")
20069 (license license:expat)))
20070
20071(define-public python-chardet
20072 (package
20073 (name "python-chardet")
20074 ;; XXX: Before update, check status of guix/guix#9242.
20075 (version "5.2.0")
20076 (source
20077 (origin
20078 (method url-fetch)
20079 (uri (pypi-uri "chardet" version))
20080 (sha256
20081 (base32
20082 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
20083 (native-inputs
20084 (list python-pytest python-setuptools))
20085 (build-system pyproject-build-system)
20086 (arguments
20087 (list #:test-flags
20088 ;; Disable test that fails sporadically:
20089 ;; https://github.com/chardet/chardet/issues/256
20090 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
20091 #:phases
20092 #~(modify-phases %standard-phases
20093 ;; This package provides a 'chardetect' executable that only
20094 ;; depends on Python, so customize the wrap phase to avoid
20095 ;; adding pytest and friends in order to save size.
20096 ;; (See also <https://bugs.gnu.org/25235>.)
20097 (replace 'wrap
20098 (lambda* (#:key inputs outputs #:allow-other-keys)
20099 (let* ((sitedir (site-packages inputs outputs))
20100 (python (dirname (dirname
20101 (search-input-file
20102 inputs "bin/python"))))
20103 (python-sitedir
20104 (string-append python "/lib/python"
20105 (python-version python)
20106 "/site-packages")))
20107 (wrap-program (string-append #$output "/bin/chardetect")
20108 `("GUIX_PYTHONPATH" ":" suffix
20109 ,(list sitedir python-sitedir)))))))))
20110 (home-page "https://github.com/chardet/chardet")
20111 (synopsis "Universal encoding detector for Python 2 and 3")
20112 (description
20113 "This package provides @code{chardet}, a Python module that can
20114automatically detect a wide range of file encodings.")
20115 (license license:lgpl2.1+)))
20116
20117(define-public python-charset-normalizer
20118 (package
20119 (name "python-charset-normalizer")
20120 (version "3.4.7")
20121 (source
20122 (origin
20123 (method git-fetch)
20124 (uri (git-reference
20125 (url "https://github.com/ousret/charset_normalizer")
20126 (commit version)))
20127 (file-name (git-file-name name version))
20128 (sha256 (base32 "0faqj59d0z0yzgvsxndy48xrlvj05lfdqaf9fsc61ckwzzhlkrvl"))))
20129 (build-system pyproject-build-system)
20130 (native-inputs
20131 (list python-pytest
20132 python-setuptools))
20133 (home-page "https://github.com/ousret/charset_normalizer")
20134 (synopsis "Universal Charset Detector, alternative to Chardet")
20135 (description "This library helps you read text from an unknown charset
20136encoding. Motivated by @code{chardet}, it tries to resolve the issue by
20137taking a new approach. All IANA character set names for which the Python core
20138library provides codecs are supported.")
20139 (license license:expat)))
20140
20141(define-public python-docopt
20142 (package
20143 (name "python-docopt")
20144 (version "0.6.2")
20145 (source
20146 (origin
20147 (method git-fetch)
20148 (uri (git-reference
20149 (url "https://github.com/docopt/docopt")
20150 (commit version)))
20151 (file-name (git-file-name name version))
20152 (sha256
20153 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
20154 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
20155 (build-system pyproject-build-system)
20156 ;; tests: 203 passed, 6 warnings
20157 (native-inputs
20158 (list python-pytest-8 python-setuptools))
20159 (home-page "http://docopt.org")
20160 (synopsis "Command-line interface description language for Python")
20161 (description
20162 "This library allows the user to define a command-line interface from a
20163program's help message rather than specifying it programmatically with
20164command-line parsers like @code{getopt} and @code{argparse}.")
20165 (license license:expat)))
20166
20167(define-public python-pythonanywhere
20168 (package
20169 (name "python-pythonanywhere")
20170 (version "0.19.0")
20171 (source
20172 (origin
20173 (method git-fetch)
20174 (uri (git-reference
20175 (url "https://github.com/pythonanywhere/helper_scripts")
20176 (commit (string-append "v" version))))
20177 (file-name (git-file-name name version))
20178 (sha256
20179 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
20180 (build-system pyproject-build-system)
20181 (arguments
20182 (list
20183 #:test-flags
20184 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
20185 "-k" (string-join
20186 ;; Network access is required to clone external
20187 ;; repositories.
20188 (list "not test_actually_creates_django_project_in_vir"
20189 "test_actually_downloads_repo"
20190 "test_actually_installing_a_real_package"
20191 "test_actually_works_against_example_repo"
20192 "test_autoconfigure_actually_works_against_example_repo"
20193 "test_exits_because_boolean_not_satisfied"
20194 "test_gets_version"
20195 "test_nuke_option_lets_you_run_twice"
20196 "test_nuke_option_lets_you_run_twice"
20197 "test_start_actually_creates_django_project_in_vir")
20198 " and not "))
20199 #:phases
20200 #~(modify-phases %standard-phases
20201 (add-after 'unpack 'relax-requirements
20202 (lambda _
20203 (substitute* "pyproject.toml"
20204 (("\"schema==.*\",")
20205 "\"schema\","))))
20206 (add-before 'check 'change-home
20207 (lambda _
20208 (setenv "HOME" "/tmp"))))))
20209 (native-inputs
20210 (list python-psutil
20211 python-pytest
20212 python-pytest-mock
20213 python-responses
20214 python-setuptools))
20215 (propagated-inputs
20216 (list python-dateutil
20217 python-docopt
20218 python-packaging
20219 python-pythonanywhere-core
20220 python-requests
20221 python-schema
20222 python-snakesay
20223 python-tabulate
20224 python-typer))
20225 (home-page "https://github.com/pythonanywhere/helper_scripts/")
20226 (synopsis "PythonAnywhere helper tools for users")
20227 (description
20228 "PythonAnywhere provides a command-line interface and an application
20229programming interface that allows managing files Web apps, scheduled
20230tasks and students. It includes single-command deployment for the Django Girls
20231tutorial.")
20232 (license license:expat)))
20233
20234(define-public python-pythonanywhere-core
20235 (package
20236 (name "python-pythonanywhere-core")
20237 (version "0.3.0")
20238 (source
20239 (origin
20240 (method git-fetch)
20241 (uri (git-reference
20242 (url "https://github.com/pythonanywhere/pythonanywhere-core")
20243 (commit (string-append "v" version))))
20244 (file-name (git-file-name name version))
20245 (sha256
20246 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
20247 (build-system pyproject-build-system)
20248 (arguments
20249 (list
20250 #:phases
20251 #~(modify-phases %standard-phases
20252 (add-before 'check 'pre-check
20253 (lambda _
20254 (setenv "HOME" "/tmp"))))))
20255 (native-inputs
20256 (list python-poetry-core
20257 python-pytest
20258 python-pytest-mock
20259 python-responses))
20260 (propagated-inputs
20261 (list python-dateutil
20262 python-requests
20263 python-snakesay
20264 python-typing-extensions))
20265 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
20266 (synopsis "API wrapper for PythonAnywhere services")
20267 (description
20268 "This package provides an API wrapper for programmatic management of
20269@code{PythonAnywhere} services.")
20270 (license license:expat)))
20271
20272(define-public python-dialog
20273 (package
20274 (name "python-dialog")
20275 (version "3.5.3")
20276 (source
20277 (origin
20278 (method url-fetch)
20279 (uri (pypi-uri "pythondialog" version))
20280 (sha256
20281 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
20282 (modules '((guix build utils)))
20283 (snippet #~(delete-file-recursively "doc"))))
20284 (build-system pyproject-build-system)
20285 (arguments
20286 (list
20287 ;; XXX: There are no tests, but some examples. However, they need to
20288 ;; be run on a terminal.
20289 #:tests? #f
20290 #:phases
20291 #~(modify-phases %standard-phases
20292 (add-after 'unpack 'patch-path
20293 (lambda* (#:key inputs #:allow-other-keys)
20294 (substitute* "dialog.py"
20295 (("_path_to_executable\\(dialog\\)")
20296 (format #f "os.path.realpath(~s)"
20297 (search-input-file inputs "bin/dialog")))))))))
20298 (native-inputs (list python-setuptools))
20299 (inputs (list dialog))
20300 (home-page "https://pythondialog.sourceforge.net/")
20301 (synopsis "Python interface to the UNIX dialog utility")
20302 (description
20303 "A Python wrapper for the dialog utility. Its purpose is to provide an
20304easy to use, pythonic and comprehensive Python interface to dialog. This
20305allows one to make simple text-mode user interfaces on Unix-like systems")
20306 (license license:lgpl2.1)))
20307
20308(define-deprecated-package python-pythondialog python-dialog)
20309
20310(define-public python-confection
20311 (package
20312 (name "python-confection")
20313 (version "1.3.3")
20314 (source
20315 (origin
20316 (method git-fetch)
20317 (uri (git-reference
20318 (url "https://github.com/explosion/confection")
20319 (commit (string-append "release-v" version))))
20320 (file-name (git-file-name name version))
20321 (sha256
20322 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
20323 (build-system pyproject-build-system)
20324 (arguments
20325 (list
20326 #:phases
20327 #~(modify-phases %standard-phases
20328 (add-before 'check 'patch-pythonpath
20329 (lambda _
20330 (setenv "PYTHONPATH"
20331 (string-append (getcwd) ":"
20332 (getenv "GUIX_PYTHONPATH"))))))))
20333 (propagated-inputs (list python-pydantic python-srsly))
20334 (native-inputs (list python-pytest python-setuptools))
20335 (home-page "https://github.com/explosion/confection")
20336 (synopsis "Config system for Python")
20337 (description
20338 "Confection is a lightweight library that offers a configuration system
20339letting you conveniently describe arbitrary trees of objects.")
20340 (license license:expat)))
20341
20342(define-public python-configobj
20343 (package
20344 (name "python-configobj")
20345 (version "5.0.9")
20346 (source
20347 (origin
20348 (method url-fetch)
20349 (uri (pypi-uri "configobj" version))
20350 (sha256
20351 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
20352 (build-system pyproject-build-system)
20353 (native-inputs
20354 (list python-pytest
20355 python-setuptools))
20356 (home-page "https://github.com/DiffSK/configobj")
20357 (synopsis "Config file reading, writing and validation")
20358 (description
20359 "ConfigObj is a simple but powerful config file reader and writer: an
20360 ini file round tripper. Its main feature is that it is very easy to use,
20361with a straightforward programmer’s interface and a simple syntax for config
20362files.")
20363 (license license:bsd-3)))
20364
20365(define-public python-omegaconf
20366 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
20367 (revision "1"))
20368 (package
20369 (name "python-omegaconf")
20370 (version (git-version "2.3.0" revision commit))
20371 (source
20372 (origin
20373 (method git-fetch)
20374 (uri (git-reference
20375 (url "https://github.com/omry/omegaconf")
20376 (commit commit)))
20377 (file-name (git-file-name name version))
20378 (modules '((guix build utils)))
20379 (snippet
20380 #~(begin
20381 (delete-file-recursively "build_helpers/bin")
20382 (substitute* "build_helpers/build_helpers.py"
20383 (("java") "antlr4")
20384 (("\"-jar\",") "")
20385 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
20386 (sha256
20387 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
20388 (build-system pyproject-build-system)
20389 (arguments
20390 (list
20391 #:test-flags
20392 ;; XXX: Those tests currently fail collection.
20393 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
20394 "--ignore=tests/test_basic_ops_list.py"
20395 "--ignore=tests/test_merge.py"
20396 "--ignore=tests/test_select.py")
20397 #:phases
20398 #~(modify-phases %standard-phases
20399 (add-after 'unpack 'loosen-requirements
20400 (lambda _
20401 (substitute* "requirements/base.txt"
20402 (("antlr4-python3-runtime==.*")
20403 "antlr4-python3-runtime >=4.9\n"))
20404 ;; Ignore deprecation warnings.
20405 (substitute* "pyproject.toml"
20406 (("-Werror") "")))))))
20407 (native-inputs
20408 (list icedtea
20409 antlr4
20410 python-pytest
20411 python-pytest-mock
20412 python-setuptools
20413 python-wheel))
20414 (propagated-inputs
20415 (list python-antlr4-runtime
20416 python-pydevd
20417 python-pyyaml))
20418 (home-page "https://github.com/omry/omegaconf")
20419 (synopsis "Flexible configuration system")
20420 (description
20421 "OmegaConf is a hierarchical configuration system and supports merging
20422configurations from multiple sources. It provides a consistent API regardless
20423of how the configuration was created.")
20424 (license license:bsd-3))))
20425
20426(define-public python-configargparse
20427 (package
20428 (name "python-configargparse")
20429 (version "1.7.5")
20430 (source
20431 (origin
20432 (method git-fetch)
20433 (uri (git-reference
20434 (url "https://github.com/bw2/ConfigArgParse")
20435 (commit (string-append "v" version))))
20436 (file-name (git-file-name name version))
20437 (sha256
20438 (base32 "04d54knfjgxci3far2cp72xr8bjabq0xcawc0ks2nk7mfl1p05v5"))))
20439 (build-system pyproject-build-system)
20440 (native-inputs
20441 (list python-mock
20442 python-pytest
20443 python-pyyaml
20444 python-setuptools
20445 python-setuptools-scm))
20446 (home-page "https://github.com/bw2/ConfigArgParse")
20447 (synopsis "Replacement for argparse")
20448 (description
20449 "This package provides a drop-in replacement for argparse that allows
20450options to also be set via config files and/or environment variables.")
20451 (license license:expat)))
20452
20453(define-public python-connection-pool
20454 (package
20455 (name "python-connection-pool")
20456 (version "0.0.3")
20457 (source
20458 (origin
20459 (method git-fetch)
20460 (uri (git-reference
20461 (url "https://github.com/zhouyl/ConnectionPool")
20462 (commit version)))
20463 (file-name (git-file-name name version))
20464 (sha256
20465 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
20466 (build-system pyproject-build-system)
20467 (arguments (list #:tests? #f)) ; No tests.
20468 (native-inputs (list python-setuptools))
20469 (home-page "https://github.com/zhouyl/ConnectionPool")
20470 (synopsis "Thread-safe connection pool")
20471 (description
20472 "This package provides a library implementing a thread-safe connection
20473pool.")
20474 (license license:expat)))
20475
20476(define-public python-argparse-dataclass
20477 (package
20478 (name "python-argparse-dataclass")
20479 (version "2.0.0")
20480 (source
20481 (origin
20482 (method git-fetch) ;no tests in PyPI archive
20483 (uri (git-reference
20484 (url "https://github.com/mivade/argparse_dataclass")
20485 (commit version)))
20486 (file-name (git-file-name name version))
20487 (sha256
20488 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
20489 (build-system pyproject-build-system)
20490 (native-inputs (list python-pytest python-setuptools python-wheel))
20491 (home-page "https://github.com/mivade/argparse_dataclass")
20492 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
20493 (description
20494 "This package provides declarative command-line interfaces using argparse
20495and dataclasses.")
20496 (license license:expat)))
20497
20498(define-public python-argparse-manpage
20499 (package
20500 (name "python-argparse-manpage")
20501 (version "4.7")
20502 (source
20503 (origin
20504 (method url-fetch)
20505 (uri (pypi-uri "argparse_manpage" version))
20506 (sha256
20507 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
20508 (build-system pyproject-build-system)
20509 (arguments
20510 (list
20511 #:test-flags
20512 ;; Tests require PIP.
20513 #~(list "--ignore=tests/test_examples.py")))
20514 (native-inputs
20515 (list python-pytest
20516 python-setuptools))
20517 (home-page "https://github.com/praiskup/argparse-manpage")
20518 (synopsis "Build manual page from Python's ArgumentParser object")
20519 (description
20520 "This package provides tools to build manual pages from Python's
20521@code{ArgumentParser} object.")
20522 (license license:asl2.0)))
20523
20524(define-public python-atomicwrites
20525 (package
20526 (name "python-atomicwrites")
20527 (version "1.4.0")
20528 (source
20529 (origin
20530 (method git-fetch)
20531 (uri (git-reference
20532 (url "https://github.com/untitaker/python-atomicwrites")
20533 (commit version)))
20534 (file-name (git-file-name name version))
20535 (sha256
20536 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
20537 (build-system pyproject-build-system)
20538 (native-inputs (list python-pytest python-setuptools))
20539 (synopsis "Atomic file writes in Python")
20540 (description
20541 "Library for atomic file writes using platform dependent tools
20542for atomic file system operations.")
20543 (home-page "https://github.com/untitaker/python-atomicwrites")
20544 (license license:expat)))
20545
20546(define-public python-qstylizer
20547 (package
20548 (name "python-qstylizer")
20549 (version "0.2.4")
20550 (source
20551 (origin
20552 (method git-fetch)
20553 (uri (git-reference
20554 (url "https://github.com/blambright/qstylizer")
20555 (commit version)))
20556 (file-name (git-file-name name version))
20557 (sha256
20558 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
20559 (build-system pyproject-build-system)
20560 (native-inputs
20561 (list python-pbr
20562 python-pytest
20563 python-pytest-mock
20564 python-setuptools
20565 python-wheel))
20566 (propagated-inputs
20567 (list python-inflection
20568 python-tinycss2))
20569 (home-page "https://github.com/blambright/qstylizer")
20570 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
20571 (description "@code{qstylizer} is a Python package designed to help with
20572the construction of PyQt/PySide stylesheets.")
20573 (license license:expat)))
20574
20575(define-public python-click-threading
20576 (package
20577 (name "python-click-threading")
20578 (version "0.5.0")
20579 (source
20580 (origin
20581 (method git-fetch)
20582 (uri (git-reference
20583 (url "https://github.com/click-contrib/click-threading")
20584 (commit version)))
20585 (file-name (git-file-name name version))
20586 (sha256
20587 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
20588 (build-system pyproject-build-system)
20589 (native-inputs (list python-pytest python-setuptools))
20590 (propagated-inputs (list python-click))
20591 (synopsis "Utilities for multithreading in Click")
20592 (description
20593 "This package provides utilities for multithreading in Click
20594applications.")
20595 (home-page "https://github.com/click-contrib/click-threading")
20596 (license license:expat)))
20597
20598(define-public python-click-log
20599 (package
20600 (name "python-click-log")
20601 (version "0.3.2")
20602 (source
20603 (origin
20604 (method git-fetch)
20605 (uri (git-reference
20606 (url "https://github.com/click-contrib/click-log")
20607 (commit version)))
20608 (file-name (git-file-name name version))
20609 (sha256
20610 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
20611 (build-system pyproject-build-system)
20612 (native-inputs (list python-pytest python-setuptools))
20613 (propagated-inputs (list python-click))
20614 (synopsis "Logging for click applications")
20615 (description
20616 "This package provides a Python library for logging Click applications.")
20617 (home-page "https://github.com/click-contrib/click-log")
20618 (license license:expat)))
20619
20620(define-public python-click-default-group
20621 (package
20622 (name "python-click-default-group")
20623 (version "1.2.4")
20624 (source
20625 (origin
20626 (method git-fetch) ; no tests in PyPI release
20627 (uri (git-reference
20628 (url "https://github.com/click-contrib/click-default-group")
20629 (commit (string-append "v" version))))
20630 (file-name (git-file-name name version))
20631 (sha256
20632 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
20633 (build-system pyproject-build-system)
20634 (propagated-inputs
20635 (list python-click))
20636 (native-inputs
20637 (list python-flit-core python-pytest))
20638 (synopsis "Extends click.Group")
20639 (description "This package extends click.Group to invoke a command without
20640explicit subcommand name.")
20641 (home-page "https://github.com/click-contrib/click-default-group")
20642 (license license:bsd-3)))
20643
20644(define-public python-apipkg
20645 (package
20646 (name "python-apipkg")
20647 (version "3.0.2")
20648 (source
20649 (origin
20650 (method url-fetch)
20651 (uri (pypi-uri "apipkg" version))
20652 (sha256
20653 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
20654 (build-system pyproject-build-system)
20655 (arguments (list #:tests? #f)) ;no tests in PyPI archive
20656 (native-inputs
20657 (list python-hatch-vcs
20658 python-hatchling))
20659 (home-page "https://github.com/pytest-dev/apipkg")
20660 (synopsis "Namespace control and lazy-import mechanism")
20661 (description "With apipkg you can control the exported namespace of a Python
20662package and greatly reduce the number of imports for your users. It is a small
20663pure Python module that works on virtually all Python versions.")
20664 (license license:expat)))
20665
20666(define-public python-essentials
20667 (package
20668 (name "python-essentials")
20669 (version "1.1.8")
20670 (source
20671 (origin
20672 (method git-fetch)
20673 (uri (git-reference
20674 (url "https://github.com/Neoteroi/essentials")
20675 (commit (string-append "v" version))))
20676 (file-name (git-file-name name version))
20677 (sha256
20678 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
20679 (build-system pyproject-build-system)
20680 (native-inputs
20681 (list python-hatchling
20682 python-pydantic
20683 python-pytest-asyncio))
20684 (home-page "https://github.com/Neoteroi/essentials/wiki")
20685 (synopsis
20686 "Utility functions, exceptions, and classes for Python applications")
20687 (description
20688 "Essentials is a collection of functions, exceptions, and classes for Python
20689applications. Examples of utilities are exceptions for common scenarios,
20690friendly JSON encoder, decorators for retries and logging.")
20691 (license license:expat)))
20692
20693(define-public python-execnet
20694 (package
20695 (name "python-execnet")
20696 (version "2.1.2")
20697 (source
20698 (origin
20699 (method git-fetch)
20700 (uri (git-reference
20701 (url "https://github.com/pytest-dev/execnet")
20702 (commit (string-append "v" version))))
20703 (file-name (git-file-name name version))
20704 (sha256
20705 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20706 (build-system pyproject-build-system)
20707 (arguments
20708 (list
20709 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20710 #:phases
20711 #~(modify-phases %standard-phases
20712 (add-before 'check 'pre-check
20713 (lambda _
20714 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20715 ;; test in 'testing/test_gateway.py'.
20716 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20717 (native-inputs
20718 (list python-hatchling
20719 python-hatch-vcs
20720 python-pytest-bootstrap))
20721 (home-page "https://codespeak.net/execnet/")
20722 (synopsis "Rapid multi-Python deployment")
20723 (description
20724 "Execnet provides a share-nothing model with channel-send/receive communication
20725for distributing execution across many Python interpreters across version,
20726platform and network barriers. It has a minimal and fast API targeting the
20727following uses:
20728
20729@enumerate
20730@item distribute tasks to (many) local or remote CPUs
20731@item write and deploy hybrid multi-process applications
20732@item write scripts to administer multiple environments
20733@end enumerate")
20734 (license license:expat)))
20735
20736(define-public python-icalendar
20737 (package
20738 (name "python-icalendar")
20739 (version "6.3.2")
20740 (source
20741 (origin
20742 (method url-fetch) ;XXX: hatch-vcs fails with git-fetch
20743 (uri (pypi-uri "icalendar" version))
20744 (sha256
20745 (base32 "188hj57l5l1jjnrfxwkmsh8hsn5pwvv93m7p7b9misgbzk5hxhg0"))))
20746 (build-system pyproject-build-system)
20747 (arguments
20748 (list
20749 ;; tests: 8995 passed, 21 skipped, 2 deselected
20750 #:test-flags
20751 #~(list
20752 "-k"
20753 (string-append
20754 ;; See: <https://github.com/collective/icalendar/issues/812>.
20755 "not test_dateutil_timezone_is_matched_with_tzname[Arctic/Longyearbyen]"
20756 " and not test_docstring_of_python_file[icalendar.timezone.tzid]"))))
20757 (native-inputs
20758 (list python-hatch-vcs
20759 python-hatchling
20760 python-pytest
20761 python-pytz))
20762 (propagated-inputs
20763 (list python-dateutil
20764 python-tzdata))
20765 (home-page "https://github.com/collective/icalendar")
20766 (synopsis "Python library for parsing and generating iCalendar files")
20767 (description
20768 "@code{icalendar} is a Python library for parsing and generating
20769iCalendar files.")
20770 (license license:bsd-2)))
20771
20772(define-public python-args
20773 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
20774 (revision "0"))
20775 (package
20776 (name "python-args")
20777 (version (git-version "0.1.0" revision commit))
20778 (source
20779 (origin
20780 (method git-fetch)
20781 (uri (git-reference
20782 (url "https://github.com/kennethreitz-archive/args")
20783 (commit commit)))
20784 (file-name (git-file-name name version))
20785 (sha256
20786 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
20787 (build-system pyproject-build-system)
20788 (arguments
20789 (list
20790 #:tests? #f ; XXX: python-nose is deprecated.
20791 #:phases
20792 #~(modify-phases %standard-phases
20793 (add-after 'unpack 'patch-args.py
20794 (lambda _
20795 (substitute* "args.py"
20796 (("basestring")
20797 "str")))))))
20798 (native-inputs (list python-setuptools python-wheel))
20799 (home-page "https://github.com/kennethreitz-archive/args")
20800 (synopsis "Command-line argument parser")
20801 (description
20802 "This library provides a Python module to parse command-line arguments.")
20803 (license license:bsd-3))))
20804
20805(define-public python-clint
20806 (package
20807 (name "python-clint")
20808 (version "0.5.1")
20809 (source (origin
20810 (method url-fetch)
20811 (uri (pypi-uri "clint" version))
20812 (sha256
20813 (base32
20814 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
20815 (build-system pyproject-build-system)
20816 (native-inputs
20817 (list python-pytest python-setuptools python-wheel))
20818 (propagated-inputs
20819 (list python-args))
20820 (home-page "https://github.com/kennethreitz/clint")
20821 (synopsis "Command-line interface tools")
20822 (description
20823 "Clint is a Python module filled with a set of tools for developing
20824command-line applications, including tools for colored and indented
20825output, progress bar display, and pipes.")
20826 (license license:isc)))
20827
20828(define-public python-rply
20829 (package
20830 (name "python-rply")
20831 (version "0.7.8")
20832 (source
20833 (origin
20834 (method git-fetch)
20835 (uri (git-reference
20836 (url "https://github.com/alex/rply")
20837 (commit (string-append "v" version))))
20838 (file-name (git-file-name name version))
20839 (sha256
20840 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
20841 (build-system pyproject-build-system)
20842 (arguments
20843 (list
20844 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
20845 #:phases
20846 #~(modify-phases %standard-phases
20847 (add-before 'check 'fix-pytest-use
20848 (lambda _
20849 (substitute* (find-files "tests" "\\.py$")
20850 (("import py")
20851 "import pytest")
20852 (("py\\.test")
20853 "pytest"))
20854 (setenv "HOME" (getcwd)))))))
20855 (native-inputs (list python-pytest python-setuptools))
20856 (propagated-inputs (list python-appdirs))
20857 (home-page "https://github.com/alex/rply")
20858 (synopsis "Parser generator for Python")
20859 (description
20860 "This package provides a pure Python based parser generator, that also
20861works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
20862with a new public API, and RPython support.")
20863 (license license:bsd-3)))
20864
20865(define-public python-hy
20866 (package
20867 (name "python-hy")
20868 (version "1.3.0")
20869 (source
20870 (origin
20871 (method git-fetch)
20872 (uri (git-reference
20873 (url "https://github.com/hylang/hy")
20874 (commit version)))
20875 (file-name (git-file-name name version))
20876 (sha256
20877 (base32 "0sdv5amhl0p4f84bmw2iy85a7rrkjg969l2gcr6cfl03lb0nxj87"))))
20878 (build-system pyproject-build-system)
20879 (arguments
20880 (list
20881 ;; This test expects the hy executable to be called 'hy', but in Guix
20882 ;; it's .hy-real.
20883 #:test-flags #~(list "-k" "not test_sys_executable")))
20884 (native-inputs (list python-pytest python-setuptools))
20885 (propagated-inputs (list python-funcparserlib))
20886 (home-page "https://hylang.org/hy/doc")
20887 (synopsis "Lisp frontend to Python")
20888 (description
20889 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
20890its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
20891Python at your fingertips, in Lisp form.")
20892 (license license:expat)))
20893
20894(define-public python-hissp
20895 (package
20896 (name "python-hissp")
20897 (version "0.5.0")
20898 (source
20899 (origin
20900 (method git-fetch)
20901 (uri (git-reference
20902 (url "https://github.com/gilch/hissp")
20903 (commit (string-append "v" version))))
20904 (file-name (git-file-name name version))
20905 (sha256
20906 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
20907 (build-system pyproject-build-system)
20908 (arguments (list #:test-backend #~'unittest))
20909 (native-inputs (list python-hypothesis python-setuptools))
20910 (home-page "https://github.com/gilch/hissp")
20911 (synopsis "It's Python with a Lissp")
20912 (description
20913 "Hissp is a modular Lisp implementation that compiles to a functional
20914subset of Python—Syntactic macro metaprogramming with full access to the
20915Python ecosystem.")
20916 (license license:asl2.0)))
20917
20918(define-public python-promise
20919 (package
20920 (name "python-promise")
20921 (version "2.3.0")
20922 (source
20923 (origin
20924 (method git-fetch)
20925 (uri (git-reference
20926 (url "https://github.com/syrusakbary/promise")
20927 (commit (string-append "v" version))))
20928 (file-name (git-file-name name version))
20929 (sha256
20930 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
20931 (build-system pyproject-build-system)
20932 (arguments
20933 (list
20934 #:test-flags
20935 #~(list "--ignore=tests/test_benchmark.py"
20936 ;; Issues with pytest-asyncio
20937 "--ignore=tests/test_awaitable.py"
20938 "-k" (string-join
20939 (list "not test_issue_9_safe"
20940 ;; Stacktrace issues.
20941 "test_thrown_exceptions_have_stacktrace"
20942 "test_thrown_exceptions_preserve_stacktrace")
20943 " and not "))))
20944 (native-inputs
20945 (list python-mock
20946 python-pytest
20947 python-pytest-asyncio
20948 python-setuptools))
20949 (propagated-inputs (list python-six))
20950 (home-page "https://github.com/syrusakbary/promise")
20951 (synopsis "Promises/A+ implementation for Python")
20952 (description
20953 "This package provides an implementation of Promises in Python. It is a
20954super set of Promises/A+ designed to have readable, performant code and to
20955provide just the extensions that are absolutely necessary for using promises
20956in Python.")
20957 (license license:expat)))
20958
20959(define-public python-progress
20960 (package
20961 (name "python-progress")
20962 (version "1.6")
20963 (source
20964 (origin
20965 (method git-fetch)
20966 (uri (git-reference
20967 (url "https://github.com/verigak/progress/")
20968 (commit version)))
20969 (file-name (git-file-name name version))
20970 (sha256
20971 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
20972 (snippet #~(delete-file "demo.gif"))))
20973 (build-system pyproject-build-system)
20974 (arguments
20975 (list
20976 #:test-backend #~'custom
20977 #:test-flags #~(list "test_progress.py")))
20978 (native-inputs (list python-setuptools))
20979 (home-page "https://github.com/verigak/progress/")
20980 (synopsis "Progress reporting bars for Python")
20981 (description
20982 "This Python package provides progress reporting for visual of progress
20983of long running operations. There are multiple choices of progress bars and
20984spinners, with customizable options, such as width, fill character, and
20985suffix.")
20986 (license license:isc)))
20987
20988(define-public python-progressbar2
20989 (package
20990 (name "python-progressbar2")
20991 (version "4.5.0")
20992 (source
20993 (origin
20994 (method url-fetch)
20995 (uri (pypi-uri "progressbar2" version))
20996 (sha256
20997 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
20998 (build-system pyproject-build-system)
20999 (arguments
21000 (list
21001 #:test-flags #~(list "--pyargs" "progressbar" "tests")
21002 #:phases
21003 #~(modify-phases %standard-phases
21004 (add-after 'unpack 'fix-pytest-config
21005 (lambda _
21006 ;; Drop test coverage requirements.
21007 (substitute* "pytest.ini"
21008 ((".*-cov.*") "")))))))
21009 (native-inputs
21010 (list python-dill
21011 python-pytest
21012 python-freezegun
21013 python-setuptools
21014 python-setuptools-scm
21015 python-wheel))
21016 (propagated-inputs
21017 (list python-utils))
21018 (home-page "https://github.com/WoLpH/python-progressbar")
21019 (synopsis "Text progress bar library for Python")
21020 (description
21021 "This package provides a Python progressbar library to provide
21022visual (yet text based) progress to long running operations.")
21023 (license license:bsd-3)))
21024
21025(define-public python-progressbar33
21026 (package
21027 (name "python-progressbar33")
21028 (version "2.4")
21029 (source
21030 (origin
21031 (method git-fetch)
21032 (uri (git-reference
21033 (url "https://github.com/germangh/python-progressbar")
21034 (commit (string-append "v" version))))
21035 (file-name (git-file-name name version))
21036 (sha256
21037 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
21038 (build-system pyproject-build-system)
21039 (arguments
21040 (list
21041 #:test-backend #~'custom
21042 #:test-flags #~(list "examples.py")))
21043 (native-inputs (list python-setuptools))
21044 (home-page "https://github.com/germangh/python-progressbar")
21045 (synopsis "Text progress bar library for Python")
21046 (description
21047 "This package provides a text progress bar library for Python. This
21048version only differs from the original @code{progressbar} package in that it
21049uses relative package imports instead of absolute imports, which is necessary
21050for the module to work under Python 3.3.")
21051 ;; Either or both of these licenses may be selected.
21052 (license (list license:lgpl2.1+ license:bsd-3))))
21053
21054;; XXX: Not maintained since 2012.
21055(define-public python-monthdelta
21056 (package
21057 (name "python-monthdelta")
21058 (version "0.9.1")
21059 (source
21060 (origin
21061 (method url-fetch)
21062 (uri (pypi-uri "MonthDelta" version))
21063 (sha256
21064 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
21065 (build-system pyproject-build-system)
21066 (arguments
21067 (list #:tests? #f)) ; No tests.
21068 (native-inputs (list python-setuptools))
21069 (home-page "http://packages.python.org/MonthDelta")
21070 (synopsis "Date computations with months")
21071 (description
21072 "MonthDelta provides functionality to do date computations with months.")
21073 (license license:expat)))
21074
21075(define-public python-moto
21076 (package
21077 (name "python-moto")
21078 (version "5.1.20")
21079 (source (origin
21080 (method url-fetch)
21081 (uri (pypi-uri "moto" version))
21082 (sha256
21083 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
21084 (build-system pyproject-build-system)
21085 (arguments
21086 (list
21087 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
21088 #:test-flags
21089 #~(list "-m" "not network and not requires_docker"
21090 ;; Not all of the tests are thread save, see:
21091 ;; <https://github.com/getmoto/moto/issues/7786>.
21092 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
21093 "-k" (string-join
21094 ;; Network access is required.
21095 (list "not test_passthrough_calls_for_entire_service"
21096 "test_passthrough_calls_for_specific_url"
21097 "test_passthrough_calls_for_wildcard_urls"
21098 "test_put_record_batch_http_destination"
21099 "test_put_record_http_destination"
21100 "test_s3_server_post_cors_multiple_origins"
21101 "test_with_custom_request_header"
21102 ;; AttributeError: 'ImportError' object has no
21103 ;; attribute 'message'
21104 "test_batch_update"
21105 "test_batch_update__not_enough_parameters"
21106 "test_execute_transaction"
21107 "test_without_primary_key_in_where_clause")
21108 " and not ")
21109 "tests")
21110 #:phases
21111 #~(modify-phases %standard-phases
21112 (add-after 'unpack 'patch-hardcoded-executable-names
21113 (lambda* (#:key inputs #:allow-other-keys)
21114 (let ((bash-exec (search-input-file inputs "/bin/sh")))
21115 (substitute* "moto/batch/models.py"
21116 (("/bin/sh") bash-exec))
21117 (substitute* (find-files "tests" "\\.py$")
21118 (("#!/bin/bash") (string-append "#!" bash-exec))))))
21119 (add-before 'check 'pre-check
21120 (lambda _
21121 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
21122 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
21123 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
21124 (native-inputs
21125 (list python-flask
21126 python-flask-cors
21127 python-freezegun
21128 python-pycognito
21129 python-pyotp
21130 python-pytest
21131 python-setuptools))
21132 (inputs
21133 (list bash-minimal))
21134 (propagated-inputs
21135 (list python-antlr4-runtime
21136 python-aws-xray-sdk
21137 python-boto3
21138 python-botocore
21139 python-cfn-lint
21140 python-cryptography
21141 python-dateutil
21142 python-graphql-core
21143 python-jinja2
21144 python-joserfc
21145 python-jsonpath-ng
21146 python-multipart
21147 python-openapi-spec-validator
21148 python-py-partiql-parser
21149 python-pyparsing
21150 python-requests
21151 python-responses
21152 python-werkzeug
21153 python-xmltodict))
21154 (home-page "https://github.com/spulec/moto")
21155 (synopsis "Mock out the boto library")
21156 (description
21157 "@code{moto} is a library designed to easily mock out the
21158@code{boto} library.")
21159 (license license:asl2.0)))
21160
21161(define-public python-plumbum
21162 (package
21163 (name "python-plumbum")
21164 (version "1.7.0")
21165 (source
21166 (origin
21167 (method git-fetch)
21168 (uri (git-reference
21169 (url "https://github.com/tomerfiliba/plumbum")
21170 (commit (string-append "v" version))))
21171 (file-name (git-file-name name version))
21172 (sha256
21173 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
21174 (build-system pyproject-build-system)
21175 (arguments
21176 (list
21177 #:test-flags
21178 #~(list "--ignore=tests/test_remote.py"
21179 "--ignore=tests/test_putty.py"
21180 "--ignore=tests/test_sudo.py"
21181 "-k"
21182 (string-join (list "not test_home"
21183 "test_iter_lines_error"
21184 "test_quoting"
21185 "test_copy_move_delete")
21186 " and not "))))
21187 (native-inputs
21188 (list procps
21189 python-psutil
21190 python-pytest
21191 python-setuptools
21192 python-setuptools-scm
21193 python-wheel))
21194 (home-page "https://plumbum.readthedocs.io")
21195 (synopsis "Python shell combinators library")
21196 (description
21197 "Plumbum is a library of tools for replacing shell scripts with Python
21198code.")
21199 (license license:expat)))
21200
21201(define-public python-deprecation
21202 (package
21203 (name "python-deprecation")
21204 (version "2.1.0")
21205 (source
21206 (origin
21207 (method url-fetch)
21208 (uri (pypi-uri "deprecation" version))
21209 (sha256
21210 (base32
21211 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
21212 (build-system pyproject-build-system)
21213 (arguments
21214 (list
21215 #:test-backend #~'unittest
21216 #:phases
21217 #~(modify-phases %standard-phases
21218 (add-after 'unpack 'drop-unittest2
21219 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
21220 (lambda _
21221 (substitute* "tests/test_deprecation.py"
21222 (("import unittest2")
21223 "import unittest as unittest2")))))))
21224 (native-inputs
21225 (list python-setuptools))
21226 (propagated-inputs
21227 (list python-packaging))
21228 (home-page "https://deprecation.readthedocs.io/")
21229 (synopsis "Python library to handle automated deprecations")
21230 (description
21231 "This is a library that enables automated deprecations. It offers the
21232@code{deprecated()} decorator to wrap functions, providing proper warnings
21233both in documentation and via Python’s warnings system, as well as the
21234@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
21235that deprecated code is eventually removed.")
21236 (license license:asl2.0)))
21237
21238(define-public python-jmespath
21239 (package
21240 (name "python-jmespath")
21241 (version "1.0.1")
21242 (source
21243 (origin
21244 (method url-fetch)
21245 (uri (pypi-uri "jmespath" version))
21246 (sha256
21247 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
21248 (build-system pyproject-build-system)
21249 (native-inputs
21250 (list python-pytest
21251 python-setuptools))
21252 (home-page "https://github.com/jmespath/jmespath.py")
21253 (synopsis "JSON Matching Expressions")
21254 (description
21255 "JMESPath (pronounced “james path”) is a Python library that allows one
21256to declaratively specify how to extract elements from a JSON document.")
21257 (license license:expat)))
21258
21259(define-public python-asteval
21260 (package
21261 (name "python-asteval")
21262 (version "1.0.6")
21263 (source
21264 (origin
21265 (method url-fetch)
21266 (uri (pypi-uri "asteval" version))
21267 (sha256
21268 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
21269 (build-system pyproject-build-system)
21270 (native-inputs
21271 (list python-pytest python-setuptools python-setuptools-scm))
21272 (home-page "https://github.com/newville/asteval")
21273 (synopsis "Minimalistic evaluator of Python expressions")
21274 (description
21275 "This package provides a minimalistic evaluator of Python expression
21276using the @code{ast} module.")
21277 (license license:expat)))
21278
21279(define-public python-lmfit
21280 (package
21281 (name "python-lmfit")
21282 (version "1.3.4")
21283 (source
21284 (origin
21285 (method git-fetch)
21286 (uri (git-reference
21287 (url "https://github.com/lmfit/lmfit-py")
21288 (commit version)))
21289 (file-name (git-file-name name version))
21290 (sha256
21291 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
21292 (build-system pyproject-build-system)
21293 (native-inputs
21294 (list python-pytest
21295 python-setuptools
21296 python-setuptools-scm))
21297 (propagated-inputs
21298 (list python-asteval
21299 python-dill
21300 python-numpy
21301 python-scipy
21302 python-uncertainties))
21303 (home-page "https://lmfit.github.io/lmfit-py/")
21304 (synopsis "Least-Squares minimization with bounds and constraints")
21305 (description
21306 "Lmfit provides a high-level interface to non-linear optimization and
21307curve fitting problems for Python. It builds on and extends many of the
21308optimization methods of @code{scipy.optimize}. Initially inspired by (and
21309named for) extending the Levenberg-Marquardt method from
21310@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
21311enhancements to optimization and data fitting problems.")
21312 (license license:bsd-3)))
21313
21314(define-public python-bokeh
21315 (package
21316 (name "python-bokeh")
21317 (version "3.7.3")
21318 (source (origin
21319 (method url-fetch)
21320 (uri (pypi-uri "bokeh" version))
21321 (sha256
21322 (base32
21323 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
21324 (build-system pyproject-build-system)
21325 (arguments
21326 (list
21327 ;; FIXME: Most of the tests do not work, figure out how to enable some
21328 ;; portion.
21329 #:tests? #f
21330 #:test-flags
21331 '(list
21332 ;; These require selenium.
21333 "--ignore=tests/unit/bokeh/io/test_export.py"
21334 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
21335 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
21336
21337 ;; Doesn't find ManagedServerLoop fixture
21338 "--ignore=tests/unit/bokeh/test_client_server.py"
21339
21340 ;; This fails because of the Guix wrapper around pytest
21341 "--ignore=tests/unit/bokeh/io/test_util__io.py"
21342
21343 ;; Fixture ipython not found.
21344 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
21345 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
21346
21347 ;; pd fixture not found.
21348 "--ignore=tests/unit/bokeh/models/test_mappers.py"
21349 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
21350 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
21351 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
21352 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
21353 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
21354 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
21355 "--ignore=tests/unit/bokeh/core/property/test_container.py"
21356 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
21357 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
21358 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
21359
21360 ;; nx fixture not found.
21361 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
21362 "--ignore=tests/unit/bokeh/models/test_graphs.py"
21363 "--ignore=tests/unit/bokeh/io/test_showing.py"
21364 "--ignore=tests/unit/bokeh/document/test_events__document.py"
21365
21366 ;; These tests need external sample data
21367 "--ignore-glob=tests/unit/bokeh/sampledata/*"
21368
21369 ;; Attempts to install something via npm.
21370 "--ignore=tests/unit/bokeh/test_ext.py"
21371
21372 ;; More failures due to set up problems.
21373 "--ignore=tests/unit/bokeh/server/test_server__server.py"
21374 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
21375 "--ignore=tests/unit/bokeh/util/test_serialization.py"
21376 "--ignore=tests/unit/bokeh/util/test_hex.py"
21377 "--ignore=tests/unit/bokeh/models/test_sources.py"
21378 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
21379
21380 "-k"
21381 (string-append
21382 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
21383 ;; Did you mean: 'assert_called_once_with'?
21384 "not test_set_from_json"
21385
21386 ;; XXX: This one test transforms a gif of a red box. It transforms
21387 ;; it all right but the base64 doesn't look as expected, probably
21388 ;; because of a change in pillow.
21389 " and not test_transform_PIL"))
21390 #:phases
21391 #~(modify-phases %standard-phases
21392 (add-before 'build 'set-version
21393 (lambda _
21394 (substitute* "pyproject.toml"
21395 ((", \"setuptools-git-versioning\"") "")
21396 (("dynamic = \\[\"version\"\\]")
21397 (string-append "version = '" #$version "'"))))))))
21398 (propagated-inputs
21399 (list node-lts
21400 python-contourpy
21401 python-jinja2
21402 python-narwhals
21403 python-numpy
21404 python-packaging
21405 python-pandas
21406 python-pillow
21407 python-pyyaml
21408 python-tornado
21409 python-xyzservices))
21410 (native-inputs
21411 (list python-beautifulsoup4
21412 python-dateutil
21413 python-flaky
21414 python-mock
21415 python-nbconvert
21416 python-pandas
21417 python-pytest
21418 python-pytz
21419 python-requests
21420 python-setuptools
21421 python-wheel))
21422 (home-page "https://github.com/bokeh/bokeh")
21423 (synopsis "Interactive plots and applications in the browser from Python")
21424 (description
21425 "This package provides tools for interactive plots and applications in the
21426browser from Python.")
21427 (license license:bsd-3)))
21428
21429;; TODO: Move to python-web.
21430(define-public python-botocore
21431 ;; Note: When updating botocore, also make sure that boto3 and awscli
21432 ;; are compatible.
21433 (package
21434 (name "python-botocore")
21435 (version "1.42.5")
21436 (source
21437 (origin
21438 (method url-fetch)
21439 (uri (pypi-uri "botocore" version))
21440 (sha256
21441 (base32
21442 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
21443 (build-system pyproject-build-system)
21444 (arguments
21445 (list
21446 ;; tests: 4496 passed, 87 skipped
21447 #:test-flags
21448 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
21449 ;; The full test suite is huge, run some of it's portion.
21450 "--ignore=tests/integration"
21451 "--ignore=tests/functional")))
21452 (native-inputs
21453 (list python-jsonschema
21454 python-pytest
21455 python-pytest-xdist
21456 python-setuptools))
21457 (propagated-inputs
21458 (list python-dateutil
21459 python-jmespath
21460 python-urllib3))
21461 (home-page "https://github.com/boto/botocore")
21462 (synopsis "Low-level interface to AWS")
21463 (description
21464 "Botocore is a Python library that provides a low-level interface to the
21465Amazon Web Services (AWS) API.")
21466 (license license:asl2.0)))
21467
21468(define-public python-boto3
21469 (package
21470 (name "python-boto3")
21471 (version "1.42.5")
21472 (source
21473 (origin
21474 (method git-fetch)
21475 (uri (git-reference
21476 (url "https://github.com/boto/boto3")
21477 (commit version)))
21478 (file-name (git-file-name name version))
21479 (sha256
21480 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
21481 (build-system pyproject-build-system)
21482 (arguments
21483 (list
21484 ;; tests: 1435 passed, 22 skipped, 1 warning
21485 #:test-flags
21486 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
21487 ;; Integration tests are trying to connect to AWS.
21488 "--ignore=tests/integration")))
21489 (native-inputs
21490 (list python-mock
21491 python-pytest
21492 python-pytest-xdist
21493 python-setuptools))
21494 (propagated-inputs
21495 (list python-botocore
21496 python-jmespath
21497 python-s3transfer))
21498 (home-page "https://github.com/boto/boto3")
21499 (synopsis "AWS SDK for Python")
21500 (description
21501 "Boto3 is a Python library for writing programs that interact with
21502@acronym{AWS,Amazon Web Services}.")
21503 (license license:asl2.0)))
21504
21505(define-public python-pyfiglet
21506 (package
21507 (name "python-pyfiglet")
21508 (version "1.0.4")
21509 (source
21510 (origin
21511 (method git-fetch)
21512 (uri (git-reference
21513 (url "https://github.com/pwaller/pyfiglet")
21514 (commit (string-append "v" version))))
21515 (file-name (git-file-name name version))
21516 (sha256
21517 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
21518 (build-system pyproject-build-system)
21519 (arguments
21520 (list
21521 #:phases
21522 #~(modify-phases %standard-phases
21523 (add-after 'unpack 'fallback-on-default-build
21524 (lambda _
21525 ;; This pyproject has little value and fails because of the
21526 ;; :__legacy__ suffix. Removing it to rely on defaults.
21527 (delete-file "pyproject.toml"))))))
21528 (native-inputs (list python-pytest python-setuptools))
21529 (home-page "https://github.com/pwaller/pyfiglet")
21530 (synopsis "Draw ASCII art big letters in Python")
21531 (description
21532 "This module lets you draw large letter from ordinary characters in pure
21533 Python.")
21534 (license license:expat)))
21535
21536(define-public python-mako
21537 (package
21538 (name "python-mako")
21539 (version "1.3.12")
21540 (source
21541 (origin
21542 (method git-fetch)
21543 (uri (git-reference
21544 (url "https://github.com/sqlalchemy/mako")
21545 (commit (string-append "rel_" (string-replace-substring
21546 version "." "_")))))
21547 (file-name (git-file-name name version))
21548 (sha256
21549 (base32 "1cvx14yvsx13fnxbwjy4jh8yy87pa6lzfgqzkih4j6c8q0zjd0v0"))))
21550 (build-system pyproject-build-system)
21551 (native-inputs
21552 (list python-pytest
21553 python-setuptools))
21554 (propagated-inputs
21555 (list python-markupsafe))
21556 (home-page "https://www.makotemplates.org/")
21557 (synopsis "Templating language for Python")
21558 (description "Mako is a templating language for Python that compiles
21559templates into Python modules.")
21560 (license license:expat)))
21561
21562(define-public python-cookiecutter
21563 (package
21564 (name "python-cookiecutter")
21565 (version "2.6.0")
21566 (source
21567 (origin
21568 (method url-fetch)
21569 (uri (pypi-uri "cookiecutter" version))
21570 (sha256
21571 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
21572 (build-system pyproject-build-system)
21573 (arguments
21574 (list
21575 #:phases #~(modify-phases %standard-phases
21576 (add-before 'check 'pre-check
21577 (lambda _
21578 ;; test_get_user_config.py requires a writable home
21579 ;; directory.
21580 (setenv "HOME"
21581 (getcwd))
21582 ;; test_hooks.py dynamically creates shell scripts
21583 ;; with a /bin/bash shebang. We have to patch these.
21584 (substitute* "tests/test_hooks.py"
21585 (("/bin/bash")
21586 (string-append #$(this-package-native-input
21587 "bash-minimal") "/bin/bash"))))))))
21588 (native-inputs (list bash-minimal
21589 git-minimal/pinned
21590 python-freezegun
21591 python-pytest
21592 python-pytest-mock
21593 python-setuptools
21594 python-wheel))
21595 (propagated-inputs (list python-arrow
21596 python-binaryornot
21597 python-click
21598 python-jinja2
21599 python-pyyaml
21600 python-requests
21601 python-rich
21602 python-slugify))
21603 (home-page "https://github.com/cookiecutter/cookiecutter")
21604 (synopsis
21605 "Command-line utility that creates projects from project templates")
21606 (description
21607 "This package provides a command-line utility that creates projects from
21608project templates, e.g. creating a Python package project from a Python package
21609project template.")
21610 (license license:bsd-3)))
21611
21612(define-public python-pyquery
21613 (package
21614 (name "python-pyquery")
21615 (version "2.0.1")
21616 (source
21617 (origin
21618 (method url-fetch)
21619 (uri (pypi-uri "pyquery" version))
21620 (sha256
21621 (base32
21622 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
21623 (build-system pyproject-build-system)
21624 (arguments
21625 (list
21626 #:test-flags
21627 #~(list #$@(map (lambda (test) (string-append
21628 "--deselect=tests/test_pyquery.py::"
21629 test))
21630 (list
21631 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
21632 "TestWebScrapping::test_post"
21633 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
21634 "TestWebScrapping::test_session"
21635 ;; Assertion is not equal.
21636 "TestManipulating::test_val_for_textarea"
21637 "TestHTMLParser::test_replaceWith"
21638 "TestHTMLParser::test_replaceWith_with_function"
21639 ;; Network access is required.
21640 "TestWebScrapping::test_get"
21641 "TestWebScrappingEncoding::test_get")))))
21642 (native-inputs
21643 (list python-pytest
21644 python-requests
21645 python-setuptools
21646 python-webob
21647 python-webtest
21648 python-wheel))
21649 (propagated-inputs
21650 (list python-cssselect python-lxml))
21651 (home-page "https://github.com/gawel/pyquery")
21652 (synopsis "Make jQuery-like queries on xml documents")
21653 (description "pyquery allows you to make jQuery queries on xml documents.
21654The API is as much as possible the similar to jQuery. pyquery uses lxml for
21655fast xml and html manipulation.")
21656 (license license:bsd-3)))
21657
21658(define-public python-amqp
21659 (package
21660 (name "python-amqp")
21661 (version "5.1.1")
21662 (source
21663 (origin
21664 (method url-fetch)
21665 (uri (pypi-uri "amqp" version))
21666 (sha256
21667 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
21668 (build-system pyproject-build-system)
21669 (arguments
21670 (list ; Integration tests require network connectivity.
21671 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
21672 (native-inputs (list python-pytest python-setuptools python-wheel))
21673 (propagated-inputs (list python-vine))
21674 (home-page "https://github.com/celery/py-amqp")
21675 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
21676 (description
21677 "This is a fork of amqplib which was originally written by Barry Pederson.
21678It is maintained by the Celery project, and used by kombu as a pure python
21679alternative when librabbitmq is not available.")
21680 (license license:lgpl2.1+)))
21681
21682(define-public python-benchmark-4dn
21683 (package
21684 (name "python-benchmark-4dn")
21685 (version "0.5.24")
21686 (source (origin
21687 (method url-fetch)
21688 (uri (pypi-uri "benchmark_4dn" version))
21689 (sha256
21690 (base32
21691 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
21692 (properties '(("upstream-name" . "benchmark_4dn")))
21693 (build-system pyproject-build-system)
21694 ;; There are none.
21695 (arguments (list #:tests? #false))
21696 (native-inputs
21697 (list python-poetry-core))
21698 (home-page "https://github.com/SooLee/Benchmark/")
21699 (synopsis "Benchmark functions for CWL workflows")
21700 (description
21701 "This package provides benchmark functions that return total space, memory,
21702CPUs required per given input size, and parameters for CWL workflows.")
21703 (license license:expat)))
21704
21705(define-public python-beniget
21706 (package
21707 (name "python-beniget")
21708 (version "0.5.0")
21709 (source
21710 (origin
21711 (method url-fetch)
21712 (uri (pypi-uri "beniget" version))
21713 (sha256
21714 (base32 "08ig66dp3xjl3nhqlpdkv0bl1m0m5mr1x2yrncz3vpn7ivx13bz7"))))
21715 (build-system pyproject-build-system)
21716 (native-inputs
21717 (list python-pytest
21718 python-setuptools))
21719 (propagated-inputs
21720 (list python-gast))
21721 (home-page "https://github.com/serge-sans-paille/beniget")
21722 (synopsis "Extract semantic information about static Python code")
21723 (description
21724 "Beniget is a collection of analyzers for Python @acronym{AST,
21725Abstract Syntax Tree}. It is a building block for writing a static analyzer
21726or compiler for Python.")
21727 (license license:bsd-3)))
21728
21729(define-public python-kombu
21730 (package
21731 (name "python-kombu")
21732 (version "5.6.2")
21733 (source
21734 (origin
21735 (method git-fetch)
21736 (uri (git-reference
21737 (url "https://github.com/celery/kombu")
21738 (commit (string-append "v" version))))
21739 (file-name (git-file-name name version))
21740 (sha256
21741 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21742 (build-system pyproject-build-system)
21743 (arguments
21744 (list
21745 ;; tests: 854 passed, 193 skipped
21746 #:test-flags
21747 #~(list
21748 ;; TODO: Package azure-identity (required for this file)
21749 "--ignore=t/unit/transport/test_azurestoragequeues.py"
21750 ;; XXX: Requires google-cloud-pubsub.
21751 "--ignore=t/unit/transport/test_gcpubsub.py"
21752 ;; XXX: Requires pyro, see:
21753 ;; <https://codeberg.org/guix/guix/issues/5857>
21754 "--ignore=t/unit/transport/test_pyro.py")
21755 #:phases
21756 #~(modify-phases %standard-phases
21757 (add-after 'unpack 'relax-requirements
21758 (lambda _
21759 (substitute* "requirements/default.txt"
21760 (("tzdata>=2025.2")
21761 "tzdata>=2025.1")))))))
21762 (native-inputs
21763 (list python-botocore
21764 python-pytest
21765 python-pytest-freezer
21766 python-pytest-sugar
21767 python-setuptools))
21768 (propagated-inputs
21769 (list python-amqp
21770 python-packaging
21771 python-tzdata
21772 python-vine))
21773 (home-page "https://kombu.readthedocs.io")
21774 (synopsis "Message passing library for Python")
21775 (description
21776 "The aim of Kombu is to make messaging in Python as easy as possible by
21777providing an idiomatic high-level interface for the AMQ protocol, and also
21778provide proven and tested solutions to common messaging problems. AMQP is the
21779Advanced Message Queuing Protocol, an open standard protocol for message
21780orientation, queuing, routing, reliability and security, for which the
21781RabbitMQ messaging server is the most popular implementation.")
21782 (license license:bsd-3)))
21783
21784(define-public python-billiard
21785 (package
21786 (name "python-billiard")
21787 (version "4.2.2")
21788 (source
21789 (origin
21790 (method git-fetch)
21791 (uri (git-reference
21792 (url "https://github.com/celery/billiard")
21793 (commit (string-append "v" version))))
21794 (file-name (git-file-name name version))
21795 (sha256
21796 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
21797 (build-system pyproject-build-system)
21798 (arguments
21799 (list
21800 #:phases
21801 #~(modify-phases %standard-phases
21802 (add-after 'unpack 'remove-win-files
21803 (lambda _
21804 (for-each delete-file-recursively
21805 '("billiard/popen_spawn_win32.py"
21806 "billiard/_win.py")))))))
21807 (native-inputs (list python-psutil python-pytest python-setuptools))
21808 (home-page "https://github.com/celery/billiard")
21809 (synopsis "Python multiprocessing fork with improvements and bugfixes")
21810 (description
21811 "Billiard is a fork of the Python 2.7 multiprocessing package. The
21812multiprocessing package itself is a renamed and updated version of R Oudkerk's
21813pyprocessing package. This standalone variant is intended to be compatible with
21814Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
21815 (license license:bsd-3)))
21816
21817(define-public python-celery
21818 (package
21819 (name "python-celery")
21820 (version "5.6.3")
21821 (source
21822 (origin
21823 (method url-fetch)
21824 (uri (pypi-uri "celery" version))
21825 (sha256
21826 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
21827 (build-system pyproject-build-system)
21828 (arguments
21829 (list
21830 ;; tests: 3362 passed, 38 skipped, 10 deselected, 3 xfailed, 63
21831 ;; warnings, 28808 subtests passed
21832 #:test-flags
21833 ;; The MongoDB backend test appears to expect an older version of
21834 ;; MongoDB which provided its own bson module, fails with "
21835 ;; AttributeError: module 'bson' has no attribute 'encode'".
21836 #~(list "--ignore=t/unit/backends/test_mongodb.py"
21837 ;; XXX: Requires google-cloud-firestore
21838 "--ignore=t/unit/backends/test_gcs.py"
21839 "-k" (string-join
21840 (list ;; AssertionError.
21841 "not test_check_privileges_no_fchown"
21842 ;; These 3 tests error out on ci.guix.gnu.org with
21843 ;; OSError: [Errno 24] Too many open files
21844 "test_register_with_event_loop__no_on_tick_dupes"
21845 "test_with_autoscaler_file_descriptor_safety"
21846 "test_with_file_descriptor_safety"
21847 ;; XXX: Fails to compare local timezones.
21848 "test_use_local_timezone"
21849 ;; assert 'No such option: --ini' in <...>
21850 "test_preload_options[subcommand_with_params0]"
21851 "test_preload_options[subcommand_with_params1]")
21852 " and not "))))
21853 (native-inputs
21854 (list python-azure-core
21855 python-dnspython
21856 python-flaky
21857 python-gevent
21858 python-google-cloud-storage
21859 python-iniconfig
21860 python-moto
21861 python-msgpack
21862 python-pymongo
21863 python-pytest
21864 python-pytest-celery
21865 python-pytest-click
21866 python-pytest-order
21867 python-pytest-subtests
21868 python-pytest-timeout
21869 python-redis
21870 python-setuptools))
21871 (propagated-inputs
21872 (list python-billiard
21873 python-click
21874 python-click-didyoumean
21875 python-click-plugins
21876 python-click-repl
21877 python-dateutil
21878 python-kombu
21879 python-tzlocal
21880 python-vine))
21881 (home-page "https://celeryproject.org")
21882 (synopsis "Distributed Task Queue")
21883 (description
21884 "Celery is an asynchronous task queue/job queue based on distributed
21885message passing. It is focused on real-time operation, but supports
21886scheduling as well. The execution units, called tasks, are executed
21887concurrently on a single or more worker servers using multiprocessing,
21888Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
21889synchronously (wait until ready).")
21890 (license license:bsd-3)))
21891
21892;; A bare minimal package, mainly to use in tests and reduce closure
21893;; size. Tests are left out in the main package to slim down native-inputs.
21894(define-public python-celery-minimal
21895 (package/inherit python-celery
21896 (name "python-celery-minimal")
21897 (arguments
21898 (list #:tests? #f))
21899 (native-inputs
21900 (list python-setuptools))))
21901
21902(define-public python-anyqt
21903 (package
21904 (name "python-anyqt")
21905 (version "0.2.1")
21906 (source
21907 (origin
21908 (method git-fetch)
21909 (uri (git-reference
21910 (url "https://github.com/ales-erjavec/anyqt")
21911 (commit version)))
21912 (file-name (git-file-name name version))
21913 (sha256
21914 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
21915 (build-system pyproject-build-system)
21916 (arguments
21917 (list
21918 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
21919 ;; TODO Add/configure the right Qt inputs.
21920 #:test-flags
21921 #~(list "--ignore-glob=tests/test_q*.py")
21922 #:phases
21923 #~(modify-phases %standard-phases
21924 (add-after 'unpack 'delete-files
21925 ;; Delete files related to other operating systems.
21926 (lambda _
21927 (delete-file "AnyQt/QtMacExtras.py")
21928 (delete-file "AnyQt/QtWinExtras.py"))))))
21929 (native-inputs
21930 (list python-pyqt-6
21931 python-pytest
21932 python-pytest-qt
21933 python-setuptools))
21934 (home-page "https://github.com/ales-erjavec/anyqt")
21935 (synopsis "PyQt compatibility layer")
21936 (description
21937 "This package provides a PyQt/PySide compatibility layer. More precisely,
21938it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
21939PySide, PySide2.")
21940 (license license:gpl3)))
21941
21942(define-public python-qasync
21943 (package
21944 (name "python-qasync")
21945 (version "0.28.0")
21946 (source
21947 (origin
21948 (method git-fetch)
21949 (uri (git-reference
21950 (url "https://github.com/CabbageDevelopment/qasync/")
21951 (commit (string-append "v" version))))
21952 (file-name (git-file-name name version))
21953 (sha256
21954 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
21955 (build-system pyproject-build-system)
21956 (arguments
21957 (list
21958 #:phases
21959 #~(modify-phases %standard-phases
21960 (add-before 'check 'set-qpa
21961 (lambda _
21962 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
21963 (native-inputs
21964 (list python-pytest python-uv-build))
21965 (propagated-inputs
21966 (list python-pyqt-6))
21967 (home-page "https://github.com/CabbageDevelopment/qasync")
21968 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
21969 (description
21970 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
21971by providing an implementation of the PEP 3156 event-loop.")
21972 (license license:bsd-2)))
21973
21974(define-public python-editor
21975 (package
21976 (name "python-editor")
21977 (version "1.0.4")
21978 (source
21979 (origin
21980 (method git-fetch)
21981 (uri (git-reference
21982 (url "https://github.com/fmoo/python-editor")
21983 (commit version)))
21984 (file-name (git-file-name name version))
21985 (sha256
21986 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
21987 (build-system pyproject-build-system)
21988 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
21989 (native-inputs (list python-setuptools))
21990 (home-page "https://github.com/fmoo/python-editor")
21991 (synopsis "Programmatically open an editor, capture the result")
21992 (description
21993 "This package provides the editor module for programmatically interfacing
21994with your system's $EDITOR.")
21995 (license license:asl2.0)))
21996
21997(define-public python-multiprocessing-logging
21998 (package
21999 (name "python-multiprocessing-logging")
22000 (version "0.3.4")
22001 (home-page "https://github.com/jruere/multiprocessing-logging")
22002 (source
22003 (origin
22004 (method git-fetch)
22005 (uri (git-reference
22006 (url home-page)
22007 (commit (string-append "v" version))))
22008 (file-name (git-file-name name version))
22009 (sha256
22010 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
22011 (build-system pyproject-build-system)
22012 (arguments (list #:test-backend #~'unittest))
22013 (native-inputs (list python-setuptools))
22014 (synopsis "Manage logs from multiple processes")
22015 (description
22016 "This Python module implements a multiprocessing-aware @code{Handler}
22017that, when set on the root @code{Logger}, will tunnel log records to the
22018main process so that they are handled correctly.")
22019 (license license:lgpl3+)))
22020
22021(define-public python-munkres
22022 (package
22023 (name "python-munkres")
22024 (version "1.1.4")
22025 (source
22026 (origin
22027 (method url-fetch)
22028 (uri (pypi-uri "munkres" version))
22029 (sha256
22030 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
22031 (build-system pyproject-build-system)
22032 (arguments
22033 (list
22034 ;; See https://github.com/bmc/munkres/issues/40
22035 #:test-flags
22036 (if (member (%current-system) %32bit-supported-systems)
22037 #~(list "-k" "not test_profit_float")
22038 #~(list))))
22039 (native-inputs (list python-pytest python-setuptools))
22040 (home-page "https://software.clapper.org/munkres/")
22041 (synopsis "Implementation of the Munkres algorithm")
22042 (description
22043 "The Munkres module provides an implementation of the Munkres algorithm
22044(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
22045for solving the Assignment Problem.")
22046 (license license:bsd-3)))
22047
22048(define-public python-codespell
22049 (package
22050 (name "python-codespell")
22051 (version "2.3.0")
22052 (source
22053 (origin
22054 (method url-fetch)
22055 (uri (pypi-uri "codespell" version))
22056 (sha256
22057 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
22058 (build-system pyproject-build-system)
22059 (native-inputs
22060 (list python-pygments
22061 python-pytest
22062 python-pytest-dependency
22063 python-setuptools
22064 python-setuptools-scm
22065 python-wheel))
22066 (propagated-inputs
22067 (list python-chardet))
22068 (home-page "https://github.com/codespell-project/codespell/")
22069 (synopsis "Spellchecker for code")
22070 (description
22071 "Codespell fixes common misspellings in text files. It's designed
22072primarily for checking misspelled words in source code, but it can be used
22073with other files as well. It does not check for word membership in a complete
22074dictionary, but instead looks for a set of common misspellings. Therefore it
22075should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
22076also means it shouldn't generate false-positives when you use a niche term it
22077doesn't know about.")
22078 (license
22079 (list
22080 ; for codespell and codespell_lib
22081 license:gpl2
22082 ; for dictionary*.txt
22083 license:cc-by-sa3.0))))
22084
22085(define-public python-jellyfish
22086 (package
22087 (name "python-jellyfish")
22088 (version "1.2.1")
22089 (source
22090 (origin
22091 (method git-fetch)
22092 (uri (git-reference
22093 (url "https://github.com/jamesturk/jellyfish")
22094 (commit (string-append "v" version))))
22095 (file-name (git-file-name name version))
22096 (sha256
22097 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
22098 (build-system pyproject-build-system)
22099 (arguments
22100 (list
22101 #:imported-modules (append %cargo-build-system-modules
22102 %pyproject-build-system-modules)
22103 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
22104 (guix build pyproject-build-system)
22105 (guix build utils))
22106 #:phases
22107 #~(modify-phases %standard-phases
22108 (add-after 'unpack 'prepare-cargo-build-system
22109 (lambda args
22110 (for-each
22111 (lambda (phase)
22112 (format #t "Running cargo phase: ~a~%" phase)
22113 (apply (assoc-ref cargo:%standard-phases phase)
22114 #:cargo-target #$(cargo-triplet)
22115 args))
22116 '(unpack-rust-crates
22117 configure
22118 check-for-pregenerated-files
22119 patch-cargo-checksums)))))))
22120 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
22121 (native-inputs
22122 (append
22123 (list python-pytest
22124 python-setuptools
22125 rust
22126 `(,rust "cargo"))
22127 (or (and=> (%current-target-system)
22128 (compose list make-rust-sysroot))
22129 '())))
22130 (home-page "https://www.jpt.sh/projects/jellyfish/")
22131 (synopsis "Approximate and phonetic matching of strings")
22132 (description "Jellyfish uses a variety of string comparison and phonetic
22133encoding algorithms to do fuzzy string matching.")
22134 (license license:bsd-2)))
22135
22136(define-public python-pdfminer-six
22137 (package
22138 (name "python-pdfminer-six")
22139 (version "20260107")
22140 ;; There are no tests in the PyPI tarball.
22141 (source
22142 (origin
22143 (method git-fetch)
22144 (uri (git-reference
22145 (url "https://github.com/pdfminer/pdfminer.six")
22146 (commit version)))
22147 (file-name (git-file-name name version))
22148 (sha256
22149 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
22150 (build-system pyproject-build-system)
22151 (arguments
22152 (list #:phases
22153 #~(modify-phases %standard-phases
22154 ;; Tests write to the source tree.
22155 (add-after 'unpack 'make-git-checkout-writable
22156 (lambda _
22157 (for-each make-file-writable (find-files ".")))))))
22158 (propagated-inputs
22159 (list python-charset-normalizer python-cryptography))
22160 (native-inputs
22161 (list python-pytest python-setuptools python-setuptools-scm))
22162 (home-page "https://github.com/pdfminer/pdfminer.six")
22163 (synopsis "PDF parser and analyzer")
22164 (description "@code{pdfminer.six} is a community maintained fork of
22165the original PDFMiner. It is a tool for extracting information from PDF
22166documents. It focuses on getting and analyzing text data. Pdfminer.six
22167extracts the text from a page directly from the sourcecode of the PDF. It
22168can also be used to get the exact location, font or color of the text.")
22169 (license license:expat)))
22170
22171(define-public python-rarfile
22172 (package
22173 (name "python-rarfile")
22174 (version "4.2")
22175 (source
22176 (origin
22177 (method git-fetch)
22178 (uri (git-reference
22179 (url "https://github.com/markokr/rarfile")
22180 (commit (string-append "v" version))))
22181 (file-name (git-file-name name version))
22182 (sha256
22183 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
22184 (build-system pyproject-build-system)
22185 (arguments
22186 (list
22187 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
22188 #:phases
22189 #~(modify-phases %standard-phases
22190 (add-after 'unpack 'patch
22191 (lambda* (#:key inputs #:allow-other-keys)
22192 (substitute* "rarfile.py"
22193 ;; Disable unrar and unar, which are unavailable on Guix.
22194 (("(unrar|unar)=True" all tool)
22195 (string-append tool "=False"))
22196 ;; Hardcode path to bsdtar
22197 (("\"bsdtar\"")
22198 (format #f "~s"
22199 (search-input-file inputs "bin/bsdtar")))))))))
22200 (native-inputs (list python-pytest python-setuptools))
22201 (inputs (list libarchive))
22202 (home-page "https://github.com/markokr/rarfile")
22203 (synopsis "RAR archive reader for Python")
22204 (description
22205 "This is Python module for RAR archive reading. The interface is made as
22206zipfile like as possible.")
22207 (license license:isc)))
22208
22209(define-public python-rassumfrassum
22210 (package
22211 (name "python-rassumfrassum")
22212 (version "0.3.3")
22213 (source
22214 (origin
22215 (method git-fetch)
22216 (uri (git-reference
22217 (url "https://github.com/joaotavora/rassumfrassum")
22218 (commit (string-append "v" version))))
22219 (file-name (git-file-name name version))
22220 (sha256
22221 (base32 "0iyqg7pnlca9i9a5n2v1pg8xy0chy297d1a934wqxvjzrv11wxyw"))))
22222 (build-system pyproject-build-system)
22223 (arguments
22224 (list
22225 #:phases
22226 #~(modify-phases %standard-phases
22227 (replace 'check
22228 (lambda* (#:key tests? #:allow-other-keys)
22229 (when tests?
22230 (invoke "test/run-all.sh")))))))
22231 (native-inputs (list python-setuptools))
22232 (home-page "https://github.com/joaotavora/rassumfrassum")
22233 (synopsis "Connect an LSP client to multiple LSP servers")
22234 (description
22235 "LSP/JSONRPC multiplexer for connecting one LSP client to multiple servers.")
22236 (license license:gpl3+)))
22237
22238(define-public python-slugid
22239 (package
22240 (name "python-slugid")
22241 (version "2.0.0")
22242 (source
22243 (origin
22244 (method git-fetch)
22245 (uri (git-reference
22246 (url "https://github.com/taskcluster/slugid.py")
22247 (commit (string-append "v" version))))
22248 (file-name (git-file-name name version))
22249 (sha256
22250 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
22251 (build-system pyproject-build-system)
22252 (arguments (list #:test-backend #~'nose))
22253 (native-inputs (list python-pynose python-setuptools))
22254 (home-page "http://taskcluster.github.io/slugid.py")
22255 (synopsis "Module for Base64 encoded UUID v4 slugs")
22256 (description
22257 "This package provides a module for generating v4 UUIDs and encoding them
22258into 22 character URL-safe base64 slug representation.")
22259 (license license:mpl2.0)))
22260
22261(define-public python-rich
22262 (package
22263 (name "python-rich")
22264 (version "15.0.0")
22265 (source
22266 (origin
22267 (method git-fetch)
22268 (uri (git-reference
22269 (url "https://github.com/willmcgugan/rich")
22270 (commit (string-append "v" version))))
22271 (file-name (git-file-name name version))
22272 (sha256
22273 (base32 "1qs8n1hcjxcpwbfjjlzfmywfczxzcpvjkk3ay04kdbi1lvlynkaj"))))
22274 (build-system pyproject-build-system)
22275 ;; The test_brokenpipeerror is flaky.
22276 (arguments (list #:test-flags #~(list "-k" "not test_brokenpipeerror")))
22277 (native-inputs
22278 (list python-poetry-core
22279 python-pytest
22280 which))
22281 (propagated-inputs
22282 (list python-markdown-it-py
22283 python-pygments))
22284 (home-page "https://github.com/willmcgugan/rich")
22285 (synopsis "Render rich text and more to the terminal")
22286 (description
22287 "This is a Python package for rendering rich text, tables, progress bars,
22288syntax highlighting, markdown and more to the terminal.")
22289 (license license:expat)))
22290
22291(define-public python-rich-click
22292 (package
22293 (name "python-rich-click")
22294 (version "1.9.8")
22295 (source
22296 (origin
22297 (method git-fetch)
22298 (uri (git-reference
22299 (url "https://github.com/ewels/rich-click")
22300 (commit (string-append "v" version))))
22301 (file-name (git-file-name name version))
22302 (sha256
22303 (base32 "1xgsblpkp4f43y579614n6cp8br2acms8vdj8gpqxa05csap0fqn"))))
22304 (build-system pyproject-build-system)
22305 (arguments
22306 (list
22307 #:test-flags
22308 ;; python-typer 0.26 vendored python-click and broke a lot of things.
22309 ;; See <https://github.com/ewels/rich-click/issues/330> and
22310 ;; <https://github.com/ewels/rich-click/commit/989c38cf4ed918a25fa523c8191c66b42315cb10>.
22311 ;; 136 passed, 6 skipped, 6 deselected
22312 #~(list "-k" "not _typer_")))
22313 (native-inputs
22314 (list python-inline-snapshot
22315 python-pytest
22316 python-setuptools
22317 python-typer))
22318 (propagated-inputs
22319 (list python-click
22320 python-rich))
22321 (home-page "https://github.com/ewels/rich-click")
22322 (synopsis "Format click help output nicely with rich")
22323 (description "Click is a \"Python package for creating beautiful command
22324line interfaces\". Rich is a \"Python library for rich text and beautiful
22325formatting in the terminal\". The intention of rich-click is to provide
22326attractive help output from click, formatted with rich, with minimal
22327customization required.")
22328 (license license:expat)))
22329
22330(define-public python-magic
22331 (package
22332 (name "python-magic")
22333 (version "0.4.27")
22334 (home-page "https://github.com/ahupp/python-magic")
22335 (source
22336 (origin
22337 (method git-fetch)
22338 (uri (git-reference (url home-page) (commit version)))
22339 (file-name (git-file-name name version))
22340 (sha256
22341 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
22342 (build-system pyproject-build-system)
22343 (arguments
22344 (list
22345 #:test-backend #~'custom
22346 #:test-flags #~(list "test/libmagic_test.py")
22347 #:phases
22348 #~(modify-phases %standard-phases
22349 (add-after 'unpack 'fix-tests
22350 (lambda _
22351 ;; Adjust expected output for [email protected].
22352 (substitute* "test/libmagic_test.py"
22353 (("PDF document, version 1\\.2, 2 pages")
22354 "PDF document, version 1.2, 2 page(s)"))))
22355 ;; Replace a specific method call with a hard-coded path to the
22356 ;; necessary libmagic.so file in the store.
22357 (add-before 'build 'hard-code-path-to-libmagic
22358 (lambda* (#:key inputs #:allow-other-keys)
22359 (substitute* "magic/loader.py"
22360 (("find_library\\('magic'\\)")
22361 (format #f "~s"
22362 (search-input-file inputs "lib/libmagic.so")))))))))
22363 (native-inputs (list which python-setuptools))
22364 (inputs
22365 ;; python-magic needs to be able to find libmagic.so.
22366 (list file))
22367 (synopsis "File type identification using libmagic")
22368 (description
22369 "This module uses ctypes to access the libmagic file type identification
22370library. It makes use of the local magic database and supports both textual
22371and MIME-type output. Note that this module and the python-file module both
22372provide a \"magic.py\" file; these two modules, which are different and were
22373developed separately, both serve the same purpose: to provide Python bindings
22374for libmagic.")
22375 (license license:expat)))
22376
22377(define-public python-securetar
22378 (package
22379 (name "python-securetar")
22380 (version "2025.1.4")
22381 (source
22382 (origin
22383 (method git-fetch)
22384 (uri (git-reference
22385 (url "https://github.com/pvizeli/securetar")
22386 (commit version)))
22387 (file-name (git-file-name name version))
22388 (sha256
22389 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
22390 (build-system pyproject-build-system)
22391 (native-inputs (list python-setuptools python-wheel python-pytest))
22392 (propagated-inputs (list python-cryptography))
22393 (home-page "https://github.com/pvizeli/securetar")
22394 (synopsis "Python module to handle tarfile backups")
22395 (description
22396 "This library provides a streaming wrapper around python tarfile and allow
22397secure handling files and support encryption.")
22398 (license license:asl2.0)))
22399
22400(define-public python-pkgconfig
22401 (package
22402 (name "python-pkgconfig")
22403 (version "1.6.0")
22404 (source
22405 (origin
22406 (method git-fetch)
22407 (uri (git-reference
22408 (url "https://github.com/matze/pkgconfig")
22409 (commit (string-append "v" version))))
22410 (file-name (git-file-name name version))
22411 (sha256
22412 (base32 "0xlfghjbx04gls3ad1ncggpi4xvjxcirrm3bamv5gp9wv3z5ln8s"))))
22413 (build-system pyproject-build-system)
22414 (arguments
22415 (list
22416 #:phases
22417 #~(modify-phases %standard-phases
22418 (add-after 'unpack 'fix-test-data
22419 (lambda _
22420 (substitute* "tests/data/fake-openssl.pc"
22421 (("Requires: libssl libcrypto") ""))))
22422 (add-before 'build 'set-pkg-config-path
22423 (lambda* (#:key inputs #:allow-other-keys)
22424 (setenv "PKG_CONFIG"
22425 (search-input-file inputs "/bin/pkg-config"))
22426 (substitute* "src/pkgconfig/pkgconfig.py"
22427 (("'pkg-config'")
22428 (format #f "~s"
22429 (search-input-file inputs "/bin/pkg-config")))))))))
22430 (native-inputs (list python-poetry-core python-pytest))
22431 (inputs (list pkg-config))
22432 (home-page "https://github.com/matze/pkgconfig")
22433 (synopsis "Python interface for pkg-config")
22434 (description "This module provides a Python interface to pkg-config. It
22435can be used to find all pkg-config packages, check if a package exists,
22436check if a package meets certain version requirements, query CFLAGS and
22437LDFLAGS and parse the output to build extensions with setup.py.")
22438 (license license:expat)))
22439
22440;; This package is unmaintained since 2014, but still used in `khmer'.
22441(define-public python-bz2file
22442 (package
22443 (name "python-bz2file")
22444 (version "0.98")
22445 (source
22446 (origin
22447 (method url-fetch)
22448 (uri (pypi-uri "bz2file" version))
22449 (sha256
22450 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
22451 (build-system pyproject-build-system)
22452 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
22453 (native-inputs (list python-setuptools))
22454 (home-page "https://github.com/nvawda/bz2file")
22455 (synopsis "Read and write bzip2-compressed files")
22456 (description
22457 "Bz2file is a Python library for reading and writing bzip2-compressed
22458files. It contains a drop-in replacement for the I/O interface in the
22459standard library's @code{bz2} module, including features from the latest
22460development version of CPython that are not available in older releases.")
22461 (license license:asl2.0)))
22462
22463(define-public python-future
22464 (package
22465 (name "python-future")
22466 (version "1.0.0")
22467 (source
22468 (origin
22469 (method url-fetch)
22470 (uri (pypi-uri "future" version))
22471 (sha256
22472 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
22473 (build-system pyproject-build-system)
22474 (arguments
22475 (list
22476 #:test-flags
22477 ;; Self tests failed.
22478 #~(list "--ignore=tests/test_future/test_futurize.py"
22479 "-k" (string-join
22480 ;; Self tests failed.
22481 (list "not test_division"
22482 "test_functions_unchanged"
22483 "test_mixed_annotations"
22484 "test_multiple_param_annotations"
22485 "test_print"
22486 "test_range_slice"
22487 ;; Network access is required.
22488 "test_ftp"
22489 "test_main"
22490 "test_moves_urllib_request_http"
22491 "test_urllib_request_http"
22492 ;; Tests failing on Python 3.12
22493 "test_converting_drive_letter"
22494 "test_converting_drive_letter"
22495 "test_converting_when_no_drive_letter"
22496 "test_converting_when_no_drive_letter"
22497 "test_converting_when_no_drive_letter"
22498 "test_converting_when_no_drive_letter"
22499 "test_isinstance_recursion_limit"
22500 "test_roundtrip_pathname2url"
22501 "test_roundtrip_pathname2url"
22502 "test_roundtrip_url2pathname"
22503 "test_roundtrip_url2pathname"
22504 "test_subclass_recursion_limit")
22505 " and not "))))
22506 (native-inputs
22507 (list python-pytest
22508 python-setuptools))
22509 (home-page "https://python-future.org")
22510 (synopsis "Single-source support for Python 3 and 2")
22511 (description
22512 "@code{python-future} is the missing compatibility layer between Python 2
22513and Python 3. It allows you to use a single, clean Python 3.x-compatible
22514codebase to support both Python 2 and Python 3 with minimal overhead.")
22515 (license license:expat)))
22516
22517(define-public python-cysignals
22518 (package
22519 (name "python-cysignals")
22520 (version "1.12.3")
22521 (source
22522 (origin
22523 (method url-fetch)
22524 (uri (pypi-uri "cysignals" version))
22525 (sha256
22526 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
22527 (build-system pyproject-build-system)
22528 (native-inputs (list python-meson
22529 python-cython
22530 python-pytest))
22531 (home-page "https://github.com/sagemath/cysignals")
22532 (synopsis "Handling of interrupts and signals for Cython")
22533 (description
22534 "The cysignals package provides mechanisms to handle interrupts (and
22535other signals and errors) in Cython code, using two related approaches,
22536for mixed Cython/Python code or external C libraries and pure Cython code,
22537respectively.")
22538 (license license:lgpl3+)))
22539
22540(define-public python-rope
22541 (package
22542 (name "python-rope")
22543 (version "1.13.0")
22544 (source
22545 (origin
22546 (method url-fetch)
22547 (uri (pypi-uri "rope" version))
22548 (sha256
22549 (base32
22550 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
22551 (build-system pyproject-build-system)
22552 (arguments
22553 (list
22554 #:test-flags
22555 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
22556 (propagated-inputs (list python-pytoolconfig))
22557 (native-inputs
22558 (list python-pytest python-pytest-timeout python-setuptools))
22559 (home-page "https://github.com/python-rope/rope")
22560 (synopsis "Refactoring library for Python")
22561 (description
22562 "Rope is a refactoring library for Python. It facilitates the renaming,
22563moving and extracting of attributes, functions, modules, fields and parameters
22564in Python source code. These refactorings can also be applied to occurrences
22565in strings and comments.")
22566 (license license:lgpl3+)))
22567
22568(define-public python-py3status
22569 (package
22570 (name "python-py3status")
22571 (version "3.62")
22572 (source
22573 (origin
22574 (method git-fetch)
22575 (uri (git-reference
22576 (url "https://github.com/ultrabug/py3status")
22577 (commit version)))
22578 (file-name (git-file-name name version))
22579 (sha256
22580 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
22581 (build-system pyproject-build-system)
22582 (arguments
22583 (list
22584 #:phases
22585 #~(modify-phases %standard-phases
22586 (add-before 'build 'hardcode-file-path
22587 (lambda* (#:key inputs #:allow-other-keys)
22588 (substitute* "py3status/parse_config.py"
22589 (("\\[\"file\", \"-b\"")
22590 (format #f "[~s, \"-b\""
22591 (search-input-file inputs "bin/file")))))))))
22592 (native-inputs (list python-hatchling python-pytest))
22593 (inputs (list file))
22594 (home-page "https://github.com/ultrabug/py3status")
22595 (synopsis "Extensible i3status wrapper written in Python")
22596 (description
22597 "py3status is an i3status wrapper which extends i3status functionality in
22598a modular way, allowing you to extend your panel with your own code,
22599responding to click events and updating clock every second.")
22600 (license license:bsd-3)))
22601
22602(define-public python-greenlet
22603 (package
22604 (name "python-greenlet")
22605 (version "3.5.1")
22606 (source
22607 (origin
22608 (method git-fetch)
22609 (uri (git-reference
22610 (url "https://github.com/python-greenlet/greenlet")
22611 (commit version)))
22612 (file-name (git-file-name name version))
22613 (sha256
22614 (base32 "1hvnpkmd9r9li62p5gmidkyq4zazi5adw5c2cah8w2f4n47zg7ix"))))
22615 (build-system pyproject-build-system)
22616 (arguments
22617 (list
22618 #:test-flags #~(list "--pyargs" "greenlet")
22619 #:phases
22620 #~(modify-phases %standard-phases
22621 (add-before 'check 'remove-local-source
22622 (lambda _
22623 (delete-file-recursively "src/greenlet"))))))
22624 (native-inputs
22625 (list python-objgraph
22626 python-pytest
22627 python-psutil
22628 python-setuptools))
22629 (home-page "https://greenlet.readthedocs.io/")
22630 (synopsis "Lightweight in-process concurrent programming")
22631 (description
22632 "Greenlet package is a spin-off of Stackless, a version of CPython
22633that supports micro-threads called \"tasklets\". Tasklets run
22634pseudo-concurrently (typically in a single or a few OS-level threads) and
22635are synchronized with data exchanges on \"channels\".")
22636 (license (list license:psfl license:expat))))
22637
22638(define-public python-objgraph
22639 (package
22640 (name "python-objgraph")
22641 (version "3.6.2")
22642 (source
22643 (origin
22644 (method url-fetch)
22645 (uri (pypi-uri "objgraph" version))
22646 (sha256
22647 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
22648 (build-system pyproject-build-system)
22649 (arguments
22650 (list
22651 #:test-flags
22652 #~(list "tests.py"
22653 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
22654 ;; [], [], [], [], [], [], [], ...
22655 "-k" "not test_at_addrs")))
22656 (native-inputs
22657 (list graphviz
22658 python-pytest
22659 python-setuptools))
22660 (propagated-inputs
22661 (list python-graphviz))
22662 (home-page "https://mg.pov.lt/objgraph/")
22663 (synopsis "Draw Python object reference graphs with graphviz")
22664 (description
22665 "This package provides tools to draw Python object reference graphs with
22666graphviz.")
22667 (license license:expat)))
22668
22669(define-public python-gevent
22670 (package
22671 (name "python-gevent")
22672 (version "24.11.1")
22673 (source (origin
22674 (method url-fetch)
22675 (uri (pypi-uri "gevent" version))
22676 (sha256
22677 (base32
22678 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
22679 (modules '((guix build utils)))
22680 (snippet
22681 '(begin
22682 ;; unbunding libev and c-ares
22683 (delete-file-recursively "deps")
22684 ;; Remove cythonized files.
22685 (with-directory-excursion "src/gevent"
22686 (for-each delete-file
22687 (append (list "resolver/cares.c"
22688 "queue.c"
22689 "local.c"
22690 "libev/corecext.h"
22691 "libev/corecext.c"
22692 "greenlet.c"
22693 "event.c"
22694 "_waiter.c"
22695 "_tracer.c"
22696 "_semaphore.c"
22697 "_imap.c"
22698 "_ident.c"
22699 "_hub_primitives.c"
22700 "_hub_local.c"
22701 "_greenlet_primitives.c"
22702 "_abstract_linkable.c")
22703 (find-files "." "\\.html$"))))))))
22704 (build-system pyproject-build-system)
22705 (arguments
22706 (list
22707 #:test-flags
22708 '(list
22709 ;; These tests relies on networking which is
22710 ;; not available in the build container.
22711 "test__getaddrinfo_import.py"
22712 ;; These tests rely on KeyboardInterrupts which do not
22713 ;; work inside the build container for some reason
22714 ;; (lack of controlling terminal?).
22715 "test__issues461_471.py"
22716 ;; TODO: Patch out the tests that use getprotobyname, etc
22717 ;; instead of disabling all the tests from these files.
22718 "test__resolver_dnspython.py"
22719 ;; This test contains 'test_unlink', which
22720 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
22721 "test__core_stat.py")
22722 #:phases
22723 #~(modify-phases %standard-phases
22724 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
22725 (lambda _
22726 (substitute* "src/gevent/subprocess.py"
22727 (("/bin/sh") (which "sh")))
22728 (for-each (lambda (file)
22729 (substitute* file
22730 (("/bin/sh") (which "sh"))
22731 (("/bin/true") (which "true"))))
22732 (find-files "src/greentest" "\\.py$"))))
22733 (add-before 'build 'do-not-use-bundled-sources
22734 (lambda _
22735 (setenv "GEVENTSETUP_EMBED" "0")
22736
22737 ;; Prevent building bundled libev.
22738 (substitute* "setup.py"
22739 (("run_make=_BUILDING")
22740 "run_make=False"))))
22741 (add-before 'build 'augment-C_INCLUDE_PATH
22742 (lambda* (#:key inputs #:allow-other-keys)
22743 (let* ((python (dirname (dirname
22744 (search-input-file
22745 inputs "bin/python"))))
22746 (version (python-version python))
22747 (greenlet (string-append
22748 #$(this-package-input "python-greenlet")
22749 "/include/python" version)))
22750 (setenv "C_INCLUDE_PATH"
22751 (string-append greenlet "/:"
22752 (or (getenv "C_INCLUDE_PATH")
22753 ""))))))
22754 (add-before 'check 'pretend-to-be-CI
22755 (lambda _
22756 ;; A few tests are skipped due to network constraints or
22757 ;; get longer timeouts when running in a CI environment.
22758 ;; Piggy-back on that, as we need the same adjustments.
22759 (setenv "TRAVIS" "1")
22760 (setenv "APPVEYOR" "1")))
22761 (add-before 'check 'adjust-tests
22762 (lambda* (#:key test-flags #:allow-other-keys)
22763 (call-with-output-file "skipped_tests.txt"
22764 (lambda (port)
22765 (format port "~a~%" (string-join test-flags "\n"))))))
22766 (replace 'check
22767 (lambda* (#:key tests? #:allow-other-keys)
22768 (when tests?
22769 ;; Use the build daemons configured number of workers.
22770 (setenv "NWORKERS" (number->string (parallel-job-count)))
22771 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
22772 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
22773 (propagated-inputs
22774 (list python-greenlet python-zope-event python-zope-interface))
22775 (native-inputs
22776 (list python-cffi
22777 python-cython
22778 python-dnspython
22779 python-idna
22780 python-objgraph
22781 python-psutil
22782 python-requests
22783 python-setuptools))
22784 (inputs
22785 (list c-ares libev libuv))
22786 (home-page "https://www.gevent.org/")
22787 (synopsis "Coroutine-based network library")
22788 (description
22789 "@code{gevent} is a coroutine-based Python networking library that uses
22790@code{greenlet} to provide a high-level synchronous API on top of the
22791@code{libev} event loop.")
22792 (license license:expat)))
22793
22794(define-public python-fastimport
22795 (package
22796 (name "python-fastimport")
22797 (version "0.9.16")
22798 (source
22799 (origin
22800 (method git-fetch)
22801 (uri (git-reference
22802 (url "https://github.com/jelmer/python-fastimport")
22803 (commit (string-append "v" version))))
22804 (file-name (git-file-name name version))
22805 (sha256
22806 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
22807 (build-system pyproject-build-system)
22808 (arguments (list #:test-backend #~'unittest))
22809 (native-inputs (list python-setuptools))
22810 (home-page "https://github.com/jelmer/python-fastimport")
22811 (synopsis "VCS fastimport parser and generator in Python")
22812 (description
22813 "This package provides a parser for and generator of the Git
22814@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
22815format.")
22816 (license license:gpl2+)))
22817
22818(define-public python-pika
22819 (package
22820 (name "python-pika")
22821 (version "1.3.2")
22822 (source
22823 (origin
22824 (method git-fetch)
22825 (uri (git-reference
22826 (url "https://github.com/pika/pika")
22827 (commit version)))
22828 (file-name (git-file-name name version))
22829 (sha256
22830 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
22831 (build-system pyproject-build-system)
22832 (arguments
22833 (list
22834 #:test-flags
22835 ;; XXX: These test most likely require a running RabbitMQ server.
22836 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
22837 #:phases
22838 #~(modify-phases %standard-phases
22839 (add-before 'check 'configure-tests
22840 (lambda* (#:key tests? #:allow-other-keys)
22841 (when tests?
22842 (setenv "PYTHONPATH" (getcwd))))))))
22843 (native-inputs (list python-pytest
22844 python-gevent
22845 python-tornado
22846 python-twisted
22847 python-setuptools))
22848 (home-page "https://pika.readthedocs.org")
22849 (synopsis "Pure Python AMQP Client Library")
22850 (description
22851 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
22852Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
22853network support library.")
22854 (license license:bsd-3)))
22855
22856(define-public python-pykka
22857 (package
22858 (name "python-pykka")
22859 (version "4.4.2")
22860 (source
22861 (origin
22862 (method git-fetch)
22863 (uri (git-reference
22864 (url "https://github.com/jodal/pykka")
22865 (commit (string-append "v" version))))
22866 (file-name (git-file-name name version))
22867 (sha256
22868 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
22869 (build-system pyproject-build-system)
22870 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
22871 (home-page "https://pykka.readthedocs.io")
22872 (synopsis "Implementation of the actor model")
22873 (description
22874 "Pykka implements the actor model in Python, which introduces some simple
22875rules to control the sharing of state and cooperation between execution units,
22876and makes it easier to build concurrent applications.")
22877 (license license:asl2.0)))
22878
22879;; WARNING: This package is a dependency of mesa.
22880;; XXX: This project was archived by the owner on Dec 21, 2025. It is now
22881;; read-only. Consider to remove when nothing depends on it.
22882(define-public python-ply
22883 (package
22884 (name "python-ply")
22885 (version "3.11")
22886 (source
22887 (origin
22888 (method url-fetch)
22889 (uri (pypi-uri "ply" version))
22890 (sha256
22891 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
22892 (build-system pyproject-build-system)
22893 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
22894 (native-inputs
22895 (list python-setuptools))
22896 (home-page "http://www.dabeaz.com/ply/")
22897 (synopsis "Python Lex & Yacc")
22898 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
22899It uses LR parsing and does extensive error checking.")
22900 (license license:bsd-3)))
22901
22902(define-public python-kazoo
22903 (package
22904 (name "python-kazoo")
22905 (version "2.10.0")
22906 (source
22907 (origin
22908 (method git-fetch)
22909 (uri (git-reference
22910 (url "https://github.com/python-zk/kazoo")
22911 (commit version)))
22912 (file-name (git-file-name name version))
22913 (sha256
22914 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
22915 (build-system pyproject-build-system)
22916 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
22917 (native-inputs (list python-setuptools))
22918 (home-page "https://kazoo.readthedocs.org")
22919 (synopsis "High-level Zookeeper client library")
22920 (description
22921 "Kazoo is a Python client library for the Apache Zookeeper distributed
22922application service. It is designed to be easy to use and to avoid common
22923programming errors.")
22924 (license license:asl2.0)))
22925
22926(define-public python-columnize
22927 (package
22928 (name "python-columnize")
22929 (version "0.3.11")
22930 (source
22931 (origin
22932 (method url-fetch)
22933 (uri (pypi-uri "columnize" version))
22934 (sha256
22935 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
22936 (build-system pyproject-build-system)
22937 (native-inputs (list python-pytest python-setuptools))
22938 (home-page "https://github.com/rocky/pycolumnize")
22939 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
22940 (description
22941 "This package provides a way to format a simple (i.e. not nested) list
22942into aligned columns.")
22943 (license license:expat)))
22944
22945(define-public python-pysol-cards
22946 (package
22947 (name "python-pysol-cards")
22948 (version "0.24.0")
22949 (source
22950 (origin
22951 (method url-fetch)
22952 (uri (pypi-uri "pysol_cards" version))
22953 (sha256
22954 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
22955 (build-system pyproject-build-system)
22956 (arguments
22957 (list
22958 #:phases
22959 #~(modify-phases %standard-phases
22960 (replace 'check
22961 (lambda* (#:key test-flags tests? #:allow-other-keys)
22962 (when tests?
22963 (apply invoke
22964 "python"
22965 "-m"
22966 "unittest"
22967 "discover"
22968 "tests"
22969 test-flags)))))))
22970 (native-inputs (list python-setuptools python-wheel))
22971 (home-page "https://github.com/shlomif/pysol_cards")
22972 (synopsis "Deal PySol FC Cards")
22973 (description
22974 "The pysol-cards python modules provide code to generate the initial deals of
22975some PySol games.")
22976 (license license:expat)))
22977
22978(define-public python-freecell-solver
22979 (package
22980 (name "python-freecell-solver")
22981 (version "0.6.0")
22982 (source
22983 (origin
22984 (method url-fetch)
22985 (uri (pypi-uri "freecell_solver" version))
22986 (sha256
22987 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
22988 (build-system pyproject-build-system)
22989 (propagated-inputs (list python-cffi))
22990 (native-inputs (list python-pytest python-setuptools))
22991 (home-page "https://pypi.org/project/freecell-solver/")
22992 (synopsis "Freecell Solver bindings")
22993 (description
22994 "This package provides Python bindings for the freecell-solver
22995package. Freecell Solver is a program that automatically solves layouts of
22996Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
22997and Seahaven Towers, as well as Simple Simon boards.")
22998 (license license:expat)))
22999
23000(define-public python-inflection
23001 (package
23002 (name "python-inflection")
23003 (version "0.5.1")
23004 (source
23005 (origin
23006 (method git-fetch)
23007 (uri (git-reference
23008 (url "https://github.com/jpvanhal/inflection")
23009 (commit version)))
23010 (file-name (git-file-name name version))
23011 (sha256
23012 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
23013 (build-system pyproject-build-system)
23014 (native-inputs (list python-pytest python-setuptools))
23015 (home-page "https://github.com/jpvanhal/inflection")
23016 (synopsis "Python string transformation library")
23017 (description
23018 "Inflection is a string transformation library. It singularizes
23019and pluralizes English words, and transforms strings from CamelCase to
23020underscored string.")
23021 (license license:expat)))
23022
23023(define-public python-krb5
23024 (package
23025 (name "python-krb5")
23026 (version "0.5.1")
23027 (source
23028 (origin
23029 (method url-fetch)
23030 (uri (pypi-uri "krb5" version))
23031 (sha256
23032 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
23033 (build-system pyproject-build-system)
23034 (inputs (list mit-krb5))
23035 (native-inputs (list python-cython python-k5test python-pytest
23036 python-setuptools python-wheel))
23037 (home-page "https://github.com/jborean93/pykrb5")
23038 (synopsis "Kerberos API bindings for Python")
23039 (description "This library provides Python functions that wraps the
23040Kerberos 5 C API.")
23041 (license license:expat)))
23042
23043(define-public python-pylev
23044 (package
23045 (name "python-pylev")
23046 (version "1.4.0")
23047 (source
23048 (origin
23049 (method git-fetch)
23050 (uri (git-reference
23051 (url "https://github.com/toastdriven/pylev")
23052 (commit (string-append "v" version))))
23053 (file-name (git-file-name name version))
23054 (sha256
23055 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
23056 (build-system pyproject-build-system)
23057 (arguments
23058 (list
23059 #:test-backend #~'custom
23060 #:test-flags #~(list "tests.py")))
23061 (native-inputs (list python-setuptools))
23062 (home-page "https://github.com/toastdriven/pylev")
23063 (synopsis "Levenshtein distance implementation in Python")
23064 (description
23065 "Pure Python Levenshtein implementation, based off the Wikipedia code
23066samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
23067 (license license:bsd-3)))
23068
23069(define-public python-cleo
23070 (package
23071 (name "python-cleo")
23072 (version "2.1.0")
23073 (source (origin
23074 (method url-fetch)
23075 (uri (pypi-uri "cleo" version))
23076 (sha256
23077 (base32
23078 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
23079 (build-system pyproject-build-system)
23080 (native-inputs
23081 (list python-poetry-core
23082 python-mock
23083 python-pytest-mock
23084 python-pytest))
23085 (propagated-inputs
23086 (list python-crashtest python-rapidfuzz))
23087 (home-page "https://github.com/sdispater/cleo")
23088 (synopsis "Command-line arguments library for Python")
23089 (description
23090 "Cleo allows you to create command-line commands with signature in
23091docstring and colored output.")
23092 (license license:expat)))
23093
23094(define-public python-shellingham
23095 (package
23096 (name "python-shellingham")
23097 (version "1.5.4")
23098 (source
23099 (origin
23100 (method url-fetch)
23101 (uri (pypi-uri "shellingham" version))
23102 (sha256
23103 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
23104 (build-system pyproject-build-system)
23105 (native-inputs
23106 (list python-pytest python-pytest-mock python-setuptools python-wheel))
23107 (home-page "https://github.com/sarugaku/shellingham")
23108 (synopsis "Tool to detect surrounding shell")
23109 (description
23110 "Shellingham detects what shell the current Python executable is
23111running in.")
23112 (license license:isc)))
23113
23114(define-public python-shshsh
23115 (package
23116 (name "python-shshsh")
23117 (version "1.0.5")
23118 (source
23119 (origin
23120 (method git-fetch)
23121 (uri
23122 (git-reference
23123 (url "https://github.com/zqqqqz2000/shshsh")
23124 (commit
23125 "fd21c8696aebaae04507760c16cb45979291fef5")))
23126 (file-name (git-file-name name version))
23127 (sha256
23128 (base32
23129 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
23130 (build-system pyproject-build-system)
23131 (native-inputs
23132 (list python-poetry-core
23133 python-pytest))
23134 (home-page "https://github.com/zqqqqz2000/shshsh")
23135 (synopsis "Write Shell commands simply and safely within Python")
23136 (description "This package provides a way to write Shell commands from
23137within Python. Python functions can be chained together to process input
23138Bash control characters are escapted so that parameters can be passed
23139without worrying about command injection.")
23140 (license license:expat)))
23141
23142(define-public python-memcached
23143 (package
23144 (name "python-memcached")
23145 (version "1.62")
23146 (source
23147 (origin
23148 (method git-fetch)
23149 (uri (git-reference
23150 (url "https://github.com/linsomniac/python-memcached")
23151 (commit version)))
23152 (file-name (git-file-name name version))
23153 (sha256
23154 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
23155 (build-system pyproject-build-system)
23156 (arguments
23157 (list
23158 #:tests? #f ;Requires a connection to a socket.
23159 #:test-backend #~'unittest))
23160 (native-inputs (list python-setuptools))
23161 (home-page "https://github.com/linsomniac/python-memcached")
23162 (synopsis "Pure python memcached client")
23163 (description
23164 "This software is a pure Python interface to the memcached memory cache
23165daemon. It is the client side software which allows storing values in one or
23166more, possibly remote, memcached servers.")
23167 (license license:psfl)))
23168
23169(define-public python-mergedeep
23170 (package
23171 (name "python-mergedeep")
23172 (version "1.3.4")
23173 (source
23174 (origin
23175 (method git-fetch)
23176 (uri (git-reference
23177 (url "https://github.com/clarketm/mergedeep")
23178 (commit (string-append "v" version))))
23179 (file-name (git-file-name name version))
23180 (sha256
23181 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
23182 (build-system pyproject-build-system)
23183 (arguments (list #:test-backend #~'unittest))
23184 (native-inputs (list python-setuptools))
23185 (home-page "https://github.com/clarketm/mergedeep")
23186 (synopsis "Deep merge function for Python")
23187 (description
23188 "This package provides a deep merge function for Python, useful to
23189combine multiple data objects as one.")
23190 (license license:expat)))
23191
23192(define-public python-clikit
23193 (package
23194 (name "python-clikit")
23195 (version "0.6.2")
23196 (source
23197 (origin
23198 (method git-fetch)
23199 (uri (git-reference
23200 (url "https://github.com/sdispater/clikit")
23201 (commit version)))
23202 (file-name (git-file-name name version))
23203 (sha256
23204 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
23205 (build-system pyproject-build-system)
23206 (arguments
23207 (list
23208 #:phases
23209 #~(modify-phases %standard-phases
23210 (add-after 'unpack 'relax-requirements
23211 (lambda _
23212 (substitute* "pyproject.toml"
23213 (("^crashtest.*")
23214 (format #f "crashtest=~s"
23215 #$(package-version
23216 (this-package-input "python-crashtest"))))))))))
23217 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
23218 (propagated-inputs (list python-crashtest python-pastel python-pylev))
23219 (home-page "https://github.com/sdispater/clikit")
23220 (synopsis "Group of utilities to build command line interfaces")
23221 (description
23222 "CliKit is a group of utilities to build testable command line
23223interfaces.")
23224 (license license:expat)))
23225
23226(define-public python-cattrs
23227 (package
23228 (name "python-cattrs")
23229 (version "26.1.0")
23230 (source
23231 (origin
23232 (method git-fetch)
23233 (uri (git-reference
23234 (url "https://github.com/python-attrs/cattrs")
23235 (commit (string-append "v" version))))
23236 (file-name (git-file-name name version))
23237 (sha256
23238 (base32 "0msn1zgv7shlh7nnmhydg7gv6j0y9yy1061f7qcj31jhzd7bnl4b"))))
23239 (build-system pyproject-build-system)
23240 (arguments
23241 (list
23242 ;; tests: 1010 passed, 15 xfailed
23243 #:test-flags
23244 #~(list "-m" "not benchmark"
23245 "--numprocesses" (number->string (parallel-job-count)))
23246 #:phases
23247 #~(modify-phases %standard-phases
23248 (add-after 'unpack 'fix-pytest-config
23249 (lambda _
23250 (substitute* "pyproject.toml"
23251 ;; All options are benchmark related.
23252 (("addopts =.*") "\n")))))))
23253 (native-inputs
23254 (list python-hatchling
23255 python-hatch-vcs
23256 python-immutables
23257 python-pytest
23258 python-pytest-benchmark
23259 python-pytest-xdist))
23260 (propagated-inputs
23261 (list python-attrs
23262 python-typing-extensions
23263 ;; [optional]
23264 python-cbor2
23265 python-msgpack
23266 python-msgspec
23267 python-orjson
23268 python-pymongo ;for the bson module
23269 python-pyyaml
23270 python-tomli-w
23271 python-tomlkit
23272 python-ujson))
23273 (home-page "https://github.com/python-attrs/cattrs")
23274 (synopsis "Python library for structuring and unstructuring data")
23275 (description "@code{cattrs} is an Python library for structuring and
23276unstructuring data. @code{cattrs} works best with @code{attrs} classes,
23277@code{dataclasses} and the usual Python collections, but other kinds of
23278classes can also be supported by manually registering converters.")
23279 (license license:expat)))
23280
23281;; A bare minimal package, mainly to use in tests and reduce closure
23282;; size. Tests are left out in the main package to slim down native-inputs and
23283;; optional propagated-inputs.
23284(define-public python-cattrs-minimal
23285 (package/inherit python-cattrs
23286 (name "python-cattrs-minimal")
23287 (arguments
23288 (substitute-keyword-arguments arguments
23289 ((#:tests? _ #t) #f)))
23290 (native-inputs
23291 (list python-hatchling
23292 python-hatch-vcs))
23293 (propagated-inputs
23294 (list python-attrs
23295 python-typing-extensions))))
23296
23297(define-public python-cachy
23298 (package
23299 (name "python-cachy")
23300 (version "0.3.0")
23301 (source
23302 (origin
23303 (method url-fetch)
23304 (uri (pypi-uri "cachy" version))
23305 (sha256
23306 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
23307 (build-system pyproject-build-system)
23308 (arguments
23309 (list
23310 #:phases
23311 #~(modify-phases %standard-phases
23312 (replace 'check
23313 (lambda* (#:key tests? #:allow-other-keys)
23314 (when tests?
23315 ;; Make it compatible with python-flexmock 0.12.
23316 (substitute* (find-files "tests" "\\.py$")
23317 (("from flexmock import flexmock, flexmock_teardown")
23318 (string-append "from flexmock import flexmock\n"
23319 "from flexmock._api import flexmock_teardown")))
23320 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
23321 "pytest")))))))
23322 (native-inputs
23323 (list memcached
23324 python-fakeredis
23325 python-flexmock
23326 python-pifpaf
23327 python-pytest
23328 python-setuptools
23329 python-wheel))
23330 (propagated-inputs
23331 (list python-memcached
23332 python-msgpack
23333 python-redis))
23334 (home-page "https://github.com/sdispater/cachy")
23335 (synopsis "Simple yet effective caching library")
23336 (description
23337 "Cachy provides a simple yet effective caching library. A simple but
23338powerful API: thread-safety; decorator syntax; support for memcached, redis,
23339database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
23340 (license license:expat)))
23341
23342(define-public python-pyproject-api
23343 (package
23344 (name "python-pyproject-api")
23345 (version "1.10.0")
23346 (source
23347 (origin
23348 (method url-fetch)
23349 (uri (pypi-uri "pyproject_api" version))
23350 (sha256
23351 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
23352 (build-system pyproject-build-system)
23353 (native-inputs
23354 (list python-hatch-vcs
23355 python-hatchling
23356 python-pytest
23357 python-pytest-mock
23358 python-setuptools))
23359 (propagated-inputs
23360 (list python-packaging python-tomli))
23361 (home-page "https://pyproject-api.readthedocs.io/latest/")
23362 (synopsis "API to interact with the Python pyproject.toml based projects")
23363 (description
23364 "@code{pyproject-api} aims to abstract away interaction with
23365@code{pyproject.toml} style projects in a flexible way.")
23366 (license license:expat)))
23367
23368(define-public python-lark
23369 (package
23370 (name "python-lark")
23371 (version "1.2.2")
23372 (source
23373 (origin
23374 (method url-fetch)
23375 (uri (pypi-uri "lark" version))
23376 (sha256
23377 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
23378 (build-system pyproject-build-system)
23379 (native-inputs (list python-pytest python-setuptools python-wheel))
23380 (home-page "https://github.com/lark-parser/lark")
23381 (synopsis "Multi-language parser for Python")
23382 (description
23383 "Lark is a parser built with a focus on ergonomics, performance and
23384resilience. Lark can parse all context-free languages. That means it is
23385capable of parsing almost any programming language out there, and to
23386some degree most natural languages too.")
23387 (license license:expat)))
23388
23389(define-public python-find-libpython
23390 (package
23391 (name "python-find-libpython")
23392 (version "0.4.1")
23393 (source
23394 (origin
23395 (method git-fetch)
23396 (uri (git-reference
23397 (url "https://github.com/ktbarrett/find_libpython")
23398 (commit (string-append "v" version))))
23399 (file-name (git-file-name name version))
23400 (sha256
23401 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
23402 (build-system pyproject-build-system)
23403 (native-inputs (list python-setuptools python-wheel
23404 ;; tests
23405 python-pytest))
23406 (home-page "https://github.com/ktbarrett/find_libpython")
23407 (synopsis "Find the path to the @code{libpython} dynamic library")
23408 (description
23409 "@code{find_libpython} helps find the path to the
23410@code{libpython} dynamic library for the current Python environment. It is
23411both a script and a Python package.")
23412 (license license:expat)))
23413
23414(define-public python-libcst
23415 (package
23416 (name "python-libcst")
23417 (version "1.6.0")
23418 (source (origin
23419 (method url-fetch)
23420 (uri (pypi-uri "libcst" version))
23421 (sha256
23422 (base32
23423 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
23424 (snippet
23425 #~(begin (use-modules (guix build utils))
23426 ;; This is mostly to keep the cargo-build-system happy
23427 (with-output-to-file "Cargo.toml"
23428 (lambda ()
23429 (format #t "\
23430[workspace]
23431
23432members = [
23433 \"native\",]")))))))
23434 (build-system cargo-build-system)
23435 (arguments
23436 (list
23437 #:install-source? #false
23438 #:cargo-test-flags
23439 ;; According to .github/workflows/ci.yml
23440 '(list "--manifest-path=native/Cargo.toml"
23441 "--release"
23442 "--no-default-features")
23443 #:imported-modules `(,@%pyproject-build-system-modules
23444 ,@%cargo-build-system-modules)
23445 #:modules `((guix build cargo-build-system)
23446 ((guix build pyproject-build-system) #:prefix py:)
23447 (guix build utils))
23448 #:phases
23449 #~(modify-phases %standard-phases
23450 (add-after 'unpack 'prepare-source
23451 (lambda _
23452 (delete-file "native/Cargo.lock")))
23453 (replace 'build
23454 (assoc-ref py:%standard-phases 'build))
23455 (add-after 'install 'wrap
23456 (lambda _
23457 ;; Collection of python- and pyproject-build-system phases
23458 ;; between 'install and 'check.
23459 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
23460 (assoc-ref py:%standard-phases 'add-install-to-path)
23461 (assoc-ref py:%standard-phases 'wrap)
23462 (assoc-ref py:%standard-phases 'create-entrypoints)
23463 (assoc-ref py:%standard-phases 'compile-bytecode)))
23464 ;; We are not the only ones who cannot load libcst.native
23465 ;; during the 'check phase
23466 ;; https://github.com/Instagram/LibCST/issues/1176
23467 ;; (add-after 'wrap 'python-check
23468 ;; (lambda args
23469 ;; (apply (assoc-ref py:%standard-phases 'check)
23470 ;; #:test-flags '()
23471 ;; args)))
23472 (replace 'install
23473 (assoc-ref py:%standard-phases 'install)))))
23474 (native-inputs
23475 (list python-minimal-wrapper
23476 python-hypothesmith
23477 python-pytest
23478 python-setuptools
23479 python-setuptools-rust
23480 python-setuptools-scm
23481 python-wheel))
23482 (inputs (cons maturin (cargo-inputs 'python-libcst)))
23483 (propagated-inputs
23484 (list python-pyyaml))
23485 (home-page "https://github.com/Instagram/LibCST")
23486 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
23487 (description
23488 "LibCST parses Python source code as a CST tree that keeps all
23489formatting details (comments, whitespaces, parentheses, etc). It's useful
23490for building automated refactoring (codemod) applications and linters.
23491LibCST creates a compromise between an Abstract Syntax Tree (AST) and
23492a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
23493naming node types and fields, LibCST creates a lossless CST that looks and
23494feels like an AST.")
23495 (license (list license:expat
23496 ;; Some files unde libcst/_parser/ are under Python Software
23497 ;; Foundation license (see LICENSE file for details)
23498 license:psfl
23499 ;; libcst/_add_slots.py
23500 license:asl2.0))))
23501
23502(define-public python-libcst-minimal
23503 (hidden-package
23504 (package
23505 (inherit python-libcst)
23506 (name "python-libcst-minimal")
23507 (arguments
23508 (substitute-keyword-arguments arguments
23509 ((#:tests? _ #t) #f)))
23510 (native-inputs
23511 (list python-minimal-wrapper
23512 python-setuptools
23513 python-setuptools-rust
23514 python-setuptools-scm
23515 python-wheel)))))
23516
23517(define-public python-lazy-loader
23518 (package
23519 (name "python-lazy-loader")
23520 (version "0.4")
23521 (source (origin
23522 (method url-fetch)
23523 (uri (pypi-uri "lazy_loader" version))
23524 (sha256
23525 (base32
23526 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
23527 (build-system pyproject-build-system)
23528 (native-inputs
23529 (list python-numpy python-pytest python-setuptools))
23530 (propagated-inputs
23531 (list python-flit-core
23532 python-setuptools
23533 python-wheel))
23534 (home-page "https://scientific-python.org/specs/spec-0001/")
23535 (synopsis "Load subpackages and functions on demand")
23536 (description "@code{python-lazy-loader} makes it easy to load subpackages
23537and functions on demand. Its main features are:
23538
23539@itemize
23540@item Allow subpackages to be made visible to users without incurring import
23541costs.
23542@item Allow external libraries to be imported only when used, improving import
23543times.
23544@end itemize")
23545 (license license:bsd-3)))
23546
23547(define-public python-lazy-object-proxy
23548 (package
23549 (name "python-lazy-object-proxy")
23550 (version "1.12.0")
23551 (source
23552 (origin
23553 (method git-fetch)
23554 (uri (git-reference
23555 (url "https://github.com/ionelmc/python-lazy-object-proxy")
23556 (commit (string-append "v" version))))
23557 (file-name (git-file-name name version))
23558 (sha256
23559 (base32 "1qig879igkjmj4mir26b0n40w3vn5jqn293172s6npxnb4k90kzk"))))
23560 (build-system pyproject-build-system)
23561 (native-inputs
23562 (list python-pytest
23563 python-pytest-benchmark
23564 python-setuptools
23565 python-setuptools-scm))
23566 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
23567 (synopsis "Lazy object proxy for Python")
23568 (description
23569 "Lazy object proxy is an object that wraps a callable but defers the call
23570until the object is actually required, and caches the result of said call.")
23571 (license license:bsd-2)))
23572
23573(define-public python-dnspython
23574 ;; TODO: Move to (gnu packages python-web).
23575 (package
23576 (name "python-dnspython")
23577 (version "2.8.0")
23578 (source
23579 (origin
23580 (method url-fetch)
23581 (uri (pypi-uri "dnspython" version))
23582 (sha256
23583 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
23584 (build-system pyproject-build-system)
23585 (arguments
23586 (list
23587 ;; tests: 1216 passed, 198 skipped, 2 deselected
23588 #:test-flags
23589 #~(list
23590 ;; AssertionError: assert False
23591 "--deselect=tests/test_features.py::test_have"
23592 ;; dns.exception.SyntaxError: protocol not found
23593 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
23594 #:phases
23595 #~(modify-phases %standard-phases
23596 (add-after 'unpack 'patch-getprotobyname-calls
23597 ;; These calls are problematic in the build environment as there is
23598 ;; no /etc/protocols. This breaks the sanity-check phase of any
23599 ;; package depending on this one.
23600 (lambda _
23601 (substitute* "dns/rdtypes/IN/WKS.py"
23602 (("socket.getprotobyname\\('tcp'\\)")
23603 "6")
23604 (("socket.getprotobyname\\('udp'\\)")
23605 "17")))))))
23606 (native-inputs
23607 (list python-hatchling
23608 python-pytest))
23609 (propagated-inputs
23610 (append
23611 (if (supported-package? python-cryptography)
23612 (list ;; DNSSEC
23613 python-cryptography
23614 ;; DNS over Quic
23615 python-aioquic
23616 ;; DNS over HTTPS
23617 python-h2
23618 python-httpcore
23619 python-httpx)
23620 '())
23621 (list python-idna
23622 python-trio)))
23623 (home-page "https://www.dnspython.org")
23624 (synopsis "DNS toolkit for Python")
23625 (description
23626 "dnspython is a DNS toolkit for Python. It supports almost all record
23627types. It can be used for queries, zone transfers, and dynamic updates.
23628It supports TSIG authenticated messages and EDNS0.")
23629 (license license:expat)))
23630
23631;; A bare minimal package, mainly to use in tests and reduce closure size.
23632;; Tests are left out in the main package to slim down native-inputs and
23633;; propagated-inputs.
23634(define-public python-dnspython-minimal
23635 (package/inherit python-dnspython
23636 (name "python-dnspython-minimal")
23637 (arguments
23638 (substitute-keyword-arguments arguments
23639 ((#:tests? _ #t) #f)))
23640 (native-inputs
23641 (list python-hatchling))
23642 (propagated-inputs '())))
23643
23644(define-public python-py3dns
23645 (package
23646 (name "python-py3dns")
23647 (version "4.0.2")
23648 (source
23649 (origin
23650 (method url-fetch)
23651 (uri (pypi-uri "py3dns" version))
23652 (sha256
23653 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
23654 (build-system pyproject-build-system)
23655 (arguments
23656 ;; This package wants to read /etc/resolv.conf. We can't patch it without
23657 ;; removing functionality so we don't run tests.
23658 (list #:tests? #f))
23659 (native-inputs (list python-flit-core))
23660 (home-page "https://launchpad.net/py3dns")
23661 (synopsis "Python 3 DNS library")
23662 (description
23663 "This Python 3 module provides a DNS API for looking up DNS entries from
23664within Python 3 modules and applications. This module is a simple,
23665lightweight implementation.")
23666 (license license:psfl)))
23667
23668(define-public python-email-validator
23669 (package
23670 (name "python-email-validator")
23671 (version "2.2.0")
23672 (source
23673 (origin
23674 (method url-fetch)
23675 (uri (pypi-uri "email_validator" version))
23676 (sha256
23677 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
23678 (build-system pyproject-build-system)
23679 (arguments
23680 (list
23681 #:test-flags
23682 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
23683 #~(list "-k" "not test_caching_dns_resolver")))
23684 (native-inputs
23685 (list python-pytest
23686 python-setuptools
23687 python-wheel))
23688 (propagated-inputs
23689 (list python-dnspython
23690 python-idna))
23691 (home-page "https://github.com/JoshData/python-email-validator")
23692 (synopsis "Email address validation library for Python")
23693 (description
23694 "This library validates email address syntax and deliverability.")
23695 (license license:cc0)))
23696
23697(define-public python-faker
23698 (package
23699 (name "python-faker")
23700 (version "37.4.2")
23701 (source
23702 (origin
23703 (method url-fetch)
23704 (uri (pypi-uri "faker" version))
23705 (sha256
23706 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23707 (build-system pyproject-build-system)
23708 ;; tests: 2104 passed, 12 skipped, 2 warnings
23709 (native-inputs
23710 (list python-freezegun
23711 python-pytest
23712 python-setuptools
23713 python-validators))
23714 (propagated-inputs
23715 (list python-tzdata))
23716 (home-page "https://github.com/joke2k/faker")
23717 (synopsis "Python package that generates fake data")
23718 (description
23719 "Faker is a Python package that generates fake data such as names,
23720addresses, and phone numbers.")
23721 (license license:expat)))
23722
23723(define-public python-pyaml
23724 (package
23725 (name "python-pyaml")
23726 (version "25.7.0")
23727 (source
23728 (origin
23729 (method url-fetch)
23730 (uri (pypi-uri "pyaml" version))
23731 (sha256
23732 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23733 (build-system pyproject-build-system)
23734 (native-inputs
23735 (list python-pytest
23736 python-setuptools))
23737 (propagated-inputs
23738 (list python-pyyaml))
23739 (home-page "https://github.com/mk-fg/pretty-yaml")
23740 (synopsis "YAML pretty-print library for Python")
23741 (description
23742 "pyaml is a PyYAML based python module to produce pretty and readable
23743YAML-serialized data.")
23744 (license license:wtfpl2)))
23745
23746(define-public python-pyyaml-env-tag
23747 (package
23748 (name "python-pyyaml-env-tag")
23749 (version "1.1")
23750 (source
23751 (origin
23752 (method git-fetch)
23753 (uri (git-reference
23754 (url "https://github.com/waylan/pyyaml-env-tag")
23755 (commit version)))
23756 (file-name (git-file-name name version))
23757 (sha256
23758 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
23759 (build-system pyproject-build-system)
23760 (native-inputs (list python-pytest python-setuptools))
23761 (propagated-inputs (list python-pyyaml))
23762 (home-page "https://github.com/waylan/pyyaml-env-tag")
23763 (synopsis "Custom YAML tag for environment variables")
23764 (description
23765 "This package provides a custom YAML tag for referencing environment
23766variables in YAML files.")
23767 (license license:expat)))
23768
23769(define-public python-prompt-toolkit
23770 (package
23771 (name "python-prompt-toolkit")
23772 (version "3.0.51")
23773 (source
23774 (origin
23775 (method url-fetch)
23776 (uri (pypi-uri "prompt_toolkit" version))
23777 (sha256
23778 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
23779 (build-system pyproject-build-system)
23780 (arguments
23781 (list
23782 #:phases
23783 #~(modify-phases %standard-phases
23784 (add-before 'check 'pre-check
23785 (lambda _
23786 ;; HOME is needed for the test
23787 ;; "test_pathcompleter_can_expanduser".
23788 (setenv "HOME" "/tmp"))))))
23789 (native-inputs
23790 (list python-pytest
23791 python-setuptools))
23792 (propagated-inputs
23793 (list python-wcwidth))
23794 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
23795 (synopsis "Library for building command line interfaces in Python")
23796 (description
23797 "Prompt-Toolkit is a library for building interactive command line
23798interfaces in Python. It's like GNU Readline but it also features syntax
23799highlighting while typing, out-of-the-box multi-line input editing, advanced
23800code completion, incremental search, support for Chinese double-width
23801characters, mouse support, and auto suggestions.")
23802 (license license:bsd-3)))
23803
23804(define-public python-proselint
23805 (package
23806 (name "python-proselint")
23807 (version "0.14.0")
23808 (source
23809 (origin
23810 (method url-fetch)
23811 (uri (pypi-uri "proselint" version))
23812 (sha256
23813 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
23814 (build-system pyproject-build-system)
23815 (arguments
23816 (list
23817 #:phases
23818 #~(modify-phases %standard-phases
23819 (add-after 'unpack 'set-home-directory
23820 (lambda _
23821 (setenv "HOME" "/tmp"))))))
23822 (native-inputs
23823 (list python-poetry-core
23824 python-pytest))
23825 (propagated-inputs
23826 (list python-click))
23827 (home-page "http://proselint.com/")
23828 (synopsis "Linter for prose")
23829 (description "@code{python-proselint} is a linter for English prose, that
23830scans through a file and detects issues.")
23831 (license license:bsd-3)))
23832
23833(define-public python-jedi
23834 (package
23835 (name "python-jedi")
23836 (version "0.19.2")
23837 (source
23838 (origin
23839 (method git-fetch)
23840 (uri (git-reference
23841 (url "https://github.com/davidhalter/jedi")
23842 (commit (string-append "v" version))
23843 (recursive? #true)))
23844 (file-name (git-file-name name version))
23845 (sha256
23846 (base32
23847 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
23848 (build-system pyproject-build-system)
23849 (arguments
23850 (list
23851 #:phases
23852 '(modify-phases %standard-phases
23853 (add-before 'check 'set-HOME
23854 (lambda _ (setenv "HOME" "/tmp"))))))
23855 (native-inputs
23856 (list python-docopt
23857 python-pytest
23858 python-setuptools
23859 python-wheel))
23860 (propagated-inputs
23861 (list python-parso))
23862 (home-page "https://github.com/davidhalter/jedi")
23863 (synopsis "Autocompletion and static analysis library for Python")
23864 (description
23865 "Jedi is a static analysis tool for Python that can be used in Integrated
23866Development Environments (@dfn{IDE}s) and text editors. It understands Python
23867on a deeper level than many other static analysis frameworks for Python.
23868
23869Jedi understands docstrings and you can use Jedi autocompletion in your REPL
23870as well.")
23871 (license license:expat)))
23872
23873(define-public ptpython
23874 (package
23875 (name "ptpython")
23876 (version "3.0.20")
23877 (source
23878 (origin
23879 (method git-fetch)
23880 (uri (git-reference
23881 (url "https://github.com/jonathanslenders/ptpython")
23882 (commit version)))
23883 (file-name (git-file-name name version))
23884 (sha256
23885 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
23886 (build-system pyproject-build-system)
23887 (arguments
23888 (list
23889 ;; XXX: There is a tests/run_tests.py file but all it does is a
23890 ;; sanity check.
23891 #:tests? #f))
23892 (native-inputs (list python-setuptools))
23893 (propagated-inputs
23894 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
23895 (home-page "https://github.com/jonathanslenders/ptpython")
23896 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
23897 (description
23898 "ptpython is a Python read-eval-print loop with IDE-like features.
23899It supports syntax highlighting, multiline editing, autocompletion, mouse,
23900color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
23901etc.")
23902 (license license:bsd-3)))
23903
23904(define-public python-easyprocess
23905 (package
23906 (name "python-easyprocess")
23907 (version "1.1")
23908 (source
23909 (origin
23910 (method git-fetch)
23911 (uri (git-reference
23912 (url "https://github.com/ponty/easyprocess")
23913 (commit version)))
23914 (file-name (git-file-name name version))
23915 (sha256
23916 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
23917 (build-system pyproject-build-system)
23918 (arguments
23919 ;; Tests require pyvirtualdisplay, which requires this package.
23920 (list #:tests? #f))
23921 (native-inputs (list python-setuptools))
23922 (home-page "https://github.com/ponty/easyprocess")
23923 (synopsis "Python subprocess interface")
23924 (description
23925 "@code{easyprocess} is an easy to use Python subprocess interface.")
23926 (license license:bsd-3)))
23927
23928(define-public python-entrypoint2
23929 (package
23930 (name "python-entrypoint2")
23931 (version "0.2.4")
23932 (source
23933 (origin
23934 (method url-fetch)
23935 (uri (pypi-uri "entrypoint2" version))
23936 (sha256
23937 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
23938 (build-system pyproject-build-system)
23939 (native-inputs (list python-easyprocess
23940 python-pytest
23941 python-setuptools
23942 python-wheel))
23943 (home-page "https://github.com/ponty/entrypoint2")
23944 (synopsis "Command-line interface for Python modules")
23945 (description
23946 "@code{entrypoint2} is an easy to use command-line interface for Python
23947 modules based on @code{argparse}. It translates function signature and
23948 documentation to argparse configuration.")
23949 (license license:bsd-3)))
23950
23951(define-public python-pyvirtualdisplay
23952 (package
23953 (name "python-pyvirtualdisplay")
23954 (version "3.0")
23955 (source
23956 (origin
23957 (method url-fetch)
23958 (uri (pypi-uri "PyVirtualDisplay" version))
23959 (sha256
23960 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23961 (build-system pyproject-build-system)
23962 (arguments
23963 (list
23964 ;; tests: 27 passed, 8 deselected
23965 #:test-flags
23966 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23967 ;; OSError: Pillow was built without XCB support
23968 #~(list #$@(map (lambda (test) (string-append "--deselect="
23969 "tests/"
23970 test))
23971 (list "test_smart.py::test_slowshot"
23972 "test_smart.py::test_slowshot_with"
23973 "test_smart.py::test_slowshot_nocrop"
23974 "test_smart.py::test_slowshot_timeout"
23975 "test_smart.py::test_slowshot_timeout_nocrop"
23976 "test_smart2.py::test_double"
23977 "test_smart_thread.py::test_smart"
23978 "test_examples.py::test_screenshot")))))
23979 (native-inputs
23980 (list python-easyprocess
23981 python-entrypoint2
23982 python-psutil
23983 python-pytest
23984 python-setuptools
23985 python-vncdotool-bootstrap
23986 xmessage
23987 xorg-server-for-tests))
23988 (home-page "https://github.com/ponty/pyvirtualdisplay")
23989 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23990 (description
23991 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23992 (license license:bsd-3)))
23993
23994(define-public python-pyserial
23995 (package
23996 (name "python-pyserial")
23997 ;; 3.5 (2020-11-23), use the latest commit as upstream stopped publishing
23998 ;; releases on PyPI or tagging new versions.
23999 (properties '((commit . "a5c48d445fbc1943d4fabf8d9090a50fda3172fd")
24000 (revision . "0")))
24001 (version (git-version "3.5"
24002 (assoc-ref properties 'revision)
24003 (assoc-ref properties 'commit)))
24004 (source
24005 (origin
24006 (method git-fetch)
24007 (uri (git-reference
24008 (url "https://github.com/pyserial/pyserial")
24009 (commit (assoc-ref properties 'commit))))
24010 (file-name (git-file-name name version))
24011 (sha256
24012 (base32 "1mfqs5g4qgp6lll859hy3i4gz7nn95g057s80k01jn2mza12swjp"))))
24013 (build-system pyproject-build-system)
24014 (native-inputs
24015 (list python-pyfakefs
24016 python-pytest
24017 python-setuptools))
24018 (home-page "https://github.com/pyserial/pyserial")
24019 (synopsis "Python Serial Port Bindings")
24020 (description
24021 "@code{pyserial} provide serial port bindings for Python. It supports
24022different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
24023Xon/Xoff. The port is accessed in RAW mode.")
24024 (license license:bsd-3)))
24025
24026(define-public python-pyserial-asyncio
24027 (package
24028 (name "python-pyserial-asyncio")
24029 (version "0.6")
24030 (source
24031 (origin
24032 (method git-fetch)
24033 (uri (git-reference
24034 (url "https://github.com/pyserial/pyserial-asyncio")
24035 (commit (string-append "v" version))))
24036 (file-name (git-file-name name version))
24037 (sha256
24038 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
24039 (build-system pyproject-build-system)
24040 (arguments (list #:test-backend #~'unittest))
24041 (native-inputs (list python-setuptools))
24042 (propagated-inputs (list python-pyserial))
24043 (home-page "https://github.com/pyserial/pyserial-asyncio")
24044 (synopsis "Pyserial asynchronous I/O extension")
24045 (description
24046 "This package extends Pyserial with asynchronous I/O support.")
24047 (license license:bsd-3)))
24048
24049(define-public python-pymemcache
24050 (package
24051 (name "python-pymemcache")
24052 (version "4.0.0")
24053 (source
24054 (origin
24055 (method url-fetch)
24056 (uri (pypi-uri "pymemcache" version))
24057 (sha256
24058 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
24059 (build-system pyproject-build-system)
24060 (arguments
24061 ;; We don't have the zstd module.
24062 (list
24063 #:test-flags
24064 '(list "--ignore=pymemcache/test/test_compression.py")))
24065 (native-inputs
24066 (list python-faker
24067 python-pytest
24068 python-setuptools
24069 python-wheel))
24070 (home-page "https://github.com/pinterest/pymemcache")
24071 (synopsis "Comprehensive, fast, pure Python memcached client")
24072 (description
24073 "This package provides a comprehensive, fast, pure Python memcached
24074client.")
24075 (license license:asl2.0)))
24076
24077(define-public python-pymodbus
24078 (package
24079 (name "python-pymodbus")
24080 (version "3.8.6")
24081 (source
24082 (origin
24083 (method git-fetch)
24084 (uri (git-reference
24085 (url "https://github.com/riptideio/pymodbus")
24086 (commit (string-append "v" version))))
24087 (file-name (git-file-name name version))
24088 (sha256
24089 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
24090 (build-system pyproject-build-system)
24091 (arguments
24092 (list
24093 #:test-flags
24094 #~(list "--ignore"
24095 "test/server/test_simulator_api.py"
24096 ;; These tests require the presence of a certificate.
24097 "--ignore-glob"
24098 "test/examples/*"
24099 "--ignore"
24100 "test/client/test_client.py")))
24101 (native-inputs (list python-mock
24102 python-pytest
24103 python-pytest-asyncio
24104 python-pytest-xdist
24105 python-redis
24106 python-setuptools
24107 python-sqlalchemy
24108 python-tornado
24109 python-twisted
24110 python-wheel))
24111 (propagated-inputs (list python-pyserial
24112 python-six
24113 ;; For the REPL.
24114 python-aiohttp
24115 python-click
24116 python-prompt-toolkit
24117 python-pygments
24118 python-pyserial-asyncio))
24119 (home-page "https://github.com/riptideio/pymodbus/")
24120 (synopsis "Modbus protocol stack in Python")
24121 (description
24122 "Pymodbus is a full Modbus protocol implementation using
24123 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
24124 communications core. It includes the following @emph{client} features:
24125 @itemize
24126 @item full read/write protocol on discrete and register
24127 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
24128 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24129 @item asynchronous and synchronous versions
24130 @item payload builder/decoder utilities
24131 @item pymodbus read eval print loop (REPL).
24132 @end itemize
24133 It also includes the following @emph{server} features:
24134 @itemize
24135 @item can function as a fully implemented Modbus server
24136 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24137 @item asynchronous and synchronous versions
24138 @item full server control context (device information, counters, etc)
24139 @item a number of backing contexts (database, redis, sqlite, a slave device).
24140 @end itemize")
24141 (license license:bsd-3)))
24142
24143(define-public python-exodriver
24144 (package
24145 (name "python-exodriver")
24146 (version "2.6.0")
24147 (source (origin
24148 (method git-fetch)
24149 (uri (git-reference
24150 (url "https://github.com/labjack/exodriver")
24151 (commit (string-append "v" version))))
24152 (file-name (git-file-name name version))
24153 (sha256
24154 (base32
24155 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
24156 (outputs (list "out"
24157 "doc")) ;544 KiB of examples
24158 (build-system gnu-build-system)
24159 (arguments
24160 (list
24161 #:tests? #f ;no test suite
24162 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
24163 (string-append "PREFIX=" #$output)
24164 "RUN_LDCONFIG=0"
24165 "LINK_SO=1")
24166 #:phases
24167 #~(modify-phases %standard-phases
24168 (delete 'configure)
24169 (replace 'build
24170 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24171 (with-directory-excursion "liblabjackusb"
24172 (apply (assoc-ref %standard-phases 'build)
24173 `(,@args #:make-flags ,make-flags)))))
24174 (replace 'install
24175 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24176 (with-directory-excursion "liblabjackusb"
24177 (apply (assoc-ref %standard-phases 'install)
24178 `(,@args #:make-flags ,make-flags)))
24179 ;; Install udev rules.
24180 (install-file "90-labjack.rules"
24181 (string-append #$output "/lib/udev/rules.d"))
24182 ;; Install examples.
24183 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
24184 (mkdir-p doc)
24185 (copy-recursively "examples"
24186 (string-append doc "/examples"))))))))
24187 (inputs (list libusb))
24188 (home-page "https://github.com/labjack/exodriver")
24189 (synopsis "USB driver for LabJack data acquisition instruments")
24190 (description "This package provides @code{liblabjackusb}, a USB library for low-level
24191communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
24192instruments. A udev rule is also included to allow unprivileged users to
24193communicate with the instruments via USB.")
24194 (license license:expat))) ;see README
24195
24196(define-public python-labjack
24197 (package
24198 (name "python-labjack")
24199 (version "2.1.0")
24200 (source (origin
24201 (method url-fetch)
24202 (uri (pypi-uri "LabJackPython" version))
24203 (sha256
24204 (base32
24205 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
24206 (build-system pyproject-build-system)
24207 (arguments
24208 (list
24209 #:tests? #f ;no test suite
24210 #:phases
24211 #~(modify-phases %standard-phases
24212 (add-after 'unpack 'patch-liblabjackusb.so
24213 (lambda* (#:key inputs #:allow-other-keys)
24214 (substitute* (find-files "." "\\.py$")
24215 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
24216 (format #f "ctypes.CDLL(~s"
24217 (search-input-file inputs
24218 "lib/liblabjackusb.so")))))))))
24219 (native-inputs (list python-setuptools))
24220 ;; exodriver is provided as a regular input, as only its shared object is
24221 ;; used, not its Python API.
24222 (inputs (list python-exodriver))
24223 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
24224 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
24225 (description
24226 "This Python library allows communicating with the U3, U6, UE9 and U12
24227LabJack data acquisition (DAQ) modules.")
24228 (license license:expat))) ;see setup.py
24229
24230(define-public python-kivy-garden
24231 (package
24232 (name "python-kivy-garden")
24233 (version "0.1.5")
24234 (source
24235 (origin
24236 (method git-fetch) ; source was removed from PyPI
24237 (uri (git-reference
24238 (url "https://github.com/kivy-garden/garden")
24239 (commit (string-append "v" version))))
24240 (file-name (git-file-name name version))
24241 (sha256
24242 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
24243 (build-system pyproject-build-system)
24244 (arguments
24245 (list
24246 #:tests? #f)) ; no tests in PyPI or Git distributions
24247 (native-inputs
24248 (list python-setuptools
24249 python-wheel))
24250 (propagated-inputs
24251 (list python-requests))
24252 (home-page "https://github.com/kivy-garden/garden")
24253 (synopsis "Garden tool for Kivy flowers")
24254 (description
24255 "This package provides the @command{garden} command to install packages
24256for Kivy, the multitouch application platform.")
24257 (license license:expat)))
24258
24259(define-public python-async-lru
24260 (package
24261 (name "python-async-lru")
24262 (version "2.0.4")
24263 (source
24264 (origin
24265 (method url-fetch)
24266 (uri (pypi-uri "async-lru" version))
24267 (sha256
24268 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
24269 (build-system pyproject-build-system)
24270 (native-inputs
24271 (list python-pytest
24272 python-pytest-asyncio
24273 python-pytest-timeout
24274 python-setuptools
24275 python-wheel))
24276 (propagated-inputs
24277 (list python-typing-extensions))
24278 (home-page "https://github.com/aio-libs/async-lru")
24279 (synopsis "Simple LRU cache for asyncio")
24280 (description
24281 "This package is a port of Python's built-in @code{functools.lru_cache}
24282function for @code{asyncio}. To better handle async behaviour, it also
24283ensures multiple concurrent calls will only result in 1 call to the wrapped
24284function, with all awaits receiving the result of that call when it
24285completes.")
24286 (license license:expat)))
24287
24288(define-public python-asyncinject
24289 (package
24290 (name "python-asyncinject")
24291 (version "0.6.1")
24292 (source
24293 (origin
24294 (method git-fetch)
24295 (uri (git-reference
24296 (url "https://github.com/simonw/asyncinject")
24297 (commit version)))
24298 (file-name (git-file-name name version))
24299 (sha256
24300 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
24301 (build-system pyproject-build-system)
24302 (native-inputs
24303 (list python-pytest
24304 python-pytest-asyncio
24305 python-setuptools))
24306 (home-page "https://github.com/simonw/asyncinject")
24307 (synopsis
24308 "Run async workflows using pytest-fixtures-style dependency injection")
24309 (description
24310 "This package lets you run asynchronous workflows using
24311pytest-fixtures-style dependency injection.")
24312 (license license:asl2.0)))
24313
24314(define-public python-binaryornot
24315 (package
24316 (name "python-binaryornot")
24317 (version "0.6.0")
24318 (source
24319 (origin
24320 (method git-fetch)
24321 (uri (git-reference
24322 (url "https://github.com/audreyr/binaryornot")
24323 (commit (string-append "v" version))))
24324 (file-name (git-file-name name version))
24325 (sha256
24326 (base32 "008r45bbhax8flcc0cp5fm2p9niclf0kg773s2y2p1x1j5qjx1jb"))))
24327 (build-system pyproject-build-system)
24328 (arguments
24329 (list
24330 #:test-flags
24331 ;; FileNotFoundError: [Errno 2] No such file or directory: 'uv'
24332 #~(list (string-append "--deselect=tests/test_sdist.py"
24333 "::TestSdistContents"
24334 "::test_sdist_includes_pyc_fixtures"))))
24335 (native-inputs
24336 (list python-hatchling
24337 python-pytest))
24338 (home-page "https://github.com/audreyr/binaryornot")
24339 (synopsis "Package to check if a file is binary or text")
24340 (description "Ultra-lightweight pure Python package to check if a file is
24341 binary or text.")
24342 (license license:bsd-3)))
24343
24344(define-public python-bson
24345 (package
24346 (name "python-bson")
24347 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
24348 (revision . "0")))
24349 (version (git-version "0.5.10"
24350 (assoc-ref properties 'revision)
24351 (assoc-ref properties 'commit)))
24352 (source
24353 (origin
24354 (method git-fetch) ;for tests
24355 (uri (git-reference
24356 (url "https://github.com/py-bson/bson")
24357 (commit (assoc-ref properties 'commit))))
24358 (file-name (git-file-name name version))
24359 (sha256
24360 (base32
24361 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
24362 (build-system pyproject-build-system)
24363 (native-inputs
24364 (list python-pytest
24365 python-setuptools))
24366 (propagated-inputs
24367 (list python-dateutil
24368 python-six))
24369 (home-page "https://github.com/py-bson/bson")
24370 (synopsis "BSON (Binary JSON) codec for Python")
24371 (description "@code{bson} is a Python library implementing a BSON (Binary
24372JSON) codec.")
24373 (license license:asl2.0)))
24374
24375(define-public python-nltk
24376 (package
24377 (name "python-nltk")
24378 (version "3.9.1")
24379 (source
24380 (origin
24381 (method url-fetch)
24382 (uri (pypi-uri "nltk" version))
24383 (sha256
24384 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
24385 (build-system pyproject-build-system)
24386 (arguments
24387 ;; Tests require some extra resources to be downloaded.
24388 ;; TODO Try packaging these resources.
24389 '(#:tests? #f))
24390 (propagated-inputs (list python-click python-joblib python-regex
24391 python-tqdm))
24392 (native-inputs (list python-setuptools python-wheel))
24393 (home-page "https://www.nltk.org/")
24394 (synopsis "Natural Language Toolkit")
24395 (description
24396 "NLTK provides interfaces to over 50 corpora and lexical resources such as
24397WordNet, along with a suite of text processing libraries for classification,
24398tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
24399natural language processing libraries.")
24400 (license license:asl2.0)))
24401
24402(define-public python-pymongo
24403 (package
24404 (name "python-pymongo")
24405 (version "4.17.0")
24406 (source
24407 (origin
24408 (method git-fetch)
24409 (uri (git-reference
24410 (url "https://github.com/mongodb/mongo-python-driver")
24411 (commit version)))
24412 (file-name (git-file-name name version))
24413 (sha256
24414 (base32 "0ybp4klx2advd0aka4d0915vwvydid3cil16x497amc4wiigndhx"))))
24415 (build-system pyproject-build-system)
24416 (arguments
24417 (list
24418 ;; tests: 1354 passed, 6514 skipped, 838 deselected, 38 subtests passed
24419 #:test-flags
24420 #~(list
24421 ;; pytest.PytestDeprecationWarning: Overriding the
24422 ;; "event_loop_policy" fixture is deprecated and will be removed in a
24423 ;; future version of pytest-asyncio. Use the
24424 ;; "pytest_asyncio_loop_factories" hook to customize event loop
24425 ;; creation.
24426 "-W" "ignore::DeprecationWarning"
24427 ;; Run only default unit tests, no benchmark and networking tests.
24428 "-m" "default_async or default"
24429 ;; Tests need access to /etc/resolve.conf.
24430 "--ignore=test/asynchronous/test_srv_polling.py"
24431 "--ignore=test/test_client.py"
24432 "--ignore=test/test_srv_polling.py"
24433 ;; XXX: Tests fail with assertion is not equal.
24434 "-k" "not test_test_uri_options_srv-options_SRV_URI")))
24435 (native-inputs
24436 (list python-hatch-requirements-txt
24437 python-hatchling
24438 python-pytest
24439 python-pytest-asyncio
24440 python-setuptools))
24441 (propagated-inputs
24442 (list python-dnspython))
24443 (home-page "https://github.com/mongodb/mongo-python-driver")
24444 (synopsis "Python driver for MongoDB")
24445 (description
24446 "The PyMongo distribution contains tools for interacting with MongoDB
24447database from Python. The @code{bson} package is an implementation of the
24448@url{http://bsonspec.org/, BSON format} for Python. The @code{pymongo}
24449package is a native Python driver for MongoDB, offering both synchronous and
24450asynchronous APIs. The @code{gridfs} package is a gridfs implementation on
24451top of @code{pymongo}.")
24452 (license license:asl2.0)))
24453
24454(define-public python-py-consul
24455 (package
24456 (name "python-py-consul")
24457 (version "1.6.0")
24458 (source
24459 (origin
24460 (method git-fetch)
24461 (uri (git-reference
24462 ;; Fork from https://github.com/cablehead/python-consul
24463 (url "https://github.com/criteo/py-consul")
24464 (commit (string-append "v" version))))
24465 (file-name (git-file-name name version))
24466 (sha256
24467 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
24468 (build-system pyproject-build-system)
24469 (arguments (list #:tests? #f)) ; Tests require docker.
24470 (native-inputs (list python-setuptools))
24471 (propagated-inputs (list python-requests))
24472 (home-page "https://github.com/criteo/py-consul")
24473 (synopsis "Python client for Consul")
24474 (description
24475 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
24476discovery, monitoring and configuration.")
24477 (license license:expat)))
24478
24479(define-public python-schematics
24480 (package
24481 (name "python-schematics")
24482 (version "2.1.1")
24483 (source
24484 (origin
24485 (method git-fetch)
24486 (uri (git-reference
24487 (url "https://github.com/schematics/schematics")
24488 (commit (string-append "v" version))))
24489 (file-name (git-file-name name version))
24490 (sha256
24491 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
24492 (build-system pyproject-build-system)
24493 (native-inputs
24494 (list python-dateutil python-mock python-pytest python-setuptools))
24495 (home-page "https://github.com/schematics/schematics")
24496 (synopsis "Python Data Structures for Humans")
24497 (description
24498 "Schematics is a Python library to combine types into structures,
24499validate them, and transform the shapes of your data based on simple
24500descriptions.
24501
24502The internals are similar to ORM type systems, but there is no database layer
24503in Schematics. Instead, building a database layer is easily made when
24504Schematics handles everything except for writing the query. Schematics can be
24505used for tasks where having a database involved is unusual.")
24506 (license license:bsd-3)))
24507
24508(define-public python-odfpy
24509 (package
24510 (name "python-odfpy")
24511 (version "1.4.2")
24512 (source
24513 (origin
24514 (method git-fetch)
24515 (uri (git-reference
24516 (url "https://github.com/eea/odfpy")
24517 (commit (string-append "release-" version))))
24518 (file-name (git-file-name name version))
24519 (sha256
24520 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
24521 (build-system pyproject-build-system)
24522 (native-inputs (list python-pytest python-setuptools))
24523 (propagated-inputs (list python-defusedxml))
24524 (home-page "https://github.com/eea/odfpy")
24525 (synopsis "Python API and tools to manipulate OpenDocument files")
24526 (description
24527 "Collection of libraries and utility programs written in Python to
24528manipulate OpenDocument 1.2 files.")
24529 (license
24530 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
24531 ;; number of files with other licenses.
24532 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
24533
24534(define-public python-namex
24535 (package
24536 (name "python-namex")
24537 (version "0.0.7")
24538 (source
24539 (origin
24540 (method url-fetch)
24541 (uri (pypi-uri "namex" version))
24542 (sha256
24543 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
24544 (build-system pyproject-build-system)
24545 (arguments (list #:tests? #false)) ;there are none
24546 (native-inputs (list python-setuptools python-wheel))
24547 (home-page "https://github.com/fchollet/namex")
24548 (synopsis
24549 "Separate implementation and public API surface of Python packages")
24550 (description
24551 "This package provides a simple utility to separate the
24552implementation of your Python package and its public API surface.")
24553 (license license:asl2.0)))
24554
24555(define-public python-natsort
24556 (package
24557 (name "python-natsort")
24558 (version "8.4.0")
24559 (source
24560 (origin
24561 (method url-fetch)
24562 (uri (pypi-uri "natsort" version))
24563 (sha256
24564 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
24565 (build-system pyproject-build-system)
24566 (native-inputs
24567 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
24568 python-pytest
24569 python-pytest-mock
24570 python-setuptools))
24571 (propagated-inputs
24572 (list python-fastnumbers
24573 python-pyicu))
24574 (home-page "https://github.com/SethMMorton/natsort")
24575 (synopsis "Natural sorting for python and shell")
24576 (description
24577 "Natsort lets you apply natural sorting on lists instead of
24578lexicographical. If you use the built-in @code{sorted} method in python on a
24579list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
24580it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
24581@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
24582numbers and sorts them separately from strings. It can also sort version
24583numbers, real numbers, mixed types and more, and comes with a shell command
24584@command{natsort} that exposes this functionality in the command line.")
24585 (license license:expat)))
24586
24587(define-public python-graphql-core
24588 (package
24589 (name "python-graphql-core")
24590 (version "3.2.7")
24591 (source
24592 (origin
24593 (method git-fetch)
24594 (uri (git-reference
24595 (url "https://github.com/graphql-python/graphql-core")
24596 (commit (string-append "v" version))))
24597 (file-name (git-file-name name version))
24598 (sha256
24599 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
24600 (build-system pyproject-build-system)
24601 (native-inputs
24602 (list python-gevent
24603 python-mock
24604 python-poetry-core
24605 python-pytest
24606 python-pytest-benchmark
24607 python-pytest-mock))
24608 (propagated-inputs
24609 (list python-promise python-six))
24610 (home-page "https://github.com/graphql-python/graphql-core")
24611 (synopsis "GraphQL implementation for Python")
24612 (description
24613 "GraphQL implementation for Python. GraphQL is a data query language and
24614 runtime designed and used to request and deliver data to mobile and web apps.
24615 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
24616 to Python.")
24617 (license license:expat)))
24618
24619(define-public python-graphql-relay
24620 (package
24621 (name "python-graphql-relay")
24622 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
24623 (revision . "0")))
24624 (version (git-version "3.1.5"
24625 (assoc-ref properties 'revision)
24626 (assoc-ref properties 'commit)))
24627 (source
24628 (origin
24629 (method git-fetch)
24630 (uri (git-reference
24631 (url "https://github.com/graphql-python/graphql-relay-py")
24632 (commit (assoc-ref properties 'commit))))
24633 (file-name (git-file-name name version))
24634 (sha256
24635 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
24636 (build-system pyproject-build-system)
24637 (native-inputs
24638 (list python-pytest
24639 python-pytest-asyncio
24640 python-pytest-describe
24641 python-poetry-core))
24642 (propagated-inputs (list python-graphql-core))
24643 (home-page "https://github.com/graphql-python/graphql-relay-py")
24644 (synopsis "Relay implementation for Python")
24645 (description
24646 "This is a library to allow the easy creation of Relay-compliant servers
24647using the GraphQL Python reference implementation of a GraphQL server. It
24648should be noted that the code is a exact port of the original
24649@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
24650implementation} from Facebook.")
24651 (license license:expat)))
24652
24653(define-public python-graphene
24654 (package
24655 (name "python-graphene")
24656 (version "3.4.3")
24657 (source
24658 (origin
24659 (method url-fetch)
24660 (uri (pypi-uri "graphene" version))
24661 (sha256
24662 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
24663 (build-system pyproject-build-system)
24664 (arguments
24665 (list #:tests? #f)) ;XXX: tests fail to load
24666 (native-inputs
24667 (list python-setuptools))
24668 (propagated-inputs
24669 (list python-dateutil
24670 python-graphql-core
24671 python-graphql-relay
24672 python-typing-extensions))
24673 (home-page "https://graphene-python.org/")
24674 (synopsis "GraphQL Framework for Python")
24675 (description
24676 "Graphene is a Python library for building GraphQL schemas/types. A
24677GraphQL schema describes your data model, and provides a GraphQL server with
24678an associated set of resolve methods that know how to fetch data.")
24679 (license license:expat)))
24680
24681(define-public python-rodi
24682 (package
24683 (name "python-rodi")
24684 (version "2.0.8")
24685 (source
24686 (origin
24687 (method git-fetch)
24688 (uri (git-reference
24689 (url "https://github.com/Neoteroi/rodi")
24690 (commit (string-append "v" version))))
24691 (file-name (git-file-name name version))
24692 (sha256
24693 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
24694 (build-system pyproject-build-system)
24695 (native-inputs
24696 (list python-hatchling
24697 python-pytest
24698 python-pytest-asyncio))
24699 (home-page "https://github.com/Neoteroi/rodi")
24700 (synopsis "Dependency injection framework for Python")
24701 (description
24702 "Rodi is a dependency injection framework for Python applications.
24703
24704Its features include
24705
24706@itemize
24707@item Type resolution by signature types annotations.
24708@item Type resolution by class annotations.
24709@item Type resolution by names and aliases.
24710@item Build graph of objects without the need for source code changes.
24711@item Minimum overhead to obtain services, once the objects graph is built.
24712@item Support for singleton, transient, and scoped services.
24713@end itemize")
24714 (license license:expat)))
24715
24716;; XXX: The last time updated in 2015, consider to remove it when nothing is
24717;; depend on it.
24718(define-public python-snowballstemmer
24719 (package
24720 (name "python-snowballstemmer")
24721 (version "2.2.0")
24722 (source
24723 (origin
24724 (method url-fetch)
24725 (uri (pypi-uri "snowballstemmer" version))
24726 (sha256
24727 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24728 (build-system pyproject-build-system)
24729 (arguments
24730 (list
24731 #:tests? #f)) ; no tests
24732 (native-inputs
24733 (list python-setuptools))
24734 (home-page "https://github.com/shibukawa/snowball_py")
24735 (synopsis "Snowball stemming library collection for Python")
24736 (description
24737 "This package provides 16 word stemmer algorithms generated from Snowball
24738algorithms. It includes the 15 original ones plus the Poerter English
24739stemmer.")
24740 (license license:bsd-3)))
24741
24742(define-public python-setproctitle
24743 (package
24744 (name "python-setproctitle")
24745 (version "1.3.7")
24746 (source
24747 (origin
24748 (method git-fetch)
24749 (uri (git-reference
24750 (url "https://github.com/dvarrazzo/py-setproctitle")
24751 (commit (string-append "version-" version))))
24752 (file-name (git-file-name name version))
24753 (sha256
24754 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24755 (build-system pyproject-build-system)
24756 (arguments
24757 (list
24758 #:phases
24759 #~(modify-phases %standard-phases
24760 (add-before 'check 'configure-tests
24761 (lambda* (#:key tests? #:allow-other-keys)
24762 (when tests?
24763 (setenv "PYTHON"
24764 (or (which "python3")
24765 (which "python")))
24766 (setenv "PYCONFIG"
24767 (if (which "python3-config")
24768 "python3-config --embed"
24769 "python-config"))
24770 (substitute* "tests/conftest.py"
24771 (("cc") "gcc"))))))))
24772 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
24773 (home-page "https://github.com/dvarrazzo/py-setproctitle")
24774 (synopsis
24775 "Setproctitle implementation for Python to customize the process title")
24776 (description
24777 "The library allows a process to change its title (as displayed by system
24778tools such as @code{ps} and @code{top}).
24779
24780Changing the title is mostly useful in multi-process systems, for example when a
24781master process is forked: changing the children's title allows identifying the
24782task each process is busy with. The technique is used by PostgreSQL and the
24783OpenSSH Server for example.")
24784 (license license:bsd-3)))
24785
24786(define-public python-pyelftools
24787 (package
24788 (name "python-pyelftools")
24789 (version "0.32")
24790 (source
24791 (origin
24792 (method git-fetch)
24793 (uri (git-reference
24794 (url "https://github.com/eliben/pyelftools")
24795 (commit (string-append "v" version))))
24796 (file-name (git-file-name name version))
24797 (sha256
24798 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
24799 (snippet
24800 #~(begin
24801 ;; Delete bundled readelf and llvm-dwardump executables. Project
24802 ;; also ships quite a lot binary files mainly for tests, check
24803 ;; with:
24804 ;;
24805 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
24806 ;;
24807 (delete-file "test/external_tools/readelf")
24808 (delete-file "test/external_tools/llvm-dwarfdump")))))
24809 (build-system pyproject-build-system)
24810 (arguments
24811 (list
24812 #:phases
24813 #~(modify-phases %standard-phases
24814 (replace 'check
24815 (lambda* (#:key tests? #:allow-other-keys)
24816 (when tests?
24817 ;; Run just basic unit and example tests, dwarfdump and
24818 ;; readelf tests are not selected as they are fragile and
24819 ;; arch-specific.
24820 (invoke "python" "test/run_all_unittests.py")
24821 (invoke "python" "test/run_examples_test.py")))))))
24822 (home-page "https://github.com/eliben/pyelftools")
24823 (native-inputs
24824 (list python-setuptools
24825 python-wheel))
24826 (synopsis "Analyze binary and library file information")
24827 (description
24828 "This Python library provides interfaces for parsing and analyzing two
24829binary and library file formats ; the Executable and Linking Format (ELF), and
24830debugging information in the Debugging With Attributed Record
24831Format (DWARF).")
24832 (license license:public-domain)))
24833
24834(define-public python-pefile
24835 (package
24836 (name "python-pefile")
24837 (version "2024.8.26")
24838 (source
24839 (origin
24840 (method git-fetch)
24841 (uri (git-reference
24842 (url "https://github.com/erocarrera/pefile")
24843 (commit (string-append "v" version))))
24844 (file-name (git-file-name name version))
24845 (sha256
24846 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
24847 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
24848 (build-system pyproject-build-system)
24849 (arguments
24850 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
24851 ;; It seems clear however that test_data.tar.bz2.enc needs to be
24852 ;; decrypted and unpacked before we can run them.
24853 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
24854 (native-inputs (list python-pytest python-setuptools))
24855 (propagated-inputs (list python-future))
24856 (home-page "https://github.com/erocarrera/pefile")
24857 (synopsis "Portable Executable (PE) file parser")
24858 (description
24859 "This python library provides interfaces for parsing and working with
24860Portable Executable (PE) files. It makes to most information from the header,
24861as well as section details and data available.")
24862 (license license:expat)))
24863
24864(define-public python-pyemd
24865 (package
24866 (name "python-pyemd")
24867 (version "1.0.0")
24868 (source (origin
24869 (method url-fetch)
24870 (uri (pypi-uri "pyemd" version))
24871 (sha256
24872 (base32
24873 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
24874 (build-system pyproject-build-system)
24875 (native-inputs
24876 (list python-cython
24877 python-pytest
24878 python-setuptools
24879 python-setuptools-scm))
24880 (propagated-inputs
24881 (list python-numpy-1))
24882 (home-page "https://github.com/wmayner/pyemd")
24883 (synopsis
24884 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
24885 (description
24886 "This package provides a Python wrapper for Ofir Pele and Michael
24887Werman's implementation of the Earth Mover's Distance.")
24888 (license license:expat)))
24889
24890(define-public python-imagesize
24891 (package
24892 (name "python-imagesize")
24893 (version "2.0.0")
24894 (source
24895 (origin
24896 (method git-fetch)
24897 (uri (git-reference
24898 (url "https://github.com/shibukawa/imagesize_py")
24899 (commit version)))
24900 (file-name (git-file-name name version))
24901 (sha256
24902 (base32 "1r07r80d16hkwhnmz6sfvj8d4s3d6wg82j99dbr3iy78gc48wia0"))))
24903 (build-system pyproject-build-system)
24904 (arguments (list #:test-backend #~'unittest))
24905 (native-inputs
24906 (list python-setuptools))
24907 (home-page "https://github.com/shibukawa/imagesize_py")
24908 (synopsis "Gets image size of files in various formats in Python")
24909 (description
24910 "This package allows determination of image size from PNG, JPEG,
24911JPEG2000 and GIF files in pure Python.")
24912 (license license:expat)))
24913
24914(define-public python-argcomplete
24915 (package
24916 (name "python-argcomplete")
24917 (version "3.6.2")
24918 (source
24919 (origin
24920 (method url-fetch)
24921 (uri (pypi-uri "argcomplete" version))
24922 (sha256
24923 (base32
24924 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
24925 (build-system pyproject-build-system)
24926 (arguments
24927 (list
24928 #:test-backend #~'custom
24929 #:test-flags #~(list "test/test.py" "-v")
24930 #:phases
24931 #~(modify-phases %standard-phases
24932 (add-before 'check 'disable-pip-tests
24933 (lambda _
24934 ;; pip: command not found
24935 (substitute* "test/test.py"
24936 (("def test_console_script")
24937 "def __disable_test_console_script"))))
24938 ;; Disable tests that fail with zsh 5.9.1. See
24939 ;; https://github.com/kislyuk/argcomplete/issues/544
24940 (add-before 'check 'disable-failing-zsh-tests
24941 (lambda _
24942 (substitute* "test/test.py"
24943 (("def (test_python_completion|test_python_filename_completion|test_python_module|test_python_not_executable)" all)
24944 (string-append "@unittest.skip(\"fails with zsh 5.9.1\")\n "
24945 all))))))))
24946 (native-inputs
24947 (list python-hatch-vcs
24948 python-hatchling
24949 python-pexpect
24950 tcsh
24951 fish
24952 bash ;full Bash for 'test_file_completion'
24953 zsh))
24954 (home-page "https://github.com/kislyuk/argcomplete")
24955 (synopsis "Shell tab completion for Python argparse")
24956 (description "argcomplete provides extensible command line tab completion
24957of arguments and options for Python scripts using @code{argparse}. It's
24958particularly useful for programs with many options or sub-parsers that can
24959dynamically suggest completions ; for example, when browsing resources over
24960the network.")
24961 (license license:asl2.0)))
24962
24963(define-public python-csscompressor
24964 (package
24965 (name "python-csscompressor")
24966 (version "0.9.5")
24967 (source
24968 (origin
24969 (method git-fetch)
24970 (uri (git-reference
24971 (url "https://github.com/sprymix/csscompressor")
24972 (commit (string-append "v" version))))
24973 (file-name (git-file-name name version))
24974 (sha256
24975 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24976 (build-system pyproject-build-system)
24977 (native-inputs (list python-pytest python-setuptools))
24978 (home-page "https://github.com/sprymix/csscompressor")
24979 (synopsis "Python port of YUI CSS Compressor")
24980 (description "This package provides a python port of YUI CSS Compressor.")
24981 (license license:bsd-3)))
24982
24983(define-public python-rcssmin
24984 (package
24985 (name "python-rcssmin")
24986 (version "1.2.0")
24987 (source
24988 (origin
24989 (method url-fetch)
24990 (uri (pypi-uri "rcssmin" version))
24991 (sha256
24992 (base32
24993 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24994 (build-system pyproject-build-system)
24995 (native-inputs (list python-pytest python-setuptools python-wheel))
24996 (home-page "http://opensource.perlig.de/rcssmin/")
24997 (synopsis "CSS Minifier")
24998 (description "The minifier is based on the semantics of the YUI compressor,
24999 which itself is based on the rule list by Isaac Schlueter.")
25000 (license license:asl2.0)))
25001
25002(define-public python-rjsmin
25003 (package
25004 (name "python-rjsmin")
25005 (version "1.2.3")
25006 (source
25007 (origin
25008 (method url-fetch)
25009 (uri (pypi-uri "rjsmin" version))
25010 (sha256
25011 (base32
25012 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
25013 (modules '((guix build utils)))
25014 (snippet
25015 '(for-each delete-file (find-files "bench" "\\.js$")))))
25016 (build-system pyproject-build-system)
25017 (native-inputs
25018 (list python-pytest python-setuptools python-wheel))
25019 (home-page "http://opensource.perlig.de/rjsmin/")
25020 (synopsis "Javascript Minifier")
25021 (description "@code{rJSmin} is a javascript minifier written in Python.
25022The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
25023module is a re-implementation aiming for speed, so it can be used at
25024runtime (rather than during a preprocessing step).")
25025 (license license:asl2.0)))
25026
25027(define-public python-cheetah
25028 (package
25029 (name "python-cheetah")
25030 (version "3.3.1")
25031 (source
25032 (origin
25033 (method url-fetch)
25034 (uri (pypi-uri "CT3" version))
25035 (sha256
25036 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
25037 (build-system pyproject-build-system)
25038 (arguments
25039 (list
25040 #:test-backend #~'custom
25041 #:test-flags #~(list "Cheetah/Tests/Test.py")
25042 #:phases
25043 #~(modify-phases %standard-phases
25044 (add-after 'unpack 'use-absolute-python
25045 (lambda _
25046 (substitute* "Cheetah/CheetahWrapper.py"
25047 (("#!/usr/bin/env python")
25048 (string-append "#!" (which "python"))))))
25049 (add-before 'check 'configure-tests
25050 (lambda* (#:key tests? #:allow-other-keys)
25051 (substitute* "Cheetah/Tests/ImportHooks.py"
25052 (("os.path.dirname\\(__file__\\)")
25053 (string-append "'" (getcwd) "/Cheetah/Tests'")))
25054 (substitute* "Cheetah/Tests/Test.py"
25055 (("unittest.TextTestRunner\\(\\)")
25056 "unittest.TextTestRunner(verbosity=2)"))
25057 (setenv "TMPDIR" "/tmp"))))))
25058 (native-inputs (list python-setuptools))
25059 (propagated-inputs (list python-markdown)) ;optional
25060 (home-page "https://cheetahtemplate.org/")
25061 (synopsis "Template engine")
25062 (description
25063 "Cheetah is a text-based template engine and Python code generator.
25064
25065 Cheetah can be used as a standalone templating utility or referenced as a
25066library from other Python applications. It has many potential uses, but web
25067developers looking for a viable alternative to ASP, JSP, PHP and PSP are
25068expected to be its principle user group.
25069
25070Features:
25071@enumerate
25072@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
25073other text-based format.
25074@item Cleanly separates content, graphic design, and program code.
25075@item Blends the power and flexibility of Python with a simple template
25076language that non-programmers can understand.
25077@item Gives template writers full access to any Python data structure, module,
25078function, object, or method in their templates.
25079@item Makes code reuse easy by providing an object-orientated interface to
25080templates that is accessible from Python code or other Cheetah templates. One
25081template can subclass another and selectively reimplement sections of it.
25082@item Provides a simple, yet powerful, caching mechanism that can dramatically
25083improve the performance of a dynamic website.
25084@item Compiles templates into optimized, yet readable, Python code.
25085@end enumerate")
25086 (license (license:x11-style "file://LICENSE"))))
25087
25088(define-public python-chevron
25089 (package
25090 (name "python-chevron")
25091 (version "0.14.0")
25092 (source (origin
25093 (method url-fetch)
25094 (uri (pypi-uri "chevron" version))
25095 (sha256
25096 (base32
25097 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
25098 (build-system pyproject-build-system)
25099 (arguments (list #:tests? #false)) ;there are none
25100 (native-inputs (list python-setuptools python-wheel))
25101 (home-page "https://github.com/noahmorrison/chevron")
25102 (synopsis "Mustache templating language renderer")
25103 (description "This package provides a Python implementation of the
25104Mustache templating language renderer.")
25105 (license license:expat)))
25106
25107(define-public python-dulwich
25108 (package
25109 (name "python-dulwich")
25110 (version "1.2.12")
25111 (source
25112 (origin
25113 (method git-fetch)
25114 (uri (git-reference
25115 (url "https://github.com/jelmer/dulwich")
25116 (commit (string-append "dulwich-" version))))
25117 (file-name (git-file-name name version))
25118 (sha256
25119 (base32 "0in5pgqhnnbfqi5alcg85kiaxr8zww9iih7qsyy9g1yzlaxs0dvd"))))
25120 (build-system pyproject-build-system)
25121 (arguments
25122 (list
25123 ;; tests: 3796 passed, 89 skipped, 1 xfailed, 8 warnings, 33 subtests
25124 ;; passed
25125 #:test-flags
25126 ;; Exclude fuzzing from discovery, depends on python-atheris.
25127 #~(list "tests")
25128 #:phases
25129 #~(modify-phases %standard-phases
25130 (add-after 'unpack 'fix-tests
25131 (lambda* (#:key inputs #:allow-other-keys)
25132 (substitute* '("tests/test_hooks.py"
25133 "tests/porcelain/test_filters.py"
25134 "tests/test_repository.py"
25135 "tests/test_worktree.py")
25136 (("/bin/sh")
25137 (search-input-file inputs "/bin/sh")))))
25138 (add-before 'check 'pre-check
25139 (lambda _
25140 (setenv "PYTHONHASHSEED" "random")
25141 (setenv "TMPDIR" "/tmp"))))))
25142 (native-inputs
25143 (list git-minimal/pinned
25144 openssh-sans-x
25145 ;; python-atheris ;not packaged yet in Guix
25146 python-gevent
25147 python-geventhttpclient
25148 python-pytest
25149 python-setuptools
25150 python-setuptools-rust))
25151 (propagated-inputs
25152 (list python-urllib3
25153 ;; [optional]
25154 gnupg
25155 gpgme
25156 python-aiohttp
25157 python-fastimport
25158 python-merge3
25159 python-munkres
25160 python-paramiko
25161 python-patiencediff
25162 python-rich))
25163 (home-page "https://www.dulwich.io/")
25164 (synopsis "Git implementation in Python")
25165 (description "Dulwich is an implementation of the Git file formats and
25166protocols written in pure Python.")
25167 ;; Can be used with either license.
25168 (license (list license:asl2.0 license:gpl2+))))
25169
25170(define-public python-dunamai
25171 (package
25172 (name "python-dunamai")
25173 (version "1.26.0")
25174 (source
25175 (origin
25176 (method url-fetch)
25177 (uri (pypi-uri "dunamai" version))
25178 (sha256
25179 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
25180 (build-system pyproject-build-system)
25181 (arguments
25182 (list
25183 #:test-flags
25184 #~(list "-k" "not test__version__from_git__shallow")
25185 #:phases
25186 #~(modify-phases %standard-phases
25187 ;; These steps are taken from NixOS package definition:
25188 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
25189 (add-before 'check 'pre-check
25190 (lambda _
25191 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
25192 (setenv "HOME" "/tmp")
25193 (invoke "git" "config" "--global" "user.email" "[email protected]")
25194 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
25195 (propagated-inputs
25196 (list python-packaging))
25197 (native-inputs
25198 (list git-minimal/pinned
25199 python-poetry-core
25200 python-pytest))
25201 (home-page "https://github.com/mtkennerly/dunamai")
25202 (synopsis "Dynamic version generation")
25203 (description
25204 "Dunamai is Python library and command line tool for producing dynamic,
25205standards-compliant version strings, derived from tags in your version control
25206system. This facilitates uniquely identifying nightly or per-commit builds in
25207continuous integration and releasing new versions of your software simply by
25208creating a tag.")
25209 (license license:expat)))
25210
25211(define-public python-pbkdf2
25212 (package
25213 (name "python-pbkdf2")
25214 (version "1.3")
25215 (source
25216 (origin
25217 (method url-fetch)
25218 (uri (pypi-uri "pbkdf2" version))
25219 (sha256
25220 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
25221 (build-system pyproject-build-system)
25222 (arguments
25223 (list
25224 #:test-backend #~'custom
25225 #:test-flags #~(list "test/test_pbkdf2.py")))
25226 (native-inputs (list python-setuptools))
25227 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
25228 (synopsis "Password-based key derivation")
25229 (description
25230 "This module implements the password-based key derivation function,
25231PBKDF2, specified in RSA PKCS#5 v2.0.
25232
25233PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
25234is part of the RSA Public Key Cryptography Standards series. The provided
25235implementation takes a password or a passphrase and a salt value (and
25236optionally a iteration count, a digest module, and a MAC module) and provides
25237a file-like object from which an arbitrarily-sized key can be read.")
25238 (license license:expat)))
25239
25240(define-public python-qrcode
25241 (package
25242 (name "python-qrcode")
25243 (version "8.2")
25244 (source
25245 (origin
25246 (method url-fetch)
25247 (uri (pypi-uri "qrcode" version))
25248 (sha256
25249 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
25250 (build-system pyproject-build-system)
25251 (native-inputs
25252 (list python-poetry-core
25253 python-pytest))
25254 (home-page "https://github.com/lincolnloop/python-qrcode")
25255 (synopsis "QR Code image generator")
25256 (description
25257 "This package provides a pure Python QR Code generator module. It uses
25258the Python Imaging Library (PIL) to allow for the generation of QR Codes.
25259
25260In addition this package provides a command line tool to generate QR codes and
25261either write these QR codes to a file or do the output as ascii art at the
25262console.")
25263 (license license:bsd-3)))
25264
25265(define-public python-rst2ansi
25266 (package
25267 (name "python-rst2ansi")
25268 (properties '((commit . "3728e16f8b8b1dc338e5df90ba2c4a93ee054b3f")
25269 (revision . "1")))
25270 (version (git-version "0.1.5"
25271 (assoc-ref properties 'revision)
25272 (assoc-ref properties 'commit)))
25273 (source
25274 (origin
25275 (method git-fetch)
25276 (uri (git-reference
25277 (url "https://github.com/Snaipe/python-rst-to-ansi")
25278 (commit (assoc-ref properties 'commit))))
25279 (file-name (git-file-name name version))
25280 (sha256
25281 (base32 "0q8afblqhkrnzxla81ialifcwkh9ga5xzxzi0lhg2gjwhbynbfsp"))))
25282 (build-system pyproject-build-system)
25283 (arguments
25284 (list
25285 #:tests? #f ; 2 tests fail with additional line characters
25286 #:phases
25287 #~(modify-phases %standard-phases
25288 (replace 'check
25289 (lambda* (#:key tests? #:allow-other-keys)
25290 (when tests?
25291 (invoke "cram" "test" "-v")))))))
25292 (native-inputs (list python-cram python-setuptools))
25293 (propagated-inputs (list python-docutils))
25294 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
25295 (synopsis "Convert RST to ANSI-decorated console output")
25296 (description
25297 "Python module dedicated to rendering RST (reStructuredText) documents to
25298ansi-escaped strings suitable for display in a terminal.")
25299 (license license:expat)))
25300
25301(define-public python-ansi2html
25302 (package
25303 (name "python-ansi2html")
25304 (version "1.9.2")
25305 (source
25306 (origin
25307 (method url-fetch)
25308 (uri (pypi-uri "ansi2html" version))
25309 (sha256
25310 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
25311 (build-system pyproject-build-system)
25312 (native-inputs
25313 (list python-mock
25314 python-pytest
25315 python-setuptools
25316 python-wheel))
25317 (home-page "https://github.com/ralphbean/ansi2html")
25318 (synopsis "Convert ANSI-decorated console output to HTML")
25319 (description
25320 "@command{ansi2html} is a Python library and command line utility for
25321converting text with ANSI color codes to HTML or LaTeX.")
25322 (license license:gpl3+)))
25323
25324(define-public python-easy-ansi
25325 (package
25326 (name "python-easy-ansi")
25327 (version "2.1")
25328 (source
25329 (origin
25330 (method git-fetch)
25331 (uri (git-reference
25332 (url "https://gitlab.com/joeysbytes/easy-ansi")
25333 (commit (string-append "v" version))))
25334 (file-name (git-file-name name version))
25335 (sha256
25336 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
25337 (build-system pyproject-build-system)
25338 (arguments
25339 (list
25340 #:phases
25341 #~(modify-phases %standard-phases
25342 (add-after 'install 'remove-extra
25343 (lambda* (#:key inputs outputs #:allow-other-keys)
25344 (with-directory-excursion (site-packages inputs outputs)
25345 (delete-file-recursively "tests")
25346 (delete-file "setup.py")))))))
25347 (native-inputs (list python-pytest python-setuptools))
25348 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
25349 (synopsis "Terminal framework API")
25350 (description
25351 "Easy ANSI is a terminal framework API to give you an easy way to use
25352colors, cursor control movements, and line/box drawing. It is not meant as a
25353replacement to more full-featured frameworks (such as curses or urwid), but as
25354a tool to quickly create nice-looking screens in your terminal window. You
25355can even create animations with the cursor controls.")
25356 (license license:expat)))
25357
25358(define-public python-easy-ansi-0.3
25359 (package
25360 (inherit python-easy-ansi)
25361 (name "python-easy-ansi")
25362 (version "0.3")
25363 (source
25364 (origin
25365 (method git-fetch)
25366 (uri (git-reference
25367 (url "https://gitlab.com/joeysbytes/easy-ansi")
25368 (commit (string-append "v" version))))
25369 (file-name (git-file-name name version))
25370 (sha256
25371 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
25372 (arguments '())))
25373
25374(define-public python-pycosat
25375 (package
25376 (name "python-pycosat")
25377 (version "0.6.6")
25378 (source
25379 (origin
25380 (method git-fetch)
25381 (uri (git-reference
25382 (url "https://github.com/ContinuumIO/pycosat")
25383 (commit version)))
25384 (file-name (git-file-name name version))
25385 (sha256
25386 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
25387 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
25388 (build-system pyproject-build-system)
25389 (arguments (list #:test-backend #~'unittest))
25390 (native-inputs (list unzip python-setuptools))
25391 (home-page "https://github.com/ContinuumIO/pycosat")
25392 (synopsis "Bindings to picosat (a SAT solver)")
25393 (description
25394 "This package provides efficient Python bindings to @code{picosat} on the
25395C level. When importing pycosat, the @code{picosat} solver becomes part of
25396the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
25397Problem} (SAT) solver.")
25398 (license license:expat)))
25399
25400(define-public python-pypeg2
25401 (package
25402 (name "python-pypeg2")
25403 (version "2.15.2")
25404 (source
25405 (origin
25406 (method url-fetch)
25407 (uri (pypi-uri "pyPEG2" version))
25408 (sha256
25409 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
25410 (build-system pyproject-build-system)
25411 (native-inputs (list python-pytest python-setuptools))
25412 (propagated-inputs (list python-lxml))
25413 (home-page "https://fdik.org/pyPEG/")
25414 (synopsis "Parsing Expression Grammars in Python")
25415 (description
25416 "PyPEG is an intrinsic parser interpreter framework for Python. It is
25417based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
25418formal languages.")
25419 (license license:gpl2)))
25420
25421(define-public python-pyformlang
25422 (package
25423 (name "python-pyformlang")
25424 (version "1.0.10")
25425 (source
25426 (origin
25427 (method url-fetch)
25428 (uri (pypi-uri "pyformlang" version))
25429 (sha256
25430 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
25431 (build-system pyproject-build-system)
25432 (native-inputs
25433 (list python-pytest
25434 python-setuptools
25435 python-wheel))
25436 (propagated-inputs
25437 (list python-networkx
25438 python-numpy
25439 python-pydot))
25440 (home-page "https://github.com/Aunsiels/pyformlang")
25441 (synopsis "Framework for interacting with formal grammars")
25442 (description
25443 "This package provides a framework for working with formal
25444language grammars. The library was originally developed for educational
25445purposes and therefore implements many textbook algorithms regarding the
25446manipulation and interaction with formal grammars.")
25447 (license license:expat)))
25448
25449(define-public python-incremental
25450 (package
25451 (name "python-incremental")
25452 (version "24.7.2")
25453 (source
25454 (origin
25455 (method url-fetch)
25456 (uri (pypi-uri "incremental" version))
25457 (sha256
25458 (base32
25459 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
25460 (build-system pyproject-build-system)
25461 (arguments
25462 ;; Tests require twisted, which needs this package.
25463 (list #:tests? #false
25464 #:build-backend "setuptools.build_meta"))
25465 (native-inputs
25466 (list python-setuptools))
25467 (home-page "https://github.com/hawkowl/incremental")
25468 (synopsis "Library for versioning Python projects")
25469 (description "Incremental is a small library that versions your Python
25470 projects.")
25471 (license license:expat)))
25472
25473(define-public python-invoke
25474 (package
25475 (name "python-invoke")
25476 (version "2.2.1")
25477 (source
25478 (origin
25479 (method url-fetch)
25480 (uri (pypi-uri "invoke" version))
25481 (sha256
25482 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
25483 ;; TODO: invoke/vendor contains:
25484 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
25485 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
25486 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
25487 (build-system pyproject-build-system)
25488 (arguments
25489 (list
25490 ;; XXX: Requires many dependencies that are not yet in Guix.
25491 #:tests? #f
25492 #:phases
25493 #~(modify-phases %standard-phases
25494 (add-after 'unpack 'fix-bash-path
25495 (lambda _
25496 (let ((bash #$(this-package-input "bash-minimal")))
25497 (substitute* "invoke/config.py"
25498 (("shell = \"/bin/bash\"")
25499 (string-append "shell = \"" bash "/bin/bash\"")))))))))
25500 (native-inputs
25501 (list python-setuptools
25502 python-wheel))
25503 (inputs
25504 (list bash-minimal))
25505 (home-page "https://www.pyinvoke.org/")
25506 (synopsis "Pythonic task execution")
25507 (description
25508 "Invoke is a Python task execution tool and library, drawing inspiration
25509from various sources to arrive at a powerful and clean feature set. It is
25510evolved from the Fabric project, but focuses on local and abstract concerns
25511instead of servers and network commands.")
25512 (license license:bsd-3)))
25513
25514(define-public python-automat
25515 (package
25516 (name "python-automat")
25517 (version "24.8.1")
25518 (source (origin
25519 (method url-fetch)
25520 (uri (pypi-uri "Automat" version))
25521 (sha256
25522 (base32
25523 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
25524 (build-system pyproject-build-system)
25525 (arguments
25526 (list
25527 #:phases
25528 #~(modify-phases %standard-phases
25529 (replace 'check
25530 (lambda* (#:key tests? test-flags #:allow-other-keys)
25531 (with-directory-excursion #$output
25532 (apply invoke "pytest" "-vv" test-flags))))
25533 ;; Remove script, because it depends on python-twisted.
25534 (add-after 'unpack 'remove-entrypoint
25535 (lambda _
25536 (substitute* "pyproject.toml"
25537 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
25538 (native-inputs
25539 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25540 (propagated-inputs
25541 (list python-graphviz python-typing-extensions))
25542 (home-page "https://github.com/glyph/Automat")
25543 (synopsis "Self-service finite-state machines")
25544 (description "Automat is a library for concise, idiomatic Python
25545 expression of finite-state automata (particularly deterministic finite-state
25546 transducers).")
25547 (license license:expat)))
25548
25549(define-public python-constantly
25550 (package
25551 (name "python-constantly")
25552 (version "23.10.4")
25553 (source
25554 (origin
25555 (method url-fetch)
25556 (uri (pypi-uri "constantly" version))
25557 (sha256
25558 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
25559 (build-system pyproject-build-system)
25560 (arguments
25561 (list #:tests? #f)) ;cycles with python-twisted
25562 (native-inputs
25563 (list python-setuptools
25564 python-versioneer))
25565 (home-page "https://github.com/twisted/constantly")
25566 (synopsis "Symbolic constants in Python")
25567 (description "Constantly is a Python library that provides symbolic
25568 constant support. It includes collections and constants with text, numeric,
25569 and bit flag values.")
25570 (license license:expat)))
25571
25572(define-public python-attrs
25573 (package
25574 (name "python-attrs")
25575 (version "26.1.0")
25576 (source
25577 (origin
25578 (method git-fetch)
25579 (uri (git-reference
25580 (url "https://github.com/python-attrs/attrs/")
25581 (commit version)))
25582 (file-name (git-file-name name version))
25583 (sha256
25584 (base32 "17gagrqbg4fg7prpsqx746frfzcml13lnzqjjsah0jqc5qxd8yaf"))))
25585 (build-system pyproject-build-system)
25586 (native-inputs
25587 (list python-hatch-fancy-pypi-readme
25588 python-hatch-vcs
25589 python-hatchling
25590 python-hypothesis
25591 python-pytest))
25592 (home-page "https://github.com/python-attrs/attrs/")
25593 (synopsis "Attributes without boilerplate")
25594 (description "@code{attrs} is a Python package with class decorators that
25595 ease the chores of implementing the most common attribute-related object
25596 protocols.")
25597 (license license:expat)))
25598
25599(define-public python-attrs-bootstrap
25600 (package
25601 (inherit python-attrs)
25602 (name "python-attrs-bootstrap")
25603 (native-inputs (list python-hatchling
25604 python-hatch-fancy-pypi-readme
25605 python-hatch-vcs))
25606 (arguments `(#:tests? #f))))
25607
25608(define-public python-astroid
25609 (package
25610 (name "python-astroid")
25611 (version "4.0.4")
25612 (source
25613 (origin
25614 (method git-fetch)
25615 (uri (git-reference
25616 (url "https://github.com/PyCQA/astroid")
25617 (commit (string-append "v" version))))
25618 (file-name (git-file-name name version))
25619 (sha256
25620 (base32 "0dfvih7drm22dvppjangaxlmrq21wazfyglhm3n32rgh6g6m6qms"))))
25621 (build-system pyproject-build-system)
25622 (native-inputs
25623 (list python-mypy-minimal
25624 python-pytest
25625 python-setuptools))
25626 (home-page "https://github.com/PyCQA/astroid")
25627 (synopsis "Python source code base representation")
25628 (description "@code{python-astroid} provides a common base representation
25629of Python source code for projects such as pychecker, pyreverse, pylint, etc.
25630It provides a compatible representation which comes from the _ast module. It
25631rebuilds the tree generated by the builtin _ast module by recursively walking
25632down the AST and building an extended ast. The new node classes have
25633additional methods and attributes for different usages. They include some
25634support for static inference and local name scopes. Furthermore, astroid
25635builds partial trees by inspecting living objects.")
25636 (license license:lgpl2.1+)))
25637
25638(define-public python-isbnlib
25639 (package
25640 (name "python-isbnlib")
25641 (version "3.10.14")
25642 (source
25643 (origin
25644 (method git-fetch)
25645 (uri (git-reference
25646 (url "https://github.com/xlcnd/isbnlib")
25647 (commit (string-append "v" version))))
25648 (file-name (git-file-name name version))
25649 (sha256
25650 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
25651 (build-system pyproject-build-system)
25652 (arguments
25653 (list
25654 #:test-flags #~(list "-m" "not network")))
25655 (native-inputs (list python-pytest python-setuptools))
25656 (home-page "https://github.com/xlcnd/isbnlib")
25657 (synopsis "Python library to work with ISBN strings")
25658 (description
25659 "@code{python-isbnlib} is a (pure) python library that provides several
25660useful methods and functions to validate, clean, transform, hyphenate and get
25661metadata for ISBN strings. Its origin was as the core of isbntools. This
25662short version, is suitable to be include as a dependency in other projects.")
25663 (license license:lgpl3+)))
25664
25665(define-public python-isoduration
25666 ;; XXX: The project might be abandoned, consider to remove when nothing
25667 ;; depends on it.
25668 (package
25669 (name "python-isoduration")
25670 (version "20.11.0")
25671 (source
25672 (origin
25673 (method git-fetch)
25674 (uri (git-reference
25675 (url "https://github.com/bolsote/isoduration")
25676 (commit version)))
25677 (file-name (git-file-name name version))
25678 (sha256
25679 (base32 "1naml13qa1inr6k0j25jgw49r3wnkvwq5xc0v4navz6mxlgsrfp8"))))
25680 (build-system pyproject-build-system)
25681 (arguments
25682 (list
25683 ;; E ModuleNotFoundError: No module named 'isodate'
25684 #:test-flags #~(list "--ignore=tests/test_benchmark.py")))
25685 (native-inputs
25686 (list python-pytest
25687 python-setuptools))
25688 (propagated-inputs
25689 (list python-arrow))
25690 (home-page "https://github.com/bolsote/isoduration")
25691 (synopsis "Operations with ISO 8601 durations")
25692 (description "ISO 8601 is most commonly known as a way to exchange
25693datetimes in textual format. A lesser known aspect of the standard is the
25694representation of durations. The state of the art of ISO 8601 duration
25695handling in Python is more or less limited to what's offered by isodate. This
25696package attempts to address the shortcomings of @code{isodate}.")
25697 (license license:isc)))
25698
25699(define-public python-isort
25700 (package
25701 (name "python-isort")
25702 (version "6.0.1")
25703 (source
25704 (origin
25705 (method git-fetch) ;no tests in PyPI archive
25706 (uri (git-reference
25707 (url "https://github.com/timothycrosley/isort")
25708 (commit version)))
25709 (file-name (git-file-name name version))
25710 (modules '((guix build utils)))
25711 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
25712 (sha256
25713 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
25714 (build-system pyproject-build-system)
25715 (arguments
25716 (list
25717 #:test-flags
25718 ;; Ignore benchmark and integration to reduce closure size.
25719 #~(list "--ignore=tests/benchmark/"
25720 "--ignore=tests/integration/"
25721 "--ignore=tests/unit/profiles/test_black.py"
25722 "-k" (string-join
25723 (list "not test_gitignore"
25724 "test_isort_supports_shared_profiles_issue_970"
25725 "test_requirements_dir"
25726 "test_requirements_finder"
25727 "test_sort_configurable_sort_issue_1732"
25728 "test_sort_imports_error_handling")
25729 " and not "))))
25730 ;; TODO: Package example plugins separately, available in PyPI:
25731 ;; - example_isort_formatting_plugin
25732 ;; - example_isort_sorting_plugin
25733 ;; - example_shared_isort_profile
25734 (native-inputs
25735 (list python-colorama
25736 python-hatch-vcs
25737 python-hatchling
25738 python-hypothesis
25739 python-pylama
25740 python-pytest))
25741 (home-page "https://github.com/PyCQA/isort")
25742 (synopsis "Python utility/library to sort python imports")
25743 (description
25744 "@code{python-isort} is a python utility/library to sort imports
25745alphabetically, and automatically separated into sections. It provides a
25746command line utility, a python library and plugins for various editors.")
25747 (license license:expat)))
25748
25749(define-public python-configparser
25750 (package
25751 (name "python-configparser")
25752 (version "7.2.0")
25753 (source
25754 (origin
25755 (method url-fetch)
25756 (uri (pypi-uri "configparser" version))
25757 (sha256
25758 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25759 (build-system pyproject-build-system)
25760 (native-inputs
25761 (list python-pytest
25762 python-setuptools
25763 python-setuptools-scm
25764 python-wheel))
25765 (home-page "https://github.com/jaraco/configparser/")
25766 (synopsis "Backport of configparser from python 3.5")
25767 (description "@code{python-configparser} is a backport of
25768 @code{configparser} from Python 3.5 so that it can be used directly
25769 in other versions.")
25770 (license license:expat)))
25771
25772(define-public python-mando
25773 (package
25774 (name "python-mando")
25775 (version "0.8.2")
25776 (source
25777 (origin
25778 (method url-fetch)
25779 (uri (pypi-uri "mando" version))
25780 (sha256
25781 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
25782 (build-system pyproject-build-system)
25783 (native-inputs
25784 (list python-pytest python-setuptools))
25785 (home-page "https://mando.readthedocs.org/")
25786 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
25787 (description
25788 "This package is a wrapper around argparse, allowing you to write complete CLI
25789applications in seconds while maintaining all the flexibility.")
25790 (license license:expat)))
25791
25792(define-public python-mwclient
25793 (package
25794 (name "python-mwclient")
25795 (version "0.11.0")
25796 (source
25797 (origin
25798 (method git-fetch)
25799 (uri (git-reference
25800 (url "https://github.com/mwclient/mwclient")
25801 (commit (string-append "v" version))))
25802 (file-name (git-file-name name version))
25803 (sha256
25804 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
25805 (build-system pyproject-build-system)
25806 (propagated-inputs
25807 (list python-requests-oauthlib))
25808 (native-inputs
25809 (list python-mock
25810 python-pytest
25811 python-responses
25812 python-setuptools))
25813 (home-page "https://github.com/btongminh/mwclient")
25814 (synopsis "MediaWiki API client")
25815 (description "This package provides a MediaWiki API client.")
25816 (license license:expat)))
25817
25818(define-public python-kneed
25819 (package
25820 (name "python-kneed")
25821 (version "0.8.5")
25822 (source
25823 (origin
25824 (method git-fetch)
25825 (uri (git-reference
25826 (url "https://github.com/arvkevi/kneed")
25827 (commit (string-append "v" version))))
25828 (file-name (git-file-name name version))
25829 (sha256
25830 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25831 (build-system pyproject-build-system)
25832 (arguments
25833 (list
25834 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25835 (native-inputs (list python-hatchling python-pytest))
25836 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25837 (home-page "https://github.com/arvkevi/kneed")
25838 (synopsis "Knee-point detection in Python")
25839 (description
25840 "This package implements the kneedle algorithm. Given a set of x and y
25841values, kneed will return the knee point of the function. The knee point is
25842the point of maximum curvature.")
25843 (license license:bsd-3)))
25844
25845(define-public python-diff-cover
25846 (package
25847 (name "python-diff-cover")
25848 (version "9.7.1")
25849 (source
25850 (origin
25851 (method url-fetch)
25852 (uri (pypi-uri "diff_cover" version))
25853 (sha256
25854 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25855 (build-system pyproject-build-system)
25856 (arguments
25857 (list
25858 #:test-flags
25859 ;; Dropp check of flake8 in tests.
25860 #~(list "-k" "not test_file_does_not_exist")))
25861 (native-inputs
25862 (list python-pycodestyle
25863 python-poetry-core
25864 python-pyflakes
25865 python-pylint
25866 python-pytest
25867 python-pytest-datadir
25868 python-pytest-mock))
25869 (propagated-inputs
25870 (list python-chardet
25871 python-jinja2
25872 python-pluggy
25873 python-pygments
25874 python-setuptools ; For pkg_resources.
25875 python-tomli))
25876 (home-page "https://github.com/Bachmann1234/diff_cover")
25877 (synopsis "Run coverage and linting reports on diffs")
25878 (description
25879 "Automatically find diff lines that need test coverage. It also finds
25880diff lines that have violations (according to tools such as pycodestyle,
25881pyflakes, flake8, or pylint). This is used as a code quality metric during
25882code reviews.")
25883 (license license:asl2.0)))
25884
25885(define-public python-diff-match-patch
25886 (package
25887 (name "python-diff-match-patch")
25888 (version "20241021")
25889 (source
25890 (origin
25891 (method url-fetch)
25892 (uri (pypi-uri "diff_match_patch" version))
25893 (sha256
25894 (base32
25895 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25896 (build-system pyproject-build-system)
25897 (native-inputs (list python-flit-core python-pytest))
25898 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25899 (synopsis "Synchronize plain text")
25900 (description "Diff Match and Patch libraries offer robust algorithms to
25901 perform the operations required for synchronizing plain text.")
25902 (license license:asl2.0)))
25903
25904(define-public python-icdiff
25905 (package
25906 (name "python-icdiff")
25907 (version "2.0.7")
25908 (source (origin
25909 (method git-fetch)
25910 (uri (git-reference
25911 (url "https://github.com/jeffkaufman/icdiff")
25912 (commit (string-append "release-" version))))
25913 (file-name (git-file-name name version))
25914 (sha256
25915 (base32
25916 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25917 (build-system pyproject-build-system)
25918 (arguments
25919 (list #:tests? #f)) ; there are no test scripts
25920 (native-inputs (list python-setuptools python-wheel))
25921 (home-page "https://www.jefftk.com/icdiff")
25922 (synopsis "Improved colored diff")
25923 (description "This package provides colored diff functions that highlight
25924parts of the lines that were modified.")
25925 (license license:psfl)))
25926
25927(define-public python-dirsync
25928 (package
25929 (name "python-dirsync")
25930 (version "2.2.6")
25931 (source
25932 (origin
25933 (method url-fetch)
25934 (uri (pypi-uri "dirsync" version))
25935 (sha256
25936 (base32
25937 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25938 (build-system pyproject-build-system)
25939 (arguments
25940 ;; No tests in PyPI release and GitHub repository does not have the
25941 ;; latest release tag.
25942 (list #:tests? #f))
25943 (native-inputs (list python-setuptools python-wheel))
25944 (home-page "https://github.com/tkhyn/dirsync")
25945 (synopsis "Advanced directory tree synchronisation tool")
25946 (description
25947 "Dirsync is an advanced directory tree synchronisation tool.")
25948 (license license:expat)))
25949
25950(define-public python-levenshtein
25951 (package
25952 (name "python-levenshtein")
25953 ;; 0.27.3 (2025-11-01), the latest changes provide compatibility with
25954 ;; Cython 3.2.x, see: <https://github.com/rapidfuzz/Levenshtein/pull/84>.
25955 (properties '((commit . "7c905d9f4e788a95f5f1696517e6ff06d639943f")
25956 (revision . "0")))
25957 (version (git-version "0.27.3"
25958 (assoc-ref properties 'revision)
25959 (assoc-ref properties 'commit)))
25960 (source
25961 (origin
25962 (method git-fetch)
25963 (uri (git-reference
25964 (url "https://github.com/rapidfuzz/Levenshtein")
25965 (commit (assoc-ref properties 'commit))))
25966 (file-name (git-file-name name version))
25967 (sha256
25968 (base32 "14jdpxyc28bqjv3rmj4a5nrg0p6v6hazqilh1hdwjrd71hlxa6s3"))))
25969 (build-system pyproject-build-system)
25970 (propagated-inputs (list python-rapidfuzz))
25971 (native-inputs
25972 (list python-cython
25973 python-pytest
25974 python-scikit-build-core
25975 rapidfuzz-cpp))
25976 (home-page "https://github.com/rapidfuzz/Levenshtein")
25977 (synopsis "Fast computation of Levenshtein distance and string similarity")
25978 (description
25979 "The Levenshtein Python C extension module contains functions for fast computation of
25980@enumerate
25981@item Levenshtein (edit) distance, and edit operations
25982@item string similarity
25983@item approximate median strings, and generally string averaging
25984@item string sequence and set similarity
25985@end enumerate
25986It supports both normal and Unicode strings.")
25987 (license license:gpl2+)))
25988
25989(define-public python-factory-boy
25990 (package
25991 (name "python-factory-boy")
25992 (version "3.3.3")
25993 (source
25994 (origin
25995 (method url-fetch)
25996 (uri (pypi-uri "factory_boy" version))
25997 (sha256
25998 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25999 (build-system pyproject-build-system)
26000 (arguments
26001 ;; Tests are not included in the tarball.
26002 `(#:tests? #f))
26003 (native-inputs (list python-setuptools))
26004 (propagated-inputs (list python-faker))
26005 (home-page "https://github.com/FactoryBoy/factory_boy")
26006 (synopsis "Versatile test fixtures replacement")
26007 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
26008factory_girl. As a fixtures replacement tool, it aims to replace static, hard
26009to maintain fixtures with easy-to-use factories for complex object. Instead
26010of building an exhaustive test setup with every possible combination of corner
26011cases, factory_boy allows you to use objects customized for the current test,
26012while only declaring the test-specific fields.")
26013 (license license:expat)))
26014
26015(define-public python-gtts
26016 (package
26017 (name "python-gtts")
26018 (version "2.5.4")
26019 (source
26020 (origin
26021 (method git-fetch)
26022 (uri (git-reference
26023 (url "https://github.com/pndurette/gTTS")
26024 (commit (string-append "v" version))))
26025 (file-name (git-file-name name version))
26026 (sha256
26027 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
26028 (build-system pyproject-build-system)
26029 (arguments
26030 ;; Disable tests that require internet.
26031 (list #:test-flags '(list "-k" "not net")))
26032 (native-inputs
26033 (list python-pytest python-setuptools python-testfixtures))
26034 (propagated-inputs
26035 (list python-click-8.1 python-requests))
26036 (home-page "https://github.com/pndurette/gTTS")
26037 (synopsis "Google Translate text-to-speech interface")
26038 (description
26039 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
26040interface with the Google Translate text-to-speech API. It lets you write
26041spoken MP3 data to a file, a file-like object (bytestring) for further audio
26042manipulation, or @code{stdout}.")
26043 (license license:expat)))
26044
26045(define-public python-packaging-legacy
26046 (package
26047 (name "python-packaging-legacy")
26048 (version "23.0.post0")
26049 (source
26050 (origin
26051 (method url-fetch)
26052 (uri (pypi-uri "packaging_legacy" version))
26053 (sha256
26054 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
26055 (build-system pyproject-build-system)
26056 (propagated-inputs (list python-packaging))
26057 (native-inputs
26058 (list python-pretend
26059 python-pytest
26060 python-setuptools
26061 python-wheel))
26062 (home-page "https://pypi.org/project/packaging-legacy/")
26063 (synopsis "Core utilities for legacy Python packages")
26064 (description "This library provides support for legacy Python Packaging
26065functionality removed from @code{packaging}.")
26066 (license license:asl2.0)))
26067
26068(define-public python-relatorio
26069 (package
26070 (name "python-relatorio")
26071 (version "0.11.1")
26072 (source
26073 (origin
26074 (method url-fetch)
26075 (uri (pypi-uri "relatorio" version))
26076 (sha256
26077 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
26078 (build-system pyproject-build-system)
26079 (native-inputs
26080 (list python-pytest
26081 python-setuptools))
26082 (propagated-inputs
26083 (list python-genshi
26084 python-lxml
26085 python-magic))
26086 (home-page "https://relatorio.tryton.org/")
26087 (synopsis "Templating library able to output ODT and PDF files")
26088 (description
26089 "Relatorio is a templating library which provides a way to easily output
26090ODT, ODS, PNG, SVG and several other kinds of files. Support for more
26091filetypes can be easily added by creating plugins for them.")
26092 (license license:gpl3+)))
26093
26094(define-public python-radon
26095 (package
26096 (name "python-radon")
26097 (version "6.0.1")
26098 (source
26099 (origin
26100 (method git-fetch)
26101 (uri (git-reference
26102 (url "https://github.com/rubik/radon")
26103 (commit (string-append "v" version))))
26104 (file-name (git-file-name name version))
26105 (sha256
26106 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
26107 (build-system pyproject-build-system)
26108 (arguments
26109 (list
26110 #:phases
26111 #~(modify-phases %standard-phases
26112 (add-after 'unpack 'relax-requirements
26113 (lambda _
26114 (substitute* (list "pyproject.toml" "requirements.txt")
26115 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
26116 mando-lower-bound)))))))
26117 (propagated-inputs (list python-colorama python-mando))
26118 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
26119 python-setuptools))
26120 (home-page "https://radon.readthedocs.org/")
26121 (synopsis "Code Metrics in Python")
26122 (description
26123 "Radon is a Python tool which computes various code metrics. Supported
26124metrics are:
26125@itemize @bullet
26126@item raw metrics: SLOC, comment lines, blank lines, &c.
26127@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
26128@item Halstead metrics (all of them)
26129@item the Maintainability Index (a Visual Studio metric)
26130@end itemize")
26131 (license license:expat)))
26132
26133(define-public python-rgbxy
26134 (package
26135 (name "python-rgbxy")
26136 (version "0.5")
26137 (source
26138 (origin
26139 (method url-fetch)
26140 (uri (pypi-uri "rgbxy" version))
26141 (sha256
26142 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
26143 (build-system pyproject-build-system)
26144 (arguments
26145 (list #:tests? #f)) ;no tests in PyPI or Git
26146 (native-inputs
26147 (list python-setuptools))
26148 (home-page "https://github.com/benknight/hue-python-rgb-converter")
26149 (synopsis "RGB conversion tool in Python")
26150 (description
26151 "This package implements functionality of RGB/CIE1931 'xy' gammuts
26152conversion: Gamut A, B, and C.")
26153 (license license:expat)))
26154
26155(define-public python-jsonpointer
26156 (package
26157 (name "python-jsonpointer")
26158 (version "3.1.1")
26159 (source
26160 (origin
26161 (method git-fetch)
26162 (uri (git-reference
26163 (url "https://github.com/stefankoegl/python-json-pointer")
26164 (commit (string-append "v" version))))
26165 (file-name (git-file-name name version))
26166 (sha256
26167 (base32 "1k7szx4k2h3zidw01i96fg9x5gnir5fdvlnpgb48xhg0si12ly1y"))))
26168 (build-system pyproject-build-system)
26169 (arguments (list #:test-backend #~'unittest))
26170 (native-inputs
26171 (list python-setuptools))
26172 (home-page "https://github.com/stefankoegl/python-json-pointer")
26173 (synopsis "Identify specific nodes in a JSON document")
26174 (description
26175 "@code{jsonpointer} allows you to access specific nodes by path in a JSON
26176document (see RFC 6901).")
26177 (license license:bsd-3)))
26178
26179(define-public python-jsonpatch
26180 (package
26181 (name "python-jsonpatch")
26182 (version "1.33")
26183 (source
26184 (origin
26185 (method git-fetch)
26186 ;; pypi version lacks tests.js
26187 (uri (git-reference
26188 (url "https://github.com/stefankoegl/python-json-patch")
26189 (commit (string-append "v" version))))
26190 (file-name (git-file-name name version))
26191 (sha256
26192 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
26193 (build-system pyproject-build-system)
26194 (arguments
26195 (list #:test-backend #~'custom
26196 #:test-flags #~(list "tests.py")))
26197 (native-inputs
26198 (list python-setuptools))
26199 (propagated-inputs
26200 (list python-jsonpointer))
26201 (home-page "https://github.com/stefankoegl/python-json-patch")
26202 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
26203 (description "@code{jsonpatch} is a library and program that allows
26204 applying JSON Patches according to RFC 6902.")
26205 (license license:bsd-3)))
26206
26207(define-public python-rfc3987-syntax
26208 (package
26209 (name "python-rfc3987-syntax")
26210 (version "1.1.0")
26211 (source
26212 (origin
26213 (method git-fetch)
26214 (uri (git-reference
26215 (url "https://github.com/willynilly/rfc3987-syntax")
26216 (commit (string-append "v" version))))
26217 (file-name (git-file-name name version))
26218 (sha256
26219 (base32 "13nmzq1ra5660c3k29c937q4kwq7qj7z6dv9bgr1ph57qb3kyc7a"))))
26220 (build-system pyproject-build-system)
26221 (native-inputs
26222 (list python-hatchling
26223 python-pytest))
26224 (propagated-inputs
26225 (list python-lark))
26226 (home-page "https://github.com/willynilly/rfc3987-syntax")
26227 (synopsis "RFC 3987 IRI validation built on a Lark grammar")
26228 (description
26229 "This package validates Internationalized Resource Identifiers (IRIs) and
26230their components against the ABNF grammar from RFC 3987. Built on the Lark
26231parser, it is an MIT-licensed alternative to the GPL-licensed @code{rfc3987}
26232package, and provides the @code{format-nongpl} extra required by recent
26233@code{jsonschema} releases.")
26234 (license license:expat)))
26235
26236(define-public python-rfc3986
26237 (package
26238 (name "python-rfc3986")
26239 (version "2.0.0")
26240 (source
26241 (origin
26242 (method url-fetch)
26243 (uri (pypi-uri "rfc3986" version))
26244 (sha256
26245 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
26246 (build-system pyproject-build-system)
26247 (native-inputs
26248 (list python-pytest python-setuptools))
26249 (home-page "https://rfc3986.readthedocs.io/")
26250 (synopsis "Parse and validate URI references")
26251 (description
26252 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
26253validation and authority parsing. This module also supports RFC@tie{}6874
26254which adds support for zone identifiers to IPv6 addresses.")
26255 (license license:asl2.0)))
26256
26257(define-public python-rfc3986-validator
26258 (package
26259 (name "python-rfc3986-validator")
26260 (version "0.1.1")
26261 (source
26262 (origin
26263 (method url-fetch)
26264 (uri (pypi-uri "rfc3986_validator" version))
26265 (sha256
26266 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
26267 (build-system pyproject-build-system)
26268 (native-inputs
26269 (list python-pytest
26270 python-rfc3987
26271 python-setuptools))
26272 (home-page "https://github.com/naimetti/rfc3986-validator")
26273 (synopsis "Pure python rfc3986 validator")
26274 (description "This package implements a URI validator according to RFC3986
26275in pure Python.")
26276 (license license:expat)))
26277
26278(define-public python-rfc3987
26279 (package
26280 (name "python-rfc3987")
26281 (version "1.3.8")
26282 (source
26283 (origin
26284 (method url-fetch)
26285 (uri (pypi-uri "rfc3987" version))
26286 (sha256
26287 (base32
26288 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
26289 (build-system pyproject-build-system)
26290 (arguments
26291 (list #:test-backend #~'custom
26292 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
26293 (native-inputs
26294 (list python-setuptools))
26295 ;; Source: <https://codeberg.org/atufi/rfc3987>.
26296 (home-page "https://pypi.org/project/rfc3987/")
26297 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
26298 (description "@code{rfc3987} provides routines for parsing and
26299 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
26300 (license license:gpl3+)))
26301
26302;; The latest commit contains fixes for building with both python3 and python2.
26303(define-public python-rfc6555
26304 (package
26305 (name "python-rfc6555")
26306 (version "0.1.0")
26307 (source
26308 (origin
26309 (method git-fetch)
26310 (uri (git-reference
26311 (url "https://github.com/sethmlarson/rfc6555")
26312 (commit (string-append "v" version))))
26313 (file-name (git-file-name name version))
26314 (sha256
26315 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
26316 (build-system pyproject-build-system)
26317 (arguments
26318 (list
26319 ;; Other tests require network access.
26320 #:test-flags #~(list "tests/test_ipv6.py")))
26321 (native-inputs (list python-pytest python-setuptools))
26322 (home-page "https://pypi.org/project/rfc6555/")
26323 (synopsis "Python implementation of RFC 6555")
26324 (description
26325 "Python implementation of the Happy Eyeballs Algorithm described in RFC
263266555. Provided with a single file and dead-simple API to allow easy vendoring
26327and integration into other projects.")
26328 (license license:asl2.0)))
26329
26330(define-public python-sacn
26331 (package
26332 (name "python-sacn")
26333 (version "1.11.0")
26334 (source
26335 (origin
26336 (method url-fetch)
26337 (uri (pypi-uri "sacn" version))
26338 (sha256
26339 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
26340 (build-system pyproject-build-system)
26341 (native-inputs (list python-pytest python-setuptools python-wheel))
26342 (home-page "https://github.com/Hundemeier/sacn")
26343 (synopsis "Python library for sending and receiving sACN data")
26344 (description
26345 "This package provides a Python library for sending and receiving
26346 sACN (Streaming Architecture for Control Networks) data, a standard
26347 protocol used for controlling lighting and other devices over
26348 a network.")
26349 (license license:expat)))
26350
26351(define-public python-bagit
26352 (package
26353 (name "python-bagit")
26354 (version "1.9.0")
26355 (source
26356 (origin
26357 (method git-fetch) ; no tests in PyPI
26358 (uri (git-reference
26359 (url "https://github.com/LibraryOfCongress/bagit-python")
26360 (commit (string-append "v" version))))
26361 (file-name (git-file-name name version))
26362 (sha256
26363 (base32
26364 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
26365 (build-system pyproject-build-system)
26366 (arguments
26367 (list #:test-flags #~(list "test.py")))
26368 (native-inputs
26369 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
26370 (home-page "https://libraryofcongress.github.io/bagit-python/")
26371 (synopsis "Create and validate BagIt packages")
26372 (description "Bagit is a Python library and command line utility for working
26373 with BagIt style packages. BagIt is a minimalist packaging format for digital
26374 preservation.")
26375 (license license:cc0)))
26376
26377(define-public python-prov
26378 (package
26379 (name "python-prov")
26380 (version "2.1.1")
26381 (source
26382 (origin
26383 (method git-fetch)
26384 (uri (git-reference
26385 (url "https://github.com/trungdong/prov")
26386 (commit version)))
26387 (file-name (git-file-name name version))
26388 (sha256
26389 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
26390 (build-system pyproject-build-system)
26391 (arguments
26392 (list
26393 #:test-backend #~'unittest
26394 #:test-flags #~(list "discover" "-s" "src")
26395 #:phases
26396 #~(modify-phases %standard-phases
26397 (add-before 'check 'disable-tests
26398 (lambda _
26399 ;; prov.model.ProvException: The provided identifier
26400 ;; "http://www.example.org/bundle" is not valid
26401 (substitute* "src/prov/tests/qnames.py"
26402 (("test_namespace_inheritance")
26403 "disabled_test_namespace_inheritance")
26404 (("test_default_namespace_inheritance")
26405 "disabled_test_default_namespace_inheritance")))))))
26406 (native-inputs
26407 (list python-setuptools))
26408 (propagated-inputs
26409 (list graphviz
26410 python-dateutil
26411 python-networkx
26412 python-pydot
26413 ;; optional dependencies, also needed for tests
26414 python-lxml
26415 python-rdflib))
26416 (home-page "https://github.com/trungdong/prov")
26417 (synopsis
26418 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
26419 (description
26420 "This package provides a library for W3C Provenance Data Model supporting
26421 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
26422 (license license:expat)))
26423
26424(define-public python-arcp
26425 (package
26426 (name "python-arcp")
26427 (version "0.2.1")
26428 (source
26429 (origin
26430 (method git-fetch)
26431 (uri (git-reference
26432 (url "https://github.com/stain/arcp-py")
26433 (commit version)))
26434 (file-name (git-file-name name version))
26435 (sha256
26436 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
26437 (build-system pyproject-build-system)
26438 (arguments
26439 (list
26440 #:phases
26441 #~(modify-phases %standard-phases
26442 (add-after 'unpack 'patch-tests
26443 (lambda _
26444 (substitute* "tests/test_parse.py"
26445 (("ni:///")
26446 "ni:")))))))
26447 (native-inputs (list python-pytest python-setuptools))
26448 (home-page "https://arcp.readthedocs.io/")
26449 (synopsis "Archive and Package URI parser and generator")
26450 (description
26451 "@acronym{arcp, Archive and Package} provides functions for creating
26452@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
26453files packaged in an archive or package, like a ZIP file. arcp URIs can be
26454used to consume or reference hypermedia resources bundled inside a file
26455archive or an application package, as well as to resolve URIs for archive
26456resources within a programmatic framework. This URI scheme provides
26457mechanisms to generate a unique base URI to represent the root of the archive,
26458so that relative URI references in a bundled resource can be resolved within
26459the archive without having to extract the archive content on the local file
26460system. An arcp URI can be used for purposes of isolation (e.g. when
26461consuming multiple archives), security constraints (avoiding \"climb out\"
26462from the archive), or for externally identiyfing sub-resources referenced by
26463hypermedia formats.")
26464 (license license:asl2.0)))
26465
26466;; XXX: Project has no updates since 2019, consider to remove when nothing
26467;; depends on it in the next refresh cycle.
26468;; See: <https://github.com/pipermerriam/flex/issues/237>.
26469(define-public python-flex
26470 (package
26471 (name "python-flex")
26472 (version "6.14.1")
26473 (source
26474 (origin
26475 (method url-fetch)
26476 (uri (pypi-uri "flex" version))
26477 (sha256
26478 (base32
26479 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
26480 (build-system pyproject-build-system)
26481 (arguments (list #:tests? #f)) ;no tests in PyPI archive
26482 (native-inputs
26483 (list python-setuptools))
26484 (propagated-inputs
26485 (list python-click
26486 python-jsonpointer
26487 python-pyyaml
26488 python-requests
26489 python-rfc3987
26490 python-six
26491 python-strict-rfc3339
26492 python-validate-email))
26493 (home-page "https://github.com/pipermerriam/flex")
26494 (synopsis "Validates Swagger schemata")
26495 (description "@code{flex} can be used to validate Swagger schemata.")
26496 (license license:bsd-3)))
26497
26498(define-public python-marshmallow
26499 (package
26500 (name "python-marshmallow")
26501 (version "4.0.0")
26502 (source
26503 (origin
26504 (method url-fetch)
26505 (uri (pypi-uri "marshmallow" version))
26506 (sha256
26507 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
26508 (build-system pyproject-build-system)
26509 (arguments
26510 (list
26511 ;; tests: x86_64 1117 passed
26512 ;; i686-linux 1116 passed, 1 deselected
26513 #:test-flags
26514 #~(list #$@(if (target-64bit?)
26515 '()
26516 ;; OverflowError
26517 '((string-append "--deselect=tests/test_utils.py"
26518 "::test_from_timestamp_with_overflow_value"))))))
26519 (native-inputs
26520 (list python-flit-core
26521 python-pytest
26522 python-simplejson
26523 tzdata-for-tests))
26524 (home-page "https://github.com/marshmallow-code/marshmallow")
26525 (synopsis "Convert complex datatypes to and from native Python datatypes")
26526 (description
26527 "@code{marshmallow} provides a library for converting complex datatypes
26528to and from native Python datatypes.")
26529 (license license:expat)))
26530
26531(define-public python-marshmallow-3
26532 (package
26533 (inherit python-marshmallow)
26534 (version "3.22.0")
26535 (source
26536 (origin
26537 (method url-fetch)
26538 (uri (pypi-uri "marshmallow" version))
26539 (sha256
26540 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
26541 (arguments '())
26542 (native-inputs
26543 (list python-pytest
26544 python-pytz
26545 python-simplejson
26546 python-flit-core))
26547 (propagated-inputs
26548 (list python-packaging))))
26549
26550
26551(define-public python-apispec
26552 (package
26553 (name "python-apispec")
26554 (version "6.8.2")
26555 (source
26556 (origin
26557 (method url-fetch)
26558 (uri (pypi-uri "apispec" version))
26559 (sha256
26560 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
26561 (build-system pyproject-build-system)
26562 (native-inputs
26563 (list python-flit-core
26564 python-openapi-spec-validator
26565 python-pytest))
26566 (propagated-inputs
26567 (list python-marshmallow
26568 python-packaging
26569 python-pyyaml))
26570 (home-page "https://github.com/marshmallow-code/apispec")
26571 (synopsis "Swagger/OpenAPI specification generator")
26572 (description
26573 "@code{python-apispec} is a pluggable API specification generator. It
26574currently supports the OpenAPI specification, formerly known as Swagger.")
26575 (license license:expat)))
26576
26577(define-public python-apispec-webframeworks
26578 (package
26579 (name "python-apispec-webframeworks")
26580 (version "1.2.0")
26581 (source
26582 (origin
26583 (method url-fetch)
26584 (uri (pypi-uri "apispec_webframeworks" version))
26585 (sha256
26586 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
26587 (build-system pyproject-build-system)
26588 (native-inputs
26589 (list python-aiohttp
26590 python-flit-core
26591 python-bottle
26592 python-flask
26593 python-pytest
26594 python-pyyaml
26595 python-tornado
26596 python-wheel))
26597 (propagated-inputs
26598 (list python-apispec))
26599 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
26600 (synopsis "Web framework plugins for apispec")
26601 (description "This package provides plugins for using @code{apispec} with
26602web frameworks.")
26603 (license license:expat)))
26604
26605(define-public python-flasgger
26606 (package
26607 (name "python-flasgger")
26608 (version "0.9.7.1")
26609 (source
26610 (origin
26611 (method git-fetch)
26612 (uri (git-reference
26613 (url "https://github.com/rochacbruno/flasgger")
26614 (commit (string-append "v" version))))
26615 (file-name (git-file-name name version))
26616 (sha256
26617 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
26618 (patches
26619 (list
26620 (origin
26621 (method url-fetch)
26622 (uri
26623 (string-append "https://github.com/flasgger/flasgger/commit/"
26624 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
26625 (sha256
26626 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
26627 (build-system pyproject-build-system)
26628 (arguments
26629 (list
26630 #:test-flags
26631 #~(list "--ignore=tests/test_examples.py"
26632 "tests")))
26633 (propagated-inputs
26634 (list python-flask
26635 python-pyyaml
26636 python-jsonschema
26637 python-mistune
26638 python-six))
26639 (native-inputs
26640 (list python-pytest
26641 python-setuptools))
26642 (home-page "https://github.com/rochacbruno/flasgger/")
26643 (synopsis "Extract Swagger specs from your Flask project")
26644 (description "@code{python-flasgger} allows extracting Swagger specs
26645 from your Flask project. It is a fork of Flask-Swagger.")
26646 (license license:expat)))
26647
26648(define-public python-apache-libcloud
26649 (package
26650 (name "python-apache-libcloud")
26651 (version "3.8.0")
26652 (source
26653 (origin
26654 (method url-fetch)
26655 (uri (pypi-uri "apache-libcloud" version))
26656 (sha256
26657 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
26658 (build-system pyproject-build-system)
26659 (arguments
26660 (list
26661 #:tests? #f ; XXX: all tests fail requiring additional credentials
26662 #:phases
26663 #~(modify-phases %standard-phases
26664 (add-after 'unpack 'patch-ssh
26665 (lambda* (#:key inputs #:allow-other-keys)
26666 (substitute* "libcloud/compute/ssh.py"
26667 (("'ssh'")
26668 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
26669 (add-after 'unpack 'patch-tests
26670 (lambda _
26671 (substitute* "libcloud/test/compute/test_ssh_client.py"
26672 (("^class ShellOutSSHClientTests")
26673 "@unittest.skip(\"Guix container doesn't have ssh service\")
26674class ShellOutSSHClientTests"))))
26675 (add-before 'check 'copy-secret
26676 (lambda _
26677 (copy-file "libcloud/test/secrets.py-dist"
26678 "libcloud/test/secrets.py"))))))
26679 (inputs
26680 (list openssh))
26681 (propagated-inputs
26682 (list python-requests))
26683 (native-inputs
26684 (list python-pytest python-requests-mock python-setuptools))
26685 (home-page "https://libcloud.apache.org/")
26686 (synopsis "Unified Cloud API")
26687 (description
26688 "@code{libcloud} is a Python library for interacting with many of the
26689popular cloud service providers using a unified API.")
26690 (license license:asl2.0)))
26691
26692(define-public python-smmap
26693 (package
26694 (name "python-smmap")
26695 (version "5.0.2")
26696 (source
26697 (origin
26698 (method url-fetch)
26699 (uri (pypi-uri "smmap" version))
26700 (sha256
26701 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
26702 (build-system pyproject-build-system)
26703 (native-inputs
26704 (list python-pytest
26705 python-setuptools
26706 python-wheel))
26707 (home-page "https://github.com/Byron/smmap")
26708 (synopsis "Python sliding window memory map manager")
26709 (description "@code{smmap} is a pure Python implementation of a sliding
26710 window memory map manager.")
26711 (license license:bsd-3)))
26712
26713(define-public python-regex
26714 (package
26715 (name "python-regex")
26716 (version "2026.2.28")
26717 (source
26718 (origin
26719 (method git-fetch)
26720 (uri (git-reference
26721 (url "https://github.com/mrabarnett/mrab-regex")
26722 (commit version)))
26723 (file-name (git-file-name name version))
26724 (sha256
26725 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
26726 (build-system pyproject-build-system)
26727 (arguments
26728 (list
26729 #:test-backend #~'unittest
26730 #:test-flags #~(list "-v" "regex.tests.test_regex")
26731 #:phases
26732 #~(modify-phases %standard-phases
26733 (add-before 'check 'remove-local-source
26734 (lambda _
26735 (delete-file-recursively "regex"))))))
26736 (native-inputs
26737 (list python-setuptools))
26738 (home-page "https://github.com/mrabarnett/mrab-regex")
26739 (synopsis "Alternative regular expression module")
26740 (description
26741 "This regular expression implementation is backwards-compatible with the
26742standard @code{re} module, but offers additional functionality like full
26743case-folding for case-insensitive matches in Unicode.")
26744 (license license:psfl)))
26745
26746(define-public python-pysocks
26747 (package
26748 (name "python-pysocks")
26749 (version "1.7.1")
26750 (source
26751 (origin
26752 (method url-fetch)
26753 (uri (pypi-uri "PySocks" version))
26754 (sha256
26755 (base32
26756 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
26757 (build-system pyproject-build-system)
26758 (arguments `(#:tests? #f))
26759 (native-inputs
26760 (list python-setuptools))
26761 (home-page "https://github.com/Anorov/PySocks")
26762 (synopsis "SOCKS client module")
26763 (description "@code{pysocks} is an updated and semi-actively maintained
26764version of @code{SocksiPy} with bug fixes and extra features.")
26765 (license license:bsd-3)))
26766
26767(define-public python-pydub
26768 ;; TODO: Move to (gnu packages audio)
26769 (package
26770 (name "python-pydub")
26771 (version "0.25.1")
26772 (source
26773 (origin
26774 (method git-fetch)
26775 (uri (git-reference
26776 (url "https://github.com/jiaaro/pydub")
26777 (commit (string-append "v" version))))
26778 (file-name (git-file-name name version))
26779 (sha256
26780 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
26781 (patches
26782 (list
26783 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
26784 (origin
26785 (method url-fetch)
26786 (uri
26787 (string-append "https://github.com/jiaaro/pydub/commit/"
26788 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
26789 (sha256
26790 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
26791 (build-system pyproject-build-system)
26792 (arguments
26793 (list
26794 #:test-backend ''unittest
26795 #:phases
26796 #~(modify-phases %standard-phases
26797 (add-after 'unpack 'fix-ffmpeg-path
26798 (lambda* (#:key inputs #:allow-other-keys)
26799 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
26800 (substitute* "pydub/utils.py"
26801 (("return \"ffmpeg\"")
26802 (string-append "return \"" bin "/ffmpeg\""))
26803 (("return \"ffplay\"")
26804 (string-append "return \"" bin "/ffplay\""))
26805 (("return \"ffprobe\"")
26806 (string-append "return \"" bin "/ffprobe\""))
26807 (("warn\\(\"Couldn't find ff")
26808 "# warn\\(\"Couldn't find ff"))))))))
26809 (native-inputs (list python-setuptools))
26810 (home-page "https://pydub.com")
26811 (inputs (list ffmpeg))
26812 (propagated-inputs (list python-scipy))
26813 (synopsis "Manipulate audio with a high level interface in Python")
26814 (description
26815 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
26816@code{ffmpeg} to open various audio formats.")
26817 (license license:expat))) ; MIT license
26818
26819(define-public python-pkginfo
26820 (package
26821 (name "python-pkginfo")
26822 (version "1.12.1.2")
26823 (source
26824 (origin
26825 (method url-fetch)
26826 (uri (pypi-uri "pkginfo" version))
26827 (sha256
26828 (base32
26829 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26830 (build-system pyproject-build-system)
26831 (arguments
26832 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26833 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26834 (native-inputs
26835 (list python-pytest
26836 python-setuptools
26837 python-wheel))
26838 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26839 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26840 (description
26841 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26842source distriubtion (an sdist) or a binary distribution (e.g., created by
26843running bdist_egg). It can also query the EGG-INFO directory of an installed
26844distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26845created by running @code{python setup.py develop}).")
26846 (license license:expat)))
26847
26848;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
26849;; read-only. Consider to remove when nothing depends on it.
26850(define-public python-ratelimiter
26851 ;; From https://github.com/RazerM/ratelimiter/pull/11
26852 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
26853 (revision "0"))
26854 (package
26855 (name "python-ratelimiter")
26856 (version (git-version "1.2.0.post1" revision commit))
26857 (source
26858 (origin
26859 (method git-fetch)
26860 (uri (git-reference
26861 (url "https://github.com/RazerM/ratelimiter")
26862 (commit commit)))
26863 (sha256
26864 (base32
26865 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26866 (build-system pyproject-build-system)
26867 (arguments
26868 (list #:phases
26869 '(modify-phases %standard-phases
26870 (add-after 'unpack 'pytest-compatibility
26871 (lambda _
26872 (substitute* "tests/conftest.py"
26873 (("pytest.collect.File") "pytest.File")))))))
26874 (native-inputs
26875 (list python-pytest-8
26876 python-pytest-asyncio-0.26
26877 python-setuptools))
26878 (home-page "https://github.com/RazerM/ratelimiter")
26879 (synopsis "Simple rate limiting object")
26880 (description
26881 "The @code{ratelimiter} module ensures that an operation will not be
26882executed more than a given number of times during a given period.")
26883 (license license:asl2.0))))
26884
26885(define-public python-rbfly
26886 (package
26887 (name "python-rbfly")
26888 (version "0.11.0")
26889 (source
26890 (origin
26891 (method url-fetch)
26892 (uri (pypi-uri "rbfly" version))
26893 (sha256
26894 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
26895 (build-system pyproject-build-system)
26896 (arguments
26897 (list
26898 #:test-flags
26899 #~(list "--pyargs" "rbfly"
26900 #$@(if (target-64bit?)
26901 '()
26902 '((string-append "--deselect=tests/amqp/test_message.py"
26903 "::test_encode_amqp_string_too_long"))))
26904 #:phases
26905 #~(modify-phases %standard-phases
26906 (add-before 'check 'remove-local-source
26907 (lambda _
26908 (delete-file-recursively "rbfly"))))))
26909 (native-inputs
26910 (list python-cython
26911 python-pytest
26912 python-pytest-asyncio
26913 python-pytest-timeout
26914 python-setuptools))
26915 (home-page "https://wrobell.dcmod.org/rbfly/")
26916 (synopsis "Work with RabbitMQ Streams in Python")
26917 (description
26918 "This package implements a functionality to deal with
26919@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26920@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26921
26922It is designed and implemented with the following qualities in mind:
26923@itemize
26924@item asynchronous Pythonic API with type annotations
26925@item use of
26926@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
269271.0 message format to enable interoperability between RabbitMQ Stream. clients
26928@item auto reconnection to RabbitMQ broker with lazily created connection
26929objects
26930@end itemize
26931
26932Support of many RabbitMQ Streams broker features:
26933@itemize
26934@item publishing single messages, or in batches, with confirmation
26935@item subscribing to a stream at a specific point in time, from a specific
26936offset, or using offset reference
26937@item stream message filtering
26938@item writing stream offset reference
26939@item message deduplication
26940@item integration with AMQP 1.0 ecosystem at message format level
26941@end itemize")
26942 (license license:gpl3+)))
26943
26944(define-public python-jsonrpclib-pelix
26945 (package
26946 (name "python-jsonrpclib-pelix")
26947 (version "0.3.2")
26948 (source
26949 (origin
26950 (method git-fetch)
26951 (uri (git-reference
26952 (url "https://github.com/tcalmant/jsonrpclib")
26953 (commit (string-append "v" version))))
26954 (file-name (git-file-name name version))
26955 (sha256
26956 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26957 (build-system pyproject-build-system)
26958 (arguments
26959 (list
26960 #:test-flags #~(list "--deselect=\
26961tests/test_internal.py::InternalTests::test_multicall_success")))
26962 (native-inputs (list python-pytest python-setuptools))
26963 (home-page "https://github.com/tcalmant/jsonrpclib")
26964 (synopsis "JSON-RPC 2.0 client library for Python")
26965 (description
26966 "This library implements the JSON-RPC v2.0 specification
26967(backwards-compatible) as a client library for Python. This version is a fork
26968of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26969 (license license:asl2.0)))
26970
26971(define-public python-setuptools-git
26972 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26973 ;; refresh cycle.
26974 (package
26975 (name "python-setuptools-git")
26976 (version "1.2")
26977 (source
26978 (origin
26979 (method url-fetch)
26980 (uri (pypi-uri "setuptools-git" version))
26981 (sha256
26982 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26983 (build-system pyproject-build-system)
26984 (arguments
26985 (list
26986 #:tests? #f ;no tests in PyPI
26987 #:phases
26988 #~(modify-phases %standard-phases
26989 ;; This is needed for tests.
26990 (add-after 'unpack 'configure-git
26991 (lambda _
26992 (setenv "HOME" "/tmp")
26993 (invoke "git" "config" "--global" "user.email" "guix")
26994 (invoke "git" "config" "--global" "user.name" "guix"))))))
26995 (native-inputs
26996 (list git-minimal/pinned python-setuptools python-wheel))
26997 (home-page "https://github.com/msabramo/setuptools-git")
26998 (synopsis "Setuptools revision control system plugin for Git")
26999 (description
27000 "This package provides a plugin for Setuptools for revision control with
27001Git.")
27002 (license license:bsd-3)))
27003
27004(define-public python-setuptools-rust
27005 (package
27006 (name "python-setuptools-rust")
27007 (version "1.11.1")
27008 (source
27009 (origin
27010 (method url-fetch)
27011 (uri (pypi-uri "setuptools_rust" version))
27012 (sha256
27013 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
27014 (build-system pyproject-build-system)
27015 (arguments
27016 (list #:tests? #f)) ;tests require Cargo
27017 (propagated-inputs
27018 (list python-semantic-version
27019 python-setuptools))
27020 (home-page "https://github.com/PyO3/setuptools-rust")
27021 (synopsis "Setuptools plugin for Rust extensions")
27022 (description
27023 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
27024Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
27025 (license license:expat)))
27026
27027(define-public python-setuptools-gettext
27028 (package
27029 (name "python-setuptools-gettext")
27030 (version "0.1.14")
27031 (source
27032 (origin
27033 (method git-fetch)
27034 (uri (git-reference
27035 (url "https://github.com/breezy-team/setuptools-gettext")
27036 (commit (string-append "v" version))))
27037 (file-name (git-file-name name version))
27038 (sha256
27039 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
27040 (build-system pyproject-build-system)
27041 (native-inputs (list python-pytest python-tomli python-setuptools))
27042 (home-page "https://github.com/breezy-team/setuptools-gettext")
27043 (synopsis "Setuptools plugin for gettext")
27044 (description "This package provides a plugin for Setuptools for gettext.")
27045 (license license:gpl2+)))
27046
27047(define-public python-pyclibrary
27048 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
27049 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
27050 (revision "0"))
27051 (package
27052 (name "python-pyclibrary")
27053 (version (git-version "0.2.2" revision commit))
27054 (source
27055 (origin
27056 (method git-fetch)
27057 (uri (git-reference
27058 (url "https://github.com/MatthieuDartiailh/pyclibrary")
27059 (commit commit)))
27060 (file-name (git-file-name name version))
27061 (sha256
27062 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
27063 (build-system pyproject-build-system)
27064 (native-inputs
27065 (list python-pytest
27066 python-setuptools
27067 python-setuptools-scm))
27068 (propagated-inputs
27069 (list python-pyparsing))
27070 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
27071 (synopsis "Wrap dynamic libraries in Python")
27072 (description
27073 "This package helps wrapping dynamic libraries in Python. It includes
27074a pure-Python C parser and an automation library that uses C header file
27075definitions to simplify the use of C bindings.")
27076 (license license:expat))))
27077
27078(define-public python-pyclipper
27079 (package
27080 (name "python-pyclipper")
27081 (version "1.3.0.post6")
27082 (source
27083 (origin
27084 (method git-fetch)
27085 (uri (git-reference
27086 (url "https://github.com/greginvm/pyclipper")
27087 (commit version)))
27088 (file-name (git-file-name name version))
27089 (sha256
27090 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
27091 (build-system pyproject-build-system)
27092 (arguments
27093 (list
27094 #:phases
27095 #~(modify-phases %standard-phases
27096 (add-before 'build 'cythonize-sources
27097 (lambda _
27098 (with-directory-excursion "src/pyclipper"
27099 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
27100 (native-inputs
27101 (list python-cython
27102 python-pytest
27103 python-setuptools
27104 python-setuptools-scm))
27105 (home-page "https://github.com/greginvm/pyclipper")
27106 (synopsis "Wrapper for Angus Johnson's Clipper library")
27107 (description
27108 "Pyclipper is a Cython wrapper for the C++ translation of the
27109Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
27110 (license license:expat)))
27111
27112(define-public python-semver
27113 (package
27114 (name "python-semver")
27115 (version "3.0.4")
27116 (source
27117 (origin
27118 (method url-fetch)
27119 (uri (pypi-uri "semver" version))
27120 (sha256
27121 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
27122 (build-system pyproject-build-system)
27123 (native-inputs (list python-pytest python-setuptools))
27124 (home-page "https://github.com/k-bx/python-semver")
27125 (synopsis "Python helper for Semantic Versioning")
27126 (description
27127 "This package provides a Python library for @url{Semantic Versioning,
27128http://semver.org/}.")
27129 (license license:bsd-3)))
27130
27131(define-public python-phonenumbers
27132 (package
27133 (name "python-phonenumbers")
27134 (version "8.13.37")
27135 (source
27136 (origin
27137 (method git-fetch)
27138 (uri (git-reference
27139 (url "https://github.com/daviddrysdale/python-phonenumbers")
27140 (commit (string-append "v" version))))
27141 (file-name (git-file-name name version))
27142 (sha256
27143 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
27144 (build-system pyproject-build-system)
27145 (arguments
27146 (list
27147 #:test-backend #~'custom
27148 #:test-flags #~(list "-m" "testwrapper")
27149 #:phases
27150 #~(modify-phases %standard-phases
27151 (add-after 'unpack 'chdir
27152 (lambda _
27153 (chdir "python"))))))
27154 (propagated-inputs (list python-protobuf))
27155 (native-inputs (list python-setuptools))
27156 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
27157 (synopsis "Python library for dealing with international phone numbers")
27158 (description
27159 "This package provides a Python port of Google's libphonenumber library.")
27160 (license license:asl2.0)))
27161
27162(define-public python-heapdict
27163 (package
27164 (name "python-heapdict")
27165 (version "1.0.1")
27166 (source
27167 (origin
27168 (method url-fetch)
27169 (uri (pypi-uri "HeapDict" version))
27170 (sha256
27171 (base32
27172 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
27173 (build-system pyproject-build-system)
27174 (arguments (list #:test-backend #~'unittest))
27175 (native-inputs (list python-setuptools))
27176 (home-page "http://stutzbachenterprises.com/")
27177 (synopsis "Heap with decrease-key and increase-key operations")
27178 (description
27179 "heapdict implements the MutableMapping ABC, meaning it works pretty much
27180like a regular Python @code{dict}. It’s designed to be used as a priority
27181queue.")
27182 (license license:bsd-3)))
27183
27184(define-public python-send2trash
27185 (package
27186 (name "python-send2trash")
27187 (version "1.8.2")
27188 (source
27189 (origin (method git-fetch)
27190 ;; Source tarball on PyPI doesn't include tests.
27191 (uri (git-reference
27192 (url "https://github.com/arsenetar/send2trash")
27193 (commit version)))
27194 (file-name (git-file-name name version))
27195 (sha256
27196 (base32
27197 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
27198 (build-system pyproject-build-system)
27199 (arguments
27200 (list
27201 #:phases
27202 '(modify-phases %standard-phases
27203 (add-before 'check 'pre-check
27204 (lambda _ (setenv "HOME" "/tmp"))))))
27205 (native-inputs (list python-pytest python-setuptools python-wheel))
27206 (home-page "https://github.com/arsenetar/send2trash")
27207 (synopsis "Send files to the user's @file{~/Trash} directory")
27208 (description "This package provides a Python library to send files to the
27209user's @file{~/Trash} directory.")
27210 (license license:bsd-3)))
27211
27212(define-public python-pyfavicon
27213 (package
27214 (name "python-pyfavicon")
27215 (version "0.1.1")
27216 (source
27217 (origin
27218 (method git-fetch)
27219 (uri (git-reference
27220 (url "https://github.com/bilelmoussaoui/pyfavicon")
27221 (commit version)))
27222 (file-name (git-file-name name version))
27223 (sha256
27224 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
27225 (build-system pyproject-build-system)
27226 (arguments
27227 (list
27228 #:test-flags
27229 #~(list "-k" (string-join (list
27230 ;; Socket name resolution fails.
27231 "not test_url_icon_link_type"
27232 "test_icon_sizes"
27233 ;; Tuples differ.
27234 "test_largest_icon")
27235 " and not "))))
27236 (native-inputs (list python-pytest python-setuptools))
27237 (propagated-inputs
27238 (list python-aiohttp python-beautifulsoup4 python-pillow))
27239 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
27240 (synopsis "Async favicon fetcher")
27241 (description
27242 "@code{pyfavicon} is an async favicon fetcher.")
27243 (license license:expat)))
27244
27245(define-public python-funcy
27246 (package
27247 (name "python-funcy")
27248 (version "1.11")
27249 (source
27250 (origin
27251 (method git-fetch)
27252 (uri (git-reference
27253 (url "https://github.com/Suor/funcy")
27254 (commit version)))
27255 (sha256
27256 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
27257 (file-name (git-file-name name version))))
27258 (build-system pyproject-build-system)
27259 (native-inputs
27260 (list python-pytest python-whatever python-setuptools python-wheel))
27261 (home-page "https://github.com/Suor/funcy")
27262 (synopsis "Functional tools")
27263 (description "@code{funcy} is a library that provides functional tools.
27264Examples are:
27265@enumerate
27266@item merge - Merges collections of the same type
27267@item walk - Type-preserving map
27268@item select - Selects a part of a collection
27269@item take - Takes the first n items of a collection
27270@item first - Takes the first item of a collection
27271@item remove - Predicated-removes items of a collection
27272@item concat - Concatenates two collections
27273@item flatten - Flattens a collection with subcollections
27274@item distinct - Returns only distinct items
27275@item split - Predicated-splits a collection
27276@item split_at - Splits a collection at a given item
27277@item group_by - Groups items by group
27278@item pairwise - Pairs off adjacent items
27279@item partial - Partially-applies a function
27280@item curry - Curries a function
27281@item compose - Composes functions
27282@item complement - Complements a predicate
27283@item all_fn - \"all\" with predicate
27284@end enumerate")
27285 (license license:bsd-3)))
27286
27287(define-public python-funcy-1.14
27288 (package/inherit python-funcy
27289 (name "python-funcy")
27290 (version "1.14")
27291 (source
27292 (origin
27293 (method git-fetch)
27294 (uri (git-reference
27295 (url "https://github.com/Suor/funcy")
27296 (commit version)))
27297 (sha256
27298 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
27299 (file-name (git-file-name name version))))))
27300
27301(define-public python-isoweek
27302 (package
27303 (name "python-isoweek")
27304 (version "1.3.3")
27305 (source
27306 (origin
27307 (method url-fetch)
27308 (uri (pypi-uri "isoweek" version))
27309 (sha256
27310 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
27311 (build-system pyproject-build-system)
27312 (arguments (list #:test-backend #~'unittest))
27313 (native-inputs (list python-setuptools))
27314 (home-page "https://github.com/gisle/isoweek")
27315 (synopsis "Objects representing a week")
27316 (description "The @code{isoweek} module provide the class Week that
27317implements the week definition of ISO 8601. This standard also defines
27318a notation for identifying weeks; yyyyWww (where the W is a literal).
27319Week instances stringify to this form.")
27320 (license license:bsd-3)))
27321
27322(define-public bpython
27323 (package
27324 (name "bpython")
27325 (version "0.25")
27326 (source
27327 (origin
27328 (method url-fetch)
27329 (uri (pypi-uri "bpython" version))
27330 (sha256
27331 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
27332 (build-system pyproject-build-system)
27333 (arguments
27334 (list
27335 #:test-flags
27336 ;; Tests can't import curtsies, pygments and urwid.
27337 #~(list "-k" (string-join
27338 (list "not test_issue108"
27339 "test_issue133")
27340 " and not " ))
27341 #:phases
27342 #~(modify-phases %standard-phases
27343 (add-after 'wrap 'add-aliases
27344 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
27345 (lambda _
27346 (for-each
27347 (lambda (old new)
27348 (symlink old (string-append #$output "/bin/" new)))
27349 '("bpython" "bpython-urwid" "bpdb")
27350 '("bpython3" "bpython3-urwid" "bpdb3")))))))
27351 (native-inputs
27352 (list python-mock
27353 python-pytest
27354 python-setuptools))
27355 (propagated-inputs
27356 (list python-curtsies
27357 python-cwcwidth
27358 python-greenlet
27359 python-pygments
27360 python-pyxdg
27361 python-requests
27362 ;; [optional]
27363 python-pyperclip
27364 python-jedi
27365 python-urwid-2
27366 python-watchdog))
27367 (home-page "https://bpython-interpreter.org/")
27368 (synopsis "Fancy interface to the Python interpreter")
27369 (description "Bpython is a fancy interface to the Python
27370interpreter. bpython's main features are
27371
27372@enumerate
27373@item in-line syntax highlighting,
27374@item readline-like autocomplete with suggestions displayed as you type,
27375@item expected parameter list for any Python function,
27376@item \"rewind\" function to pop the last line of code from memory and
27377 re-evaluate,
27378@item send the code you've entered off to a pastebin,
27379@item save the code you've entered to a file, and
27380@item auto-indentation.
27381@end enumerate")
27382 (license license:expat)))
27383
27384(define-public python-pyinotify
27385 (package
27386 (name "python-pyinotify")
27387 (version "0.9.6")
27388 (source
27389 (origin
27390 (method git-fetch)
27391 (uri (git-reference
27392 (url "https://github.com/seb-m/pyinotify")
27393 (commit version)))
27394 (file-name (git-file-name name version))
27395 (sha256
27396 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
27397 (build-system pyproject-build-system)
27398 (arguments
27399 (list
27400 #:tests? #f ;no tests
27401 #:phases
27402 #~(modify-phases %standard-phases
27403 (add-after 'unpack 'drop-shebang
27404 (lambda _
27405 ;; Dropping this shebang prevents the build system from adding
27406 ;; python-wrapper as an input, reducing package closure size from
27407 ;; ~200 MiB to ~0.2 MiB.
27408 (substitute* "python3/pyinotify.py"
27409 (("#!/usr/bin/env python") "")))))))
27410 (native-inputs
27411 (list python-setuptools))
27412 (propagated-inputs
27413 (list python-pyasyncore))
27414 (home-page "https://github.com/seb-m/pyinotify")
27415 (synopsis "Python library for monitoring inotify events")
27416 (description
27417 "@code{pyinotify} provides a Python interface for monitoring file system
27418events on Linux.")
27419 (license license:expat)))
27420
27421(define-public python-pyinotify-cli
27422 (package
27423 (inherit python-pyinotify)
27424 (name "python-pyinotify-cli")
27425 (arguments
27426 (substitute-keyword-arguments arguments
27427 ((#:phases phases #~%standard-phases)
27428 #~(modify-phases #$phases
27429 (delete 'drop-shebang)
27430 (add-after 'install 'install-entrypoint
27431 (lambda _
27432 (let ((entrypoint
27433 (string-append #$output "/lib/python"
27434 (python-version (which "python"))
27435 "/site-packages/pyinotify.py"))
27436 (bin (string-append #$output "/bin")))
27437 (mkdir-p bin)
27438 (invoke "chmod" "+x" entrypoint)
27439 (symlink
27440 entrypoint (string-append #$output "/bin/pyinotify")))))))))
27441 (description
27442 "This package provides, in addition to the @code{pyinotify} Python library,
27443a command line application exposing the same functionality.")))
27444
27445(define-public python-latex2pydata
27446 (package
27447 (name "python-latex2pydata")
27448 (version "0.5.0")
27449 (source
27450 (origin
27451 (method url-fetch)
27452 (uri (pypi-uri "latex2pydata" version))
27453 (sha256
27454 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
27455 (build-system pyproject-build-system)
27456 (native-inputs (list python-setuptools python-wheel python-pytest))
27457 (home-page "https://github.com/gpoore/latex2pydata")
27458 (synopsis "Load data from LaTeX in Python literal format")
27459 (description
27460 "This package is designed to load data in Python literal format that was
27461saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
27462passed from LaTeX to Python.")
27463 (license license:bsd-3)))
27464
27465(define-public python-latexcodec
27466 (package
27467 (name "python-latexcodec")
27468 (version "3.0.1")
27469 (source
27470 (origin
27471 (method git-fetch)
27472 (uri (git-reference
27473 (url "https://github.com/mcmtroffaes/latexcodec/")
27474 (commit version)))
27475 (file-name (git-file-name name version))
27476 (sha256
27477 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
27478 (build-system pyproject-build-system)
27479 (native-inputs (list python-pytest python-setuptools))
27480 (home-page "https://readthedocs.org/projects/latexcodec/")
27481 (synopsis "Work with LaTeX code in Python")
27482 (description "Lexer and codec to work with LaTeX code in Python.")
27483 (license license:expat)))
27484
27485(define-public python-latexminted
27486 (package
27487 (name "python-latexminted")
27488 (version "0.7.1")
27489 (source
27490 (origin
27491 (method url-fetch)
27492 (uri (pypi-uri "latexminted" version))
27493 (sha256
27494 (base32 "1yj08q1bpy0lk3gk6zs9b7ik83mwn9d7s85fpvyj1wk06iphj96p"))))
27495 (build-system pyproject-build-system)
27496 (arguments (list #:tests? #f)) ; No tests upstream.
27497 (propagated-inputs (list python-latex2pydata
27498 python-latexrestricted
27499 python-pygments))
27500 (native-inputs (list texlive-kpathsea python-setuptools))
27501 (home-page "https://github.com/gpoore/minted")
27502 (synopsis "Python library for the LaTeX minted package")
27503 (description "This Python package provides the Python side of the
27504@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
27505@code{python-pygments} library. It also provides several code formatting and
27506manipulation features implemented in Python that would be difficult to perform
27507in LaTeX, such as dedenting code and extracting code snippets from source files
27508using regular expressions.")
27509 (license license:lppl1.3c+)))
27510
27511(define-public python-latexrestricted
27512 (package
27513 (name "python-latexrestricted")
27514 (version "0.6.2")
27515 (source
27516 (origin
27517 (method url-fetch)
27518 (uri (pypi-uri "latexrestricted" version))
27519 (sha256
27520 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
27521 (build-system pyproject-build-system)
27522 (arguments
27523 (list
27524 #:tests? #f ;no test
27525 #:phases
27526 #~(modify-phases %standard-phases
27527 (add-after 'unpack 'fix-paths
27528 (lambda* (#:key inputs #:allow-other-keys)
27529 (let ((pystr (lambda (s) (string-append "'" s "'")))
27530 (kpse (search-input-file inputs "/bin/kpsewhich")))
27531 (substitute* "latexrestricted/_latex_config.py"
27532 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
27533 ;; this variable is bogus in Guix because binaries are scattered
27534 ;; across multiple directories. This phase sets SELFAUTOLOC to
27535 ;; the specific directory containing `kpsewhich'.
27536 (("os\\.getenv\\('SELFAUTOLOC'\\)")
27537 (pystr (dirname kpse)))
27538 ;; Refer to kpse by store path instead of looking it upein $PATH.
27539 (("shutil.which\\('kpse'.*$")
27540 (string-append (pystr kpse) "\n")))))))))
27541 (native-inputs (list python-setuptools python-wheel))
27542 (inputs (list texlive-kpathsea))
27543 (home-page "https://github.com/gpoore/latexrestricted")
27544 (synopsis
27545 "Library for creating executables compatible with LaTeX's shell escape")
27546 (description
27547 "This Python package is designed to simplify the process of creating Python
27548executables compatible with LaTeX restricted shell escape. Restricted shell
27549escape allows LaTeX to run trusted executables as part of compiling documents.
27550These executables have restricted access to the file system and restricted
27551ability to launch subprocesses.")
27552 (license license:lppl1.3+)))
27553
27554(define-public python-pybloom-live
27555 (package
27556 (name "python-pybloom-live")
27557 (version "4.0.0")
27558 (source (origin
27559 (method url-fetch)
27560 (uri (pypi-uri "pybloom_live" version))
27561 (sha256
27562 (base32
27563 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
27564 (build-system pyproject-build-system)
27565 (propagated-inputs (list python-bitarray python-xxhash))
27566 (native-inputs (list python-pytest python-setuptools python-wheel))
27567 (home-page "https://github.com/joseph-fox/python-bloomfilter")
27568 (synopsis "Bloom filter")
27569 (description "This package provides a scalable Bloom filter implemented in
27570Python.")
27571 (license license:expat)))
27572
27573;; XXX: Not maintained since 2020.
27574(define-public python-pybktree
27575 (package
27576 (name "python-pybktree")
27577 (version "1.1")
27578 (source
27579 (origin
27580 (method url-fetch)
27581 (uri (pypi-uri "pybktree" version))
27582 (sha256
27583 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
27584 (build-system pyproject-build-system)
27585 (arguments
27586 (list #:tests? #f)) ;no tests provided
27587 (native-inputs (list python-setuptools))
27588 (home-page "https://github.com/Jetsetter/pybktree")
27589 (synopsis "Pythonic BK-tree data structure")
27590 (description
27591 "This package provides a BK-tree data structure to allow fast querying of
27592close matches in Python.")
27593 (license license:expat)))
27594
27595(define-public python-pybtex
27596 (package
27597 (name "python-pybtex")
27598 (version "0.25.0")
27599 (source
27600 (origin
27601 (method git-fetch)
27602 (uri (git-reference
27603 (url "https://codeberg.org/pybtex/pybtex")
27604 (commit version)))
27605 (file-name (git-file-name name version))
27606 (sha256
27607 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
27608 (build-system pyproject-build-system)
27609 (native-inputs (list python-pytest python-setuptools))
27610 (propagated-inputs (list python-latexcodec python-pyyaml))
27611 (home-page "https://pybtex.org/")
27612 (synopsis "BibTeX-compatible bibliography processor")
27613 (description
27614 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
27615You can simply type pybtex instead of bibtex.")
27616 (license license:expat)))
27617
27618(define-public python-pybtex-apa-style
27619 (package
27620 (name "python-pybtex-apa-style")
27621 (version "1.3")
27622 (source
27623 (origin
27624 (method url-fetch)
27625 (uri (pypi-uri "pybtex-apa-style" version))
27626 (sha256
27627 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
27628 (build-system pyproject-build-system)
27629 (arguments
27630 (list
27631 #:test-backend #~'custom
27632 #:test-flags
27633 #~(list "-c" (string-append "import sys, pybtex.plugin;"
27634 " sys.exit('apa' not"
27635 " in pybtex.plugin.enumerate_plugin_names"
27636 "('pybtex.style.labels'))"))))
27637 (native-inputs (list python-pybtex python-setuptools))
27638 (home-page "https://github.com/naeka/pybtex-apa-style")
27639 (synopsis "APA style for pybtex")
27640 (description
27641 "This package provides support for the APA style within pybtex.")
27642 (license license:expat)))
27643
27644(define-public python-pybtex-docutils
27645 (package
27646 (name "python-pybtex-docutils")
27647 (version "1.0.3")
27648 (source
27649 (origin
27650 (method git-fetch)
27651 (uri (git-reference
27652 (url "https://github.com/mcmtroffaes/pybtex-docutils")
27653 (commit version)))
27654 (file-name (git-file-name name version))
27655 (sha256
27656 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
27657 (build-system pyproject-build-system)
27658 (propagated-inputs (list python-docutils python-pybtex))
27659 (native-inputs (list python-setuptools python-pytest))
27660 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
27661 (synopsis "Docutils backend for pybtex")
27662 (description "The pybtex docutils backend allows bibtex citations to be
27663inserted into documentation generated by docutils.")
27664 (license license:expat)))
27665
27666(define-public python-onetimepass
27667 (package
27668 (name "python-onetimepass")
27669 (version "1.0.1")
27670 (source
27671 (origin
27672 (method git-fetch)
27673 (uri (git-reference
27674 (url "https://github.com/tadeck/onetimepass/")
27675 (commit (string-append "v" version))))
27676 (file-name (git-file-name name version))
27677 (sha256
27678 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27679 (build-system pyproject-build-system)
27680 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27681 (native-inputs (list python-setuptools))
27682 (propagated-inputs (list python-six))
27683 (home-page "https://github.com/tadeck/onetimepass/")
27684 (synopsis "One-time password library")
27685 (description
27686 "Python one-time password library for HMAC-based (HOTP) and time-based
27687(TOTP) passwords.")
27688 (license license:expat)))
27689
27690(define-public python-online-judge-api-client
27691 (package
27692 (name "python-online-judge-api-client")
27693 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27694 (revision . "0")))
27695 (version (git-version "10.10.1"
27696 (assoc-ref properties 'revision)
27697 (assoc-ref properties 'commit)))
27698 (source
27699 (origin
27700 (method git-fetch)
27701 (uri (git-reference
27702 (url "https://github.com/online-judge-tools/api-client")
27703 (commit (assoc-ref properties 'commit))))
27704 (file-name (git-file-name name version))
27705 (sha256
27706 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27707 (patches
27708 (search-patches "python-online-judge-api-client-tests.patch"))
27709 ))
27710 (build-system pyproject-build-system)
27711 (arguments
27712 (list
27713 #:test-flags
27714 #~(list "--ignore-glob=tests/get_contest_*.py"
27715 "--ignore-glob=tests/get_problem_*.py")
27716 #:phases
27717 #~(modify-phases %standard-phases
27718 (add-before 'check 'configure-tests
27719 (lambda* (#:key inputs outputs #:allow-other-keys)
27720 (delete-file-recursively
27721 (string-append (site-packages inputs outputs)
27722 "/tests"))
27723 (call-with-output-file "pytest.ini"
27724 (lambda (port)
27725 (format port "\
27726[pytest]
27727python_files = tests/*.py"))))))))
27728 (native-inputs (list python-pytest python-setuptools))
27729 (propagated-inputs
27730 (list python-appdirs
27731 python-beautifulsoup4
27732 python-colorlog
27733 python-lxml
27734 python-requests
27735 python-toml
27736 python-jsonschema))
27737 (home-page "https://github.com/online-judge-tools/api-client")
27738 (synopsis "API client for various online judges")
27739 (description
27740 "This is an API client for various online judges, used as the backend
27741library of @code{oj} command. You can use the Python library
27742(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27743command) which talks JSON compatible with jmerle/competitive-companion.")
27744 (license license:expat)))
27745
27746(define-public online-judge-tools
27747 (package
27748 (name "online-judge-tools")
27749 (version "11.5.1")
27750 ;; Source distributions are not uploaded to PyPI.
27751 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27752 (source
27753 (origin
27754 (method git-fetch)
27755 (uri (git-reference
27756 (url "https://github.com/online-judge-tools/oj")
27757 (commit (string-append "v" version))))
27758 (file-name (git-file-name name version))
27759 (sha256
27760 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27761 (patches (search-patches "online-judge-tools.patch"))))
27762 (build-system pyproject-build-system)
27763 (arguments
27764 (list
27765 #:test-flags
27766 ;; These tests require network connections
27767 #~(list "--ignore=tests/command_version.py")))
27768 (native-inputs (list python-pytest python-setuptools))
27769 (inputs (list time))
27770 (propagated-inputs (list python-online-judge-api-client python-colorama
27771 python-requests))
27772 (home-page "https://github.com/online-judge-tools/oj")
27773 (synopsis "Command to help solving problems on various online judges")
27774 (description
27775 "@command{oj} is a command line tool to help solving problems on
27776various online judges. This command automates downloading sample
27777cases, generating additional test cases, testing for your code, and
27778submitting it.")
27779 (license license:expat)))
27780
27781(define-public python-mpv-jsonipc
27782 (package
27783 (name "python-mpv-jsonipc")
27784 (version "1.2.0")
27785 (source
27786 (origin
27787 (method url-fetch)
27788 (uri (pypi-uri "python-mpv-jsonipc" version))
27789 (sha256
27790 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27791 (build-system pyproject-build-system)
27792 (arguments (list #:tests? #f)) ;No test suite.
27793 (native-inputs (list python-setuptools python-wheel))
27794 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27795 (synopsis "Python API to control MPV using JSON IPC")
27796 (description "Python MPV JSONIPC implements an interface similar to
27797python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27798 (license license:asl2.0)))
27799
27800(define-public python-jellyfin-apiclient
27801 (package
27802 (name "python-jellyfin-apiclient")
27803 (version "1.11.0")
27804 (source
27805 (origin
27806 (method git-fetch)
27807 (uri
27808 (git-reference
27809 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27810 (commit (string-append "v" version))))
27811 (sha256
27812 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27813 (build-system pyproject-build-system)
27814 (native-inputs (list python-setuptools python-pytest python-wheel))
27815 (propagated-inputs (list python-certifi python-requests python-urllib3
27816 python-websocket-client))
27817 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27818 (synopsis "Python API client for Jellyfin")
27819 (description "The Jellyfin ApiClient Python package makes it possible
27820to use the Jellyfin API from Python. It was extracted from the Jellyfin
27821Kodi plugin.")
27822 (license license:gpl3+)))
27823
27824(define-public python-parso
27825 (package
27826 (name "python-parso")
27827 (version "0.8.5")
27828 (source
27829 (origin
27830 (method url-fetch)
27831 (uri (pypi-uri "parso" version))
27832 (sha256
27833 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
27834 (build-system pyproject-build-system)
27835 (native-inputs
27836 (list python-pytest
27837 python-setuptools))
27838 (home-page "https://github.com/davidhalter/parso")
27839 (synopsis "Python Parser")
27840 (description "Parso is a Python parser that supports error recovery and
27841round-trip parsing for different Python versions (in multiple Python versions).
27842Parso is also able to list multiple syntax errors in your Python file.")
27843 (license license:expat)))
27844
27845(define-public python-async-generator
27846 (package
27847 (name "python-async-generator")
27848 (version "1.10")
27849 (source
27850 (origin
27851 (method url-fetch)
27852 (uri (pypi-uri "async_generator" version))
27853 (sha256
27854 (base32
27855 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27856 (build-system pyproject-build-system)
27857 (native-inputs
27858 (list python-pytest python-setuptools))
27859 (home-page "https://github.com/python-trio/async_generator")
27860 (synopsis "Async generators and context managers for Python 3.5+")
27861 (description "@code{async_generator} back-ports Python 3.6's native async
27862generators and Python 3.7's context managers into Python 3.5.")
27863 ;; Dual licensed.
27864 (license (list license:expat license:asl2.0))))
27865
27866(define-public python-async-timeout
27867 (package
27868 (name "python-async-timeout")
27869 (version "5.0.1")
27870 (source
27871 (origin
27872 (method url-fetch)
27873 (uri (pypi-uri "async_timeout" version))
27874 (sha256
27875 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27876 (build-system pyproject-build-system)
27877 (native-inputs
27878 (list python-pytest
27879 python-pytest-asyncio
27880 python-setuptools
27881 python-wheel))
27882 (home-page "https://github.com/aio-libs/async-timeout")
27883 (synopsis "Timeout context manager for asyncio programs")
27884 (description
27885 "@code{async-timeout} provides a timeout timeout context manager
27886compatible with @code{asyncio}.")
27887 (license license:asl2.0)))
27888
27889(define-public python-async-timeout-4
27890 (package
27891 (inherit python-async-timeout)
27892 (name "python-async-timeout")
27893 (version "4.0.3")
27894 (source
27895 (origin
27896 (method url-fetch)
27897 (uri (pypi-uri "async-timeout" version))
27898 (sha256
27899 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27900
27901(define-public python-glob2
27902 (package
27903 (name "python-glob2")
27904 (version "0.7")
27905 (source
27906 (origin
27907 (method git-fetch)
27908 (uri (git-reference
27909 (url "https://github.com/miracle2k/python-glob2")
27910 (commit (string-append "v" version))))
27911 (file-name (git-file-name name version))
27912 (sha256
27913 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27914 (build-system pyproject-build-system)
27915 (arguments
27916 (list
27917 #:phases
27918 #~(modify-phases %standard-phases
27919 (add-after 'unpack 'patch-tests-for-pytest8
27920 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27921 (lambda _
27922 (substitute* "test.py"
27923 (("setup\\(") "setup_method(")
27924 (("teardown\\(") "teardown_method("))
27925 (rename-file "test.py" "glob2_test.py"))))))
27926 (native-inputs (list python-pytest python-setuptools))
27927 (home-page "https://github.com/miracle2k/python-glob2/")
27928 (synopsis "Extended Version of the python buildin glob module")
27929 (description "This is an extended version of the Python
27930@url{http://docs.python.org/library/glob.html, built-in glob module} which
27931adds:
27932
27933@itemize
27934@item The ability to capture the text matched by glob patterns, and return
27935those matches alongside the file names.
27936@item A recursive @code{**} globbing syntax, akin for example to the
27937@code{globstar} option of Bash.
27938@item The ability to replace the file system functions used, in order to glob
27939on virtual file systems.
27940@item Compatible with Python 2 and Python 3 (tested with 3.3).
27941@end itemize
27942
27943Glob2 currently based on the glob code from Python 3.3.1.")
27944 (license license:bsd-2)))
27945
27946(define-public python-gipc
27947 (package
27948 (name "python-gipc")
27949 (version "1.8.0")
27950 (source
27951 (origin
27952 (method git-fetch)
27953 (uri (git-reference
27954 (url "https://github.com/jgehrcke/gipc")
27955 (commit version)))
27956 (file-name (git-file-name name version))
27957 (sha256
27958 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27959 (build-system pyproject-build-system)
27960 (arguments
27961 (list
27962 #:phases
27963 #~(modify-phases %standard-phases
27964 (add-after 'unpack 'adjust-for-pytest-8
27965 (lambda _
27966 (substitute* "test/test_gipc.py"
27967 (("def setup") "def setup_method")
27968 (("def teardown") "def teardown_method")))))))
27969 (native-inputs
27970 (list python-pytest
27971 python-setuptools))
27972 (propagated-inputs
27973 (list python-gevent))
27974 (home-page "https://gehrcke.de/gipc/")
27975 (synopsis "Child process management in the context of gevent")
27976 (description
27977 "Usage of Python's multiprocessing package in a gevent-powered
27978application may raise problems. With @code{gipc}, process-based child
27979processes can safely be created anywhere within a gevent-powered
27980application.")
27981 (license license:expat)))
27982
27983(define-public python-beautifultable
27984 (package
27985 (name "python-beautifultable")
27986 (version "1.1.0")
27987 (source
27988 (origin
27989 (method git-fetch)
27990 (uri (git-reference
27991 (url "https://github.com/pri22296/beautifultable")
27992 (commit (string-append "v" version))))
27993 (file-name (git-file-name name version))
27994 (sha256
27995 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27996 (build-system pyproject-build-system)
27997 (arguments
27998 (list
27999 ;; Fails because a None is converted to nan, probably due to Pandas 3.
28000 #:test-flags
28001 #~(list "-k" "not test_df_export_scenario2" "test.py")))
28002 (native-inputs (list python-pandas
28003 python-pytest
28004 python-setuptools))
28005 (propagated-inputs (list python-wcwidth))
28006 (home-page "https://github.com/pri22296/beautifultable")
28007 (synopsis "Print ASCII tables for terminals")
28008 (description
28009 "@code{python-beautifultable} provides a class for easily printing
28010tabular data in a visually appealing ASCII format to a terminal.
28011
28012Features include, but are not limited to:
28013@itemize
28014@item Full customization of the look and feel of the table
28015@item Row and column accessors.
28016@item Full support for colors using ANSI sequences or any library.
28017@item Plenty of predefined styles and option to create custom ones.
28018@item Support for Unicode characters.
28019@item Supports streaming table when data is slow to retrieve.
28020@end itemize")
28021 (license license:expat)))
28022
28023(define-public python-globber
28024 (package
28025 (name "python-globber")
28026 (version "0.2.1")
28027 (source
28028 (origin
28029 (method git-fetch)
28030 (uri (git-reference
28031 (url "https://github.com/asharov/globber")
28032 (commit version)))
28033 (file-name (git-file-name name version))
28034 (sha256
28035 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
28036 (build-system pyproject-build-system)
28037 (native-inputs (list python-pytest python-setuptools))
28038 (home-page "https://github.com/asharov/globber")
28039 (synopsis "Library for string matching with glob patterns")
28040 (description
28041 "Globber is a Python library for matching file names against glob patterns.
28042In contrast to other glob-matching libraries, it matches arbitrary strings and
28043doesn't require the matched names to be existing files. In addition, it
28044supports the globstar @code{**} operator to match an arbitrary number of
28045path components.")
28046 (license license:asl2.0)))
28047
28048;; XXX: Not maintained since 2021.
28049(define-public python-git-hammer
28050 (package
28051 (name "python-git-hammer")
28052 (version "0.3.2")
28053 (source
28054 (origin
28055 (method git-fetch)
28056 (uri (git-reference
28057 (url "https://github.com/asharov/git-hammer")
28058 (commit version)))
28059 (file-name (git-file-name name version))
28060 (sha256
28061 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
28062 (build-system pyproject-build-system)
28063 (arguments
28064 (list
28065 #:phases
28066 #~(modify-phases %standard-phases
28067 (add-after 'unpack 'relax-requirements
28068 (lambda _
28069 (substitute* "setup.py"
28070 (("matplotlib <3.1") "matplotlib")))))))
28071 (native-inputs
28072 (list python-pytest
28073 python-setuptools))
28074 (propagated-inputs
28075 (list python-beautifultable
28076 python-dateutil
28077 python-gitpython
28078 python-globber
28079 python-matplotlib
28080 python-sqlalchemy
28081 python-sqlalchemy-utils))
28082 (home-page "https://github.com/asharov/git-hammer")
28083 (synopsis "Provide statistics for git repositories")
28084 (description
28085 "Git Hammer is a statistics tool for projects in git repositories. Its major
28086feature is tracking the number of lines authored by each person for every
28087commit, but it also includes some other useful statistics.")
28088 (license license:asl2.0)))
28089
28090(define-public python-gitignore-parser
28091 (package
28092 (name "python-gitignore-parser")
28093 (version "0.1.13")
28094 (source
28095 (origin
28096 (method git-fetch)
28097 (uri (git-reference
28098 (url "https://github.com/mherrmann/gitignore_parser")
28099 (commit (string-append "v" version))))
28100 (file-name (git-file-name name version))
28101 (sha256
28102 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
28103 (build-system pyproject-build-system)
28104 (arguments (list #:test-backend #~'unittest))
28105 (native-inputs (list python-setuptools))
28106 (home-page "https://github.com/mherrmann/gitignore_parser")
28107 (synopsis "Spec-compliant gitignore parser for Python")
28108 (description
28109 "This package provides a spec-compliant gitignore parser for Python.")
28110 (license license:expat)))
28111
28112(define-public python-fusepy
28113 (package
28114 (name "python-fusepy")
28115 (version "2.0.4")
28116 (source
28117 (origin
28118 (method git-fetch)
28119 (uri (git-reference
28120 (url "https://github.com/fusepy/fusepy")
28121 (commit (string-append "v" version))))
28122 (file-name (git-file-name name version))
28123 (sha256
28124 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
28125 (build-system pyproject-build-system)
28126 (arguments
28127 (list
28128 #:tests? #f ; No formalized tests.
28129 #:phases
28130 #~(modify-phases %standard-phases
28131 (add-before 'build 'set-library-file-name
28132 (lambda* (#:key inputs #:allow-other-keys)
28133 (substitute* "fuse.py"
28134 (("find_library\\('fuse'\\)")
28135 (format #f "~s"
28136 (search-input-file inputs "lib/libfuse.so")))))))))
28137 (native-inputs (list python-setuptools))
28138 (propagated-inputs (list fuse-2))
28139 (home-page "https://github.com/fusepy/fusepy")
28140 (synopsis "Simple ctypes bindings for FUSE")
28141 (description
28142 "Python module that provides a simple interface to FUSE and MacFUSE. The
28143binding is created using the standard @code{ctypes} library.")
28144 (license license:isc)))
28145
28146(define-public pybind11
28147 (package
28148 (name "pybind11")
28149 (version "3.0.4")
28150 (source (origin
28151 (method git-fetch)
28152 (uri (git-reference
28153 (url "https://github.com/pybind/pybind11")
28154 (commit (string-append "v" version))))
28155 (sha256
28156 (base32
28157 "1ad9215jz078al84h43f6fhwg80d7sjdc72r8hi3n419x8hag4j1"))
28158 (file-name (git-file-name name version))))
28159 (build-system cmake-build-system)
28160 (arguments
28161 (list
28162 ;; TODO: Rewrite package definition with pyproject, I had issues to
28163 ;; enable tests and install includes, see the discussion in
28164 ;; guix/guix!4696 where it was initially proposed.
28165 #:configure-flags
28166 #~(list "-DPYBIND11_NOPYTHON=OFF"
28167 "-DPYBIND11_PYTEST_ARGS=-v"
28168 "-DPYBIND11_TEST_SMART_HOLDER=ON")
28169 #:phases
28170 #~(modify-phases %standard-phases
28171 (add-after 'install 'build-python-library
28172 (lambda _
28173 (with-directory-excursion "../source"
28174 (setenv "PYBIND11_USE_CMAKE" "yes")
28175 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
28176 "--prefix" #$output "."))))
28177 (replace 'check
28178 (lambda* (#:key tests? #:allow-other-keys)
28179 (when tests?
28180 ;; Steps are taken from <.github/workflows/ci.yml>.
28181 (invoke "cmake" "--build" "."
28182 "--target" "pytest")
28183 (invoke "cmake" "--build" "."
28184 "--target" "cpptest")
28185 (invoke "cmake" "--build" "."
28186 "--target" "test_cmake_build")
28187 (invoke "cmake" "--build" "."
28188 "--target" "test_cross_module_rtti")))))))
28189 (inputs (list boost))
28190 (native-inputs
28191 (list catch2-2
28192 eigen
28193 python-pytest
28194 python-wrapper
28195 python-scikit-build-core-bootstrap))
28196 (home-page "https://github.com/pybind/pybind11/")
28197 (synopsis "Seamless operability between C++11 and Python")
28198 (description
28199 "@code{pybind11} is a lightweight header-only library that exposes C++
28200types in Python and vice versa, mainly to create Python bindings of existing
28201C++ code. Its goals and syntax are similar to the @code{Boost.Python}
28202library: to minimize boilerplate code in traditional extension modules by
28203inferring type information using compile-time introspection.")
28204 (license license:bsd-3)))
28205
28206(define-public pybind11-2
28207 (package
28208 (inherit pybind11)
28209 (name "pybind11")
28210 (version "2.13.6")
28211 (source
28212 (origin
28213 (method git-fetch)
28214 (uri (git-reference
28215 (url "https://github.com/pybind/pybind11")
28216 (commit (string-append "v" version))))
28217 (file-name (git-file-name name version))
28218 (sha256
28219 (base32 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))))
28220 (build-system cmake-build-system)
28221 (arguments
28222 (list
28223 #:configure-flags
28224 #~(list (string-append "-DCATCH_INCLUDE_DIR="
28225 (assoc-ref %build-inputs "catch2")
28226 "/include/catch"))
28227 #:modules '((guix build cmake-build-system)
28228 ((guix build gnu-build-system) #:prefix gnu:)
28229 (guix build utils))
28230 #:phases
28231 #~(modify-phases %standard-phases
28232 (replace 'check
28233 (lambda args
28234 (apply (assoc-ref gnu:%standard-phases 'check) args)))
28235 (add-after 'install 'install-python
28236 (lambda _
28237 (with-directory-excursion "../source"
28238 (setenv "PYBIND11_USE_CMAKE" "yes")
28239 (invoke "python" "setup.py" "install"
28240 "--single-version-externally-managed"
28241 "--root=/"
28242 (string-append "--prefix=" #$output))))))))
28243 (native-inputs
28244 (list catch2-1
28245 eigen
28246 python-pytest
28247 python-setuptools
28248 python-wrapper))
28249 (inputs '())))
28250
28251(define-public python-pooch
28252 (package
28253 (name "python-pooch")
28254 (version "1.9.0")
28255 (source
28256 (origin
28257 (method git-fetch)
28258 (uri (git-reference
28259 (url "https://github.com/fatiando/pooch")
28260 (commit (string-append "v" version))))
28261 (file-name (git-file-name name version))
28262 (sha256
28263 (base32 "0k8s9npjym80wpac77fvf1vnx5qm5c2pr7x39j8hh0cglfxmgii8"))))
28264 (build-system pyproject-build-system)
28265 (arguments
28266 (list
28267 #:test-flags #~(list "-m" "not network")))
28268 (native-inputs
28269 (list python-pytest
28270 python-pytest-httpserver
28271 python-pytest-localftpserver
28272 python-setuptools
28273 python-setuptools-scm))
28274 (propagated-inputs
28275 (list python-packaging
28276 python-platformdirs
28277 python-requests))
28278 (home-page "https://github.com/fatiando/pooch")
28279 (synopsis "Manage your Python library's sample data files")
28280 (description
28281 "Pooch manages your Python library's sample data files: it automatically
28282downloads and stores them in a local directory, with support for versioning
28283and corruption checks.")
28284 (license license:bsd-3)))
28285
28286(define-public python-fasteners
28287 (package
28288 (name "python-fasteners")
28289 (version "0.20")
28290 (source (origin
28291 ;; No tests in the pypi tarball
28292 (method git-fetch)
28293 (uri (git-reference
28294 (url "https://github.com/harlowja/fasteners")
28295 (commit version)))
28296 (file-name (git-file-name name version))
28297 (sha256
28298 (base32
28299 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
28300 (build-system pyproject-build-system)
28301 (native-inputs (list python-diskcache python-eventlet python-more-itertools
28302 python-setuptools python-pytest))
28303 (home-page "https://github.com/harlowja/fasteners")
28304 (synopsis "Python package that provides useful locks")
28305 (description
28306 "This package provides a Python program that provides following locks:
28307
28308@itemize
28309@item Locking decorator
28310@item Reader-writer locks
28311@item Inter-process locks
28312@item Generic helpers
28313@end itemize\n")
28314 (license license:asl2.0)))
28315
28316(define-public python-requests-file
28317 (package
28318 (name "python-requests-file")
28319 (version "3.0.1")
28320 (source
28321 (origin
28322 (method git-fetch)
28323 (uri (git-reference
28324 (url "https://codeberg.org/dashea/requests-file")
28325 (commit version)))
28326 (file-name (git-file-name name version))
28327 (sha256
28328 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
28329 (build-system pyproject-build-system)
28330 (native-inputs (list python-pytest python-setuptools))
28331 (propagated-inputs (list python-requests))
28332 (home-page "https://codeberg.org/dashea/requests-file")
28333 (synopsis "File transport adapter for Requests")
28334 (description
28335 "Requests-File is a transport adapter for use with the Requests Python
28336library to allow local file system access via @code{file://} URLs.")
28337 (license license:asl2.0)))
28338
28339(define-public python-identify
28340 (package
28341 (name "python-identify")
28342 (version "2.6.14")
28343 (source
28344 (origin
28345 ;; There are no tests in the PyPI tarball.
28346 (method git-fetch)
28347 (uri (git-reference
28348 (url "https://github.com/chriskuehl/identify")
28349 (commit (string-append "v" version))))
28350 (file-name (git-file-name name version))
28351 (sha256
28352 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
28353 (build-system pyproject-build-system)
28354 (native-inputs
28355 (list python-pytest
28356 python-setuptools
28357 python-ukkonen))
28358 (home-page "https://github.com/chriskuehl/identify")
28359 (synopsis "File identification library for Python")
28360 (description
28361 "@code{identify} is a file identification library for Python. Given
28362a file (or some information about a file), return a set of standardized tags
28363identifying what the file is.")
28364 (license license:expat)))
28365
28366(define-public python-nodeenv
28367 (package
28368 (name "python-nodeenv")
28369 (version "1.8.0")
28370 (source
28371 (origin
28372 ;; There's no tarball in PyPI.
28373 (method git-fetch)
28374 (uri (git-reference
28375 (url "https://github.com/ekalinin/nodeenv")
28376 (commit version)))
28377 (file-name (git-file-name name version))
28378 (sha256
28379 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
28380 (build-system pyproject-build-system)
28381 (arguments
28382 (list #:test-flags
28383 #~(list "-k" (string-append
28384 "not test_smoke"
28385 " and not test_smoke_n_system_special_chars"))))
28386 (native-inputs
28387 (list python-mock
28388 python-pytest
28389 python-setuptools
28390 python-wheel))
28391 (home-page "https://ekalinin.github.io/nodeenv/")
28392 (synopsis "Create isolated node.js environments")
28393 (description
28394 "Nodeenv (node.js virtual environment) is a tool to create isolated
28395node.js environments. It creates an environment that has its own installation
28396directories, that doesn't share libraries with other node.js virtual
28397environments.")
28398 (license license:bsd-3)))
28399
28400(define-public python-pynamecheap
28401 (package
28402 (name "python-pynamecheap")
28403 (version "0.0.3")
28404 (source
28405 (origin
28406 (method url-fetch)
28407 (uri (pypi-uri "PyNamecheap" version))
28408 (sha256
28409 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
28410 (build-system pyproject-build-system)
28411 (arguments (list #:tests? #f)) ; No tests.
28412 (native-inputs (list python-setuptools))
28413 (propagated-inputs (list python-requests))
28414 (home-page "https://github.com/Bemmu/PyNamecheap")
28415 (synopsis "Namecheap API client in Python")
28416 (description
28417 "PyNamecheap is a Namecheap API client in Python.")
28418 (license license:expat)))
28419
28420(define-public python-pynput
28421 (package
28422 (name "python-pynput")
28423 (version "1.8.1")
28424 (source
28425 (origin
28426 (method git-fetch)
28427 (uri (git-reference
28428 (url "https://github.com/moses-palmer/pynput")
28429 (commit (string-append "v" version))))
28430 (file-name (git-file-name name version))
28431 (sha256
28432 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
28433 (build-system pyproject-build-system)
28434 (arguments
28435 (list
28436 #:tests? #f ;XXX: tests can't be found with pytest or unittest
28437 #:phases
28438 #~(modify-phases %standard-phases
28439 (add-after 'unpack 'relax-requirements
28440 (lambda _
28441 (substitute* "setup.py"
28442 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
28443 "RUNTIME_PACKAGES"))))
28444 (add-before 'sanity-check 'start-xserver
28445 (lambda* (#:key inputs #:allow-other-keys)
28446 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
28447 (system (format #f "~a :1 -screen 0 640x480x24 &"
28448 Xvfb))
28449 (setenv "DISPLAY" ":1")))))))
28450 (propagated-inputs
28451 (list python-evdev python-xlib))
28452 (native-inputs
28453 (list python-setuptools xorg-server-for-tests))
28454 (home-page "https://github.com/moses-palmer/pynput")
28455 (synopsis "Send virtual input commands")
28456 (description
28457 "This package provides tools to monitor and control user input devices in
28458Python.")
28459 (license license:lgpl3)))
28460
28461(define-public python-pynixutil
28462 (package
28463 (name "python-pynixutil")
28464 (version "0.5.0")
28465 (source
28466 (origin
28467 (method git-fetch)
28468 (uri (git-reference
28469 (url "https://github.com/nix-community/pynixutil")
28470 (commit version)))
28471 (file-name (git-file-name name version))
28472 (sha256
28473 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
28474 (build-system pyproject-build-system)
28475 (arguments
28476 (list
28477 #:test-flags
28478 ;; Tests require nix in the PATH.
28479 #~(list "--ignore=tests/test_drv.py")
28480 #:phases
28481 #~(modify-phases %standard-phases
28482 (add-after 'unpack 'use-poetry-core
28483 (lambda _
28484 ;; Patch to use the core poetry API.
28485 (substitute* "pyproject.toml"
28486 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
28487 (native-inputs
28488 (list python-poetry-core
28489 python-pytest))
28490 (home-page "https://github.com/nix-community/pynixutil")
28491 (synopsis "Utility functions for working with data from Nix in Python")
28492 (description
28493 "@code{pynixutil} provides functions for base32 encoding/decoding and
28494derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
28495@code{drvparse()}.")
28496 (license license:expat)))
28497
28498(define-public python-dns-lexicon
28499 (package
28500 (name "python-dns-lexicon")
28501 (version "3.21.1")
28502 (source
28503 (origin
28504 (method git-fetch)
28505 (uri (git-reference
28506 (url "https://github.com/dns-lexicon/dns-lexicon")
28507 (commit (string-append "v" version))))
28508 (file-name (git-file-name name version))
28509 (sha256
28510 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
28511 (build-system pyproject-build-system)
28512 (arguments
28513 (list
28514 ;; Integration tests require network access.
28515 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
28516 #:phases
28517 #~(modify-phases %standard-phases
28518 (add-before 'check 'configure-tests
28519 (lambda _
28520 (setenv "HOME" (getcwd)))))))
28521 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
28522 (propagated-inputs
28523 (list python-beautifulsoup4
28524 python-cryptography
28525 python-dnspython
28526 python-pyotp
28527 python-pyyaml
28528 python-requests
28529 python-tldextract))
28530 (home-page "https://github.com/dns-lexicon/dns-lexicon")
28531 (synopsis "Manipulate DNS records on various DNS providers")
28532 (description
28533 "Lexicon provides a way to manipulate DNS records on multiple DNS
28534providers in a standardized way. It has a CLI but it can also be used as a
28535Python library. It was designed to be used in automation, specifically with
28536Let's Encrypt.")
28537 (license license:expat)))
28538
28539(define-public python-cfgv
28540 (package
28541 (name "python-cfgv")
28542 (version "3.4.0")
28543 (source
28544 (origin
28545 ;; There are no tests in the PyPI tarball.
28546 (method git-fetch)
28547 (uri (git-reference
28548 (url "https://github.com/asottile/cfgv")
28549 (commit (string-append "v" version))))
28550 (file-name (git-file-name name version))
28551 (sha256
28552 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
28553 (build-system pyproject-build-system)
28554 (native-inputs
28555 (list python-pytest python-setuptools python-wheel))
28556 (home-page "https://github.com/asottile/cfgv")
28557 (synopsis "Configuration validation library")
28558 (description
28559 "This library helps to validate configuration files and produce human
28560readable error messages.")
28561 (license license:expat)))
28562
28563(define-public python-commandlines
28564 (package
28565 (name "python-commandlines")
28566 (version "0.4.1")
28567 (source
28568 (origin
28569 (method git-fetch)
28570 (uri (git-reference
28571 (url "https://github.com/chrissimpkins/commandlines")
28572 (commit (string-append "v" version))))
28573 (file-name (git-file-name name version))
28574 (sha256
28575 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
28576 (build-system pyproject-build-system)
28577 (native-inputs (list python-pytest python-setuptools))
28578 (home-page "https://github.com/chrissimpkins/commandlines")
28579 (synopsis "Command line argument to object parsing library")
28580 (description
28581 "@code{Commandlines} is a Python library for command line application
28582development that supports command line argument parsing, command string
28583validation testing and application logic.")
28584 (license license:expat)))
28585
28586;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
28587;; python-numba. They have a very inflexible relationship.
28588(define-public python-numba
28589 (package
28590 (name "python-numba")
28591 (version "0.66.0")
28592 (source
28593 (origin
28594 (method url-fetch)
28595 (uri (pypi-uri "numba" version))
28596 (sha256
28597 (base32
28598 "0qyk70nfvhxqxm1vz1qq072n9jvpl6hab8ymlslmxh161qxfc05r"))))
28599 (build-system pyproject-build-system)
28600 (arguments
28601 (list
28602 ;; tests: 10743 tests (skipped=699, expected failures=23)
28603 #:test-backend #~'custom
28604 #:test-flags
28605 ;; Check <buildscripts> directory for more build/tests examples.
28606 #~(list "-m" "numba.runtests"
28607 "--exclude-tags='long_running'"
28608 "--multiprocess" (number->string (min 8 (parallel-job-count)))
28609 "-b"
28610 "-v"
28611 "--"
28612 "numba.tests")
28613 #:phases
28614 #~(modify-phases %standard-phases
28615 (add-after 'unpack 'disable-failing-tests
28616 (lambda _
28617 ;; This expects to be able to run pip.
28618 (delete-file "numba/tests/test_sysinfo.py")
28619 ;; This fails nondeterministically, possibly depending on CPU.
28620 ;; https://github.com/numba/numba/issues/8282.
28621 (substitute* "numba/tests/test_function_type.py"
28622 (("def test_wrapper_address_protocol_libm")
28623 "def disabled_test_wrapper_address_protocol_libm"))
28624 (substitute* "numba/tests/test_caching.py"
28625 ;; RuntimeError: cannot cache function 'simple_usecase': no
28626 ;; locator available for file
28627 (("def test_non_creatable_pycache")
28628 "def __off_test_non_creatable_pycache")
28629 (("def test_non_writable_pycache")
28630 "def __off_test_non_writable_pycache")
28631 ;; AssertionError: None is not an instance of <class
28632 ;; 'numba.core.caching.UserWideCacheLocator'>
28633 (("def test_frozen")
28634 "def __off_test_frozen"))))
28635 (add-before 'build 'disable-proprietary-features
28636 (lambda _
28637 (setenv "NUMBA_DISABLE_HSA" "1")
28638 (setenv "NUMBA_DISABLE_CUDA" "1")))
28639 (add-before 'check 'pre-check
28640 (lambda _
28641 (setenv "HOME" "/tmp")
28642 ;; XXX: Something is wrong with the PYTHONPATH when running the
28643 ;; tests from the build directory, as it complains about not
28644 ;; being able to import certain modules.
28645 (delete-file-recursively "numba"))))))
28646 (native-inputs
28647 (list python-setuptools))
28648 (propagated-inputs
28649 (list python-llvmlite
28650 python-numpy))
28651 (home-page "https://numba.pydata.org")
28652 (synopsis "Compile Python code using LLVM")
28653 (description "Numba gives you the power to speed up your applications with
28654high performance functions written directly in Python. With a few
28655annotations, array-oriented and math-heavy Python code can be just-in-time
28656compiled to native machine instructions, similar in performance to C, C++ and
28657Fortran, without having to switch languages or Python interpreters.
28658
28659Numba works by generating optimized machine code using the LLVM compiler
28660infrastructure at import time, runtime, or statically (using the included pycc
28661tool).")
28662 (license license:bsd-3)))
28663
28664(define-public python-numcodecs
28665 (package
28666 (name "python-numcodecs")
28667 (version "0.15.1") ;newer version needs c-blosc 1.26+
28668 (source
28669 (origin
28670 (method git-fetch)
28671 (uri (git-reference
28672 (url "https://github.com/zarr-developers/numcodecs")
28673 (commit (string-append "v" version))))
28674 (file-name (git-file-name name version))
28675 (sha256
28676 (base32 "19i30k4zn6rjqlrfk20yh75r1di3j7mli2mn9n3pyxmwaq7hiasz"))
28677 (modules '((guix build utils)))
28678 (snippet
28679 '(begin
28680 ;; Only add CFLAGS on architectures where they are supported
28681 (substitute* "setup.py"
28682 (("import sys")
28683 "import sys\nimport platform")
28684 (("os\\.name == 'posix'")
28685 (string-append "os.name + platform.machine() == 'posixx86_64' or"
28686 " os.name + platform.machine() == 'posixx86'")))
28687 (delete-file-recursively "c-blosc")))))
28688 (build-system pyproject-build-system)
28689 (arguments
28690 (list
28691 ;; tests: 714 passed, 39 skipped, 36 xfailed, 20 warnings
28692 #:phases
28693 #~(modify-phases %standard-phases
28694 (add-after 'unpack 'disable-avx2
28695 (lambda _
28696 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
28697 (add-after 'unpack 'unbundle
28698 (lambda _
28699 (substitute* "setup.py"
28700 (("sources=sources \\+ blosc_sources,")
28701 "sources=sources,")
28702 (("extra_compile_args=extra_compile_args")
28703 "extra_compile_args=list(base_compile_args)")
28704 (("'numcodecs.zstd',")
28705 "'numcodecs.zstd', libraries=['zstd'], ")
28706 (("'numcodecs.lz4',")
28707 "'numcodecs.lz4', libraries=['lz4'], ")
28708 (("'numcodecs.blosc',")
28709 "'numcodecs.blosc', libraries=['blosc'], "))))
28710 (add-before 'build 'substitute-git-submodules
28711 (lambda _
28712 (symlink #$(package-source (this-package-input "c-blosc"))
28713 "c-blosc")))
28714 (replace 'check
28715 (lambda* (#:key tests? test-flags #:allow-other-keys)
28716 (with-directory-excursion #$output
28717 (apply invoke "pytest" "-vv" test-flags)
28718 (delete-file-recursively ".pytest_cache")))))))
28719 (native-inputs
28720 (list python-cython
28721 python-py-cpuinfo
28722 python-pytest
28723 python-setuptools
28724 python-setuptools-scm))
28725 (inputs
28726 (list c-blosc
28727 lz4
28728 zlib
28729 (list zstd "lib")))
28730 (propagated-inputs
28731 (list python-deprecated
28732 python-numpy
28733 ;; [optional]
28734 python-msgpack))
28735 (home-page "https://github.com/zarr-developers/numcodecs")
28736 (synopsis "Buffer compression and transformation codecs")
28737 (description
28738 "This Python package provides buffer compression and transformation
28739codecs for use in data storage and communication applications.")
28740 (license license:expat)))
28741
28742(define-public python-asciitree
28743 (package
28744 (name "python-asciitree")
28745 (version "0.3.3")
28746 (source
28747 (origin
28748 (method git-fetch)
28749 (uri (git-reference
28750 (url "https://github.com/mbr/asciitree")
28751 (commit version)))
28752 (file-name (git-file-name name version))
28753 (sha256
28754 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28755 (build-system pyproject-build-system)
28756 (native-inputs (list python-pytest python-setuptools))
28757 (home-page "https://github.com/mbr/asciitree")
28758 (synopsis "Draws ASCII trees")
28759 (description "This package draws tree structures using characters.")
28760 (license license:expat)))
28761
28762(define-public python-dill
28763 (package
28764 (name "python-dill")
28765 (version "0.4.1")
28766 (source
28767 (origin
28768 (method git-fetch)
28769 (uri (git-reference
28770 (url "https://github.com/uqfoundation/dill")
28771 (commit version)))
28772 (file-name (git-file-name name version))
28773 (sha256
28774 (base32 "09ig6820sd68cjixl5vkwkwvvgdii8qhaikc1rxhabhwxfymc7v2"))))
28775 (build-system pyproject-build-system)
28776 (arguments
28777 (list #:test-backend #~'custom
28778 #:test-flags #~(list "dill/tests/__main__.py")))
28779 (native-inputs
28780 (list python-setuptools))
28781 (home-page "http://dill.rtfd.io/")
28782 (synopsis "Serialize all of Python")
28783 (description "Dill extends Python's @code{pickle} module for serializing
28784and de-serializing Python objects to the majority of the built-in Python
28785types. Dill provides the user the same interface as the @code{pickle} module,
28786and also includes some additional features. In addition to pickling Python
28787objects, @code{dill} provides the ability to save the state of an interpreter
28788session in a single command. Hence, it would be feasible to save a
28789interpreter session, close the interpreter, ship the pickled file to another
28790computer, open a new interpreter, unpickle the session and thus continue from
28791the saved state of the original interpreter session.")
28792 (license license:bsd-3)))
28793
28794(define-public python-multiprocess
28795 (package
28796 (name "python-multiprocess")
28797 (version "0.70.18")
28798 (source
28799 (origin
28800 (method url-fetch)
28801 (uri (pypi-uri "multiprocess" version))
28802 (sha256
28803 (base32
28804 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28805 (build-system pyproject-build-system)
28806 (arguments
28807 (list
28808 #:phases
28809 #~(modify-phases %standard-phases
28810 (add-after 'unpack 'disable-broken-tests
28811 (lambda* (#:key inputs #:allow-other-keys)
28812 ;; The "wait_result" and "shared_memory..." tests are broken as
28813 ;; there is no keyboard interrupt.
28814 ;;
28815 ;; The "preload_resources" test fails as it cannot find
28816 ;; mp_preload.py.
28817 (substitute*
28818 (string-append "py" (python-version
28819 (assoc-ref inputs "python"))
28820 "/multiprocess/tests/__init__.py")
28821 (("^(.*)def test_(\
28822wait_result|\
28823shared_memory_SharedMemoryServer_ignores_sigint|\
28824preload_resources\
28825)" line indent)
28826 (string-append indent
28827 "@unittest.skip(\"Disabled by Guix\")\n"
28828 line)))))
28829 (replace 'check
28830 (lambda* (#:key tests? #:allow-other-keys)
28831 (if tests?
28832 (invoke "python" "-m" "multiprocess.tests")
28833 (format #t "test suite not run~%")))))))
28834 (propagated-inputs
28835 (list python-dill))
28836 (native-inputs (list python-setuptools))
28837 (home-page "https://pypi.org/project/multiprocess/")
28838 (synopsis "Multiprocessing and multithreading in Python")
28839 (description
28840 "This package is a fork of the multiprocessing Python package, a package
28841which supports the spawning of processes using the API of the standard
28842library's @code{threading} module.")
28843 (license license:bsd-3)))
28844
28845(define-public python-multiprocessing-on-dill
28846 (package
28847 (name "python-multiprocessing-on-dill")
28848 (version "3.5.0a4")
28849 (source (origin
28850 (method url-fetch)
28851 (uri (pypi-uri "multiprocessing_on_dill" version))
28852 (sha256
28853 (base32
28854 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28855 (build-system pyproject-build-system)
28856 (propagated-inputs (list python-dill))
28857 (native-inputs (list python-pytest python-setuptools python-wheel))
28858 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28859 (synopsis "Multiprocessing using dill instead of pickle")
28860 (description
28861 "This package provides a friendly fork of multiprocessing which uses dill
28862instead of pickle.")
28863 (license license:psfl)))
28864
28865(define-public python-cytoolz
28866 (package
28867 (name "python-cytoolz")
28868 (version "1.0.1")
28869 (source
28870 (origin
28871 (method url-fetch)
28872 (uri (pypi-uri "cytoolz" version))
28873 (sha256
28874 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28875 (modules '((guix build utils)))
28876 (snippet
28877 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28878 (build-system pyproject-build-system)
28879 (arguments
28880 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28881 (native-inputs
28882 (list python-cython
28883 python-pytest
28884 python-setuptools
28885 python-wheel))
28886 (propagated-inputs
28887 (list python-toolz))
28888 (home-page "https://github.com/pytoolz/cytoolz")
28889 (synopsis "High performance functional utilities")
28890 (description
28891 "The cytoolz package implements the same API as provided by toolz. The
28892main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28893that is accessible to other projects developed in Cython.")
28894 (license license:bsd-3)))
28895
28896(define-public python-cloudpickle
28897 (package
28898 (name "python-cloudpickle")
28899 (version "3.1.0")
28900 (source
28901 (origin
28902 ;; Archive on pypi does not include test infrastructure.
28903 (method git-fetch)
28904 (uri (git-reference
28905 (url "https://github.com/cloudpipe/cloudpickle")
28906 (commit (string-append "v" version))))
28907 (file-name (git-file-name name version))
28908 (sha256
28909 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28910 (build-system pyproject-build-system)
28911 (native-inputs
28912 (list python-flit-core
28913 python-psutil
28914 python-pytest))
28915 (home-page "https://github.com/cloudpipe/cloudpickle")
28916 (synopsis "Extended pickling support for Python objects")
28917 (description
28918 "Cloudpickle makes it possible to serialize Python constructs not
28919supported by the default pickle module from the Python standard library. It
28920is especially useful for cluster computing where Python expressions are
28921shipped over the network to execute on remote hosts, possibly close to the
28922data.")
28923 (license license:bsd-3)))
28924
28925(define-public python-locket
28926 (package
28927 (name "python-locket")
28928 (version "1.0.0")
28929 (source
28930 (origin
28931 (method git-fetch)
28932 (uri (git-reference
28933 (url "https://github.com/mwilliamson/locket.py")
28934 (commit version)))
28935 (file-name (git-file-name name version))
28936 (sha256
28937 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28938 (build-system pyproject-build-system)
28939 ;; XXX: Requires python-spur, which requires another version of
28940 ;; python-paramiko.
28941 (arguments (list #:tests? #f))
28942 (native-inputs (list python-setuptools))
28943 (home-page "https://github.com/mwilliamson/locket.py")
28944 (synopsis "File-based locks for Python")
28945 (description
28946 "Locket implements a lock that can be used by multiple processes provided
28947they use the same path.")
28948 (license license:bsd-2)))
28949
28950(define-public python-loky
28951 (package
28952 (name "python-loky")
28953 (version "3.5.6")
28954 (source
28955 (origin
28956 (method git-fetch)
28957 (uri (git-reference
28958 (url "https://github.com/joblib/loky")
28959 (commit version)))
28960 (file-name (git-file-name name version))
28961 (sha256
28962 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
28963 (build-system pyproject-build-system)
28964 (arguments
28965 (list
28966 #:test-flags
28967 #~(list "-k" (string-join
28968 (list
28969 ;; Requires process control.
28970 "not (test_kill_process_tree"
28971 ;; Hardware dependent tests.
28972 "test_only_physical_cores_error"
28973 ;; Depends on previous results.
28974 "test_wait_result)")
28975 " or "))))
28976 (native-inputs
28977 (list python-packaging
28978 python-psutil
28979 python-pytest
28980 python-setuptools))
28981 (propagated-inputs
28982 (list python-cloudpickle))
28983 (home-page "https://loky.readthedocs.io")
28984 (synopsis "Robust and reusable Executor for joblib")
28985 (description
28986 "This package provides a robust implementation of
28987@code{concurrent.futures.ProcessPoolExecutor}.")
28988 (license license:bsd-3)))
28989
28990(define-public python-partd
28991 (package
28992 (name "python-partd")
28993 (version "1.4.2")
28994 (source
28995 (origin
28996 (method git-fetch)
28997 (uri (git-reference
28998 (url "https://github.com/dask/partd/")
28999 (commit version)))
29000 (file-name (git-file-name name version))
29001 (sha256
29002 (base32 "0mwcr2cy0j5j8c9n2wlrlpc5v4za2cdh8jwhm7vpai53lqyvfjlf"))
29003 (patches
29004 (list
29005 (origin
29006 (method url-fetch)
29007 (uri
29008 ;; Fix PandasColumns compatibility with pandas 3.0
29009 ;; StringDtype, from:
29010 ;; <https://github.com/dask/partd/pull/83>.
29011 (string-append "https://github.com/dask/partd/commit/"
29012 "3efd8ec7e35a7c0aa1ba15ba2cf0766af99d3c21.patch"))
29013 (file-name (string-append name "-PR-83-pandas-3-support.patch"))
29014 (sha256
29015 (base32
29016 "1sc6vmrqgqjl4rnw9gv8ymdfaqdi5razww8b322f7hpwhpdydnhk")))))))
29017 (build-system pyproject-build-system)
29018 (native-inputs
29019 (list python-pytest
29020 python-setuptools
29021 python-versioneer
29022 tzdata-for-tests))
29023 (propagated-inputs
29024 (list python-locket
29025 python-toolz
29026 ;; [complete]
29027 python-blosc
29028 python-numpy
29029 python-pandas
29030 python-pyzmq))
29031 (home-page "https://github.com/dask/partd/")
29032 (synopsis "Appendable key-value storage")
29033 (description
29034 "Partd stores key-value pairs. Values are raw bytes. We append on old
29035values. Partd excels at shuffling operations.")
29036 (license license:bsd-3)))
29037
29038(define-public python-fsspec
29039 (package
29040 (name "python-fsspec")
29041 (version "2026.1.0")
29042 (source
29043 (origin
29044 (method git-fetch)
29045 (uri (git-reference
29046 (url "https://github.com/fsspec/filesystem_spec")
29047 (commit version)))
29048 (file-name (git-file-name name version))
29049 (sha256
29050 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
29051 (build-system pyproject-build-system)
29052 (arguments
29053 (list
29054 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
29055 #:test-flags
29056 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
29057 "-k" (string-join
29058 ;; Test requires nentwork access
29059 (list "not test_async_cat_file_ranges"
29060 "test_gist_public_all_files"
29061 "test_gist_public_missing_file"
29062 "test_gist_public_one_file"
29063 ;; Test hangs
29064 "test_processes")
29065 " and not "))))
29066 ;; The most of the inputs are optional, project does not force to include
29067 ;; any dependencies according to pyproject.toml.
29068 (propagated-inputs
29069 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
29070 (native-inputs
29071 (list nss-certs-for-test
29072 python-hatch-vcs
29073 python-hatchling
29074 python-numpy
29075 python-pytest
29076 python-pytest-asyncio
29077 python-pytest-mock
29078 python-pytest-rerunfailures))
29079 (home-page "https://github.com/fsspec/filesystem_spec")
29080 (synopsis "File-system specification")
29081 (description "The purpose of this package is to produce a template or
29082specification for a file-system interface, that specific implementations
29083should follow, so that applications making use of them can rely on a common
29084behavior and not have to worry about the specific internal implementation
29085decisions with any given backend.")
29086 (license license:bsd-3)))
29087
29088(define-public python-ilinkedlist
29089 (package
29090 (name "python-ilinkedlist")
29091 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
29092 (revision . "0")))
29093 (version (git-version "0.4.0"
29094 (assoc-ref properties 'revision)
29095 (assoc-ref properties 'commit)))
29096 (home-page "https://github.com/luther9/ilinkedlist-py")
29097 (source
29098 (origin
29099 (method git-fetch)
29100 (uri (git-reference
29101 (url home-page)
29102 (commit (assoc-ref properties 'commit))))
29103 (file-name (git-file-name name version))
29104 (sha256
29105 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
29106 (build-system pyproject-build-system)
29107 (native-inputs (list python-pytest python-setuptools))
29108 (synopsis "Immutable linked list library")
29109 (description
29110 "This is a implementation of immutable linked lists for Python. It
29111contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
29112Since a linked list is treated as immutable, it is hashable, and its length
29113can be retrieved in constant time. Some of the terminology is inspired by
29114LISP. It is possible to create an improper list by creating a @code{Pair}
29115with a non-list @code{cdr}.")
29116 (license license:gpl3+)))
29117
29118(define-public python-readlike
29119 (package
29120 (name "python-readlike")
29121 (version "0.1.3")
29122 (source
29123 (origin
29124 (method git-fetch)
29125 (uri (git-reference
29126 (url "https://github.com/jangler/readlike")
29127 (commit version)))
29128 (file-name (git-file-name name version))
29129 (sha256
29130 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
29131 (build-system pyproject-build-system)
29132 (native-inputs (list python-pytest python-setuptools))
29133 (home-page "https://github.com/jangler/readlike")
29134 (synopsis "GNU Readline-like line editing module")
29135 (description
29136 "This Python module provides line editing functions similar to the default
29137Emacs-style ones of GNU Readline. Unlike the Python standard library's
29138@code{readline} package, this one allows access to those capabilities in settings
29139outside of a standard command-line interface. It is especially well-suited to
29140interfacing with Urwid, due to a shared syntax for describing key inputs.
29141
29142Currently, all stateless Readline commands are implemented. Yanking and history
29143are not supported.")
29144 (license license:expat)))
29145
29146(define-public python-reparser
29147 (package
29148 (name "python-reparser")
29149 (version "1.4.3")
29150 (source
29151 (origin
29152 (method git-fetch)
29153 (uri (git-reference
29154 (url "https://github.com/xmikos/reparser")
29155 (commit (string-append "v" version))))
29156 (file-name (git-file-name name version))
29157 (sha256
29158 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
29159 (build-system pyproject-build-system)
29160 (arguments (list #:tests? #f)) ; No tests.
29161 (native-inputs (list python-setuptools))
29162 (home-page "https://github.com/xmikos/reparser")
29163 (synopsis "Lexer/parser for inline markup based on regular expressions")
29164 (description
29165 "This Python library provides a simple lexer/parser for inline markup based
29166on regular expressions.")
29167 (license license:expat)))
29168
29169(define-public python-retrying
29170 (package
29171 (name "python-retrying")
29172 (version "1.4.1")
29173 (source
29174 (origin
29175 (method git-fetch)
29176 (uri (git-reference
29177 (url "https://github.com/groodt/retrying")
29178 (commit (string-append "v" version))))
29179 (file-name (git-file-name name version))
29180 (sha256
29181 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
29182 (build-system pyproject-build-system)
29183 (native-inputs (list python-pytest python-setuptools))
29184 (home-page "https://github.com/groodt/retrying")
29185 (synopsis "Library for adding retry behavior")
29186 (description "Retrying is a general-purpose retrying library to simplify
29187the task of adding retry behavior to just about anything.
29188
29189Features:
29190
29191@itemize
29192@item Generic Decorator API.
29193@item Specify stop condition (i.e. limit by number of attempts).
29194@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
29195@item Customize retrying on Exceptions.
29196@item Customize retrying on expected returned result.
29197@end itemize")
29198 (license license:asl2.0)))
29199
29200(define-public python-precis-i18n
29201 (package
29202 (name "python-precis-i18n")
29203 (version "1.1.1")
29204 (source
29205 (origin
29206 (method url-fetch)
29207 (uri (pypi-uri "precis_i18n" version))
29208 (sha256
29209 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
29210 (build-system pyproject-build-system)
29211 (native-inputs
29212 (list python-pytest
29213 python-setuptools
29214 python-wheel))
29215 (home-page "https://github.com/byllyfish/precis_i18n")
29216 (synopsis "Implementation of the PRECIS framework")
29217 (description
29218 "This module implements the PRECIS Framework as described in RFC 8264,
29219RFC 8265 and RFC 8266.")
29220 (license license:expat)))
29221
29222(define-public python-absl-py
29223 (package
29224 (name "python-absl-py")
29225 (version "2.3.1")
29226 (source
29227 (origin
29228 (method url-fetch)
29229 (uri (pypi-uri "absl_py" version))
29230 (sha256
29231 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
29232 (build-system pyproject-build-system)
29233 (arguments
29234 (list #:tests? #f)) ;tests require bazel
29235 (native-inputs
29236 (list python-hatchling))
29237 (home-page "https://github.com/abseil/abseil-py")
29238 (synopsis "Abseil Python common libraries")
29239 (description
29240 "This package provides the Abseil Python Common Libraries, a collection
29241of Python libraries for building Python applications.")
29242 (license license:asl2.0)))
29243
29244(define-public python-astor
29245 (package
29246 (name "python-astor")
29247 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
29248 (revision . "0")))
29249 (version (git-version "0.8.1"
29250 (assoc-ref properties 'revision)
29251 (assoc-ref properties 'commit)))
29252 (source
29253 (origin
29254 (method git-fetch)
29255 (uri (git-reference
29256 (url "https://github.com/berkerpeksag/astor")
29257 (commit (assoc-ref properties 'commit))))
29258 (file-name (git-file-name name version))
29259 (sha256
29260 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
29261 (build-system pyproject-build-system)
29262 (arguments
29263 (list
29264 ;; FIXME: Unclear why this test fails.
29265 #:test-flags #~(list "--deselect=\
29266tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
29267 (native-inputs (list python-pytest python-setuptools))
29268 (home-page "https://github.com/berkerpeksag/astor")
29269 (synopsis "Read and write Python ASTs")
29270 (description
29271 "Astor is designed to allow easy manipulation of Python source via the
29272Abstract Syntax Tree.")
29273 (license license:bsd-3)))
29274
29275(define-public python-astunparse
29276 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
29277 ;; updated.
29278 (package
29279 (name "python-astunparse")
29280 (version "1.6.3")
29281 (source
29282 (origin
29283 (method url-fetch)
29284 (uri (pypi-uri "astunparse" version))
29285 (sha256
29286 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
29287 (build-system pyproject-build-system)
29288 (arguments '(#:tests? #f)) ; there are none
29289 (native-inputs
29290 (list python-setuptools))
29291 (propagated-inputs
29292 (list python-six))
29293 (home-page "https://github.com/simonpercivall/astunparse")
29294 (synopsis "AST unparser for Python")
29295 (description "This package provides an AST unparser for Python. It is a
29296factored out version of @code{unparse} found in the Python source
29297distribution.")
29298 (license license:bsd-3)))
29299
29300(define-public python-gast
29301 (package
29302 (name "python-gast")
29303 (version "0.7.0")
29304 (source
29305 (origin
29306 (method git-fetch)
29307 (uri (git-reference
29308 (url "https://github.com/serge-sans-paille/gast/")
29309 (commit version)))
29310 (file-name (git-file-name name version))
29311 (sha256
29312 (base32 "05sxx7ixkchxvgrzpkqmklhzvsqydnyzrvzwfd5xkd3cv1arg9m5"))))
29313 (build-system pyproject-build-system)
29314 (native-inputs
29315 (list python-pytest
29316 python-setuptools))
29317 (home-page "https://github.com/serge-sans-paille/gast/")
29318 (synopsis "Generic Python AST that abstracts the underlying Python version")
29319 (description
29320 "GAST provides a compatibility layer between the AST of various Python
29321versions, as produced by @code{ast.parse} from the standard @code{ast}
29322module.")
29323 (license license:bsd-3)))
29324
29325;; XXX: Not maintained since 2022, leaf package.
29326(define-public python-attr
29327 (package
29328 (name "python-attr")
29329 (version "0.3.2")
29330 (source
29331 (origin
29332 (method url-fetch)
29333 (uri (pypi-uri "attr" version))
29334 (sha256
29335 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
29336 (build-system pyproject-build-system)
29337 (arguments
29338 (list #:test-backend #~'custom
29339 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
29340 (native-inputs
29341 (list python-setuptools))
29342 (home-page "https://github.com/denis-ryzhkov/attr")
29343 (synopsis "Decorator for attributes of target function or class")
29344 (description "Simple decorator to set attributes of target function or
29345class in a @acronym{DRY, Don't Repeat Yourself} way.")
29346 (license license:expat)))
29347
29348(define-public python-construct
29349 ;; Fixes not in a release yet.
29350 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
29351 (revision "1"))
29352 (package
29353 (name "python-construct")
29354 (version (git-version "2.10.70" revision commit))
29355 (source
29356 (origin
29357 (method git-fetch)
29358 (uri (git-reference
29359 (url "https://github.com/construct/construct")
29360 (commit commit)))
29361 (file-name (git-file-name name version))
29362 (sha256
29363 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
29364 (build-system pyproject-build-system)
29365 (arguments
29366 (list
29367 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
29368 (native-inputs
29369 (list python-pytest python-setuptools))
29370 (propagated-inputs
29371 (list python-arrow
29372 python-cloudpickle
29373 python-cryptography
29374 python-lz4
29375 python-numpy
29376 python-ruamel.yaml))
29377 (home-page "https://construct.readthedocs.io")
29378 (synopsis "Declarative and symmetrical parser and builder for binary data")
29379 (description
29380 "This package provides both simple, atomic constructs (such as
29381integers of various sizes), as well as composite ones which allow you
29382form hierarchical and sequential structures of increasing complexity.
29383It features bit and byte granularity, easy debugging and testing, an
29384easy-to-extend subclass system, and lots of primitive constructs to
29385make your work easier.")
29386 (license license:expat))))
29387
29388(define-public python-outcome
29389 (package
29390 (name "python-outcome")
29391 (version "1.3.0.post0")
29392 (source
29393 (origin
29394 (method url-fetch)
29395 (uri (pypi-uri "outcome" version))
29396 (sha256
29397 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
29398 (build-system pyproject-build-system)
29399 (native-inputs
29400 (list python-pytest
29401 python-pytest-asyncio
29402 python-setuptools))
29403 (propagated-inputs
29404 (list python-attrs))
29405 (home-page "https://github.com/python-trio/outcome")
29406 (synopsis "Capture the outcome of Python function calls")
29407 (description
29408 "Capture the outcome of Python function calls. Extracted from the Trio
29409project.")
29410 ;; Either license applies.
29411 (license (list license:expat license:asl2.0))))
29412
29413(define-public python-humanize
29414 (package
29415 (name "python-humanize")
29416 (version "4.14.0")
29417 (source
29418 (origin
29419 (method url-fetch)
29420 (uri (pypi-uri "humanize" version))
29421 (sha256
29422 (base32
29423 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
29424 (build-system pyproject-build-system)
29425 (native-inputs
29426 (list python-freezegun
29427 python-hatch-vcs
29428 python-hatchling
29429 python-pytest))
29430 (home-page "https://github.com/jmoiron/humanize")
29431 (synopsis "Print numerical information in a human-readable form")
29432 (description "This package provides a Python module that displays numbers
29433and dates in \"human readable\" forms. For example, it would display
29434\"12345591313\" as \"12.3 billion\".")
29435 (license license:expat)))
29436
29437(define-public python-annoy
29438 (package
29439 (name "python-annoy")
29440 (version "1.17.3")
29441 (source
29442 (origin
29443 (method git-fetch)
29444 (uri (git-reference
29445 (url "https://github.com/spotify/annoy")
29446 (commit (string-append "v" version))))
29447 (file-name (git-file-name name version))
29448 (sha256
29449 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
29450 (build-system pyproject-build-system)
29451 (arguments
29452 (list
29453 #:test-flags
29454 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
29455 ;; name resolution>
29456 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
29457 "--deselect=test/accuracy_test.py::test_nytimes_16"
29458 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
29459 (native-inputs
29460 (list python-h5py
29461 python-numpy
29462 python-pytest
29463 python-setuptools))
29464 (home-page "https://github.com/spotify/annoy/")
29465 (synopsis "Approximate nearest neighbors library")
29466 (description
29467 "Annoy is a C++ library with Python bindings to search for points in
29468space that are close to a given query point. It also creates large read-only
29469file-based data structures that are @code{mmap}ped into memory so that many
29470processes may share the same data.")
29471 (license license:asl2.0)))
29472
29473(define-public python-croniter
29474 (package
29475 (name "python-croniter")
29476 (version "5.0.1")
29477 (source
29478 (origin
29479 (method git-fetch)
29480 (uri (git-reference
29481 (url "https://github.com/kiorky/croniter")
29482 (commit version)))
29483 (file-name (git-file-name name version))
29484 (sha256
29485 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
29486 (build-system pyproject-build-system)
29487 (native-inputs (list python-pytest python-setuptools))
29488 (propagated-inputs (list python-dateutil python-pytz))
29489 (home-page "https://github.com/kiorky/croniter")
29490 (synopsis "Iterate datetime objects with cron-like syntax")
29491 (description
29492 "@code{croniter} provides iteration for datetime object with cron-like
29493format.")
29494 (license license:expat)))
29495
29496(define-public python-crontab
29497 (package
29498 (name "python-crontab")
29499 (version "3.3.0")
29500 (source
29501 (origin
29502 (method url-fetch)
29503 (uri (pypi-uri "python_crontab" version))
29504 (sha256
29505 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
29506 (build-system pyproject-build-system)
29507 (arguments
29508 (list #:test-flags
29509 ;; This test is made for Windows.
29510 #~(list "-k" "not test_07_non_posix_shell")
29511 #:phases
29512 #~(modify-phases %standard-phases
29513 (add-after 'unpack 'defaults-to-mcron
29514 (lambda* (#:key inputs #:allow-other-keys)
29515 (substitute* "crontab.py"
29516 (("/usr/bin/crontab")
29517 (search-input-file inputs "bin/crontab"))))))))
29518 (inputs
29519 (list mcron python-dateutil))
29520 (native-inputs
29521 (list python-pytest python-setuptools))
29522 (home-page "https://gitlab.com/doctormo/python-crontab/")
29523 (synopsis "Module for reading and writing crontab files")
29524 (description "This Python module can read, write crontab files, and
29525access the system cron automatically and simply using a direct API.")
29526 (license license:lgpl3+)))
29527
29528(define-public python-apscheduler
29529 (package
29530 (name "python-apscheduler")
29531 (version "3.11.2")
29532 (source (origin
29533 (method url-fetch)
29534 (uri (pypi-uri "apscheduler" version))
29535 (sha256
29536 (base32
29537 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
29538 (build-system pyproject-build-system)
29539 (arguments
29540 (list
29541 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
29542 #:test-flags
29543 ;; XXX: Some tests hang or fail with verity of errors:
29544 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
29545 #~(list #$@(map (lambda (test) (string-append "--deselect="
29546 "tests/test_executors.py::"
29547 test))
29548 (list "test_broken_pool"
29549 "test_max_instances[processpool-pytz]"
29550 "test_max_instances[processpool-zoneinfo]"
29551 "test_run_coroutine_job_tornado"
29552 "test_run_job_error[processpool-pytz]"
29553 "test_run_job_error[processpool-zoneinfo]"
29554 "test_submit_job[processpool-pytz-error]"
29555 "test_submit_job[processpool-pytz-executed]"
29556 "test_submit_job[processpool-pytz-missed]"
29557 "test_submit_job[processpool-zoneinfo-error]"
29558 "test_submit_job[processpool-zoneinfo-executed]"
29559 "test_submit_job[processpool-zoneinfo-missed]")))))
29560 (native-inputs
29561 (list python-anyio
29562 python-gevent
29563 python-pyside-6
29564 python-pytest
29565 python-pytest-asyncio
29566 python-pytz
29567 python-setuptools
29568 python-setuptools-scm
29569 python-sqlalchemy
29570 python-tornado
29571 python-twisted))
29572 (propagated-inputs
29573 (list python-tzlocal))
29574 (home-page "https://github.com/agronholm/apscheduler")
29575 (synopsis "Task scheduling library for Python")
29576 (description "Advanced Python Scheduler (APScheduler) is a Python library
29577that lets you schedule your Python code to be executed later, either just once
29578or periodically.
29579
29580You can add new jobs or remove old ones on the fly as you please. If you store
29581your jobs in a database, they will also survive scheduler restarts and maintain
29582their state. When the scheduler is restarted, it will then run all the jobs it
29583should have run while it was offline.")
29584 (license license:expat)))
29585
29586(define-public python-ifaddr
29587 (package
29588 (name "python-ifaddr")
29589 (version "0.2.0")
29590 (source
29591 (origin
29592 (method url-fetch)
29593 (uri (pypi-uri "ifaddr" version))
29594 (sha256
29595 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
29596 (snippet #~(delete-file "ifaddr/_win32.py"))))
29597 (build-system pyproject-build-system)
29598 (native-inputs
29599 (list python-pytest python-setuptools python-wheel))
29600 (home-page "https://github.com/pydron/ifaddr")
29601 (synopsis "Network interface and IP address enumeration library")
29602 (description
29603 "This package provides a network interface and IP address enumeration
29604library in Python.")
29605 (license license:expat)))
29606
29607(define-public python-berkeleydb
29608 (package
29609 (name "python-berkeleydb")
29610 (version "18.1.15")
29611 (source
29612 (origin
29613 (method url-fetch)
29614 (uri (pypi-uri "berkeleydb" version))
29615 (sha256
29616 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
29617 (build-system pyproject-build-system)
29618 (arguments
29619 (list
29620 #:test-backend #~'custom
29621 #:test-flags #~(list "test.py" "-v")
29622 #:phases
29623 #~(modify-phases %standard-phases
29624 (add-after 'unpack 'configure-locations
29625 (lambda* (#:key inputs #:allow-other-keys)
29626 (setenv "BERKELEYDB_DIR"
29627 (assoc-ref inputs "bdb"))
29628 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
29629 "1")))
29630 (add-after 'unpack 'remove-legacy
29631 (lambda _
29632 (substitute* "pyproject.toml"
29633 ((":__legacy__") "")))))))
29634 (native-inputs (list python-setuptools))
29635 (inputs (list bdb))
29636 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
29637 (synopsis "Python bindings for Oracle Berkeley DB")
29638 (description
29639 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
29640C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
29641Transaction objects, and each of these is exposed as a Python type in the
29642bsddb3.db module. The database objects can use various access methods: btree,
29643hash, recno, and queue. Complete support of Berkeley DB distributed
29644transactions. Complete support for Berkeley DB Replication Manager.
29645Complete support for Berkeley DB Base Replication. Support for RPC.")
29646 (license license:bsd-3)))
29647
29648;; Last version before rename to python-berkeleydb.
29649;; This package is close to deprecation.
29650(define-public python-bsddb3
29651 (package
29652 (inherit python-berkeleydb)
29653 (name "python-bsddb3")
29654 (version "6.2.9")
29655 (source
29656 (origin
29657 (method url-fetch)
29658 (uri (pypi-uri "bsddb3" version))
29659 (sha256
29660 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
29661 (arguments
29662 (substitute-keyword-arguments arguments
29663 ;; Tests started failing from [email protected].
29664 ;; The package is in a pre-deprecation phase, so I didn't bother
29665 ;; to try and patch them, but sanity-check passes so the package
29666 ;; itself is likely fine.
29667 ((#:tests? tests? #t)
29668 #f)
29669 ((#:phases phases #~%standard-phases)
29670 #~(modify-phases #$phases
29671 (delete 'remove-legacy)))
29672 ((#:test-flags test-flags #~(list))
29673 #~(list "test3.py" "-v"))))))
29674
29675(define-public python-dbfread
29676 (package
29677 (name "python-dbfread")
29678 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
29679 (revision . "0")))
29680 (version (git-version "2.0.7"
29681 (assoc-ref properties 'revision)
29682 (assoc-ref properties 'commit)))
29683 (source
29684 (origin
29685 (method git-fetch)
29686 (uri (git-reference
29687 (url "https://github.com/olemb/dbfread")
29688 (commit (assoc-ref properties 'commit))))
29689 (file-name (git-file-name name version))
29690 (sha256
29691 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
29692 (build-system pyproject-build-system)
29693 (arguments
29694 (list
29695 #:phases
29696 #~(modify-phases %standard-phases
29697 (add-after 'unpack 'relax-setup.py
29698 (lambda _
29699 (substitute* "setup.py"
29700 (("python_requires.*")
29701 "")))))))
29702 (native-inputs (list python-pytest python-setuptools))
29703 (home-page "https://dbfread.readthedocs.io")
29704 (synopsis "Read DBF Files with Python")
29705 (description
29706 "This library reads DBF files and returns the data as native Python data
29707types for further processing. It is primarily intended for batch jobs and
29708one-off scripts.")
29709 (license license:expat)))
29710
29711(define-public python-cached-property
29712 (package
29713 (name "python-cached-property")
29714 (version "2.0.1")
29715 (source
29716 (origin
29717 (method url-fetch)
29718 (uri (pypi-uri "cached_property" version))
29719 (sha256
29720 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
29721 (build-system pyproject-build-system)
29722 (native-inputs
29723 (list python-freezegun
29724 python-pytest
29725 python-setuptools
29726 python-wheel))
29727 (home-page "https://github.com/pydanny/cached-property")
29728 (synopsis "Decorator for caching properties in classes")
29729 (description
29730 "This package provides a decorator which makes caching
29731time-or-computationally-expensive properties quick and easy and works in
29732Python 2 or 3.")
29733 (license license:bsd-3)))
29734
29735(define-public python-folium
29736 (package
29737 (name "python-folium")
29738 (version "0.19.4")
29739 (source
29740 (origin
29741 ;; PyPI has a ".whl" file but not a proper source release.
29742 ;; Thus, fetch code from Git.
29743 (method git-fetch)
29744 (uri (git-reference
29745 (url "https://github.com/python-visualization/folium")
29746 (commit (string-append "v" version))))
29747 (file-name (git-file-name name version))
29748 (sha256
29749 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29750 (build-system pyproject-build-system)
29751 (arguments
29752 (list #:test-flags
29753 ;; This file requires Selenium.
29754 #~(list "--ignore" "tests/selenium/test_selenium.py"
29755 "-k" (string-append
29756 ;; The tests below also require Selenium.
29757 "not test__repr_png_is_bytes"
29758 " and not test_valid_png"
29759 " and not test_valid_png_size"
29760 " and not test_geojson"
29761 " and not test_heat_map_with_weights"
29762 ;; This performs an online request.
29763 " and not test_json_request"
29764 ;; Requires geodatasets package.
29765 " and not test_timedynamic_geo_json"
29766 ;; AssertionError.
29767 " and not test_minimap"))))
29768 (propagated-inputs
29769 (list python-branca
29770 python-jinja2
29771 python-numpy
29772 python-requests
29773 python-xyzservices))
29774 (native-inputs
29775 (list python-geopandas
29776 python-nbconvert
29777 python-pandas
29778 python-pillow
29779 python-pytest
29780 python-selenium
29781 python-setuptools
29782 python-setuptools-scm
29783 python-wheel))
29784 (home-page "https://github.com/python-visualization/folium")
29785 (synopsis "Make beautiful maps with Leaflet.js & Python")
29786 (description "@code{folium} makes it easy to visualize data that’s been
29787manipulated in Python on an interactive leaflet map. It enables both the
29788binding of data to a map for @code{choropleth} visualizations as well as
29789passing rich vector/raster/HTML visualizations as markers on the map.
29790
29791The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29792Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29793supports Image, Video, GeoJSON and TopoJSON overlays.")
29794 (license license:expat)))
29795
29796(define-public python-mercantile
29797 (package
29798 (name "python-mercantile")
29799 (version "1.2.1")
29800 (source
29801 (origin
29802 (method git-fetch)
29803 (uri (git-reference
29804 (url "https://github.com/mapbox/mercantile")
29805 (commit version)))
29806 (file-name (git-file-name name version))
29807 (sha256
29808 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29809 (build-system pyproject-build-system)
29810 (propagated-inputs (list python-click))
29811 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29812 python-setuptools))
29813 (home-page "https://github.com/mapbox/mercantile")
29814 (synopsis "Web mercator XYZ tile utilities")
29815 (description
29816 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29817@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29818left corner and bounding longitudes and latitudes for XYZ tiles, a
29819@code{xy(lng, lat)} function that returns spherical mercator x and y
29820coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29821containing a given point, and quadkey conversion functions
29822@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29823translating between quadkey and tile coordinates.")
29824 (license license:bsd-3)))
29825
29826(define-public jube
29827 (package
29828 ;; This is a command-line tool, so no "python-" prefix.
29829 (name "jube")
29830 (version "2.6.1")
29831 (source
29832 (origin
29833 (method url-fetch)
29834 (uri (string-append
29835 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29836 version))
29837 (sha256
29838 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
29839 (file-name (string-append "jube-" version ".tar.gz"))))
29840 (build-system pyproject-build-system)
29841 (arguments
29842 (list
29843 #:tests? #f)) ; No tests.
29844 (propagated-inputs (list python-pyyaml))
29845 (native-inputs (list python-setuptools))
29846 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29847 (synopsis "Benchmarking environment")
29848 (description
29849 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29850benchmarked application, benchmark data is stored in a format that allows JUBE
29851to deduct the desired information. This data can be parsed by automatic pre-
29852and post-processing scripts that draw information and store it more densely
29853for manual interpretation.")
29854 (license license:gpl3+)))
29855
29856(define-public python-pyroutelib3
29857 (package
29858 (name "python-pyroutelib3")
29859 (version "2.0.0")
29860 (source
29861 (origin
29862 (method git-fetch)
29863 (uri (git-reference
29864 (url "https://github.com/MKuranowski/pyroutelib3")
29865 (commit (string-append "v" version))))
29866 (file-name (git-file-name name version))
29867 (sha256
29868 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29869 (build-system pyproject-build-system)
29870 (propagated-inputs (list python-dateutil python-protobuf-5))
29871 (native-inputs (list python-filelock python-flit-core python-pytest))
29872 (home-page "https://github.com/MKuranowski/pyroutelib3")
29873 (synopsis "Library for simple routing on OSM data")
29874 (description "Library for simple routing on OSM data")
29875 (license license:gpl3+)))
29876
29877(define-public python-bibtexparser
29878 (package
29879 (name "python-bibtexparser")
29880 (version "2.0.0b9")
29881 (source
29882 (origin
29883 (method git-fetch)
29884 (uri (git-reference
29885 (url "https://github.com/sciunto-org/python-bibtexparser")
29886 (commit (string-append "v" version))))
29887 (file-name (git-file-name name version))
29888 (sha256
29889 (base32 "1ym3lnvm02j2qxvm3qwbw8a10b6wc70wrfwqiqgppcap2vd5h85y"))))
29890 (build-system pyproject-build-system)
29891 (propagated-inputs (list python-pylatexenc python-pyparsing))
29892 (native-inputs
29893 (list python-pylatexenc python-pytest python-setuptools))
29894 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29895 (synopsis "Python library to parse BibTeX files")
29896 (description "BibtexParser is a Python library to parse BibTeX files.")
29897 (license (list license:bsd-3 license:lgpl3))))
29898
29899(define-public python-bibtexparser-for-cobib
29900 (hidden-package
29901 (package
29902 (inherit python-bibtexparser)
29903 (name "python-bibtexparser")
29904 (version "1.4.0")
29905 (source
29906 (origin
29907 (method git-fetch)
29908 (uri (git-reference
29909 (url "https://github.com/sciunto-org/python-bibtexparser")
29910 (commit (string-append "v" version))))
29911 (file-name (git-file-name name version))
29912 (sha256
29913 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29914
29915(define-public python-distro
29916 (package
29917 (name "python-distro")
29918 (version "1.9.0")
29919 (source
29920 (origin
29921 (method url-fetch)
29922 (uri (pypi-uri "distro" version))
29923 (sha256
29924 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29925 (build-system pyproject-build-system)
29926 (arguments
29927 (list
29928 #:test-flags
29929 #~(list "-k" (string-join
29930 ;; We are not on Ubunto distro:
29931 ;; AssertionError: assert '' == 'ubuntu'.
29932 (list "not test_ubuntu14normal_lsb_release"
29933 "test_trailingblanks_lsb_release"
29934 "test_ubuntu14nomodules_lsb_release")
29935 " and not "))))
29936 (native-inputs
29937 (list python-pytest
29938 python-setuptools))
29939 (home-page "https://github.com/python-distro/distro")
29940 (synopsis "OS platform information API")
29941 (description
29942 "@code{distro} provides information about the OS distribution it runs on,
29943such as a reliable machine-readable ID, or version information.
29944
29945It is the recommended replacement for Python's original
29946`platform.linux_distribution` function (which will be removed in Python 3.8).
29947@code{distro} also provides a command-line interface to output the platform
29948information in various formats.")
29949 (license license:asl2.0)))
29950
29951(define-public python-cairosvg
29952 (package
29953 (name "python-cairosvg")
29954 (version "2.8.2")
29955 (source
29956 (origin
29957 (method url-fetch)
29958 (uri (pypi-uri "cairosvg" version))
29959 (sha256
29960 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29961 (build-system pyproject-build-system)
29962 (arguments
29963 (list #:test-flags #~(list "cairosvg/test_api.py")))
29964 (native-inputs
29965 (list python-pytest
29966 python-setuptools))
29967 (propagated-inputs
29968 (list python-cairocffi
29969 python-cssselect2
29970 python-defusedxml
29971 python-pillow
29972 python-tinycss2))
29973 (home-page "https://cairosvg.org/")
29974 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29975 (description "CairoSVG is a SVG converter based on Cairo. It can export
29976SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29977SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29978parsed, the result is drawn to a Cairo surface that can be exported to
29979qvarious formats: PDF, PostScript, PNG and even SVG.")
29980 (license license:lgpl3+)))
29981
29982(define-public python-pyphen
29983 (package
29984 (name "python-pyphen")
29985 (version "0.17.2")
29986 (source
29987 (origin
29988 (method git-fetch)
29989 (uri (git-reference
29990 (url "https://github.com/Kozea/Pyphen")
29991 (commit version)))
29992 (file-name (git-file-name name version))
29993 (sha256
29994 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29995 (build-system pyproject-build-system)
29996 (native-inputs (list python-flit-core python-pytest))
29997 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29998 ;; embedded set provided by upstream - like Debian does.
29999 (home-page "https://github.com/Kozea/Pyphen")
30000 (synopsis "Pure Python module to hyphenate text")
30001 (description "Pyphen is a pure Python module to hyphenate text using
30002existing Hunspell hyphenation dictionaries.")
30003 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
30004
30005(define-public python-intelhex
30006 (package
30007 (name "python-intelhex")
30008 (version "2.3.0")
30009 (source
30010 (origin
30011 (method git-fetch)
30012 (uri (git-reference
30013 (url "https://github.com/python-intelhex/intelhex")
30014 (commit version)))
30015 (file-name (git-file-name name version))
30016 (sha256
30017 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
30018 (build-system pyproject-build-system)
30019 (arguments (list #:test-backend #~'unittest))
30020 (native-inputs (list python-setuptools))
30021 (home-page "https://github.com/python-intelhex/intelhex")
30022 (synopsis "Python library for Intel HEX files manipulations")
30023 (description
30024 "The Intel HEX file format is widely used in microprocessors and
30025microcontrollers area (embedded systems etc.) as the de facto standard for
30026representation of code to be programmed into microelectronic devices. This
30027package provides an intelhex Python library to read, write, create from
30028scratch and manipulate data from Intel HEX file format. It also includes
30029several convenience Python scripts, including \"classic\" hex2bin and bin2hex
30030converters and more, those based on the library itself.")
30031 (license license:bsd-3)))
30032
30033(define-public python-interlap
30034 (package
30035 (name "python-interlap")
30036 (version "0.2.7")
30037 (source
30038 (origin
30039 (method git-fetch)
30040 (uri (git-reference
30041 (url "https://github.com/brentp/interlap")
30042 (commit (string-append "v" version))))
30043 (file-name (git-file-name name version))
30044 (sha256
30045 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
30046 (build-system pyproject-build-system)
30047 (arguments
30048 (list
30049 #:test-backend #~'custom
30050 #:test-flags #~(list "interlap.py")))
30051 (native-inputs (list python-setuptools))
30052 (home-page "https://brentp.github.io/interlap")
30053 (synopsis "Fast, simple interval overlap testing")
30054 (description
30055 "InterLap does fast interval overlap testing with a simple Python data
30056structure.")
30057 (license license:expat)))
30058
30059(define-public python-pykwalify
30060 (package
30061 (name "python-pykwalify")
30062 (version "1.8.0")
30063 (source
30064 (origin
30065 (method git-fetch)
30066 (uri (git-reference
30067 (url "https://github.com/grokzen/pykwalify")
30068 (commit version)))
30069 (file-name (git-file-name name version))
30070 (sha256
30071 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
30072 (build-system pyproject-build-system)
30073 (arguments
30074 (list
30075 #:test-flags
30076 ;; XXX: yaml safe_dump() has been removed.
30077 #~(list "--ignore=tests/test_unicode.py"
30078 "--deselect=tests/test_core.py::TestCore::test_core_files")))
30079 (native-inputs
30080 (list python-pytest python-setuptools python-testfixtures))
30081 (propagated-inputs
30082 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
30083 (home-page "https://github.com/grokzen/pykwalify")
30084 (synopsis "Python lib/cli for JSON/YAML schema validation")
30085 (description
30086 "This package provides a parser, schema validator, and data binding tool
30087for YAML and JSON.")
30088 (license license:expat)))
30089
30090(define-public python-pykakasi
30091 (package
30092 (name "python-pykakasi")
30093 (version "2.3.0")
30094 (source
30095 (origin
30096 (method url-fetch)
30097 (uri (pypi-uri "pykakasi" version))
30098 (sha256
30099 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
30100 (build-system pyproject-build-system)
30101 (arguments (list #:test-flags ''("-k" "not test_aozora")))
30102 (propagated-inputs (list python-deprecated python-importlib-resources
30103 python-jaconv))
30104 (native-inputs (list python-coverage
30105 python-py-cpuinfo
30106 python-pytest
30107 python-pytest-benchmark
30108 python-setuptools
30109 python-setuptools-scm
30110 python-wheel))
30111 (home-page "https://codeberg.org/miurahr/pykakasi")
30112 (synopsis "Kana kanji simple inversion library")
30113 (description
30114 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
30115Language Processing} library to transliterate hiragana, katakana and
30116kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
30117characters in NFC form.
30118
30119Its algorithms are based on the kakasi library, which is written in C.")
30120 (license license:gpl3+)))
30121
30122(define-public python-dbus
30123 (package
30124 (name "python-dbus")
30125 (version "1.3.2")
30126 (source
30127 (origin
30128 (method url-fetch)
30129 (uri (pypi-uri "dbus-python" version))
30130 (sha256
30131 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
30132 (build-system pyproject-build-system)
30133 (arguments
30134 (list
30135 #:tests? #f ;XXX: Tests require setup
30136 #:phases
30137 #~(modify-phases %standard-phases
30138 (add-after 'unpack 'patch-requirements
30139 (lambda _
30140 (substitute* (list "pyproject.toml" "setup.py")
30141 (("'(ninja|patchelf)',?") ""))
30142 (substitute* "setup.cfg"
30143 (("(ninja|patchelf)") "")))))))
30144 (native-inputs
30145 (list pkg-config
30146 meson
30147 ninja/pinned
30148 patchelf
30149 python-meson
30150 python-setuptools
30151 python-tappy))
30152 (inputs
30153 (list dbus glib))
30154 (propagated-inputs
30155 (list python-pygobject))
30156 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
30157 (synopsis "Python bindings for libdbus")
30158 (description
30159 "This package provides Python bindings to libdbus, the reference
30160implementation of the D-Bus protocol.")
30161 (license license:expat)))
30162
30163;; Added on 2026-01-05
30164(define-deprecated-package python-dbus-python python-dbus)
30165
30166(define python-dbusmock-patch-paths-phase
30167 #~(lambda* (#:key inputs #:allow-other-keys)
30168 (substitute* "tests/test_api.py"
30169 (("/usr/bin/python3")
30170 (which "python3")))
30171 (substitute* "dbusmock/testcase.py"
30172 (("\"dbus-daemon\"")
30173 (object->string
30174 (search-input-file inputs "/bin/dbus-daemon"))))))
30175
30176(define-public python-dbusmock
30177 (package
30178 (name "python-dbusmock")
30179 (version "0.37.2")
30180 (source
30181 (origin
30182 (method git-fetch)
30183 (uri (git-reference
30184 (url "https://github.com/martinpitt/python-dbusmock")
30185 (commit version)))
30186 (file-name (git-file-name name version))
30187 (sha256
30188 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30189 (build-system pyproject-build-system)
30190 (arguments
30191 (list
30192 #:modules `((guix build pyproject-build-system)
30193 (guix build utils)
30194 (ice-9 match))
30195 #:phases
30196 #~(modify-phases %standard-phases
30197 (add-after 'unpack 'patch-paths
30198 #$python-dbusmock-patch-paths-phase)
30199 (replace 'check
30200 (lambda* (#:key tests? #:allow-other-keys)
30201 (when tests?
30202 (match (primitive-fork)
30203 (0 ;child process
30204 (execlp "pytest" "pytest" "-vv"))
30205 (pytest-pid
30206 (let loop ()
30207 ;; Reap child processes; otherwise, python-dbusmock
30208 ;; would waste time polling for the dbus processes
30209 ;; it spawns to be reaped, in vain.
30210 (match (waitpid WAIT_ANY)
30211 ((pid . status)
30212 (if (= pid pytest-pid)
30213 (unless (zero? status)
30214 (error "`pytest' exited with status"
30215 status))
30216 (loop)))))))))))))
30217 (native-inputs (list python-pytest python-setuptools upower which))
30218 (inputs (list dbus))
30219 (propagated-inputs (list python-dbus python-pygobject))
30220 (home-page "https://github.com/martinpitt/python-dbusmock")
30221 (synopsis "Python library for mock D-Bus objects")
30222 (description
30223 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
30224This is useful for writing tests for software which talks to D-Bus services
30225such as upower, systemd, logind, gnome-session or others, and it is hard (or
30226impossible without root privileges) to set the state of the real services to
30227what you expect in your tests.")
30228 (license license:lgpl3+)))
30229
30230(define-public python-dbusmock-for-tests
30231 (package
30232 (inherit python-dbusmock)
30233 (name "python-dbusmock-for-tests")
30234 (version "0.37.2")
30235 (source
30236 (origin
30237 (method git-fetch)
30238 (uri (git-reference
30239 (url "https://github.com/martinpitt/python-dbusmock")
30240 (commit version)))
30241 (file-name (git-file-name name version))
30242 (sha256
30243 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30244 (arguments
30245 (list
30246 #:tests? #f
30247 #:phases
30248 #~(modify-phases %standard-phases
30249 (add-after 'unpack 'patch-paths
30250 #$python-dbusmock-patch-paths-phase))))
30251 (native-inputs (list python-setuptools which))
30252 (properties '((hidden? . #t)))))
30253
30254;; XXX: Deprecated on <2026-01-21>.
30255(define-deprecated/public-alias python-dbusmock-minimal
30256 python-dbusmock-for-tests)
30257
30258(define-public python-jsonplus
30259 (package
30260 (name "python-jsonplus")
30261 (home-page "https://github.com/randomir/jsonplus")
30262 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
30263 (revision . "0")))
30264 (version (git-version "0.8.0"
30265 (assoc-ref properties 'revision)
30266 (assoc-ref properties 'commit)))
30267 (source
30268 (origin
30269 (method git-fetch)
30270 (uri (git-reference
30271 (url home-page)
30272 (commit (assoc-ref properties 'commit))))
30273 (file-name (git-file-name name version))
30274 (sha256
30275 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
30276 (build-system pyproject-build-system)
30277 (arguments
30278 (list
30279 ;; XXX: Tests require the additional package moneyed.
30280 #:tests? #f
30281 #:phases
30282 #~(modify-phases %standard-phases
30283 (add-after 'unpack 'chdir
30284 (lambda _
30285 (chdir "python"))))))
30286 (native-inputs (list python-setuptools))
30287 (propagated-inputs
30288 (list python-dateutil python-simplejson python-sortedcontainers))
30289 (synopsis "Serialize Python types to/from JSON")
30290 (description
30291 "This package provides functionality to serialize arbitrary data types
30292to and from JSON. Common data types are implemented and it is easy to
30293register custom encoders and decoders.")
30294 (license license:expat)))
30295
30296(define-public python-ioctl-opt
30297 (package
30298 (name "python-ioctl-opt")
30299 (version "1.3")
30300 (source
30301 (origin
30302 (method url-fetch)
30303 (uri (pypi-uri "ioctl-opt" version))
30304 (sha256
30305 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
30306 (build-system pyproject-build-system)
30307 (arguments
30308 (list #:tests? #f)) ;no tests
30309 (native-inputs (list python-setuptools))
30310 (home-page "http://github.com/vpelletier/python-ioctl-opt")
30311 (synopsis "Functions to compute fnctl.ioctl's opt argument")
30312 (description
30313 "This package provides functions to compute fnctl.ioctl's opt argument.")
30314 (license license:gpl2+)))
30315
30316(define-public python-anyio
30317 (package
30318 (name "python-anyio")
30319 (version "4.12.1")
30320 (source
30321 (origin
30322 (method url-fetch)
30323 (uri (pypi-uri "anyio" version))
30324 (sha256
30325 (base32
30326 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
30327 (patches
30328 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
30329 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
30330 (build-system pyproject-build-system)
30331 (arguments
30332 (list
30333 ;; tests:
30334 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
30335 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
30336 #:test-flags
30337 #~(list "-m" "not network"
30338 ;; Tests are shaky with a lot of DNS lookups.
30339 "--ignore=tests/test_sockets.py"
30340 #$@(map (lambda (ls)
30341 (string-append "--deselect=" (string-join ls "::")))
30342 (append
30343 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
30344 ;; timeout expired running: <...>
30345 '(("tests/test_pytest_plugin.py"
30346 "test_keyboardinterrupt_during_test"))
30347 (if (target-aarch64?)
30348 ;; Assertions are not equal on ARM.
30349 '(("tests/streams/test_tls.py"
30350 "TestTLSListener"
30351 "test_handshake_fail")
30352 ("tests/test_taskgroups.py"
30353 "test_shielded_cancel_sleep_time")
30354 ("tests/test_to_thread.py"
30355 "test_run_in_custom_limiter")
30356 ("tests/test_to_thread.py"
30357 "TestBlockingPortalProvider"
30358 "test_single_thread"))
30359 '()))))))
30360 (propagated-inputs
30361 (list python-idna
30362 python-sniffio
30363 python-typing-extensions))
30364 (native-inputs
30365 (list python-blockbuster
30366 python-psutil
30367 python-pytest
30368 python-pytest-mock
30369 python-setuptools
30370 python-setuptools-scm
30371 python-trio
30372 python-trustme
30373 python-truststore
30374 python-uvloop))
30375 (home-page "https://anyio.readthedocs.io")
30376 (synopsis "Compatibility layer for multiple asynchronous event loops")
30377 (description
30378 "AnyIO is an asynchronous networking and concurrency library that works
30379on top of either asyncio or trio. It implements trio-like structured
30380concurrency on top of asyncio, and works in harmony with the native SC of trio
30381itself.")
30382 (license license:expat)))
30383
30384(define-public python-argh
30385 (package
30386 (name "python-argh")
30387 (version "0.31.3")
30388 (source
30389 (origin
30390 (method url-fetch)
30391 (uri (pypi-uri "argh" version))
30392 (sha256
30393 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
30394 (build-system pyproject-build-system)
30395 (native-inputs (list python-flit-core python-pytest))
30396 (home-page "https://github.com/neithere/argh/")
30397 (synopsis "Argparse wrapper with natural syntax")
30398 (description
30399 "Argh is a small library that provides several layers of abstraction
30400on top of @code{python-argparse}. The layers can be mixed. It is always
30401possible to declare a command with the highest possible (and least flexible)
30402layer and then tune the behaviour with any of the lower layers including the
30403native API of @code{python-argparse}.")
30404 (license license:lgpl3+)))
30405
30406(define-public python-pox
30407 (package
30408 (name "python-pox")
30409 (version "0.3.6")
30410 (source
30411 (origin
30412 (method url-fetch)
30413 (uri (pypi-uri "pox" version))
30414 (sha256
30415 (base32
30416 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
30417 (build-system pyproject-build-system)
30418 (arguments
30419 (list
30420 #:phases
30421 #~(modify-phases %standard-phases
30422 (replace 'check
30423 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30424 (when tests?
30425 (mkdir-p "/tmp/guix")
30426 (setenv "SHELL" "bash")
30427 (setenv "USERNAME" "guix")
30428 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
30429 (invoke "python" "./pox/tests/__main__.py")))))))
30430 (native-inputs
30431 (list python-setuptools
30432 which)) ;pox/tests/test_shutils.py
30433 (home-page "https://pypi.org/project/pox/")
30434 (synopsis "Python utilities for file system exploration and automated builds")
30435 (description
30436 "Pox provides a collection of utilities for navigating and manipulating
30437file systems. This module is designed to facilitate some of the low-level
30438operating system interactions that are useful when exploring a file system on a
30439remote host. Pox provides Python equivalents of several shell commands such
30440as @command{which} and @command{find}. These commands allow automated
30441discovery of what has been installed on an operating system, and where the
30442essential tools are located.")
30443 (license license:bsd-3)))
30444
30445(define-public python-flit
30446 (package
30447 (name "python-flit")
30448 (version "3.12.0") ;same as python-flit-core
30449 (source
30450 (origin
30451 (method url-fetch)
30452 (uri (pypi-uri "flit" version))
30453 (sha256
30454 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
30455 (build-system pyproject-build-system)
30456 (arguments
30457 (list
30458 #:test-flags
30459 ;; These tests fail when FLIT_NO_NETWORK is set
30460 '(list "-k" "not test_invalid_classifier \
30461and not test_install_requires \
30462and not test_install_requires_extra \
30463and not test_validate_classifiers_private")
30464 #:phases
30465 #~(modify-phases %standard-phases
30466 (add-after 'unpack 'relax-pip-requirement
30467 ;; python -m pip is available by default, no need to
30468 ;; propagate pip.
30469 (lambda _
30470 (substitute* "pyproject.toml"
30471 (("\"pip\",")
30472 ""))))
30473 (add-before 'check 'pre-check
30474 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30475 (when tests?
30476 (setenv "HOME" "/tmp")
30477 (setenv "FLIT_NO_NETWORK" "1")))))))
30478 (propagated-inputs
30479 (list python-tomli-w
30480 python-flit-core
30481 python-docutils
30482 python-requests))
30483 (native-inputs
30484 (list python-responses
30485 python-pytest
30486 python-testpath))
30487 (home-page "https://flit.readthedocs.io/")
30488 (synopsis "Simple packaging tool for simple packages")
30489 (description "Flit is a simple way to put Python packages and modules on
30490PyPI. Flit packages a single importable module or package at a time, using
30491the import name as the name on PyPI. All subpackages and data files within a
30492package are included automatically.")
30493 (license license:bsd-3)))
30494
30495(define-public python-fastentrypoints
30496 (package
30497 (name "python-fastentrypoints")
30498 (home-page "https://github.com/ninjaaron/fast-entry_points")
30499 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
30500 (revision . "0")))
30501 (version (git-version "0.12"
30502 (assoc-ref properties 'revision)
30503 (assoc-ref properties 'commit)))
30504 (source
30505 (origin
30506 (method git-fetch)
30507 (uri (git-reference
30508 (url home-page)
30509 (commit (assoc-ref properties 'commit))))
30510 (file-name (git-file-name name version))
30511 (sha256
30512 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
30513 (build-system pyproject-build-system)
30514 (arguments
30515 (list
30516 ;; XXX: Testing is non-standard and hardly configurable.
30517 #:tests? #f
30518 #:test-backend #~'custom
30519 #:test-flags #~(list "test/runtest.py")))
30520 (native-inputs (list python-setuptools))
30521 (synopsis "Makes entry_points specified in setup.py load more quickly")
30522 (description
30523 "Using entry_points in your setup.py makes scripts that start really
30524slowly because it imports pkg_resources. This package allows such setup
30525scripts to load entry points more quickly.")
30526 (license license:bsd-3)))
30527
30528(define-public python-funcparserlib
30529 (package
30530 (name "python-funcparserlib")
30531 (version "1.0.1")
30532 (source
30533 (origin
30534 ;; Source tarball on PyPi lacks tests.
30535 (method git-fetch)
30536 (uri (git-reference
30537 (url "https://github.com/vlasovskikh/funcparserlib")
30538 (commit version)))
30539 (file-name (git-file-name name version))
30540 (sha256
30541 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
30542 (build-system pyproject-build-system)
30543 (arguments
30544 '(#:phases
30545 (modify-phases %standard-phases
30546 (replace 'check
30547 (lambda* (#:key tests? #:allow-other-keys)
30548 (when tests?
30549 (invoke "python" "-m" "unittest" "discover" "-v")))))))
30550 ;; ModuleNotFoundError: No module named 'poetry'
30551 (native-inputs (list python-poetry-core python-six))
30552 (home-page "https://github.com/vlasovskikh/funcparserlib")
30553 (synopsis
30554 "Recursive descent parsing library based on functional combinators")
30555 (description
30556 "This package is a recursive descent parsing library for Python based on
30557functional combinators. Parser combinators are just higher-order functions
30558that take parsers as their arguments and return them as result values.")
30559 (license license:expat)))
30560
30561(define-public python-cson
30562 (package
30563 (name "python-cson")
30564 (version "0.8")
30565 (source
30566 (origin
30567 (method git-fetch)
30568 (uri (git-reference
30569 (url "https://github.com/avakar/pycson")
30570 (commit version)))
30571 (file-name (git-file-name name version))
30572 (sha256
30573 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
30574 (build-system pyproject-build-system)
30575 (native-inputs (list python-pytest python-setuptools python-wheel))
30576 (propagated-inputs (list python-speg))
30577 (home-page "https://github.com/avakar/pycson")
30578 (synopsis "Parser for Coffeescript Object Notation (CSON)")
30579 (description
30580 "This package is a parser for Coffeescript Object Notation (CSON).")
30581 (license license:expat)))
30582
30583(define-public python-aionotify
30584 (package
30585 (name "python-aionotify")
30586 (version "0.3.1")
30587 (source
30588 (origin
30589 ;; Source tarball on PyPi lacks tests
30590 (method git-fetch)
30591 (uri (git-reference
30592 (url "https://github.com/rbarrois/aionotify")
30593 (commit version)))
30594 (file-name (git-file-name name version))
30595 (sha256
30596 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
30597 (build-system pyproject-build-system)
30598 (native-inputs
30599 (list python-pytest
30600 python-setuptools
30601 python-wheel))
30602 (home-page "https://github.com/rbarrois/aionotify")
30603 (synopsis "inotify library for Python")
30604 (description
30605 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
30606 (license license:bsd-3)))
30607
30608(define-public python-forbiddenfruit
30609 (package
30610 (name "python-forbiddenfruit")
30611 (version "0.1.4")
30612 (source
30613 (origin
30614 (method git-fetch)
30615 (uri (git-reference
30616 (url "https://github.com/clarete/forbiddenfruit")
30617 (commit version)))
30618 (file-name (git-file-name name version))
30619 (sha256
30620 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
30621 (build-system pyproject-build-system)
30622 (arguments
30623 (list
30624 #:phases
30625 #~(modify-phases %standard-phases
30626 (replace 'check
30627 (lambda* (#:key tests? #:allow-other-keys)
30628 (when tests?
30629 (invoke "make" "prepare" "SKIP_DEPS=1")
30630 (invoke "nosetests")))))))
30631 (native-inputs (list python-pynose python-setuptools))
30632 (home-page "https://github.com/clarete/forbiddenfruit")
30633 (synopsis "Patch python built-in objects")
30634 (description "This project allows Python code to extend built-in types.")
30635 (license (list license:gpl3+ license:expat))))
30636
30637(define-public python-k5test
30638 (package
30639 (name "python-k5test")
30640 (version "0.10.4")
30641 (source
30642 (origin
30643 (method url-fetch)
30644 (uri (pypi-uri "k5test" version))
30645 (sha256
30646 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
30647 (build-system pyproject-build-system)
30648 (arguments
30649 (list #:tests? #f)) ;no tests
30650 (native-inputs
30651 (list python-setuptools))
30652 (inputs
30653 (list mit-krb5))
30654 (home-page "https://github.com/pythongssapi/k5test")
30655 (synopsis "Library for setting up self-contained Kerberos 5 environments")
30656 (description
30657 "@code{k5test} is a library for setting up self-contained Kerberos 5
30658environments, and running Python unit tests inside those environments. It is
30659based on the file of the same name found alongside the MIT Kerberos 5 unit
30660tests.")
30661 (license license:isc)))
30662
30663(define-public python-gssapi
30664 (package
30665 (name "python-gssapi")
30666 (version "1.10.0")
30667 (source
30668 (origin
30669 (method url-fetch)
30670 (uri (pypi-uri "gssapi" version))
30671 (sha256
30672 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
30673 (build-system pyproject-build-system)
30674 (arguments
30675 (list #:test-flags #~(list "--pyargs" "gssapi")))
30676 (native-inputs
30677 (list python-cython
30678 python-k5test
30679 python-parameterized
30680 python-pytest
30681 python-setuptools))
30682 (inputs
30683 (list mit-krb5))
30684 (propagated-inputs
30685 (list python-decorator))
30686 (home-page "https://github.com/pythongssapi/python-gssapi")
30687 (synopsis "Python GSSAPI Wrapper")
30688 (description
30689 "Python-GSSAPI provides both low-level and high level wrappers around the
30690GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
30691also be usable with other GSSAPI mechanisms.")
30692 (license license:isc)))
30693
30694(define-public python-check-manifest
30695 (package
30696 (name "python-check-manifest")
30697 (version "0.51")
30698 (source
30699 (origin
30700 (method url-fetch)
30701 (uri (pypi-uri "check_manifest" version))
30702 (sha256
30703 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
30704 (build-system pyproject-build-system)
30705 (arguments
30706 (list
30707 ;; tests: 127 passed, 20 skipped, 2 deselected
30708 #:test-flags
30709 ;; This tests requires setting up a venv which does not work
30710 ;; properly in the build environment.
30711 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
30712 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
30713 (native-inputs
30714 (list git-minimal/pinned python-pytest))
30715 (propagated-inputs
30716 (list python-pypa-build python-setuptools))
30717 (home-page "https://github.com/mgedmin/check-manifest")
30718 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30719 (description "Python package can include a MANIFEST.in file to help with
30720sending package files to the Python Package Index. This package checks that
30721file to ensure it completely and accurately describes your project.")
30722 (license license:expat)))
30723
30724(define-public python-android-stringslib
30725 (package
30726 (name "python-android-stringslib")
30727 (version "0.1.2")
30728 (source
30729 (origin
30730 (method git-fetch)
30731 (uri (git-reference
30732 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30733 (commit (string-append "v" version))))
30734 (file-name (git-file-name name version))
30735 (sha256
30736 (base32
30737 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30738 (build-system pyproject-build-system)
30739 (arguments (list #:tests? #f)) ; No tests.
30740 (native-inputs (list python-setuptools))
30741 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30742 (synopsis "Android strings.xml support")
30743 (description
30744 "Android Strings Lib provides support for android's strings.xml files.
30745These files are used to translate strings in android apps.")
30746 (license license:expat)))
30747
30748(define-public offlate
30749 (package
30750 (name "offlate")
30751 (version "0.6.1")
30752 (source
30753 (origin
30754 (method git-fetch)
30755 (uri (git-reference
30756 (url "https://framagit.org/tyreunom/offlate")
30757 (commit version)))
30758 (file-name (git-file-name name version))
30759 (sha256
30760 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
30761 (build-system pyproject-build-system)
30762 (arguments
30763 (list
30764 #:tests? #f ; No tests.
30765 #:phases
30766 #~(modify-phases %standard-phases
30767 (add-before 'build 'generate-fonts
30768 (lambda _
30769 (invoke "make" "fonts")))
30770 (add-before 'build 'generate-translations
30771 (lambda _
30772 (invoke "make" "update-langs"))))))
30773 (propagated-inputs
30774 (list python-android-stringslib
30775 python-dateutil
30776 python-gitlab
30777 python-lxml
30778 python-polib
30779 python-pycountry
30780 python-pyenchant
30781 python-pygit2
30782 python-pygithub
30783 python-pyqt
30784 python-requests
30785 python-ruamel.yaml
30786 python-translate-toolkit-for-offlate
30787 python-translation-finder
30788 python-watchdog))
30789 (native-inputs (list qttools-5 fontforge python-setuptools))
30790 (home-page "https://framagit.org/tyreunom/offlate")
30791 (synopsis "Offline translation interface for online translation tools")
30792 (description
30793 "Offlate offers a unified interface for different translation file
30794formats, as well as many different online translation platforms. You can use
30795it to get work from online platforms, specialized such as the Translation
30796Project, or not such a gitlab instance when your upstream doesn't use any
30797dedicated platform. The tool proposes a unified interface for any format and
30798an upload option to send your work back to the platform.")
30799 (license license:gpl3+)))
30800
30801(define-public python-pypng
30802 (package
30803 (name "python-pypng")
30804 (version "0.20220715.0")
30805 (source
30806 (origin
30807 (method url-fetch)
30808 (uri (pypi-uri "pypng" version))
30809 (sha256
30810 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30811 (build-system pyproject-build-system)
30812 (arguments
30813 (list
30814 #:phases
30815 '(modify-phases %standard-phases
30816 (add-before 'check 'pre-check
30817 (lambda _
30818 (setenv "PYTHONPATH"
30819 (string-append (getcwd) "/code:"
30820 (getenv "GUIX_PYTHONPATH"))))))))
30821 (native-inputs (list python-pytest python-setuptools python-wheel))
30822 (home-page "https://github.com/drj11/pypng")
30823 (synopsis "Pure Python PNG image encoder/decoder")
30824 (description
30825 "The PyPNG module implements support for PNG images. It reads and writes
30826PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30827pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30828LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30829images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30830A number of optional chunks can be specified (when writing) and
30831understood (when reading): tRNS, bKGD, gAMA.
30832
30833PyPNG is not a high level toolkit for image processing (like PIL) and does not
30834aim at being a replacement or competitor. Its strength lies in fine-grained
30835extensive support of PNG features. It can also read and write Netpbm PAM
30836files, with a focus on its use as an intermediate format for implementing
30837custom PNG processing.")
30838 (license license:expat)))
30839
30840(define-public python-fuzzywuzzy
30841 (package
30842 (name "python-fuzzywuzzy")
30843 (version "0.18.0")
30844 (source
30845 (origin
30846 (method git-fetch)
30847 (uri (git-reference
30848 (url "https://github.com/seatgeek/fuzzywuzzy")
30849 (commit version)))
30850 (file-name (git-file-name name version))
30851 (sha256
30852 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30853 (build-system pyproject-build-system)
30854 (arguments
30855 (list
30856 #:test-flags
30857 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30858 (native-inputs
30859 (list python-hypothesis
30860 python-pycodestyle
30861 python-pytest
30862 python-setuptools))
30863 (propagated-inputs (list python-levenshtein))
30864 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30865 (synopsis "Fuzzy string matching in Python")
30866 (description
30867 "Approximate string matching using @emph{Levenshtein Distance} to
30868calculate the differences between sequences.")
30869 (license license:gpl2)))
30870
30871(define-public python-block-tracing
30872 (package
30873 (name "python-block-tracing")
30874 (version "1.0.1")
30875 (source
30876 (origin
30877 (method url-fetch)
30878 (uri (pypi-uri "block_tracing" version))
30879 (sha256
30880 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30881 (build-system pyproject-build-system)
30882 (arguments (list #:tests? #f)) ; No tests.
30883 (native-inputs (list python-setuptools))
30884 (home-page "https://github.com/rianhunter/block_tracing")
30885 (synopsis "Protect process memory")
30886 (description
30887 "@code{block_tracing} is a tiny Python library that can be used to
30888prevent debuggers and other applications from inspecting the memory within
30889your process.")
30890 (license license:expat)))
30891
30892(define-public python-json-e
30893 (package
30894 (name "python-json-e")
30895 (version "4.8.0")
30896 (source
30897 (origin
30898 (method git-fetch) ; no tests in PyPI release
30899 (uri (git-reference
30900 (url "https://github.com/json-e/json-e")
30901 (commit (string-append "v" version))))
30902 (file-name (git-file-name name version))
30903 (sha256
30904 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30905 (build-system pyproject-build-system)
30906 (arguments
30907 (list
30908 #:phases
30909 #~(modify-phases %standard-phases
30910 ;; Git repository provides implementations for JavaScript, Golang,
30911 ;; Python and Rust, pick "py".
30912 (add-before 'build 'chdir-to-py
30913 (lambda _
30914 (chdir "py"))))))
30915 (native-inputs
30916 (list python-freezegun
30917 python-pytest
30918 python-pyyaml
30919 python-setuptools
30920 python-wheel))
30921 (home-page "https://json-e.js.org")
30922 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30923 (description
30924 "This package provides a data-structure parameterization system written
30925for embedding context in JSON objects.")
30926 (license license:mpl2.0)))
30927
30928(define-public python-json-logger
30929 (package
30930 (name "python-json-logger")
30931 (version "4.0.0")
30932 (source
30933 (origin
30934 (method git-fetch)
30935 (uri (git-reference
30936 (url "https://github.com/nhairs/python-json-logger")
30937 (commit (string-append "v" version))))
30938 (file-name (git-file-name name version))
30939 (sha256
30940 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
30941 (build-system pyproject-build-system)
30942 (native-inputs
30943 (list python-freezegun
30944 python-mike
30945 python-msgspec
30946 python-orjson
30947 python-pypa-build
30948 python-pytest
30949 python-setuptools
30950 python-tzdata
30951 python-validate-pyproject
30952 python-typing-extensions))
30953 (home-page "https://github.com/nhairs/python-json-logger")
30954 (synopsis "JSON log formatter in Python")
30955 (description "This library allows standard Python logging to output log data
30956as JSON objects. With JSON we can make our logs more readable by machines and
30957we can stop writing custom parsers for syslog-type records.")
30958 (license license:bsd-3)))
30959
30960(define-public python-daiquiri
30961 (package
30962 (name "python-daiquiri")
30963 (version "3.0.1")
30964 (source
30965 (origin
30966 (method git-fetch)
30967 (uri (git-reference
30968 (url "https://github.com/jd/daiquiri")
30969 (commit version)))
30970 (file-name (git-file-name name version))
30971 (sha256
30972 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30973 (build-system pyproject-build-system)
30974 (propagated-inputs (list python-json-logger))
30975 (native-inputs (list python-mock python-pytest python-setuptools
30976 python-setuptools-scm))
30977 (home-page "https://github.com/jd/daiquiri")
30978 (synopsis "Library to configure Python logging easily")
30979 (description
30980 "The daiquiri library provides an easy way to configure logging in
30981Python. It also provides some custom formatters and handlers.")
30982 (license license:asl2.0)))
30983
30984(define-public python-pifpaf
30985 (package
30986 (name "python-pifpaf")
30987 (version "3.4.0")
30988 (source
30989 (origin
30990 (method git-fetch)
30991 (uri (git-reference
30992 (url "https://github.com/jd/pifpaf")
30993 (commit version)))
30994 (file-name (git-file-name name version))
30995 (sha256
30996 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30997 (build-system pyproject-build-system)
30998 (arguments
30999 (list
31000 #:phases
31001 #~(modify-phases %standard-phases
31002 (add-after 'install 'install-drivers
31003 (lambda* (#:key inputs outputs #:allow-other-keys)
31004 (let ((site (site-packages inputs outputs)))
31005 (copy-recursively "pifpaf/drivers"
31006 (string-append site "/pifpaf/drivers/"))))))))
31007 (propagated-inputs
31008 (list python-click
31009 python-daiquiri
31010 python-fixtures
31011 python-jinja2
31012 python-pbr
31013 python-psutil
31014 python-xattr))
31015 (native-inputs
31016 (list python-mock
31017 python-stestr
31018 python-packaging
31019 python-requests
31020 python-testrepository
31021 python-testtools
31022 python-setuptools))
31023 (home-page "https://github.com/jd/pifpaf")
31024 (synopsis "Tools and fixtures to manage daemons for testing in Python")
31025 (description
31026 "Pifpaf is a suite of fixtures and a command-line tool that starts and
31027stops daemons for a quick throw-away usage. This is typically useful when
31028needing these daemons to run integration testing. It originally evolved from
31029its precursor @code{overtest}.")
31030 (license license:asl2.0)))
31031
31032(define-public python-pytest-check-links
31033 (package
31034 (name "python-pytest-check-links")
31035 (version "0.10.1")
31036 (source
31037 (origin
31038 (method url-fetch)
31039 (uri (pypi-uri "pytest_check_links" version))
31040 (sha256
31041 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
31042 (build-system pyproject-build-system)
31043 (arguments
31044 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
31045 (native-inputs
31046 (list python-hatchling))
31047 (propagated-inputs
31048 (list python-docutils
31049 python-html5lib
31050 python-nbconvert
31051 python-nbformat
31052 python-requests))
31053 (home-page "https://github.com/jupyterlab/pytest-check-links")
31054 (synopsis "Check links in files")
31055 (description "This package provides a pytest plugin that checks URLs for
31056HTML-containing files.")
31057 (license license:bsd-3)))
31058
31059(define-public python-json5
31060 (package
31061 (name "python-json5")
31062 (version "0.9.25")
31063 (source
31064 (origin
31065 ;; sample.json5 is missing from PyPi source tarball
31066 (method git-fetch)
31067 (uri (git-reference
31068 (url "https://github.com/dpranke/pyjson5")
31069 (commit (string-append "v" version))))
31070 (file-name (git-file-name name version))
31071 (sha256
31072 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
31073 (build-system pyproject-build-system)
31074 (native-inputs (list python-pytest python-setuptools python-wheel))
31075 (home-page "https://github.com/dpranke/pyjson5")
31076 (synopsis "Python implementation of the JSON5 data format")
31077 (description
31078 "JSON5 extends the JSON data interchange format to make it slightly more
31079usable as a configuration language. This Python package implements parsing and
31080dumping of JSON5 data structures.")
31081 (license license:asl2.0)))
31082
31083(define-public python-farama-notifications
31084 (package
31085 (name "python-farama-notifications")
31086 (version "0.0.4")
31087 (source
31088 ;; The version on pypi does not include tests.
31089 (origin
31090 (method git-fetch)
31091 (uri (git-reference
31092 (url "https://github.com/Farama-Foundation/Farama-Notifications")
31093 (commit version)))
31094 (file-name (git-file-name name version))
31095 (sha256
31096 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
31097 (build-system pyproject-build-system)
31098 (arguments
31099 (list
31100 #:phases
31101 '(modify-phases %standard-phases
31102 (replace 'check
31103 (lambda* (#:key tests? #:allow-other-keys)
31104 (when tests?
31105 (invoke "python3" "tests/ci-test.py")))))))
31106 (native-inputs (list python-pytest python-setuptools python-wheel))
31107 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
31108 (synopsis "Notifications for all Farama Foundation maintained libraries")
31109 (description
31110 "This package allows for providing notifications for all Farama
31111Foundation maintained libraries.")
31112 (license license:expat)))
31113
31114(define-public python-frontmatter
31115 (package
31116 (name "python-frontmatter")
31117 (version "1.3.0")
31118 (source
31119 (origin
31120 (method git-fetch)
31121 (uri (git-reference
31122 (url "https://github.com/eyeseast/python-frontmatter")
31123 (commit (string-append "v" version))))
31124 (file-name (git-file-name name version))
31125 (sha256
31126 (base32 "09kgl9kw96f1pyszqnm7slq1lw5nh4c8f59p6brz0ap2ydcfxykg"))))
31127 (build-system pyproject-build-system)
31128 (native-inputs
31129 (list python-hatchling
31130 python-pyaml
31131 python-pytest
31132 python-toml
31133 python-types-pyyaml
31134 python-types-toml
31135 python-uv-build))
31136 (propagated-inputs (list python-pyyaml))
31137 (home-page "https://github.com/eyeseast/python-frontmatter")
31138 (synopsis "Parse and manage posts with YAML (or other) frontmatter")
31139 (description
31140 "This package offers a useful way to add arbitrary, structured metadata
31141to text documents, regardless of type. This is a small package to load and
31142parse files (or just text) with YAML (or JSON, TOML or other) front matter.")
31143 (license license:expat)))
31144
31145(define-public python-frozendict
31146 (package
31147 (name "python-frozendict")
31148 (version "2.4.6")
31149 (source
31150 (origin
31151 (method url-fetch)
31152 (uri (pypi-uri "frozendict" version))
31153 (sha256
31154 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
31155 (build-system pyproject-build-system)
31156 (native-inputs
31157 (list python-pytest
31158 python-setuptools
31159 python-wheel))
31160 (home-page "https://github.com/Marco-Sulla/python-frozendict")
31161 (synopsis "Simple immutable mapping for Python")
31162 (description
31163 "@dfn{frozendict} is an immutable wrapper around dictionaries that
31164implements the complete mapping interface. It can be used as a drop-in
31165replacement for dictionaries where immutability is desired.")
31166 (license license:expat)))
31167
31168(define-public python-py-cpuinfo
31169 (package
31170 (name "python-py-cpuinfo")
31171 (version "9.0.0")
31172 (source
31173 (origin
31174 (method git-fetch)
31175 (uri (git-reference
31176 (url "https://github.com/workhorsy/py-cpuinfo")
31177 (commit (string-append "v" version))))
31178 (file-name (git-file-name name version))
31179 (sha256
31180 (base32
31181 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
31182 (build-system pyproject-build-system)
31183 (arguments
31184 (list #:test-backend #~'custom
31185 #:test-flags #~(list "test_suite.py")))
31186 (native-inputs
31187 (list python-setuptools))
31188 (home-page "https://github.com/workhorsy/py-cpuinfo")
31189 (synopsis "Get CPU info with Python")
31190 (description
31191 "This Python module returns the CPU info by using the best sources of
31192information for your operating system.")
31193 (license license:expat)))
31194
31195(define-public python-canonicaljson
31196 (package
31197 (name "python-canonicaljson")
31198 (version "2.0.0")
31199 (source
31200 (origin
31201 (method url-fetch)
31202 (uri (pypi-uri "canonicaljson" version))
31203 (sha256
31204 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
31205 (build-system pyproject-build-system)
31206 (arguments
31207 (list #:test-backend #~'unittest))
31208 (native-inputs
31209 (list python-setuptools))
31210 (home-page "https://github.com/matrix-org/python-canonicaljson")
31211 (synopsis "Canonical JSON")
31212 (description
31213 "Deterministically encode JSON.
31214
31215@itemize
31216@item Encodes objects and arrays as RFC 7159 JSON.
31217@item Sorts object keys so that you get the same result each time.
31218@item Has no insignificant whitespace to make the output as small as possible.
31219@item Escapes only the characters that must be escaped, U+0000 to
31220 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
31221@item Uses the shortest escape sequence for each escaped character.
31222@item Encodes the JSON as UTF-8.
31223@item Can encode frozendict immutable dictionaries.
31224@end itemize")
31225 (license license:asl2.0)))
31226
31227(define-public python-signedjson
31228 (package
31229 (name "python-signedjson")
31230 (version "1.1.4")
31231 (source
31232 (origin
31233 (method git-fetch)
31234 (uri (git-reference
31235 (url "https://github.com/matrix-org/python-signedjson")
31236 (commit (string-append "v" version))))
31237 (file-name (git-file-name name version))
31238 (sha256
31239 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
31240 (build-system pyproject-build-system)
31241 (propagated-inputs
31242 (list python-canonicaljson
31243 python-pynacl
31244 python-typing-extensions
31245 python-unpaddedbase64))
31246 (native-inputs
31247 (list python-pytest python-setuptools-scm python-setuptools))
31248 (home-page "https://github.com/matrix-org/python-signedjson")
31249 (synopsis "Sign JSON objects with ED25519 signatures")
31250 (description
31251 "Sign JSON objects with ED25519 signatures.
31252
31253@itemize
31254@item More than one entity can sign the same object.
31255@item Each entity can sign the object with more than one key making it easier to
31256rotate keys
31257@item ED25519 can be replaced with a different algorithm.
31258@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
31259key.
31260@end itemize")
31261 (license license:asl2.0)))
31262
31263(define-public python-daemonize
31264 (package
31265 (name "python-daemonize")
31266 (version "2.5.0")
31267 (source
31268 (origin
31269 (method git-fetch)
31270 (uri (git-reference
31271 (url "https://github.com/thesharp/daemonize")
31272 (commit (string-append "v" version))))
31273 (file-name (git-file-name name version))
31274 (sha256
31275 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
31276 (build-system pyproject-build-system)
31277 (arguments
31278 (list
31279 #:test-backend #~'custom
31280 #:test-flags #~(list "tests/test.py")
31281 #:phases
31282 #~(modify-phases %standard-phases
31283 (add-before 'check 'fix-tests
31284 (lambda _
31285 ;; XXX: nobody has group nogroup on Guix.
31286 (substitute* "tests/test.py"
31287 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
31288 (number->string (passwd:gid (getpw "nobody"))))))))))
31289 (native-inputs (list coreutils-minimal procps python-setuptools))
31290 (home-page "https://github.com/thesharp/daemonize")
31291 (synopsis "Library for writing system daemons in Python")
31292 (description
31293 "Daemonize is a library for writing system daemons in Python.")
31294 (license license:expat)))
31295
31296(define-public python-pymacaroons
31297 (package
31298 (name "python-pymacaroons")
31299 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
31300 (revision . "0")))
31301 (version (git-version "0.13.0"
31302 (assoc-ref properties 'revision)
31303 (assoc-ref properties 'commit)))
31304 (source
31305 (origin
31306 (method git-fetch)
31307 (uri (git-reference
31308 (url "https://github.com/ecordell/pymacaroons")
31309 (commit (assoc-ref properties 'commit))))
31310 (file-name (git-file-name name version))
31311 (sha256
31312 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
31313 (build-system pyproject-build-system)
31314 (arguments
31315 (list
31316 #:test-flags
31317 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
31318 ;; No module named 'hypothesis.specifiers'
31319 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
31320 (native-inputs
31321 (list python-hypothesis
31322 python-mock
31323 python-pytest
31324 python-setuptools))
31325 (propagated-inputs (list python-pynacl))
31326 (home-page "https://github.com/ecordell/pymacaroons")
31327 (synopsis "Python Macaroon Library")
31328 (description
31329 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
31330tokens, macaroons embed caveats that define specific authorization
31331requirements for the target service, the service that issued the root macaroon
31332and which is capable of verifying the integrity of macaroons it receives.
31333
31334Macaroons allow for delegation and attenuation of authorization. They are
31335simple and fast to verify, and decouple authorization policy from the
31336enforcement of that policy.")
31337 (license license:expat)))
31338
31339(define-public python-ldap3
31340 (package
31341 (name "python-ldap3")
31342 (version "2.9.1")
31343 (home-page "https://github.com/cannatag/ldap3")
31344 (source
31345 (origin
31346 (method git-fetch)
31347 (uri (git-reference (url home-page)
31348 (commit (string-append "v" version))))
31349 (file-name (git-file-name name version))
31350 (sha256
31351 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
31352 (build-system pyproject-build-system)
31353 (arguments
31354 (list
31355 #:tests? #f ;TODO: Tests need a real LDAP server to run
31356 #:test-backend #~'nose))
31357 (native-inputs
31358 (list python-pynose python-setuptools))
31359 (propagated-inputs
31360 (list python-gssapi python-pyasn1))
31361 (synopsis "Python LDAP client")
31362 (description
31363 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
31364library.")
31365 (license license:lgpl3+)))
31366
31367(define-public python-boltons
31368 (package
31369 (name "python-boltons")
31370 (version "25.0.0")
31371 (source
31372 (origin
31373 (method git-fetch)
31374 (uri (git-reference
31375 (url "https://github.com/mahmoud/boltons")
31376 (commit version)))
31377 (file-name (git-file-name name version))
31378 (sha256
31379 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
31380 (build-system pyproject-build-system)
31381 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
31382 (home-page "https://github.com/mahmoud/boltons")
31383 (synopsis "Extensions to the Python standard library")
31384 (description
31385 "Boltons is a set of over 230 pure-Python utilities in the same spirit
31386as — and yet conspicuously missing from — the standard library, including:
31387
31388@itemize
31389@item Atomic file saving, bolted on with fileutils
31390@item A highly-optimized OrderedMultiDict, in dictutils
31391@item Two types of PriorityQueue, in queueutils
31392@item Chunked and windowed iteration, in iterutils
31393@item Recursive data structure iteration and merging, with iterutils.remap
31394@item Exponential backoff functionality, including jitter, through
31395iterutils.backoff
31396@item A full-featured TracebackInfo type, for representing stack traces, in
31397tbutils
31398@end itemize")
31399 (license license:bsd-3)))
31400
31401(define-public python-eliot
31402 (package
31403 (name "python-eliot")
31404 (version "1.17.5")
31405 (source
31406 (origin
31407 (method url-fetch)
31408 (uri (pypi-uri "eliot" version))
31409 (sha256
31410 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
31411 (build-system pyproject-build-system)
31412 (arguments
31413 (list
31414 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
31415 ;; Two tests fail with error: TypeError: Unsupported type.
31416 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
31417 #:phases
31418 #~(modify-phases %standard-phases
31419 (add-after 'unpack 'remove-journald-support
31420 (lambda _
31421 (for-each delete-file
31422 '("eliot/tests/test_journald.py"
31423 "eliot/journald.py")))))))
31424 (native-inputs
31425 (list python-pytest
31426 python-setuptools
31427 python-testtools))
31428 (propagated-inputs
31429 (list python-boltons
31430 python-orjson
31431 python-pyrsistent
31432 python-zope-interface))
31433 (home-page "https://github.com/itamarst/eliot/")
31434 (synopsis "Eliot: the logging system that tells you why it happened")
31435 (description
31436 "@dfn{eliot} is a Python logging system that outputs causal chains of
31437actions: actions can spawn other actions, and eventually they either succeed
31438or fail. The resulting logs tell you the story of what your software did: what
31439happened, and what caused it.")
31440 (license license:asl2.0)))
31441
31442(define-public python-pem
31443 (package
31444 (name "python-pem")
31445 (version "23.1.0")
31446 (source
31447 (origin
31448 (method git-fetch)
31449 (uri (git-reference
31450 (url "https://github.com/hynek/pem")
31451 (commit version)))
31452 (file-name (git-file-name name version))
31453 (sha256
31454 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
31455 (build-system pyproject-build-system)
31456 (native-inputs
31457 (list nss-certs-for-test
31458 python-certifi
31459 python-hatch-fancy-pypi-readme
31460 python-hatch-vcs
31461 python-hatchling
31462 python-pretend
31463 python-pyopenssl
31464 python-pytest
31465 python-twisted))
31466 (home-page "https://pem.readthedocs.io/")
31467 (synopsis "Easy PEM file parsing in Python")
31468 (description
31469 "This package provides a Python module for parsing and splitting PEM files.")
31470 (license license:expat)))
31471
31472(define-public python-pysaml2
31473 (package
31474 (name "python-pysaml2")
31475 (version "7.5.4")
31476 (source
31477 (origin
31478 (method git-fetch)
31479 (uri (git-reference
31480 (url "https://github.com/IdentityPython/pysaml2")
31481 (commit (string-append "v" version))))
31482 (file-name (git-file-name name version))
31483 (sha256
31484 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
31485 (build-system pyproject-build-system)
31486 (arguments
31487 (list
31488 #:test-flags
31489 #~(list "-k"
31490 (string-join
31491 ;; XXX: encryption failures
31492 (list "not test_encrypted_response_6"
31493 "test_validate_cert_chains"
31494 "test_validate_with_root_cert"
31495 ;; XXX: xml parsing error
31496 "test_namespace_processing") " and not "))
31497 #:phases
31498 #~(modify-phases %standard-phases
31499 (add-after 'unpack 'relax-requirements
31500 (lambda _
31501 (substitute* "pyproject.toml"
31502 (("\"(pyopenssl|xmlschema).*\"" _ dep)
31503 (format #f "~s" dep))))))))
31504 (native-inputs (list python-poetry-core python-pytest))
31505 (propagated-inputs
31506 (list python-cryptography
31507 python-dateutil
31508 python-defusedxml
31509 python-pymongo
31510 python-pyopenssl
31511 python-responses
31512 python-requests
31513 python-xmlschema
31514 python-xmlsec))
31515 (home-page "https://idpy.org")
31516 (synopsis "Python implementation of SAML Version 2 Standard")
31517 (description
31518 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
31519It contains all necessary pieces for building a SAML2 service provider or
31520an identity provider. The distribution contains examples of both.
31521
31522This package was originally written to work in a WSGI environment, but
31523there are extensions that allow you to use it with other frameworks.")
31524 (license license:asl2.0)))
31525
31526;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
31527;; This PyPI package is no longer actively maintained, but the underlying
31528;; library can be vendored.
31529;;
31530;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
31531;; pyproject.toml) and can't be used as a common input, do not update this
31532;; package.
31533(define-public python-click-plugins
31534 (package
31535 (name "python-click-plugins")
31536 (version "1.1.1.2")
31537 (source
31538 (origin
31539 (method git-fetch)
31540 (uri (git-reference
31541 (url "https://github.com/click-contrib/click-plugins")
31542 (commit version)))
31543 (file-name (git-file-name name version))
31544 (sha256
31545 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
31546 (build-system pyproject-build-system)
31547 (arguments
31548 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
31549 (native-inputs
31550 (list python-setuptools))
31551 (propagated-inputs
31552 (list python-click))
31553 (synopsis "Extension for Click to register external CLI commands")
31554 (description
31555 "This package provides n extension module for Click to register external
31556CLI commands via setuptools entry-points.")
31557 (home-page "https://github.com/click-contrib/click-plugins")
31558 (license license:bsd-3)))
31559
31560;; XXX: Deprecated on <2026-03-23>.
31561(define-deprecated-package python-click-plugins-1 python-click-plugins)
31562
31563(define-public python-diceware
31564 (package
31565 (name "python-diceware")
31566 (version "1.0.1")
31567 (source
31568 (origin
31569 (method url-fetch)
31570 (uri (pypi-uri "diceware" version))
31571 (sha256
31572 (base32
31573 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
31574 (build-system pyproject-build-system)
31575 (native-inputs
31576 (list python-pytest python-setuptools python-wheel))
31577 (home-page "https://github.com/ulif/diceware/")
31578 (synopsis "Generates memorable passphrases")
31579 (description "This package generates passphrases by concatenating words
31580randomly picked from wordlists. It supports several sources of
31581randomness (including real life dice) and different wordlists (including
31582cryptographically signed ones).")
31583 (license license:gpl3+)))
31584
31585(define-public python-dictdiffer
31586 (package
31587 (name "python-dictdiffer")
31588 (version "0.9.0")
31589 (source
31590 (origin
31591 (method git-fetch)
31592 (uri (git-reference
31593 (url "https://github.com/inveniosoftware/dictdiffer")
31594 (commit (string-append "v" version))))
31595 (file-name (git-file-name name version))
31596 (sha256
31597 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
31598 (build-system pyproject-build-system)
31599 (arguments
31600 (list
31601 #:phases
31602 #~(modify-phases %standard-phases
31603 (add-after 'unpack 'relax-requirements
31604 (lambda _
31605 (delete-file "pytest.ini")
31606 (substitute* "setup.py"
31607 (("'pytest-runner.*',")
31608 "'pytest',")))))))
31609 (native-inputs
31610 (list python-pytest python-setuptools python-setuptools-scm))
31611 (home-page "https://github.com/inveniosoftware/dictdiffer")
31612 (synopsis "Diff and patch Python dictionary objects")
31613 (description
31614 "Dictdiffer is a Python module that helps you to diff and patch
31615dictionaries.")
31616 (license license:expat)))
31617
31618(define-public python-osc
31619 (package
31620 (name "python-osc")
31621 (version "1.9.3")
31622 (source
31623 (origin
31624 (method git-fetch)
31625 (uri (git-reference
31626 (url "https://github.com/attwad/python-osc")
31627 (commit (string-append "v" version))))
31628 (file-name (git-file-name name version))
31629 (sha256
31630 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
31631 (build-system pyproject-build-system)
31632 (native-inputs (list python-setuptools))
31633 (home-page "https://github.com/attwad/python-osc")
31634 (synopsis "Open Sound Control server and client implementations")
31635 (description
31636 "@code{python-osc} is a pure Python library with no external
31637dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
31638Open Sound Control 1.0} specification.")
31639 (license license:unlicense)))
31640
31641(define-public python-cmd2
31642 (package
31643 (name "python-cmd2")
31644 (version "2.5.11")
31645 (source
31646 (origin
31647 (method url-fetch)
31648 (uri (pypi-uri "cmd2" version))
31649 (sha256
31650 (base32
31651 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
31652 (build-system pyproject-build-system)
31653 (arguments
31654 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
31655and not test_transcript")))
31656 (propagated-inputs
31657 (list python-pyperclip python-wcwidth))
31658 (native-inputs
31659 (list python-pytest
31660 python-pytest-mock
31661 python-setuptools
31662 python-setuptools-scm
31663 python-wheel))
31664 (home-page "https://github.com/python-cmd2/cmd2")
31665 (synopsis "Tool for building interactive command line applications")
31666 (description
31667 "Cmd2 is a tool for building interactive command line applications in
31668Python. Its goal is to make it quick and easy for developers to build
31669feature-rich and user-friendly interactive command line applications. It
31670provides a simple API which is an extension of Python's built-in @code{cmd}
31671module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
31672make your life easier and eliminates much of the boilerplate code which would
31673be necessary when using @code{cmd}.")
31674 (license license:expat)))
31675
31676(define-public python-pytidylib
31677 (package
31678 (name "python-pytidylib")
31679 (version "0.3.2")
31680 (source
31681 (origin
31682 (method git-fetch)
31683 (uri (git-reference
31684 (url "https://github.com/countergram/pytidylib")
31685 (commit version)))
31686 (file-name (git-file-name name version))
31687 (sha256
31688 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
31689 (build-system pyproject-build-system)
31690 (arguments
31691 (list
31692 #:phases
31693 #~(modify-phases %standard-phases
31694 (add-after 'unpack 'fix-queue-import
31695 (lambda _
31696 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
31697 (substitute* "tests/threadsafety.py"
31698 (("from Queue import Queue")
31699 "from queue import Queue"))))
31700 (add-before 'build 'qualify-libtidy
31701 (lambda* (#:key inputs #:allow-other-keys)
31702 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
31703 (substitute* "tidylib/tidy.py"
31704 (("ctypes\\.util\\.find_library\\('tidy'\\)")
31705 (format #f "'~a'" libtidy)))))))))
31706 (native-inputs (list python-pytest python-setuptools))
31707 (inputs (list tidy-html))
31708 (home-page "https://github.com/countergram/pytidylib")
31709 (synopsis "Python wrapper for HTML Tidy library")
31710 (description
31711 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31712allows you, from Python code, to “fix” invalid (X)HTML markup.")
31713 (license license:expat)))
31714
31715(define-public python-mujson
31716 (package
31717 (name "python-mujson")
31718 (version "1.4")
31719 (source
31720 (origin
31721 (method git-fetch)
31722 (uri (git-reference
31723 (url "https://github.com/mattgiles/mujson")
31724 (commit version)))
31725 (file-name (git-file-name name version))
31726 (sha256
31727 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31728 (build-system pyproject-build-system)
31729 (arguments (list #:tests? #f)) ;No tests.
31730 (native-inputs (list python-setuptools))
31731 (home-page "https://github.com/mattgiles/mujson")
31732 (synopsis "Use the fastest JSON functions available at import time")
31733 (description
31734 "This module selects the fastest JSON functions available at import time
31735in Python.")
31736 (license license:expat)))
31737
31738(define-public python-bashlex
31739 (package
31740 (name "python-bashlex")
31741 (version "0.18")
31742 (source
31743 (origin
31744 (method git-fetch)
31745 (uri (git-reference
31746 (url "https://github.com/idank/bashlex")
31747 (commit version)))
31748 (file-name (git-file-name name version))
31749 (sha256
31750 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31751 (build-system pyproject-build-system)
31752 (arguments
31753 (list
31754 #:phases
31755 #~(modify-phases %standard-phases
31756 (add-before 'build 'pregenerate-yacc-tables
31757 (lambda _
31758 ;; parser.py caches tables, which attempts to write to site lib
31759 ;; see https://github.com/idank/bashlex/issues/51
31760 (invoke "python" "-c" "import bashlex"))))))
31761 (native-inputs (list python-pytest python-setuptools))
31762 (home-page "https://github.com/idank/bashlex")
31763 (synopsis "Python parser for bash")
31764 (description
31765 "@code{bashlex} is a Python port of the parser used internally by GNU
31766bash.
31767
31768For the most part it's transliterated from C, the major differences are:
31769
31770@itemize
31771@item it does not execute anything
31772@item it is reentrant
31773@item it generates a complete AST
31774@end itemize
31775")
31776 (license license:gpl3+)))
31777
31778(define-public python-jinxed
31779 (package
31780 (name "python-jinxed")
31781 (version "1.3.0")
31782 (source
31783 (origin
31784 (method git-fetch)
31785 (uri (git-reference
31786 (url "https://github.com/Rockhopper-Technologies/jinxed")
31787 (commit version)))
31788 (file-name (git-file-name name version))
31789 (sha256
31790 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31791 (build-system pyproject-build-system)
31792 (arguments
31793 (list
31794 #:tests? #f ;_curses.error: setupterm: could not find terminal
31795 #:phases
31796 #~(modify-phases %standard-phases
31797 (add-before 'check 'set-environment-variables
31798 (lambda* (#:key inputs #:allow-other-keys)
31799 (setenv "TERM" "LINUX")
31800 (setenv "TERMINFO"
31801 (search-input-directory inputs "share/terminfo")))))))
31802 (native-inputs (list ncurses python-setuptools))
31803 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31804 (synopsis "Jinxed Terminal Library")
31805 (description
31806 "Jinxed is an implementation of a subset of the Python curses library.")
31807 (license license:mpl2.0)))
31808
31809(define-public python-blessed
31810 (package
31811 (name "python-blessed")
31812 (version "1.20.0")
31813 (source
31814 (origin
31815 (method url-fetch)
31816 (uri (pypi-uri "blessed" version))
31817 (sha256
31818 (base32
31819 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31820 (snippet
31821 ;; Don't get hung up on Windows test failures.
31822 '(delete-file "blessed/win_terminal.py"))))
31823 (build-system pyproject-build-system)
31824 (propagated-inputs (list python-six python-wcwidth))
31825 (native-inputs (list python-pytest python-setuptools python-wheel))
31826 (home-page "https://github.com/jquast/blessed")
31827 (synopsis "Wrapper around terminal capabilities")
31828 (description
31829 "Blessed is a thin, practical wrapper around terminal styling, screen
31830positioning, and keyboard input.")
31831 (license license:expat)))
31832
31833(define-public python-readme-renderer
31834 (package
31835 (name "python-readme-renderer")
31836 (version "45.0")
31837 (source
31838 (origin
31839 (method git-fetch)
31840 (uri (git-reference
31841 (url "https://github.com/pypa/readme_renderer")
31842 (commit version)))
31843 (file-name (git-file-name name version))
31844 (sha256
31845 (base32 "15ald40v4vv7sb2as8z7jggcwdy0nbx5m0icqv4ii9wriqrzf7kx"))))
31846 (build-system pyproject-build-system)
31847 (arguments
31848 (list
31849 ;; tests: 99 passed, 2 skipped, 1 deselected, 1 warning
31850 #:test-flags
31851 ;; Assertion error in one test.
31852 #~(list (string-append "--deselect=tests/test_markdown.py"
31853 "::test_md_fixtures[test_GFM_headings.md]"))))
31854 (propagated-inputs
31855 (list python-docutils
31856 python-nh3
31857 python-pygments
31858 ;; [optional]
31859 python-comrak))
31860 (native-inputs
31861 (list python-pytest
31862 python-setuptools))
31863 (home-page "https://github.com/pypa/readme_renderer")
31864 (synopsis "Render README files in Warehouse")
31865 (description
31866 "Readme Renderer is a library that will safely render arbitrary README
31867files into HTML. It is designed to be used in Warehouse to render the
31868@code{long_description} for packages. It can handle Markdown,
31869reStructuredText, and plain text.")
31870 (license license:asl2.0)))
31871
31872(define-public python-lazr-delegates
31873 (package
31874 (name "python-lazr-delegates")
31875 (version "2.1.1")
31876 (source
31877 (origin
31878 (method url-fetch)
31879 (uri (pypi-uri "lazr_delegates" version))
31880 (sha256
31881 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31882 (build-system pyproject-build-system)
31883 (arguments
31884 (list
31885 #:test-flags #~(list "-v" #$output)
31886 #:phases
31887 #~(modify-phases %standard-phases
31888 (add-after 'check 'check-cleanup
31889 (lambda* (#:key tests? #:allow-other-keys)
31890 (when tests?
31891 (for-each
31892 delete-file-recursively
31893 (find-files #$output
31894 (lambda (file stat)
31895 (or (member (basename file)
31896 '("tests" ".pytest_cache"))))
31897 #:directories? #t))))))))
31898 (native-inputs
31899 (list python-pytest python-setuptools python-wheel))
31900 (propagated-inputs
31901 (list python-zope-interface))
31902 (home-page "https://launchpad.net/lazr.delegates")
31903 (synopsis "Easily write objects that delegate behavior")
31904 (description
31905 "The @code{lazr.delegates} package makes it easy to write objects that
31906delegate behavior to another object. The new object adds some property or
31907behavior on to the other object, while still providing the underlying interface,
31908and delegating behavior.")
31909 (license license:lgpl3)))
31910
31911(define-public python-lazr-config
31912 (package
31913 (name "python-lazr-config")
31914 (version "3.1")
31915 (source
31916 (origin
31917 (method url-fetch)
31918 (uri (pypi-uri "lazr_config" version))
31919 (sha256
31920 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31921 (build-system pyproject-build-system)
31922 (arguments
31923 (list
31924 #:test-flags #~(list "-v" #$output)
31925 #:phases
31926 #~(modify-phases %standard-phases
31927 (add-after 'check 'check-cleanup
31928 (lambda* (#:key tests? #:allow-other-keys)
31929 (when tests?
31930 (for-each
31931 delete-file-recursively
31932 (find-files #$output
31933 (lambda (file stat)
31934 (or (member (basename file)
31935 '("tests" ".pytest_cache"))))
31936 #:directories? #t))))))))
31937 (native-inputs
31938 (list python-pytest python-setuptools python-wheel))
31939 (propagated-inputs
31940 (list python-lazr-delegates python-zope-interface))
31941 (home-page "https://launchpad.net/lazr.config")
31942 (synopsis "Create configuration schemas and process and validate configurations")
31943 (description
31944 "The LAZR config system is typically used to manage process configuration.
31945Process configuration is for saying how things change when we run systems on
31946different machines, or under different circumstances. This system uses ini-like
31947file format of section, keys, and values. The config file supports inheritance
31948to minimize duplication of information across files. The format supports schema
31949validation.")
31950 (license license:lgpl3)))
31951
31952(define-public python-flufl-bounce
31953 (package
31954 (name "python-flufl-bounce")
31955 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
31956 (revision . "0")))
31957 (version (git-version "4.0"
31958 (assoc-ref properties 'revision)
31959 (assoc-ref properties 'commit)))
31960 (source
31961 (origin
31962 (method git-fetch)
31963 (uri (git-reference
31964 (url "https://gitlab.com/flufl/flufl.bounce")
31965 (commit (assoc-ref properties 'commit))))
31966 (file-name (git-file-name name version))
31967 (sha256
31968 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
31969 (build-system pyproject-build-system)
31970 (arguments
31971 (list
31972 #:phases
31973 #~(modify-phases %standard-phases
31974 (replace 'check
31975 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31976 (when tests?
31977 (with-directory-excursion
31978 (string-append (site-packages inputs outputs) "/flufl")
31979 (invoke "python" "-m" "nose2" "-v"))))))))
31980 (propagated-inputs
31981 (list python-atpublic python-zope-interface))
31982 (native-inputs
31983 (list python-flufl-testing python-nose2 python-setuptools))
31984 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31985 (synopsis "Email bounce detectors")
31986 (description "The @code{flufl.bounce} library provides a set of heuristics
31987and an API for detecting the original bouncing email addresses from a bounce
31988message. Many formats found in the wild are supported, as are VERP and
31989RFC 3464.")
31990 (license (list license:asl2.0
31991 license:lgpl3)))) ; only for setup_headers.py
31992
31993(define-public python-flufl-i18n
31994 (package
31995 (name "python-flufl-i18n")
31996 (version "5.1.0")
31997 (source
31998 (origin
31999 (method url-fetch)
32000 (uri (pypi-uri "flufl_i18n" version))
32001 (sha256
32002 (base32
32003 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
32004 (build-system pyproject-build-system)
32005 (arguments
32006 (list #:test-flags
32007 #~(list "--no-cov" "--ignore-glob=docs/*")
32008 #:phases
32009 #~(modify-phases %standard-phases
32010 ;; This phase add a symlink of dist-info dir for packages
32011 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
32012 (add-after 'install 'add-custom-dist-info
32013 (lambda _
32014 (for-each
32015 (lambda (dir)
32016 (with-directory-excursion (dirname dir)
32017 (let ((base (basename dir)))
32018 (symlink base
32019 (string-join (string-split base #\_) ".")))))
32020 (find-files #$output
32021 (lambda (file stat)
32022 (string-suffix? ".dist-info" file))
32023 #:directories? #t)))))))
32024 (propagated-inputs
32025 (list python-atpublic))
32026 (native-inputs
32027 (list python-hatchling python-pytest python-sybil))
32028 (home-page "https://flufli18n.readthedocs.io")
32029 (synopsis "API for Python internationalization")
32030 (description
32031 "This package provides a high-level, convenient API for managing
32032internationalization/translation contexts in Python applications. There is a
32033simple API for single-context applications, such as command line scripts which
32034only need to translate into one language during the entire course of their
32035execution. There is a more flexible, but still convenient API for multi-context
32036applications, such as servers, which may need to switch language contexts for
32037different tasks.")
32038 (license license:asl2.0)))
32039
32040(define-public python-flufl-lock
32041 (package
32042 (name "python-flufl-lock")
32043 (version "8.1.0")
32044 (source
32045 (origin
32046 (method url-fetch)
32047 (uri (pypi-uri "flufl.lock" version))
32048 (sha256
32049 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
32050 (build-system pyproject-build-system)
32051 (arguments
32052 (list #:test-flags
32053 #~(list "--no-cov" "--ignore-glob=docs/*")
32054 #:phases
32055 #~(modify-phases %standard-phases
32056 ;; This phase add a symlink of dist-info dir for packages
32057 ;; expecting flufl.lock rather than flufl_lock (mailman).
32058 (add-after 'install 'add-custom-dist-info
32059 (lambda _
32060 (for-each
32061 (lambda (dir)
32062 (with-directory-excursion (dirname dir)
32063 (let ((base (basename dir)))
32064 (symlink base
32065 (string-join (string-split base #\_) ".")))))
32066 (find-files #$output
32067 (lambda (file stat)
32068 (string-suffix? ".dist-info" file))
32069 #:directories? #t)))))))
32070 (native-inputs
32071 (list python-hatchling python-pytest python-sybil))
32072 (propagated-inputs
32073 (list python-atpublic python-psutil))
32074 (home-page "https://flufllock.readthedocs.io")
32075 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
32076 (description
32077 "The @dfn{flufl.lock} package provides NFS-safe file locking with
32078timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
32079@code{open} system call but uses a lockfile. Lock objects support lock-breaking
32080and have a maximum lifetime built-in.")
32081 (license (list license:asl2.0
32082 license:lgpl3)))) ; only for setup_helpers.py
32083
32084(define-public python-flufl-testing
32085 (package
32086 (name "python-flufl-testing")
32087 (version "0.8")
32088 (source
32089 (origin
32090 (method git-fetch)
32091 (uri (git-reference
32092 (url "https://gitlab.com/warsaw/flufl.testing")
32093 (commit version)))
32094 (file-name (git-file-name name version))
32095 (sha256
32096 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
32097 (build-system pyproject-build-system)
32098 (arguments (list #:tests? #f)) ;no tests
32099 (native-inputs (list python-setuptools))
32100 (home-page "https://gitlab.com/warsaw/flufl.testing")
32101 (synopsis "Collection of test tool plugins")
32102 (description
32103 "This package contains a small collection of test tool plugins for
32104@code{nose2} and @code{flake8}.")
32105 (license license:asl2.0)))
32106
32107(define-public python-devtools
32108 (package
32109 (name "python-devtools")
32110 (version "0.12.2")
32111 (source
32112 (origin
32113 (method git-fetch)
32114 (uri (git-reference
32115 (url "https://github.com/samuelcolvin/python-devtools")
32116 (commit (string-append "v" version))))
32117 (file-name (git-file-name name version))
32118 (sha256
32119 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
32120 (build-system pyproject-build-system)
32121 (arguments
32122 (list
32123 #:test-flags
32124 ;; Disable some failing tests.
32125 ;;
32126 ;; test_print_subprocess seems to inherit wrong environment, fails with
32127 ;; E + ModuleNotFoundError: No module named 'executing'
32128 ;; Test runs fine from local clone.
32129 ;;
32130 ;; test_executing_failure fails with
32131 ;; E - [1, 2] (list) len=2
32132 ;; E + [x, y]: [1, 2] (list) len=2
32133 ;; unclear why, probably due to a dependency.
32134 '(list "-k" "not test_print_subprocess and not test_executing_failure"
32135 ;; test_insert_assert.py also seems to inherit a bad environment:
32136 ;; E fixture 'pytester_pretty' not found
32137 ;; Test runs fine from local clone.
32138 "--ignore=tests/test_insert_assert.py")))
32139 (native-inputs
32140 (list python-hatchling python-pytest python-pytest-mock))
32141 (propagated-inputs
32142 (list python-asttokens python-executing python-pygments))
32143 (home-page "https://github.com/samuelcolvin/python-devtools")
32144 (synopsis "Debug command and development tools")
32145 (description
32146 "This package provides a debug print command and other development tools.
32147It adds a simple and readable way to print stuff during development.")
32148 (license license:expat)))
32149
32150(define-public python-dateparser
32151 (package
32152 (name "python-dateparser")
32153 (version "1.2.2")
32154 (source
32155 (origin
32156 (method url-fetch)
32157 (uri (pypi-uri "dateparser" version))
32158 (sha256
32159 (base32
32160 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
32161 (build-system pyproject-build-system)
32162 (arguments
32163 (list
32164 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
32165 #:test-flags
32166 #~(list (string-join '("--deselect=tests/test_search.py"
32167 "TestTranslateSearch"
32168 "test_search_dates_with_prepositions")
32169 "::"))))
32170 (propagated-inputs
32171 (list python-dateutil
32172 python-pytz
32173 python-regex
32174 python-tzlocal))
32175 (native-inputs
32176 (list python-parameterized
32177 python-pytest
32178 python-setuptools
32179 tzdata-for-tests))
32180 (home-page "https://github.com/scrapinghub/dateparser")
32181 (synopsis
32182 "Date parsing library designed to parse dates from HTML pages")
32183 (description
32184 "@code{python-dateparser} provides modules to easily parse localized
32185dates in almost any string formats commonly found on web pages.")
32186 (license license:bsd-3)))
32187
32188(define-public python-dparse
32189 (package
32190 (name "python-dparse")
32191 (version "0.6.4")
32192 (source
32193 (origin
32194 (method url-fetch)
32195 (uri (pypi-uri "dparse" version))
32196 (sha256
32197 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
32198 (build-system pyproject-build-system)
32199 (native-inputs (list python-hatchling python-pytest))
32200 (propagated-inputs (list python-packaging python-toml))
32201 (home-page "https://github.com/pyupio/dparse")
32202 (synopsis "Parser for Python dependency files")
32203 (description "This package provides a parser for Python dependency files.")
32204 (license license:expat)))
32205
32206(define-public python-dpath
32207 (package
32208 (name "python-dpath")
32209 (version "2.2.0")
32210 (source
32211 (origin
32212 (method url-fetch)
32213 (uri (pypi-uri "dpath" version))
32214 (sha256
32215 (base32
32216 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
32217 (build-system pyproject-build-system)
32218 (native-inputs
32219 (list python-hypothesis python-nose2 python-setuptools python-wheel))
32220 (home-page "https://github.com/akesterson/dpath-python")
32221 (synopsis "File-system-like pathing and searching for dictionaries")
32222 (description
32223 "@code{python-dpath} is a library for accessing and searching
32224dictionaries via /slashed/paths ala xpath.
32225
32226Basically it lets you glob over a dictionary as if it were a file system. It
32227allows you to specify globs (ala the bash eglob syntax, through some advanced
32228fnmatch.fnmatch magic) to access dictionary elements, and provides some
32229facility for filtering those results.")
32230 (license license:expat)))
32231
32232(define-public python-safety
32233 (package
32234 (name "python-safety")
32235 (version "3.8.1")
32236 (source
32237 (origin
32238 (method git-fetch)
32239 (uri (git-reference
32240 (url "https://github.com/pyupio/safety")
32241 (commit version)))
32242 (file-name (git-file-name name version))
32243 (sha256
32244 (base32 "00i0jgv89kwbp130ykrfp2754k06agqs9sflsjpafcrf3jx7r9n4"))
32245 (patches
32246 (list
32247 (origin
32248 (method url-fetch)
32249 (uri (string-append
32250 "https://github.com/pyupio/safety/commit/"
32251 "145a3956007a01e57a8e05d111633c2309ad3374.patch"))
32252 (sha256
32253 (base32
32254 "00bsqhbvvpiycdz01vvxkp02i10rn3h5xaffib20h8yxnvx2xjbj")))))))
32255 (build-system pyproject-build-system)
32256 (arguments
32257 (list
32258 #:phases
32259 #~(modify-phases %standard-phases
32260 (add-after 'unpack 'disable-telemetry
32261 (lambda _
32262 (substitute* (find-files "." "\\.py$")
32263 (("telemetry: bool = True")
32264 "telemetry: bool = False")
32265 (("telemetry=True")
32266 "telemetry=False"))))
32267 (add-before 'check 'set-home ; some tests run mkdir
32268 (lambda _
32269 (setenv "HOME" "/tmp"))))))
32270 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
32271 (propagated-inputs (list python-authlib
32272 python-certifi
32273 python-click
32274 python-dparse
32275 python-filelock
32276 python-httpx
32277 python-jinja2
32278 python-marshmallow
32279 python-nltk
32280 python-packaging
32281 python-pydantic
32282 python-safety-schemas
32283 python-tenacity
32284 python-tomli
32285 python-tomlkit
32286 python-truststore
32287 ;; XXX: python-safety subclasses click.Context
32288 ;; in a way that assumes Typer still delegates
32289 ;; to the standalone python-click package.
32290 python-typer-without-click
32291 python-typing-extensions))
32292 (home-page "https://github.com/pyupio/safety")
32293 (synopsis "Check installed dependencies for known vulnerabilities")
32294 (description
32295 "Safety checks installed dependencies for known vulnerabilities.
32296By default it uses the open Python vulnerability database Safety DB.")
32297 (license license:expat)))
32298
32299(define-public python-pypandoc
32300 (package
32301 (name "python-pypandoc")
32302 (version "1.15")
32303 (source
32304 (origin
32305 (method git-fetch)
32306 (uri (git-reference
32307 (url "https://github.com/JessicaTegner/pypandoc")
32308 (commit (string-append "v" version))))
32309 (file-name (git-file-name name version))
32310 (sha256
32311 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
32312 (build-system pyproject-build-system)
32313 (arguments
32314 (list
32315 #:test-backend #~'unittest
32316 #:phases
32317 #~(modify-phases %standard-phases
32318 (add-before 'check 'disable-tests
32319 (lambda _
32320 (substitute* "tests.py"
32321 ;; Disable test requiring network access
32322 (("test_basic_conversion_from_http_url")
32323 "skip_test_basic_conversion_from_http_url")
32324 ;; Disable tests with missing files
32325 (("test_basic_conversion_from_file_pattern")
32326 "skip_test_basic_conversion_from_file_pattern")
32327 (("test_conversion_with_data_files")
32328 "skip_test_conversion_with_data_files")))))))
32329 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
32330 ;; the missing etoolbox.sty file is added
32331 (native-inputs
32332 (list (texlive-local-tree
32333 (list texlive-etoolbox
32334 texlive-lm
32335 texlive-regexpatch
32336 texlive-xcolor))
32337 python-poetry-core
32338 python-setuptools))
32339 (inputs (list pandoc python-pandocfilters))
32340 (propagated-inputs (list python-wheel))
32341 (home-page "https://github.com/JessicaTegner/pypandoc")
32342 (synopsis "Python wrapper for pandoc")
32343 (description
32344 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
32345 (license license:expat)))
32346
32347(define-public python-rnc2rng
32348 (package
32349 (name "python-rnc2rng")
32350 (version "2.7.0")
32351 (source
32352 (origin
32353 (method git-fetch)
32354 (uri (git-reference
32355 (url "https://github.com/djc/rnc2rng")
32356 (commit version)))
32357 (file-name (git-file-name name version))
32358 (sha256
32359 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
32360 (build-system pyproject-build-system)
32361 (arguments
32362 (list
32363 #:test-backend #~'custom
32364 #:test-flags #~(list "test.py")))
32365 (native-inputs (list python-setuptools))
32366 (propagated-inputs (list python-rply))
32367 (home-page "https://github.com/djc/rnc2rng")
32368 (synopsis "Convert RELAX NG Compact to regular syntax")
32369 (description
32370 "This package provides the @command{rnc2rng} command-line tool as well as
32371a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
32372equivalent schemata in the XML-based default RELAX NG syntax.")
32373 (license license:expat)))
32374
32375(define-public python-citeproc-py
32376 (package
32377 (name "python-citeproc-py")
32378 (version "0.9.0")
32379 (source
32380 (origin
32381 (method git-fetch)
32382 (uri (git-reference
32383 (url "https://github.com/brechtm/citeproc-py")
32384 (commit (string-append "v" version))
32385 (recursive? #t))) ; TODO Unbundle.
32386 (file-name (git-file-name name version))
32387 (sha256
32388 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
32389 (build-system pyproject-build-system)
32390 (arguments
32391 (list
32392 #:phases
32393 #~(modify-phases %standard-phases
32394 (add-after 'unpack 'set-version
32395 (lambda _
32396 (delete-file "citeproc/_version.py")
32397 (substitute* "citeproc/__init__.py"
32398 (("from \\. import version")
32399 "")
32400 (("__version__ =.*")
32401 (format #f "__version__ = ~s" #$version))))))))
32402 (native-inputs (list python-pytest python-setuptools))
32403 (propagated-inputs (list python-lxml python-rnc2rng))
32404 (home-page "https://github.com/brechtm/citeproc-py")
32405 (synopsis "Citations and bibliography formatter")
32406 (description
32407 "Citeproc-py is a CSL processor for Python. It aims to implement the
32408CSL 1.0.1 specification. citeproc-py can output styled citations and
32409bibliographies in a number of different output formats. Currently supported
32410are plain text, reStructuredText and HTML.")
32411 (license license:bsd-2)))
32412
32413(define-public python-inform
32414 (package
32415 (name "python-inform")
32416 (version "1.34")
32417 (source
32418 (origin
32419 (method git-fetch) ; no tests in PyPI release
32420 (uri (git-reference
32421 (url "https://github.com/kenkundert/inform")
32422 (commit (string-append "v" version))))
32423 (file-name (git-file-name name version))
32424 (sha256
32425 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
32426 (build-system pyproject-build-system)
32427 (arguments
32428 (list
32429 #:test-flags #~(list "-k" (string-append
32430 ;; Test below needs the num2words package
32431 "not test_plural_words"
32432 ;; These last two failed with AssertionError
32433 " and not test_inform"
32434 " and not test_manual"))))
32435 (native-inputs
32436 (list python-flit-core python-pytest))
32437 (propagated-inputs
32438 (list python-arrow))
32439 (home-page "https://inform.readthedocs.io")
32440 (synopsis "Print & logging utilities for communicating with user")
32441 (description
32442 "Inform is designed to display messages from programs that are typically run from
32443a console. It provides a collection of ‘print’ functions that allow you to simply and
32444cleanly print different types of messages.")
32445 (license license:gpl3+)))
32446
32447(define-public python-nestedtext
32448 (package
32449 (name "python-nestedtext")
32450 (version "3.7")
32451 (source
32452 (origin
32453 (method git-fetch) ; no tests in PyPI release
32454 (uri (git-reference
32455 (url "https://github.com/KenKundert/nestedtext")
32456 (commit (string-append "v" version))))
32457 (file-name (git-file-name name version))
32458 (sha256
32459 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
32460 (build-system pyproject-build-system)
32461 (arguments
32462 (list
32463 ;; XXX: Tests below need some not yet packaged Python libraries.
32464 #:test-flags #~(list "--ignore" "examples/"
32465 "--ignore" "tests/test_nestedtext.py"
32466 "-k" (string-append
32467 "not techniques.rst"
32468 " and not nestedtext.nestedtext.dumps"))))
32469 (native-inputs (list python-flit-core python-pytest))
32470 (propagated-inputs
32471 (list python-inform))
32472 (home-page "https://nestedtext.org")
32473 (synopsis "Human readable and writable data interchange format")
32474 (description
32475 "NestedText is a file format for holding data that is to be entered, edited, or
32476viewed by people. It allows data to be organized into a nested collection of
32477dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
32478without the complexity and risk of YAML and without the syntactic clutter of JSON.
32479NestedText is both simple and natural. Only a small number of concepts and rules must
32480be kept in mind when creating it. It is easily created, modified, or viewed with
32481a text editor and easily understood and used by both programmers and non-programmers.")
32482 (license license:expat))) ; MIT license
32483
32484(define-public python-nest-asyncio
32485 (package
32486 (name "python-nest-asyncio")
32487 (version "1.6.0")
32488 (source
32489 (origin
32490 (method url-fetch)
32491 (uri (pypi-uri "nest_asyncio" version))
32492 (sha256
32493 (base32
32494 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
32495 (build-system pyproject-build-system)
32496 (native-inputs
32497 (list python-pytest python-setuptools))
32498 (home-page "https://github.com/erdewit/nest_asyncio")
32499 (synopsis "Patch asyncio to allow nested event loops")
32500 (description
32501 "By design @code{asyncio} does not allow its event loop to be nested.
32502This presents a practical problem: when in an environment where the event loop
32503is already running it's impossible to run tasks and wait for the result. This
32504module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
32505@code{loop.run_until_complete}.")
32506 (license license:bsd-3)))
32507
32508(define-public python-simpervisor
32509 (package
32510 (name "python-simpervisor")
32511 (version "1.0.0")
32512 (source
32513 (origin
32514 ;; Tests not included in release.
32515 (method git-fetch)
32516 (uri (git-reference
32517 (url "https://github.com/yuvipanda/simpervisor")
32518 (commit (string-append "v" version))))
32519 (file-name (git-file-name name version))
32520 (sha256
32521 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
32522 (build-system pyproject-build-system)
32523 (arguments
32524 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
32525 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
32526 (native-inputs
32527 (list python-aiohttp
32528 python-hatchling
32529 python-psutil
32530 python-pytest
32531 python-pytest-asyncio))
32532 (home-page "https://github.com/yuvipanda/simpervisor")
32533 (synopsis "Simple async process supervisor")
32534 (description
32535 "This package provides a simple async process supervisor in Python.")
32536 (license license:bsd-3)))
32537
32538(define-public python-parallel
32539 (package
32540 (name "python-parallel")
32541 (version "1.6.4.4")
32542 (source
32543 (origin
32544 (method url-fetch)
32545 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
32546 version ".zip"))
32547 (sha256
32548 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
32549 (build-system pyproject-build-system)
32550 (arguments (list #:tests? #f)) ;No test suite.
32551 (native-inputs (list python-setuptools unzip))
32552 (propagated-inputs (list python-six))
32553 (home-page "https://www.parallelpython.com")
32554 (synopsis "Parallel and distributed programming for Python")
32555 (description
32556 "Parallel Python module (PP) provides an easy and efficient way to create
32557parallel-enabled applications for SMP computers and clusters. PP module
32558features cross-platform portability and dynamic load balancing. Thus
32559applications written with PP will parallelize efficiently even on
32560heterogeneous and multi-platform clusters (including clusters running other
32561applications with variable CPU loads).")
32562 (license license:bsd-3)))
32563
32564(define-public python-param
32565 (package
32566 (name "python-param")
32567 (version "2.3.3")
32568 (source
32569 (origin
32570 (method git-fetch)
32571 (uri (git-reference
32572 (url "https://github.com/holoviz/param")
32573 (commit (string-append "v" version))))
32574 (file-name (git-file-name name version))
32575 (sha256
32576 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
32577 (build-system pyproject-build-system)
32578 ;; tests: 1448 passed, 5 skipped, 2 xfailed
32579 (native-inputs
32580 ;; Project does not require any dependencies, all of the listed
32581 ;; native-inputs are for build/test only.
32582 (list python-cloudpickle
32583 python-hatch-vcs
32584 python-hatchling
32585 python-ipython-minimal
32586 python-jsonschema
32587 python-nbval
32588 python-nest-asyncio
32589 python-numpy
32590 python-odfpy
32591 python-openpyxl
32592 python-pandas
32593 python-pyarrow
32594 python-pytest
32595 python-pytest-asyncio
32596 python-tables
32597 python-xlrd))
32598 (home-page "https://param.holoviz.org/")
32599 (synopsis
32600 "Make your Python code clearer and more reliable by declaring Parameters")
32601 (description
32602 "Param is a library for handling all the user-modifiable parameters,
32603arguments, and attributes that control your code. It provides automatic,
32604robust error-checking while dramatically reducing boilerplate code, letting
32605you focus on what you want your code to do rather than on checking for all the
32606possible ways users could supply inappropriate values to a function or
32607class.")
32608 (license license:bsd-3)))
32609
32610(define-public python-djitellopy
32611 (package
32612 (name "python-djitellopy")
32613 (version "2.5.0")
32614 (source
32615 (origin
32616 (method url-fetch)
32617 (uri (pypi-uri "djitellopy" version))
32618 (sha256
32619 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
32620 (build-system pyproject-build-system)
32621 (arguments
32622 (list
32623 #:tests? #f ;no test suite
32624 #:phases
32625 #~(modify-phases %standard-phases
32626 ;; OpenCV does not ship metadata files for its Python library, which
32627 ;; makes it invisible to the sanity_check script (see:
32628 ;; https://github.com/opencv/opencv/issues/24810).
32629 (delete 'sanity-check))))
32630 (propagated-inputs
32631 (list opencv ;for opencv-python
32632 python-av
32633 python-numpy
32634 python-pillow))
32635 (native-inputs (list python-setuptools python-wheel))
32636 (home-page "https://github.com/damiafuentes/DJITelloPy")
32637 (synopsis
32638 "DJI Tello drone video streaming, swarms and state packets library")
32639 (description
32640 "DJI Tello drone Python interface using the official Tello SDK and Tello
32641EDU SDK. This library has the following features:
32642@itemize
32643@item Implementation of all tello commands
32644@item Retrieve a video stream easily
32645@item Receive and parse state packets
32646@item Control a swarm of drones.
32647@end itemize")
32648 (license license:expat)))
32649
32650(define-public python-djvulibre
32651 ;; The original git repository of python-djvulibre is hosted at
32652 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
32653 ;; has been archived by its owner in 2022. The most active fork is
32654 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
32655 ;; version packaged here (its "python3" branch, the default).
32656 ;;
32657 ;; However, the python-djvulibre PyPI project still refers to the old
32658 ;; repository. The new repository is published as djvulibre-python on PyPI;
32659 ;; that is, with the name in reversed order.The original package name is
32660 ;; used in Guix because it best adheres to the Guix naming scheme.
32661 (package
32662 (name "python-djvulibre")
32663 (version "0.9.3")
32664 (source
32665 (origin
32666 (method git-fetch)
32667 (uri (git-reference
32668 (url "https://github.com/FriedrichFroebel/python-djvulibre")
32669 (commit version)))
32670 (file-name (git-file-name name version))
32671 (sha256
32672 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
32673 (build-system pyproject-build-system)
32674 (arguments
32675 (list
32676 #:phases
32677 #~(modify-phases %standard-phases
32678 (replace 'check
32679 (lambda* (#:key tests? #:allow-other-keys)
32680 (when tests?
32681 ;; The tests get confused by the djvu directory.
32682 (delete-file-recursively "djvu")
32683 ;; Tests can't find tools.py otherwise.
32684 (with-directory-excursion "tests"
32685 (invoke "python" "-m" "pytest"))))))))
32686 (native-inputs
32687 (list ghostscript
32688 pkg-config
32689 python-cython
32690 python-pytest
32691 python-setuptools))
32692 (inputs
32693 (list djvulibre))
32694 (synopsis "Python bindings for DjVuLibre")
32695 (description "This is a set of Python bindings for the DjVuLibre library.")
32696 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32697 (license license:gpl2)))
32698
32699(define-public python-gamera
32700 (package
32701 (name "python-gamera")
32702 (version "4.1.0")
32703 (source
32704 (origin
32705 (method git-fetch)
32706 (uri (git-reference
32707 (url "https://github.com/hsnr-gamera/gamera-4")
32708 (commit (string-append "v" version))))
32709 (file-name (git-file-name name version))
32710 (sha256
32711 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32712 (build-system pyproject-build-system)
32713 (arguments
32714 (list
32715 #:phases
32716 #~(modify-phases %standard-phases
32717 (add-after 'unpack 'fix-build
32718 (lambda _
32719 ;; The script to make daily build artifacts fails to compile,
32720 ;; but users don't need that, so ignore it.
32721 (delete-file "misc/daily_build.py")
32722 ;; Prepare tests
32723 (mkdir-p "tmp")
32724 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32725 (native-inputs (list python-docutils python-pytest python-setuptools))
32726 (inputs (list libpng libtiff zlib))
32727 (synopsis "Framework for building document analysis applications")
32728 (description
32729 "Gamera is a toolkit for building document image recognition systems.")
32730 (home-page "https://gamera.informatik.hsnr.de/")
32731 (license license:gpl2+)))
32732
32733(define-public python-aiofiles
32734 (package
32735 (name "python-aiofiles")
32736 (version "24.1.0")
32737 (source
32738 (origin
32739 (method url-fetch)
32740 (uri (pypi-uri "aiofiles" version))
32741 (sha256
32742 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32743 (build-system pyproject-build-system)
32744 (native-inputs
32745 (list python-hatch-vcs
32746 python-hatchling
32747 python-pytest
32748 python-pytest-asyncio))
32749 (home-page "https://github.com/Tinche/aiofiles")
32750 (synopsis "File support for @code{asyncio}")
32751 (description
32752 "@code{python-aiofiles} is a library for handling local disk files in
32753asyncio applications.")
32754 (license license:asl2.0)))
32755
32756(define-public python-pyre-extensions
32757 (package
32758 (name "python-pyre-extensions")
32759 (version "0.0.32")
32760 (source
32761 (origin
32762 (method url-fetch)
32763 (uri (pypi-uri "pyre_extensions" version))
32764 (sha256
32765 (base32
32766 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32767 (build-system pyproject-build-system)
32768 (native-inputs (list python-pytest python-setuptools python-wheel))
32769 (propagated-inputs
32770 (list python-typing-extensions python-typing-inspect))
32771 (home-page "https://pyre-check.org")
32772 (synopsis
32773 "Type system extensions for use with @code{python-pyre}")
32774 (description
32775 "@code{python-pyre-extensions} defines extensions to the standard
32776@code{typing} module that are supported by the Pyre typechecker.")
32777 (license license:expat)))
32778
32779(define-public python-pywatchman
32780 (package
32781 (name "python-pywatchman")
32782 (version "3.0.0")
32783 (source
32784 (origin
32785 (method url-fetch)
32786 (uri (pypi-uri "pywatchman" version))
32787 (sha256
32788 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32789 (build-system pyproject-build-system)
32790 (arguments
32791 (list
32792 #:test-backend #~'custom
32793 #:test-flags #~(list "tests/tests.py")))
32794 (native-inputs (list python-setuptools))
32795 (home-page "https://facebook.github.io/watchman/")
32796 (synopsis "Watchman client for python")
32797 (description
32798 "@code{python-pywatchman} is a library to connect and query Watchman to
32799discover file changes.")
32800 (license license:bsd-3)))
32801
32802(define-public python-roundrobin
32803 (package
32804 (name "python-roundrobin")
32805 (version "0.0.4")
32806 (source
32807 (origin
32808 (method git-fetch)
32809 (uri (git-reference
32810 (url "https://github.com/linnik/roundrobin")
32811 (commit version)))
32812 (file-name (git-file-name name version))
32813 (sha256
32814 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32815 (build-system pyproject-build-system)
32816 (arguments
32817 (list #:test-backend #~'unittest))
32818 (native-inputs (list python-setuptools))
32819 (home-page "https://github.com/linnik/roundrobin")
32820 (synopsis "Collection of roundrobin utilities")
32821 (description
32822 "This package provides a collection of utilities for round-robin
32823distribution in Python.")
32824 (license license:expat)))
32825
32826(define-public python-helpdev
32827 (package
32828 (name "python-helpdev")
32829 (version "0.7.1")
32830 (source
32831 (origin
32832 (method git-fetch)
32833 (uri (git-reference
32834 (url "https://gitlab.com/dpizetta/helpdev")
32835 (commit (string-append "v" version))))
32836 (file-name (git-file-name name version))
32837 (sha256
32838 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32839 (build-system pyproject-build-system)
32840 (native-inputs (list python-pip python-pytest python-setuptools))
32841 (home-page "https://gitlab.com/dpizetta/helpdev")
32842 (synopsis "Extract information about the Python environment easily")
32843 (description
32844 "Helpdev is a library to easily extract information about the Python
32845environment.")
32846 (license license:expat)))
32847
32848(define-public python-loguru
32849 (package
32850 (name "python-loguru")
32851 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32852 ;; covert to git tag when released.
32853 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32854 (revision . "0")))
32855 (version (git-version "0.7.3"
32856 (assoc-ref properties 'revision)
32857 (assoc-ref properties 'commit)))
32858 (source
32859 (origin
32860 (method git-fetch)
32861 (uri (git-reference
32862 (url "https://github.com/Delgan/loguru")
32863 (commit (assoc-ref properties 'commit))))
32864 (file-name (git-file-name name version))
32865 (sha256
32866 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32867 (build-system pyproject-build-system)
32868 ;; tests: x86_64-linux 1598 passed, 28 skipped
32869 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32870 (arguments
32871 (list
32872 #:test-flags
32873 #~(list #$@(if (target-64bit?)
32874 '()
32875 ;; OverflowError
32876 '("--deselect=tests/test_datetime.py::test_formatting"
32877 (string-append "--deselect=tests/test_datetime.py"
32878 "::test_value_of_gmtoff_is_invalid"))))))
32879 (native-inputs
32880 (list python-flit-core
32881 python-freezegun
32882 python-mypy-for-tests
32883 python-pytest
32884 python-setuptools
32885 tzdata-for-tests))
32886 (propagated-inputs
32887 (list python-colorama))
32888 (home-page "https://github.com/Delgan/loguru")
32889 (synopsis "Python logging made (stupidly) simple")
32890 (description "Python logging made (stupidly) simple.")
32891 (license license:expat)))
32892
32893(define-public python-qtsass
32894 (package
32895 (name "python-qtsass")
32896 (version "0.4.0")
32897 (source
32898 (origin
32899 ;; There are no tests in the PyPI tarball.
32900 (method git-fetch)
32901 (uri (git-reference
32902 (url "https://github.com/spyder-ide/qtsass/")
32903 (commit (string-append "v" version))))
32904 (file-name (git-file-name name version))
32905 (sha256
32906 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32907 (build-system pyproject-build-system)
32908 (native-inputs
32909 (list python-flaky python-pytest python-setuptools python-wheel))
32910 (propagated-inputs
32911 (list python-libsass))
32912 (home-page "https://github.com/spyder-ide/qtsass")
32913 (synopsis "Compile SCSS files to valid Qt stylesheets")
32914 (description
32915 "Besides being used in web development, CSS is also the way to stylize
32916Qt-based desktop applications. However, Qt's CSS has a few variations that
32917prevent the direct use of SASS compiler.
32918
32919The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32920handling those variations.")
32921 (license license:expat)))
32922
32923(define-public python-qdarkstyle
32924 (package
32925 (name "python-qdarkstyle")
32926 (version "3.2.3")
32927 (source
32928 (origin
32929 (method url-fetch)
32930 (uri (pypi-uri "QDarkStyle" version))
32931 (sha256
32932 (base32
32933 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32934 (build-system pyproject-build-system)
32935 (native-inputs (list python-pytest
32936 python-qtsass
32937 python-setuptools
32938 python-watchdog
32939 python-wheel))
32940 (propagated-inputs
32941 (list python-qtpy python-pyqt-6))
32942 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32943 (synopsis
32944 "Complete dark stylesheet for Python and Qt applications")
32945 (description "QDarkStyle is the most complete dark stylesheet for Python and
32946Qt applications.")
32947 (license license:expat)))
32948
32949(define-public python-pystray
32950 (package
32951 (name "python-pystray")
32952 (version "0.19.5")
32953 (source
32954 (origin
32955 (method git-fetch)
32956 (uri (git-reference
32957 (url "https://github.com/moses-palmer/pystray")
32958 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32959 (file-name (git-file-name name version))
32960 (sha256
32961 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32962 (build-system pyproject-build-system)
32963 (arguments
32964 (list
32965 ;; The test suite requires user interaction, there are no automated
32966 ;; tests.
32967 #:tests? #false
32968 #:phases #~(modify-phases %standard-phases
32969 (add-before 'sanity-check 'use-dummy-backend
32970 (lambda _
32971 ;; Without setting this, pystray tries to connect to
32972 ;; X11 on import.
32973 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32974 (native-inputs (list python-sphinx python-setuptools))
32975 (propagated-inputs (list python-pillow python-six python-xlib))
32976 (home-page "https://github.com/moses-palmer/pystray")
32977 (synopsis "Create a system tray icon")
32978 (description "This library allows you to create a system tray icon.
32979It makes it possible to specify an icon, a title and a callback for when
32980the icon is activated. The icon and title can be changed after the icon
32981has been created, and the visibility of the icon can be toggled.")
32982 (license license:lgpl3+)))
32983
32984(define-public python-bitstring
32985 (package
32986 (name "python-bitstring")
32987 (version "4.3.1")
32988 (source
32989 (origin
32990 (method url-fetch)
32991 (uri (pypi-uri "bitstring" version))
32992 (sha256
32993 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32994 (build-system pyproject-build-system)
32995 (arguments
32996 (list
32997 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32998 "--ignore=tests/test_fp8.py"
32999 "--ignore=tests/test_mxfp.py")))
33000 (native-inputs
33001 (list python-gfloat python-pytest python-setuptools python-wheel))
33002 (propagated-inputs
33003 (list python-bitarray))
33004 (home-page "https://github.com/scott-griffiths/bitstring")
33005 (synopsis
33006 "Simple construction, analysis and modification of binary data")
33007 (description
33008 "Bitstring is a library for simple construction, analysis and modification
33009 of binary data.")
33010 (license license:expat)))
33011
33012(define-public python-confuse
33013 (package
33014 (name "python-confuse")
33015 (version "2.0.1")
33016 (source
33017 (origin
33018 (method url-fetch)
33019 (uri (pypi-uri "confuse" version))
33020 (sha256
33021 (base32
33022 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
33023 (build-system pyproject-build-system)
33024 (native-inputs (list python-flit-core python-pytest))
33025 (propagated-inputs (list python-pyyaml))
33026 (home-page "https://github.com/beetbox/confuse")
33027 (synopsis "Painless YAML configuration")
33028 (description "Confuse is a configuration library for Python that uses
33029YAML. It takes care of defaults, overrides, type checking, command-line
33030integration, human-readable errors, and standard OS-specific locations.")
33031 (license license:expat)))
33032
33033(define-public python-referencing
33034 (package
33035 (name "python-referencing")
33036 (version "0.37.0")
33037 (source
33038 (origin
33039 (method git-fetch)
33040 (uri (git-reference
33041 (url "https://github.com/python-jsonschema/referencing")
33042 (commit (string-append "v" version))))
33043 (file-name (git-file-name name version))
33044 (sha256
33045 (base32 "1h9mlzpgqy3grby4f57qxhlmxy25qvz84g9w5r4g1d8g5qsvvv3j"))))
33046 (build-system pyproject-build-system)
33047 (arguments
33048 (list
33049 #:phases
33050 #~(modify-phases %standard-phases
33051 (add-before 'check 'pre-check
33052 (lambda _
33053 (setenv "REFERENCING_SUITE"
33054 (string-append #$(this-package-native-input
33055 "specification-referencing-suite")
33056 "/share")))))))
33057 (native-inputs
33058 (list python-hatchling
33059 python-hatch-vcs
33060 python-pytest
33061 specification-referencing-suite))
33062 (propagated-inputs
33063 (list python-attrs
33064 python-rpds-py
33065 python-typing-extensions)) ;Python version < 3.13
33066 (home-page "https://github.com/python-jsonschema/referencing")
33067 (synopsis "JSON Referencing + Python")
33068 (description "This package provides an implementation-agnostic
33069implementation of JSON reference resolution.")
33070 (license license:expat)))
33071
33072(define-public python-referencing-bootstrap
33073 (package
33074 (inherit python-referencing)
33075 (name "python-referencing-bootstrap")
33076 (arguments
33077 (list
33078 #:tests? #false
33079 #:phases
33080 '(modify-phases %standard-phases
33081 (add-after 'unpack 'patch-pyproject
33082 (lambda _
33083 ;; The build system does not like this.
33084 (substitute* "pyproject.toml"
33085 ((" \"Topic :: File Formats.*") "")))))))
33086 (native-inputs (list python-hatchling python-hatch-vcs))))
33087
33088(define-public python-reflink
33089 (package
33090 (name "python-reflink")
33091 (version "0.2.2")
33092 (source
33093 (origin
33094 (method git-fetch)
33095 (uri (git-reference
33096 (url "https://gitlab.com/rubdos/pyreflink")
33097 (commit version)))
33098 (file-name (git-file-name name version))
33099 (sha256
33100 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
33101 (build-system pyproject-build-system)
33102 (arguments
33103 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
33104 (propagated-inputs (list python-cffi))
33105 (native-inputs (list python-pytest python-setuptools))
33106 (home-page "https://gitlab.com/rubdos/pyreflink")
33107 (synopsis "Python wrapper around reflink system call")
33108 (description
33109 "Python reflink wraps around platform specific @code{reflink}
33110implementations.")
33111 (license license:expat)))
33112
33113(define-public python-retry
33114 ;; XXX: The project is abandoned upstream for 11y, remove when python-locust
33115 ;; drops it or we can find a way to avoid it.
33116 (package
33117 (name "python-retry")
33118 (version "0.9.2")
33119 (source
33120 (origin
33121 (method git-fetch)
33122 (uri (git-reference
33123 (url "https://github.com/invl/retry")
33124 (commit version)))
33125 (file-name (git-file-name name version))
33126 (sha256
33127 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
33128 (build-system pyproject-build-system)
33129 (arguments
33130 (list
33131 #:phases
33132 #~(modify-phases %standard-phases
33133 (add-after 'unpack 'relax-requirements
33134 (lambda _
33135 (substitute* "requirements.txt"
33136 (("py>=1.4.26,<2.0.0")
33137 "")))))))
33138 (native-inputs (list python-pbr python-pytest))
33139 (propagated-inputs (list python-decorator))
33140 (home-page "https://github.com/invl/retry")
33141 (synopsis "Retry decorator")
33142 (description
33143 "@code{retry} is an easy to use retry decorator for Python. It can be
33144used to retry a function a given number of times.")
33145 (license license:asl2.0)))
33146
33147(define-public python-crayons
33148 (package
33149 (name "python-crayons")
33150 (version "0.4.0")
33151 (source
33152 (origin
33153 (method git-fetch)
33154 (uri (git-reference
33155 (url "https://github.com/MasterOdin/crayons")
33156 (commit (string-append "v" version))))
33157 (file-name (git-file-name name version))
33158 (sha256
33159 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
33160 (build-system pyproject-build-system)
33161 (arguments
33162 (list
33163 #:test-backend #~'custom
33164 #:test-flags #~(list "test_crayons.py")))
33165 (native-inputs (list python-setuptools))
33166 (propagated-inputs (list python-colorama))
33167 (home-page "https://github.com/MasterOdin/crayons")
33168 (synopsis "TextUI colors for Python")
33169 (description
33170 "This package gives you colored strings for the terminal. Crayons
33171automatically wraps a given string in the foreground color and restores the
33172original state after the string is printed.")
33173 (license license:expat)))
33174
33175(define-public python-sane
33176 (package
33177 (name "python-sane")
33178 (version "2.9.2")
33179 (source
33180 (origin
33181 (method git-fetch)
33182 (uri (git-reference
33183 (url "https://github.com/python-pillow/Sane")
33184 (commit (string-append "v" version))))
33185 (file-name (git-file-name name version))
33186 (sha256
33187 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
33188 (build-system pyproject-build-system)
33189 (arguments (list #:tests? #f)) ; No tests.
33190 (native-inputs (list python-setuptools))
33191 (inputs (list sane))
33192 (home-page "https://github.com/python-pillow/Sane")
33193 (synopsis "Python interface to the SANE scanner")
33194 (description
33195 "This package provides Python interface to the SANE scanner and frame
33196grabber interface.")
33197 (license (license:non-copyleft
33198 ;; Yet another variant of the X/MIT license.
33199 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
33200
33201(define-public python-scikit-build
33202 (package
33203 (name "python-scikit-build")
33204 (version "0.18.1")
33205 (source
33206 (origin
33207 (method url-fetch)
33208 (uri (pypi-uri "scikit_build" version))
33209 (sha256
33210 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
33211 (patches
33212 (search-patches "python-scikit-build-setuptools-compat.patch"))))
33213 (build-system pyproject-build-system)
33214 (arguments
33215 (list
33216 #:phases
33217 #~(modify-phases %standard-phases
33218 (add-after 'unpack 'patch-cmake-executable
33219 (lambda* (#:key inputs #:allow-other-keys)
33220 (substitute* "skbuild/constants.py"
33221 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
33222 (format #f "~a ~s~%" head
33223 (search-input-file inputs "bin/cmake"))))))
33224 (add-before 'check 'pre-check
33225 (lambda _
33226 ;; Some tests try to access the network before being skipped.
33227 ;; Skip them by default.
33228 (substitute* "tests/test_setup.py"
33229 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
33230 "pytest.mark.isolated()\n"))))
33231 (replace 'check
33232 (lambda* (#:key tests? #:allow-other-keys)
33233 (when tests?
33234 ;; These tests attempt to pull dependencies from the Internet.
33235 (delete-file "tests/test_distribution.py")
33236 (delete-file "tests/test_pep518.py")
33237 ;; The tests marked as "isolate" are tests that require access
33238 ;; to the network.
33239 (invoke "pytest" "-vv" "-m" "not isolated"
33240 "-n" (number->string (parallel-job-count))
33241 "-k" (string-append
33242 ;; These tests attempt to write to read-only
33243 ;; Python install directory.
33244 "not test_install_command "
33245 "and not test_test_command "
33246 "and not test_hello_develop "
33247 ;; These sdist-related tests fail for unknown
33248 ;; reasons (see:
33249 ;; https://github.com/scikit-build/scikit-build/issues/689).
33250 "and not test_hello_sdist_with_base "
33251 "and not test_manifest_in_sdist "
33252 "and not test_hello_sdist "
33253 "and not test_sdist_with_symlinks "
33254 ;; These are not parallel safe and fail
33255 ;; nondeterministically (see:
33256 ;; https://github.com/scikit-build/scikit-build/issues/711).
33257 "and not test_generator_cleanup "
33258 "and not test_generator_selection "
33259 ;; … and there's more of them
33260 "and not test_cxx_compiler "
33261 "and not test_fortran_compiler ")))))
33262 (add-after 'install 'install-cmake
33263 (lambda* (#:key outputs #:allow-other-keys)
33264 (let ((lib (string-append (assoc-ref outputs "out")
33265 "/lib/cmake/modules")))
33266 (mkdir-p lib)
33267 (with-directory-excursion "skbuild/resources/cmake"
33268 (for-each (lambda (file) (install-file file lib))
33269 (find-files "." "\\.cmake")))))))))
33270 (native-inputs
33271 (list cmake-minimal
33272 gfortran
33273 git-minimal/pinned ;for tests
33274 ninja/pinned
33275 python-cython
33276 python-hatch-fancy-pypi-readme
33277 python-hatch-vcs
33278 python-hatchling
33279 python-pytest
33280 python-pytest-mock
33281 python-pytest-xdist
33282 python-requests
33283 python-virtualenv))
33284 (propagated-inputs
33285 (list python-distro
33286 python-packaging
33287 python-wheel))
33288 (home-page "https://github.com/scikit-build/scikit-build")
33289 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
33290 (description "Scikit-build is an improved build system generator for
33291CPython C/C++/Fortran/Cython extensions. It has support for additional
33292compilers, build systems, cross compilation, and locating dependencies and
33293determining their build requirements. The scikit-build package is
33294fundamentally just glue between the @code{setuptools} Python module and
33295CMake.")
33296 (license license:expat)))
33297
33298(define-public python-screeninfo
33299 (package
33300 (name "python-screeninfo")
33301 (version "0.8.1")
33302 (source
33303 (origin
33304 (method git-fetch)
33305 (uri (git-reference
33306 (url "https://github.com/rr-/screeninfo")
33307 (commit version)))
33308 (file-name (git-file-name name version))
33309 (sha256
33310 (base32 "0q0nvj2ghbyjfymsbsl6dr7ggpg177fjncnzbxj18yglyz0vhk2c"))))
33311 (build-system pyproject-build-system)
33312 (native-inputs
33313 (list libdrm
33314 python-poetry-core
33315 python-pytest))
33316 (home-page "https://github.com/rr-/screeninfo")
33317 (synopsis "Fetch location and size of physical screens")
33318 (description
33319 "Fetch location and size of physical screens. GNU/Linux has support on
33320following enviroments: X11 (thought Xinerama) and DRM (experimental).")
33321 (license license:expat)))
33322
33323;; Deprecated on <2026-07-23>.
33324(define-deprecated/public-alias python-screenkey
33325 (@ (gnu packages video) python-screenkey))
33326
33327(define-public python-jinja2-cli
33328 (package
33329 (name "python-jinja2-cli")
33330 (version "0.8.2")
33331 (source
33332 (origin
33333 (method git-fetch)
33334 (uri (git-reference
33335 (url "https://github.com/mattrobenolt/jinja2-cli")
33336 (commit version)))
33337 (file-name (git-file-name name version))
33338 (sha256
33339 (base32
33340 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
33341 (build-system pyproject-build-system)
33342 (propagated-inputs
33343 (list python-jinja2))
33344 (native-inputs
33345 (list python-jinja2
33346 python-pytest
33347 python-setuptools
33348 python-wheel))
33349 (home-page "https://github.com/mattrobenolt/jinja2-cli")
33350 (synopsis "Command-line interface to Jinja2")
33351 (description
33352 "This package provides a command-line interface (CLI) to the Jinja2
33353template engine.")
33354 (license license:bsd-3)))
33355
33356(define-public python-readability
33357 (package
33358 (name "python-readability")
33359 (version "0.3.1")
33360 (source
33361 (origin
33362 (method git-fetch)
33363 (uri (git-reference
33364 (url "https://github.com/andreasvc/readability/")
33365 (commit (string-append "v" version))))
33366 (file-name (git-file-name name version))
33367 (sha256
33368 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
33369 (build-system pyproject-build-system)
33370 (arguments (list #:tests? #f)) ; No tests.
33371 (native-inputs (list python-setuptools))
33372 (home-page "https://github.com/andreasvc/readability/")
33373 (synopsis "Measure text readability using surface characteristics")
33374 (description
33375 "This package provides a Python library that is an implementation of
33376traditional readability measures based on simple surface characteristics.
33377These measures are basically linear regressions based on the number of words,
33378syllables, and sentences.")
33379 (license license:asl2.0)))
33380
33381(define-public python-readability-lxml
33382 (package
33383 (name "python-readability-lxml")
33384 (version "0.9")
33385 (source
33386 (origin
33387 (method git-fetch)
33388 (uri (git-reference
33389 (url "http://github.com/buriy/python-readability")
33390 (commit version)))
33391 (file-name (git-file-name name version))
33392 (sha256
33393 (base32 "05alz7i33m4n7097jl5slxy5k2lnnxwwadqw956gwk1fihyzidrp"))))
33394 (build-system pyproject-build-system)
33395 (native-inputs
33396 (list python-poetry-core
33397 python-pytest))
33398 (propagated-inputs
33399 (list python-chardet
33400 python-cssselect
33401 python-lxml
33402 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
33403 (home-page "http://github.com/buriy/python-readability")
33404 (synopsis "HTML to text parser")
33405 (description
33406 "This package provides classes and function that strip gratuitous markup
33407from web pages to make them easier to read.")
33408 (license license:asl2.0)))
33409
33410(define-public python-listparser
33411 (package
33412 (name "python-listparser")
33413 (version "0.20")
33414 (source
33415 (origin
33416 (method git-fetch)
33417 (uri (git-reference
33418 (url "https://github.com/kurtmckee/listparser")
33419 (commit (string-append "v" version))))
33420 (file-name (git-file-name name version))
33421 (sha256
33422 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
33423 (build-system pyproject-build-system)
33424 (native-inputs (list python-pytest python-poetry-core))
33425 (home-page "https://github.com/kurtmckee/listparser")
33426 (synopsis "Parse subscription lists in Python")
33427 (description
33428 "This package provides a Python library that can parse OPML, FOAF, and
33429iGoogle subscription lists.")
33430 (license license:expat)))
33431
33432(define-public python-smartypants
33433 (package
33434 (name "python-smartypants")
33435 (version "2.0.2")
33436 (source
33437 (origin
33438 (method url-fetch)
33439 (uri (pypi-uri "smartypants" version))
33440 (sha256
33441 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
33442 (build-system pyproject-build-system)
33443 (native-inputs
33444 (list python-docutils python-pygments python-setuptools))
33445 (home-page "https://github.com/justinmayer/smartypants.py")
33446 (synopsis "Translate punctuation characters into smart quotes")
33447 (description
33448 "@command{smartpants} can perform the following transformations:
33449@enumerate
33450@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
33451@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
33452entities
33453@item Dashes (-- and ---) into en- and em-dash entities
33454@item Three consecutive dots (... or . . .) into an ellipsis entity
33455@end enumerate")
33456 (license license:bsd-3)))
33457
33458(define-public python-ld
33459 (package
33460 (name "python-ld")
33461 (version "1.9.0")
33462 (source
33463 (origin
33464 (method git-fetch)
33465 (uri (git-reference
33466 (url "https://github.com/nir0s/ld")
33467 (commit (string-append "v" version))))
33468 (file-name (git-file-name name version))
33469 (sha256
33470 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
33471 (build-system pyproject-build-system)
33472 (arguments
33473 (list
33474 ;; XXX: These tests expect ubuntu distro.
33475 #:test-flags
33476 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
33477 "test_ubuntu14nomodules_lsb_release"
33478 "test_trailingblanks_lsb_release")
33479 " and not "))))
33480 (native-inputs (list python-pytest python-setuptools))
33481 (home-page "https://github.com/nir0s/ld")
33482 (synopsis "OS platform information API")
33483 (description
33484 "The ld package provides information about the GNU/Linux distribution it
33485runs on, such as a reliable machine-readable ID, or version information.")
33486 (license license:asl2.0)))
33487
33488(define-public python-quicktions
33489 (package
33490 (name "python-quicktions")
33491 (version "1.22")
33492 (source
33493 (origin
33494 (method git-fetch)
33495 (uri (git-reference
33496 (url "https://github.com/scoder/quicktions")
33497 (commit version)))
33498 (file-name (git-file-name name version))
33499 (sha256
33500 (base32
33501 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
33502 (build-system pyproject-build-system)
33503 (native-inputs
33504 (list python-cython python-pytest python-setuptools))
33505 (home-page "https://github.com/scoder/quicktions")
33506 (synopsis "Fast fractions data type for rational numbers")
33507 (description
33508 "This package provides fast fractions data type for rational numbers. It
33509is the cythonized version of @code{fractions.Fraction}.")
33510 (license license:psfl)))
33511
33512(define-public python-pathvalidate
33513 (package
33514 (name "python-pathvalidate")
33515 (version "3.3.1")
33516 (source
33517 (origin
33518 (method git-fetch)
33519 (uri (git-reference
33520 (url "https://github.com/thombashi/pathvalidate")
33521 (commit (string-append "v" version))))
33522 (file-name (git-file-name name version))
33523 (sha256
33524 (base32 "14ymgd52v5r0g6yc2l7krg3n4x9bkv1ndvdaahiq503n1zhhs3iv"))))
33525 (build-system pyproject-build-system)
33526 (native-inputs (list python-allpairspy
33527 python-click
33528 python-faker
33529 python-pytest
33530 python-setuptools
33531 python-setuptools-scm
33532 python-tcolorpy))
33533 (home-page "https://github.com/thombashi/pathvalidate")
33534 (synopsis "Sanitize strings representing paths")
33535 (description
33536 "@code{pathvalidate} is a Python library to sanitize/validate strings
33537representing paths or filenames.")
33538 (license license:expat)))
33539
33540(define-public python-escapism
33541 (package
33542 (name "python-escapism")
33543 (version "1.0.1")
33544 (source
33545 (origin
33546 (method git-fetch)
33547 (uri (git-reference
33548 (url "https://github.com/jupyterhub/escapism")
33549 (commit version)))
33550 (file-name (git-file-name name version))
33551 (sha256
33552 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
33553 (build-system pyproject-build-system)
33554 (native-inputs (list python-pytest python-setuptools))
33555 (home-page "https://github.com/jupyterhub/escapism")
33556 (synopsis "Simple, generic library for escaping strings")
33557 (description
33558 "This Python library provides a programming interface to, given a set of
33559safe characters and an escape character, escape safe strings and unescape the
33560result.")
33561 (license license:expat)))
33562
33563(define-public python-recommonmark
33564 (package
33565 (name "python-recommonmark")
33566 (version "0.7.1")
33567 (source
33568 (origin
33569 (method url-fetch)
33570 (uri (pypi-uri "recommonmark" version))
33571 (sha256
33572 (base32
33573 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
33574 (build-system pyproject-build-system)
33575 (arguments
33576 (list
33577 ;; XXX: Some of those fail for no good reason.
33578 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
33579 (native-inputs (list python-pytest python-setuptools python-wheel))
33580 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
33581 (home-page "https://github.com/readthedocs/recommonmark")
33582 (synopsis "Docutils-compatibility bridge to CommonMark")
33583 (description
33584 "This package provides a docutils-compatibility bridge to CommonMark that
33585lets you write CommonMark inside of Docutils & Sphinx projects.")
33586 (license license:expat)))
33587
33588(define-public python-rectangle-packer
33589 (package
33590 (name "python-rectangle-packer")
33591 (version "2.1.0")
33592 (source
33593 (origin
33594 (method git-fetch)
33595 (uri (git-reference
33596 (url "https://github.com/Penlect/rectangle-packer")
33597 (commit version)))
33598 (file-name (git-file-name name version))
33599 (sha256
33600 (base32 "0pwzfxpdv20v8d8lq844nm01zzgzzvm2rg2h49aj949myqkg5nmd"))))
33601 (build-system pyproject-build-system)
33602 (arguments
33603 (list
33604 #:phases
33605 #~(modify-phases %standard-phases
33606 ;; Cython extensions have to be built before running the tests.
33607 (add-before 'check 'build-ext
33608 (lambda _
33609 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
33610 (native-inputs
33611 (list python-cython python-pytest python-setuptools))
33612 (home-page "https://github.com/Penlect/rectangle-packer")
33613 (synopsis "Pack rectangles into a bounding box")
33614 (description
33615 "Rectangle-packer is a Python library for packing rectangles
33616into a bounding box with minimal wasted space. It is useful for texture
33617atlases, sprite sheets, and bin packing problems.")
33618 (license license:expat)))
33619
33620(define-public python-redo
33621 (package
33622 (name "python-redo")
33623 (version "3.0.0")
33624 (source
33625 (origin
33626 (method git-fetch)
33627 (uri (git-reference
33628 (url "https://github.com/mozilla-releng/redo")
33629 (commit version)))
33630 (file-name (git-file-name name version))
33631 (sha256
33632 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
33633 (build-system pyproject-build-system)
33634 (native-inputs
33635 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
33636 (home-page "https://github.com/mozilla-releng/redo")
33637 (synopsis "Utilities to retry Python callables")
33638 (description "Redo provides various means to add seamless ability to
33639retry to any Python callable.")
33640 (license license:mpl2.0)))
33641
33642(define-public python-opcodes
33643 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
33644 ;; version number, which is what we use here.
33645 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
33646 (package
33647 (name "python-opcodes")
33648 (version "0.3.14") ;from 'opcodes/__init__.py'
33649 (home-page "https://github.com/Maratyszcza/Opcodes")
33650 (source
33651 (origin
33652 (method git-fetch)
33653 (uri (git-reference (url home-page) (commit commit)))
33654 (file-name (git-file-name name version))
33655 (sha256
33656 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
33657 (build-system pyproject-build-system)
33658 (native-inputs (list python-pytest python-setuptools))
33659 (synopsis "Database of processor instructions and opcodes")
33660 (description
33661 "This project documents instruction sets in a format convenient for
33662tools development. An instruction set is represented by three files:
33663
33664@itemize
33665@item an XML file that describes instructions;
33666@item an XSD file that describes the structure of the XML file;
33667@item a Python module that reads the XML file and represents it as a set of
33668Python objects;
33669@end itemize
33670
33671It currently provides descriptions for most user-mode x86, x86_64, and k1om
33672instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
33673and BMI2).")
33674 (license license:bsd-2))))
33675
33676(define-public python-cart
33677 (package
33678 (name "python-cart")
33679 (version "1.2.3")
33680 (source
33681 (origin
33682 (method git-fetch)
33683 (uri (git-reference
33684 (url "https://github.com/CybercentreCanada/cart")
33685 (commit (string-append "v" version))))
33686 (file-name (git-file-name name version))
33687 (sha256
33688 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33689 (build-system pyproject-build-system)
33690 (arguments
33691 (list
33692 #:test-backend #~'unittest))
33693 (native-inputs
33694 (list python-setuptools))
33695 (propagated-inputs
33696 (list python-pycryptodome))
33697 (home-page "https://github.com/CybercentreCanada/cart")
33698 (synopsis "Library for interacting with the CaRT file format")
33699 (description
33700 "This Python library implements the CaRT file format which is commonly
33701used to store and transmit information about computer malware and associated
33702metadata.")
33703 (license license:bsd-2)))
33704
33705(define-public python-cle
33706 (package
33707 (name "python-cle")
33708 ;; Must be the same version as python-angr.
33709 (version "9.2.186")
33710 (source
33711 (origin
33712 (method git-fetch)
33713 (uri (git-reference
33714 (url "https://github.com/angr/cle")
33715 (commit (string-append "v" version))))
33716 (file-name (git-file-name name version))
33717 (sha256
33718 (base32 "1ycrqysvxgm369cwf0zcyykl1xgma71apbxkbq0z9yakpajgli1s"))))
33719 (build-system pyproject-build-system)
33720 (arguments
33721 (list
33722 ;; tests: 112 passed, 12 skipped, 1 warning
33723 #:phases
33724 #~(modify-phases %standard-phases
33725 (add-before 'check 'check-setup
33726 (lambda _
33727 (copy-recursively
33728 (string-append #$(this-package-native-input "angr-binaries") "/share")
33729 "../binaries"))))))
33730 (native-inputs
33731 (list angr-binaries
33732 python-cffi
33733 python-pytest
33734 python-setuptools))
33735 (propagated-inputs
33736 (list python-archinfo
33737 python-cart
33738 python-pefile
33739 python-pyelftools
33740 python-pyvex
33741 python-sortedcontainers))
33742 (home-page "https://github.com/angr/cle")
33743 (synopsis "Python loader for binaries and their associated libraries")
33744 (description
33745 "CLE loads binaries and their associated libraries, resolves
33746imports and provides an abstraction of process memory the same way as if
33747it was loader by the operating system's loader.")
33748 (license license:bsd-2)))
33749
33750(define-public python-pyvex
33751 (package
33752 (name "python-pyvex")
33753 ;; Must be the same version as python-angr.
33754 (version "9.2.186")
33755 (source
33756 (origin
33757 (method git-fetch)
33758 (uri (git-reference
33759 (url "https://github.com/angr/pyvex")
33760 (commit (string-append "v" version))))
33761 (file-name (git-file-name name version))
33762 (sha256
33763 (base32 "1ql6rn5n8jfmz8v2453283qdgpxvjkfgqdxwqsgs005j9lrhqa7z"))))
33764 (build-system pyproject-build-system)
33765 (arguments
33766 (list
33767 ;; tests: 57 passed
33768 #:phases
33769 #~(modify-phases %standard-phases
33770 (add-after 'unpack 'copy-submodule-package
33771 ;; XXX: ensure-no-mtimes-pre-1980 and build phases fail when using
33772 ;; symlink: "Read-only file system".
33773 (lambda _
33774 (copy-recursively
33775 #+(package-source (this-package-native-input "vex"))
33776 (string-append (getcwd) "/vex"))))
33777 (add-before 'build 'set-cc
33778 (lambda _
33779 (setenv "AR" #$(ar-for-target))
33780 (setenv "CC" #$(cc-for-target))
33781 (setenv "CC_NATIVE" "gcc"))))))
33782 (native-inputs
33783 (list cmake-minimal
33784 python-pytest
33785 python-scikit-build-core
33786 vex))
33787 (propagated-inputs
33788 (list python-bitstring
33789 python-cffi))
33790 (home-page "https://github.com/angr/pyvex")
33791 (synopsis "Python interface to libVEX and VEX IR")
33792 (description
33793 "This package provides a Python interface the libVEX and VEX IR.
33794VEX is the intermediate representation (also known as intermediate
33795language) used by the Valgrind analysis tool. As such, VEX is designed
33796to enable all kinds of binary analysis tasks.")
33797 (license (list license:bsd-2
33798 license:gpl2))))
33799
33800(define-public python-claripy
33801 (package
33802 (name "python-claripy")
33803 ;; Must be the same version as python-angr.
33804 (version "9.2.186")
33805 (source
33806 (origin
33807 (method git-fetch)
33808 (uri (git-reference
33809 (url "https://github.com/angr/claripy")
33810 (commit (string-append "v" version))))
33811 (file-name (git-file-name name version))
33812 (sha256
33813 (base32 "1vlvscjn098100i2hfcsxllj19bnzs6vagnkg0fr18ps2gvbzcnv"))))
33814 (build-system pyproject-build-system)
33815 (arguments
33816 (list
33817 ;; tests: 329 passed, 1 skipped
33818 #:phases
33819 #~(modify-phases %standard-phases
33820 (add-after 'unpack 'relax-requirements
33821 (lambda _
33822 (substitute* "pyproject.toml"
33823 ;; Current version of z3 in Guix is 4.13.0 and sanity check
33824 ;; failes to detect it (similar like OpenCV), relax the
33825 ;; version constraint, see:
33826 ;; <https://github.com/angr/claripy/commit/d1fe2df>.
33827 ((", \"z3-solver==4.13.0.0\"")
33828 "")))))))
33829 (native-inputs
33830 (list python-pytest
33831 python-setuptools))
33832 (propagated-inputs
33833 (list python-cachetools
33834 python-decorator
33835 python-pysmt
33836 z3))
33837 (home-page "https://github.com/angr/claripy")
33838 (synopsis "Abstraction layer for constraint solvers")
33839 (description
33840 "This Python module provides an abstraction layer for interacting
33841with constraint solvers. Specifically, it is intended to be used with
33842SMT solvers and is built on top of the Z3 solver.")
33843 (license license:bsd-2)))
33844
33845(define-public python-pysmt
33846 (package
33847 (name "python-pysmt")
33848 (version "0.9.6")
33849 (source
33850 (origin
33851 ;; Fetching from Git as pypi release doesn't include all test files.
33852 (method git-fetch)
33853 (uri (git-reference
33854 (url "https://github.com/pysmt/pysmt")
33855 (commit (string-append "v" version))))
33856 (file-name (git-file-name name version))
33857 (sha256
33858 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33859 (build-system pyproject-build-system)
33860 (arguments
33861 `(#:phases (modify-phases %standard-phases
33862 (add-before 'check 'set-pysmt-solver
33863 (lambda _
33864 (setenv "PYSMT_SOLVER" "z3"))))))
33865 (native-inputs (list python-pytest python-setuptools python-wheel))
33866 (propagated-inputs (list z3))
33867 (home-page "https://github.com/pysmt/pysmt")
33868 (synopsis
33869 "Solver-agnostic library for SMT formula manipulation and solving")
33870 (description
33871 "This Python module provides a solver-agnostic abstraction for
33872working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33873it allows manipulation and solving such formulas.")
33874 (license license:asl2.0)))
33875
33876(define-public python-rpyc
33877 (package
33878 (name "python-rpyc")
33879 (version "5.3.1")
33880 (source
33881 (origin
33882 ;; Fetching from Git as pypi release doesn't include all test files.
33883 (method git-fetch)
33884 (uri (git-reference
33885 (url "https://github.com/tomerfiliba-org/rpyc")
33886 (commit version)))
33887 (file-name (git-file-name name version))
33888 (sha256
33889 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33890 (snippet '(begin
33891 ;; Disable deploy tests, these rely on OpenSSH and require
33892 ;; configuring the SSH client manually to accept the host key.
33893 (delete-file "tests/test_deploy.py")
33894 ;; Disable tests requiring network access. These tests
33895 ;; presently fail with the error "Network is unreachable".
33896 (delete-file "tests/test_registry.py")))))
33897 (build-system pyproject-build-system)
33898 (arguments
33899 `(#:phases (modify-phases %standard-phases
33900 (replace 'check
33901 (lambda* (#:key tests? #:allow-other-keys)
33902 (when tests?
33903 (with-directory-excursion "tests"
33904 (invoke "python" "-m" "unittest"))))))))
33905 (propagated-inputs (list python-hatchling python-plumbum))
33906 (home-page "https://github.com/tomerfiliba-org/rpyc")
33907 (synopsis
33908 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33909 (description
33910 "This Python module enables remote procedure calls, clustering, and
33911distributed-computing. For this purpose, it makes use of object-proxying, a technique
33912that employs python's dynamic nature, to overcome the physical boundaries between
33913processes and computers, so that remote objects can be manipulated as if they
33914were local.")
33915 (license license:expat)))
33916
33917(define-public python-nampa
33918 (package
33919 (name "python-nampa")
33920 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33921 ;; has 0.1.1 as version. Latest commit is from 2024.
33922 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33923 (revision . "0")))
33924 (version (git-version "1.0.0"
33925 (assoc-ref properties 'revision)
33926 (assoc-ref properties 'commit)))
33927 (source
33928 (origin
33929 (method git-fetch)
33930 (uri (git-reference
33931 (url "https://github.com/thebabush/nampa")
33932 (commit (assoc-ref properties 'commit))))
33933 (file-name (git-file-name name version))
33934 (sha256
33935 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33936 (build-system pyproject-build-system)
33937 (arguments
33938 (list
33939 #:test-flags
33940 #~(list "-k test_random_values")
33941 #:phases
33942 #~(modify-phases %standard-phases
33943 (add-after 'unpack 'patch-tests
33944 (lambda _
33945 ;; Unclear why this top-level __init__.py is here. It seems to
33946 ;; setup a plugin for binaryninja, which Guix does not package.
33947 (delete-file "__init__.py")
33948 ;; Yields tests, which is not allowed anymore.
33949 (substitute* "tests/test_crc.py"
33950 (("yield") "#yield")))))))
33951 (propagated-inputs (list python-future))
33952 (native-inputs (list python-pytest python-setuptools))
33953 (home-page "https://github.com/thebabush/nampa")
33954 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33955 (description
33956 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33957and Recognition Technology}. This technology is useful for identifying
33958common library subroutines in disassembled binaries.")
33959 (license license:lgpl3)))
33960
33961(define-public python-mulpyplexer
33962 (package
33963 (name "python-mulpyplexer")
33964 (version "0.09")
33965 (source
33966 (origin
33967 (method url-fetch)
33968 (uri (pypi-uri "mulpyplexer" version))
33969 (sha256
33970 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33971 (build-system pyproject-build-system)
33972 (arguments
33973 (list
33974 #:phases
33975 '(modify-phases %standard-phases
33976 (replace 'check
33977 (lambda* (#:key tests? #:allow-other-keys)
33978 (when tests?
33979 (invoke "python" "mulpyplexer.py")))))))
33980 (native-inputs (list python-setuptools python-wheel))
33981 (home-page "https://github.com/zardus/mulpyplexer/")
33982 (synopsis "Multiplexes interactions with lists of Python objects")
33983 (description "This module provides utilities for multiplexing
33984interactions with lists of Python objects.")
33985 (license license:bsd-2)))
33986
33987(define-public python-itanium-demangler
33988 (package
33989 (name "python-itanium-demangler")
33990 (version "1.1")
33991 (source
33992 (origin
33993 (method git-fetch)
33994 (uri (git-reference
33995 ;; PyPI only provides wheels and no source code.
33996 (url "https://github.com/whitequark/python-itanium_demangler")
33997 (commit (string-append "v" version))))
33998 (file-name (git-file-name name version))
33999 (sha256
34000 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
34001 (build-system pyproject-build-system)
34002 (arguments
34003 (list
34004 #:phases
34005 #~(modify-phases %standard-phases
34006 (replace 'check
34007 (lambda* (#:key tests? #:allow-other-keys)
34008 (when tests?
34009 (with-directory-excursion "tests"
34010 (invoke "python" "-m" "unittest"))))))))
34011 (native-inputs (list python-setuptools python-wheel))
34012 (home-page "https://github.com/whitequark/python-itanium_demangler/")
34013 (synopsis "Pure Python Itanium C++ ABI demangler")
34014 (description
34015"This Python module provides an implementation of the Itanium C++ ABI symbol
34016mangling language. The demangler generates an abstract syntax tree from
34017mangled symbols, which can be used for directly extracting type information.")
34018 (license license:bsd-0)))
34019
34020(define-public python-angr
34021 (package
34022 (name "python-angr")
34023 (version "9.2.186")
34024 (source
34025 (origin
34026 (method git-fetch)
34027 (uri (git-reference
34028 (url "https://github.com/angr/angr")
34029 (commit (string-append "v" version))))
34030 (file-name (git-file-name name version))
34031 (sha256
34032 (base32 "1x1vnhgf1p05z2cdjc626jvvk9xqa9qzmg1yk73lq4qn7sa4cnmd"))
34033 (patches (search-patches "python-angr-fix-manyfloat-tests.patch"
34034 "python-angr-check-exec-deps.patch"))))
34035 (build-system pyproject-build-system)
34036 (arguments
34037 (list
34038 #:imported-modules `(,@%cargo-build-system-modules
34039 ,@%pyproject-build-system-modules)
34040 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
34041 (guix build pyproject-build-system)
34042 (guix build utils))
34043 #:test-flags
34044 #~(list "-x"
34045 "--dist" "load"
34046 "--numprocesses" (number->string (parallel-job-count))
34047 "-k"
34048 ;; test_mips32_missing_offset_in_instructions fails
34049 ;; with capstone 5 and passes with capstone 4. Might
34050 ;; be a capstone regressions, needs investigation.
34051 ;;
34052 ;; TODO: test_unsat_core needs investigation.
34053 ;;
34054 ;; test_decompiling_abnormal_switch_case_case3 is broken
34055 ;; when tests modifying global counters are run before it.
34056 ;; See <https://github.com/angr/angr/issues/5715>.
34057 ;;
34058 ;; test_concrete_memset is a non-deterministic benchmark.
34059 ;; test_similarity_fauxware is flaky.
34060 (string-append
34061 "not test_mips32_missing_offset_in_instructions"
34062 " and not test_unsat_core"
34063 " and not test_decompiling_abnormal_switch_case_case3"
34064 " and not test_concrete_memset"
34065 " and not test_similarity_fauxware"))
34066 #:phases
34067 #~(modify-phases %standard-phases
34068 (add-after 'unpack 'use-guix-vendored-dependencies
34069 (lambda _
34070 (substitute* "native/angr/Cargo.toml"
34071 (("^icicle-fuzzing.*$")
34072 "icicle-fuzzing = { version = \"*\" }\n")
34073 (("^icicle-vm.*$")
34074 "icicle-vm = { version = \"*\" }\n")
34075 (("^pcode.*$")
34076 "pcode = { version = \"*\" }\n"))))
34077 (add-after 'unpack 'fix-tests
34078 (lambda _
34079 (substitute* "tests/common.py"
34080 (("\\[\"cc\"\\]")
34081 "[\"gcc\"]"))))
34082 (add-after 'unpack 'relax-protobuf
34083 (lambda _
34084 ;; Relax protobuf constraint, see 'generate-protobuf-files phase below.
34085 (substitute* "pyproject.toml"
34086 (("protobuf>=6.33.0") "protobuf"))))
34087 (add-after 'use-guix-vendored-dependencies 'prepare-cargo-build-system
34088 (lambda args
34089 (for-each (lambda (phase)
34090 (format #t "Running cargo phase: ~a~%" phase)
34091 (apply (assoc-ref cargo:%standard-phases phase)
34092 #:cargo-target #$(cargo-triplet)
34093 args))
34094 '(prepare-rust-crates
34095 unpack-rust-crates
34096 configure
34097 check-for-pregenerated-files
34098 patch-cargo-checksums))))
34099 (add-before 'check 'check-setup
34100 (lambda _
34101 (copy-recursively
34102 (string-append #$(this-package-native-input "angr-binaries") "/share")
34103 "../binaries")))
34104 (add-before 'build 'generate-protobuf-files
34105 ;; Regenerate protobuf files using our utilized protobuf version.
34106 ;; This allows us to relax the version constraint on python-protobuf.
34107 (lambda _
34108 (apply invoke "protoc" "-I=." "--python_out=." (find-files "angr/protos" "\\.proto$"))))
34109 (add-before 'build 'set-cc
34110 (lambda _
34111 (setenv "CC" #$(cc-for-target)))))))
34112 (propagated-inputs (list python-archinfo ;sync version with python-angr
34113 python-cachetools
34114 python-cffi
34115 python-claripy ;sync version with python-angr
34116 python-cle ;sync version with python-angr
34117 python-cxxheaderparser
34118 python-gitpython
34119 python-msgspec
34120 python-mulpyplexer
34121 python-networkx
34122 python-protobuf
34123 python-psutil
34124 python-pycparser
34125 python-pydemumble
34126 python-pyformlang
34127 python-pypcode
34128 python-pyvex ;sync version with python-angr
34129 python-rich
34130 python-sortedcontainers
34131 python-sympy
34132 python-sqlalchemy
34133 python-keystone-engine
34134 python-typing-extensions
34135 python-unique-log-filter
34136 unicorn-2.0))
34137 (native-inputs
34138 (append
34139 (list angr-binaries
34140 protobuf
34141 python-pytest
34142 python-pytest-xdist
34143 python-setuptools
34144 python-setuptools-rust
34145 rust
34146 `(,rust "cargo"))
34147 (or (and=> (%current-target-system)
34148 (compose list make-rust-sysroot))
34149 '())))
34150 (inputs
34151 (cons* (cargo-inputs 'python-angr)))
34152 (home-page "https://github.com/angr/angr")
34153 (synopsis "Multi-architecture binary analysis toolkit")
34154 (description
34155 "This package provides a versatile binary analysis platform with the
34156ability to perform dynamic symbolic execution as well as various
34157static analyses directly on binaries. As such, it can be used for all
34158kinds of reverse engineering, vulnerability discovery, exploit
34159generation, and software testing purposes.")
34160 (license license:bsd-2)))
34161
34162(define-public python-peachpy
34163 ;; There is no tag in this repo.
34164 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
34165 (version "0.2.0") ;from 'peachpy/__init__.py'
34166 (revision "3"))
34167 (package
34168 (name "python-peachpy")
34169 (version (git-version version revision commit))
34170 (home-page "https://github.com/Maratyszcza/PeachPy")
34171 (source (origin
34172 (method git-fetch)
34173 (uri (git-reference (url home-page) (commit commit)))
34174 (file-name (git-file-name name version))
34175 (sha256
34176 (base32
34177 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
34178 (patches (search-patches "python-peachpy-determinism.patch"))))
34179 (build-system pyproject-build-system)
34180 (arguments
34181 ;; The issue is known and the test will probably never be fixed.
34182 ;; https://github.com/Maratyszcza/PeachPy/issues/131
34183 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
34184 (native-inputs
34185 (list python-pytest python-setuptools python-wheel))
34186 (propagated-inputs
34187 (list python-six python-opcodes))
34188 (synopsis "Efficient assembly code generation in Python")
34189 (description
34190 "PeachPy is a Python framework for writing high-performance assembly kernels.
34191PeachPy aims to simplify writing optimized assembly kernels while preserving
34192all optimization opportunities of traditional assembly.
34193
34194PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
34195for the Go language tool chain; it adapts to different calling conventions and
34196application binary interfaces (ABIs); it takes care of register allocation; it
34197supports x86_64 instructions up to AVX-512 and SHA.")
34198 (supported-systems '("x86_64-linux"))
34199 (license license:bsd-2))))
34200
34201(define-public python-sgmllib3k
34202 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
34203 (revision "1"))
34204 (package
34205 (name "python-sgmllib3k")
34206 (version
34207 (git-version "1.0.0" revision commit))
34208 (source
34209 (origin
34210 (method git-fetch)
34211 (uri (git-reference
34212 (url "https://github.com/hsoft/sgmllib")
34213 (commit commit)))
34214 (file-name (git-file-name name version))
34215 (sha256
34216 (base32
34217 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
34218 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
34219 (build-system pyproject-build-system)
34220 (native-inputs (list python-pytest python-setuptools))
34221 (home-page "https://github.com/hsoft/sgmllib")
34222 (synopsis "Python 3 port of sgmllib")
34223 (description "This package provides an unmaintained port of sgmllib to
34224Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
34225Generalized Mark-up Language}.")
34226 (license license:bsd-3))))
34227
34228(define-public python-cwcwidth
34229 (package
34230 (name "python-cwcwidth")
34231 (version "0.1.10")
34232 (source
34233 (origin
34234 (method url-fetch)
34235 (uri (pypi-uri "cwcwidth" version))
34236 (sha256
34237 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
34238 (build-system pyproject-build-system)
34239 (arguments
34240 (list
34241 #:phases
34242 #~(modify-phases %standard-phases
34243 (add-before 'check 'remove-local-cwcwidth
34244 (lambda _
34245 ;; This would otherwise interfere with finding the installed
34246 ;; cwcwidth when running tests.
34247 (delete-file-recursively "cwcwidth"))))))
34248 (native-inputs
34249 (list python-cython
34250 python-pytest
34251 python-setuptools
34252 python-setuptools-scm))
34253 (home-page "https://github.com/sebastinas/cwcwidth")
34254 (synopsis "Python bindings for wc(s)width")
34255 (description
34256 "This package provides bindings for wcwidth and wcswidth functions
34257defined in POSIX.1-2001 and POSIX.1-2008.")
34258 (license license:expat)))
34259
34260(define-public python-pyan3
34261 (package
34262 (name "python-pyan3")
34263 (version "1.2.0")
34264 (source
34265 (origin
34266 ;; Source tarball on PyPI lacks tests.
34267 (method git-fetch)
34268 (uri (git-reference
34269 (url "https://github.com/Technologicat/pyan")
34270 (commit (string-append "v" version))))
34271 (file-name (git-file-name name version))
34272 (sha256
34273 (base32
34274 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
34275 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
34276 "python-pyan3-fix-absolute-path-bug.patch"))))
34277 (build-system pyproject-build-system)
34278 (native-inputs
34279 (list python-pytest python-setuptools python-wheel))
34280 (propagated-inputs
34281 (list python-jinja2))
34282 (home-page "https://github.com/Technologicat/pyan")
34283 (synopsis "Offline call graph generator for Python 3")
34284 (description "Pyan takes one or more Python source files, performs
34285a (rather superficial) static analysis, and constructs a directed graph of the
34286objects in the combined source, and how they define or use each other. The
34287graph can be output for rendering by GraphViz or yEd.")
34288 (license license:gpl2)))
34289
34290(define-public python-multipledispatch
34291 (package
34292 (name "python-multipledispatch")
34293 (version "1.0.0")
34294 (source
34295 (origin
34296 (method git-fetch) ;no tests in PyPI archive
34297 (uri (git-reference
34298 (url "https://github.com/mrocklin/multipledispatch")
34299 (commit version)))
34300 (file-name (git-file-name name version))
34301 (sha256
34302 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
34303 (build-system pyproject-build-system)
34304 (native-inputs
34305 (list python-pytest
34306 python-pytest-benchmark
34307 python-setuptools))
34308 (home-page "https://github.com/mrocklin/multipledispatch/")
34309 (synopsis "Multiple dispatch for Python based on pattern matching")
34310 (description
34311 "This library provides an efficient mechanism for overloading function
34312implementations based on the types of the arguments.")
34313 (license license:bsd-3)))
34314
34315(define-public python-multimethod
34316 (package
34317 (name "python-multimethod")
34318 (version "1.10")
34319 (source
34320 (origin
34321 ;; No tests in the PyPI tarball.
34322 (method git-fetch)
34323 (uri (git-reference
34324 (url "https://github.com/coady/multimethod")
34325 (commit (string-append "v" version))))
34326 (file-name (git-file-name name version))
34327 (sha256
34328 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
34329 (build-system pyproject-build-system)
34330 (native-inputs (list python-pytest python-setuptools python-wheel))
34331 (home-page "https://github.com/coady/multimethod")
34332 (synopsis "Python support for multiple argument dispatching")
34333 (description
34334 "This package provides a decorator for adding multiple argument
34335dispatching to functions. The decorator creates a multimethod object as
34336needed and registers the function with its annotations.")
34337 (license license:asl2.0)))
34338
34339(define-public python-logical-unification
34340 (package
34341 (name "python-logical-unification")
34342 (version "0.4.7")
34343 (source
34344 (origin
34345 (method git-fetch)
34346 (uri (git-reference
34347 (url "https://github.com/pythological/unification")
34348 (commit (string-append "v" version))))
34349 (file-name (git-file-name name version))
34350 (sha256
34351 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
34352 (build-system pyproject-build-system)
34353 (native-inputs
34354 (list python-pytest
34355 python-pytest-benchmark
34356 python-setuptools
34357 python-setuptools-scm))
34358 (propagated-inputs
34359 (list python-multipledispatch
34360 python-toolz))
34361 (home-page "https://github.com/pythological/unification/")
34362 (synopsis "Logical unification in Python for solving symbolic expressions")
34363 (description "This library provides algorithms and data types for solving
34364symbolic expressions in pure Python using the technique of logical unification.")
34365 (license license:bsd-3)))
34366
34367(define-public python-looseversion
34368 (package
34369 (name "python-looseversion")
34370 (version "1.3.0")
34371 (source
34372 (origin
34373 (method url-fetch)
34374 (uri (pypi-uri "looseversion" version))
34375 (sha256
34376 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
34377 (build-system pyproject-build-system)
34378 (arguments
34379 (list
34380 ;; No tests provided.
34381 #:tests? #f))
34382 (native-inputs
34383 (list python-hatchling))
34384 (home-page "https://github.com/effigies/looseversion")
34385 (synopsis "Version numbering for anarchists and software realists")
34386 (description
34387 "This package provides a drop-in replacement for the original
34388@code{LooseVersion}. It implements an identical interface and comparison
34389logic to @code{LooseVersion}. The only major change is that a
34390@code{looseversion.LooseVersion} is comparable to a
34391@code{distutils.version.LooseVersion}, which means tools should not need to
34392worry whether all dependencies that use LooseVersion have migrated.")
34393 (license license:psfl)))
34394
34395(define-public python-cons
34396 (package
34397 (name "python-cons")
34398 (version "0.4.7")
34399 (source
34400 (origin
34401 (method git-fetch) ;no tests in PyPI archive
34402 (uri (git-reference
34403 (url "https://github.com/pythological/python-cons")
34404 (commit (string-append "v" version))))
34405 (file-name (git-file-name name version))
34406 (sha256
34407 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
34408 (build-system pyproject-build-system)
34409 (native-inputs
34410 (list python-pytest
34411 python-setuptools
34412 python-setuptools-scm
34413 python-wheel))
34414 (propagated-inputs
34415 (list python-logical-unification))
34416 (home-page "https://github.com/pythological/python-cons")
34417 (synopsis "Cons cell data structures and related algorithms for Python")
34418 (description
34419 "This library implements algorithms and data structures for Lisp-style
34420cons cells in Python.")
34421 (license license:lgpl3+)))
34422
34423(define-public python-etuples
34424 (package
34425 (name "python-etuples")
34426 (version "0.3.10")
34427 (source
34428 (origin
34429 (method url-fetch)
34430 (uri (pypi-uri "etuples" version))
34431 (sha256
34432 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
34433 (build-system pyproject-build-system)
34434 (arguments
34435 (list
34436 #:test-flags
34437 ;; assert False == {~_1: <built-in function add>}
34438 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
34439 (native-inputs
34440 (list python-pytest
34441 python-setuptools
34442 python-setuptools-scm))
34443 (propagated-inputs
34444 (list python-cons
34445 python-multipledispatch))
34446 (home-page "https://github.com/pythological/etuples")
34447 (synopsis "S-expressions in Python")
34448 (description
34449 "This library implements eval'able S-expression in Python using tuple-like objects.")
34450 (license license:asl2.0)))
34451
34452(define-public python-minikanren
34453 (package
34454 (name "python-minikanren")
34455 (version "1.0.5")
34456 (source
34457 (origin
34458 (method git-fetch)
34459 (uri (git-reference
34460 (url "https://github.com/pythological/kanren")
34461 (commit (string-append "v" version))))
34462 (file-name (git-file-name name version))
34463 (sha256
34464 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
34465 (build-system pyproject-build-system)
34466 (arguments
34467 (list
34468 ;; 60 passed, 3 skipped, 23 deselected
34469 #:test-flags
34470 #~(list "-k" (string-join
34471 ;; XXX: 16 tests fail with assertion not equal, check why.
34472 (list "not test_basics"
34473 "test_eq_assoc"
34474 "test_eq_assoccomm"
34475 "test_eq_comm"
34476 "test_map_anyo"
34477 "test_map_anyo_misc"
34478 "test_map_anyo_reverse"
34479 "test_reduceo"
34480 "test_walko"
34481 "test_walko_reverse")
34482 " and not "))))
34483 (native-inputs
34484 (list python-pytest
34485 python-setuptools))
34486 (propagated-inputs
34487 (list python-cons
34488 python-etuples
34489 python-logical-unification
34490 python-multipledispatch
34491 python-toolz
34492 python-typing-extensions))
34493 (home-page "https://github.com/pythological/kanren")
34494 (synopsis "Relational logic programming in pure Python")
34495 (description
34496 "The minikanren library provides an algorithmic core for computer algebra
34497systems in Python.")
34498 (license license:bsd-3)))
34499
34500(define-public python-dotenv
34501 (package
34502 (name "python-dotenv")
34503 (version "1.2.2")
34504 (source
34505 (origin
34506 (method url-fetch)
34507 (uri (pypi-uri "python_dotenv" version))
34508 (sha256
34509 (base32 "1wwwg7gasqmnv5y2hb3w1155c8nai6zzih8x5hn0ifnpzf8ildrc"))))
34510 (build-system pyproject-build-system)
34511 (arguments
34512 (list
34513 #:test-flags
34514 ;; .dotenv-real instead of dotenv
34515 #~(list "-k not test_run_with_dotenv_and_command_flags")))
34516 (native-inputs
34517 (list python-pytest
34518 python-setuptools))
34519 (propagated-inputs
34520 (list python-click))
34521 (home-page "https://saurabh-kumar.com/python-dotenv/")
34522 (synopsis "Setup environment variables according to .env files")
34523 (description
34524 "This package provides the @code{python-dotenv} Python module to read
34525key-value pairs from a @code{.env} file and set them as environment variables.")
34526 (license license:bsd-3)))
34527
34528;; Old version just for docker-compose; remove once that is updated.
34529(define-public python-dotenv-0.13.0
34530 (package (inherit python-dotenv)
34531 (name "python-dotenv")
34532 (version "0.13.0")
34533 (source
34534 (origin
34535 (method url-fetch)
34536 (uri (pypi-uri "python-dotenv" version))
34537 (sha256
34538 (base32
34539 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
34540 (arguments
34541 `(#:phases
34542 (modify-phases %standard-phases
34543 (replace 'check
34544 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
34545 (when tests?
34546 (add-installed-pythonpath inputs outputs)
34547 (setenv "PATH" (string-append (getenv "PATH") ":"
34548 (assoc-ref outputs "out") "/bin"))
34549 ;; Skip the ipython tests.
34550 (delete-file "tests/test_ipython.py")
34551 (invoke "python" "-m" "pytest")))))))
34552 (native-inputs
34553 (modify-inputs native-inputs
34554 (append python-mock
34555 python-sh-1)))))
34556
34557(define-public python-braintree
34558 (package
34559 (name "python-braintree")
34560 (version "4.40.0")
34561 (source
34562 (origin
34563 (method url-fetch)
34564 (uri (pypi-uri "braintree" version))
34565 (sha256
34566 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
34567 (build-system pyproject-build-system)
34568 (arguments (list #:tests? #f)) ; No tests.
34569 (native-inputs (list python-setuptools))
34570 (propagated-inputs (list python-requests))
34571 (home-page
34572 "https://developers.braintreepayments.com/python/sdk/server/overview")
34573 (synopsis "Braintree Python Library")
34574 (description
34575 "The Braintree Python SDK provides integration access to the Braintree
34576Gateway. Braintree is a US-based payments service provider.")
34577 (license license:expat)))
34578
34579(define-public python-markuppy
34580 (package
34581 (name "python-markuppy")
34582 (version "1.18")
34583 (source
34584 (origin
34585 (method git-fetch)
34586 (uri (git-reference
34587 (url "https://github.com/tylerbakke/MarkupPy")
34588 (commit (string-append "v" version))))
34589 (file-name (git-file-name name version))
34590 (sha256
34591 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
34592 (build-system pyproject-build-system)
34593 (native-inputs (list python-pytest python-setuptools))
34594 (home-page "https://github.com/tylerbakke/MarkupPy")
34595 (synopsis "Pythonic HTML/XML generator")
34596 (description
34597 "This Python module attempts to make it easier to generate HTML/XML from
34598a Python program in an customizable and pythonic way.")
34599 (license license:expat)))
34600
34601(define-public python-csb43
34602 (package
34603 (name "python-csb43")
34604 (version "1.0.0")
34605 (source
34606 (origin
34607 (method git-fetch)
34608 (uri (git-reference
34609 (url "https://bitbucket.org/wmj/csb43")
34610 (commit version)))
34611 (file-name (git-file-name name version))
34612 (sha256
34613 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
34614 (build-system pyproject-build-system)
34615 ;; tests: 15102 passed, 36 skipped, 5489 warnings
34616 (arguments
34617 (list
34618 #:phases
34619 #~(modify-phases %standard-phases
34620 (add-after 'unpack 'relax-requirements
34621 (lambda _
34622 (substitute* "pyproject.toml"
34623 (("\"deprecated ~=.*\",")
34624 "\"deprecated\",")))))))
34625 (native-inputs
34626 (list python-lxml
34627 python-pytest
34628 python-setuptools
34629 python-setuptools-scm))
34630 (propagated-inputs
34631 (list python-deprecated
34632 python-pycountry
34633 python-pyyaml
34634 python-tablib))
34635 (home-page "https://bitbucket.org/wmj/csb43")
34636 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3463743 (CSB43)")
34638 (description
34639 "This package provides tools to convert files in the format used by
34640multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
34641Spanish Banking Association [AEB43]) to other formats.
34642
34643Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
34644spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
34645 (license license:lgpl3)))
34646
34647(define-public python-csb43-0.10
34648 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
34649 ;; homebank, i18n, ofx, and utils.
34650 (package
34651 (inherit python-csb43)
34652 (name "python-csb43")
34653 (version "0.10.1")
34654 ;; tests: 15493 passed, 37 skipped, 7447 warnings
34655 (source
34656 (origin
34657 (method git-fetch)
34658 (uri (git-reference
34659 (url "https://bitbucket.org/wmj/csb43")
34660 (commit version)))
34661 (file-name (git-file-name name version))
34662 (sha256
34663 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
34664
34665(define-public python-febelfin-coda
34666 (package
34667 (name "python-febelfin-coda")
34668 (version "0.3.0")
34669 (source
34670 (origin
34671 (method hg-fetch)
34672 (uri (hg-reference
34673 (url "https://foss.heptapod.net/tryton/coda")
34674 (changeset version)))
34675 (file-name (string-append name "-" version "-checkout"))
34676 (sha256
34677 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
34678 (build-system pyproject-build-system)
34679 (arguments
34680 (list
34681 #:test-backend #~'unittest
34682 #:phases
34683 #~(modify-phases %standard-phases
34684 (add-after 'install 'remove-installed-tests
34685 (lambda* (#:key inputs outputs #:allow-other-keys)
34686 (with-directory-excursion (site-packages inputs outputs)
34687 (for-each delete-file
34688 (list "coda/test.py"
34689 "coda/test_readme.py"))))))))
34690 (native-inputs (list python-setuptools))
34691 (home-page "https://coda.b2ck.com/")
34692 (synopsis "Module to parse Belgian CODA files")
34693 (description
34694 "This package provides a module to parse Coded statement of account
34695(CODA) files as defined be the Belgian Febelfin bank standard.")
34696 (license license:bsd-3)))
34697
34698(define-public python-ofxparse
34699 (package
34700 (name "python-ofxparse")
34701 (version "0.21")
34702 (source
34703 (origin
34704 (method url-fetch)
34705 (uri (pypi-uri "ofxparse" version))
34706 (sha256
34707 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34708 (build-system pyproject-build-system)
34709 (native-inputs (list python-pynose python-setuptools))
34710 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34711 (home-page "http://sites.google.com/site/ofxparse")
34712 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34713format")
34714 (description "@code{ofxparse} is a parser for Open Financial
34715Exchange (.ofx) format files. OFX files are available from almost any online
34716banking site, so they work well if you want to pull together your finances
34717from multiple sources. Online trading accounts also often provide account
34718statements in OFX files.")
34719 (license license:expat)))
34720
34721(define-public python-rfc3339-validator
34722 (package
34723 (name "python-rfc3339-validator")
34724 (version "0.1.4")
34725 (source
34726 (origin
34727 (method url-fetch)
34728 (uri (pypi-uri "rfc3339_validator" version))
34729 (sha256
34730 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34731 (build-system pyproject-build-system)
34732 (native-inputs
34733 (list python-pytest
34734 python-setuptools
34735 python-strict-rfc3339))
34736 (propagated-inputs
34737 (list python-six))
34738 (home-page "https://github.com/naimetti/rfc3339-validator")
34739 (synopsis "Python RFC3339 validator")
34740 (description "This package provides a pure Python RFC3339 validator.")
34741 (license license:expat)))
34742
34743(define-public python-platformdirs
34744 ;; Try to update simultaneously with the bootstrap version in
34745 ;; (gnu packages python-build).
34746 (package
34747 (name "python-platformdirs")
34748 (version "4.3.6")
34749 (source
34750 (origin
34751 (method url-fetch)
34752 (uri (pypi-uri "platformdirs" version))
34753 (sha256
34754 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34755 (build-system pyproject-build-system)
34756 (native-inputs
34757 (list python-appdirs
34758 python-hatchling
34759 python-hatch-vcs
34760 python-pytest
34761 python-pytest-mock))
34762 (home-page "https://github.com/platformdirs/platformdirs")
34763 (synopsis "Determine the appropriate platform-specific directories")
34764 (description "When writing applications, finding the right location to
34765store user data and configuration varies per platform. Even for
34766single-platform apps, there may by plenty of nuances in figuring out the right
34767location. This small Python module determines the appropriate
34768platform-specific directories, e.g. the ``user data dir''.")
34769 (license license:expat)))
34770
34771(define-public python-json2html
34772 (package
34773 (name "python-json2html")
34774 (version "1.3.0")
34775 (source
34776 (origin
34777 (method git-fetch)
34778 (uri (git-reference
34779 (url "https://github.com/softvar/json2html")
34780 (commit (string-append "v" version))))
34781 (file-name (git-file-name name version))
34782 (sha256
34783 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34784 (build-system pyproject-build-system)
34785 (arguments
34786 (list
34787 #:test-backend #~'custom
34788 #:test-flags #~(list "test/run_tests.py")))
34789 (native-inputs (list python-setuptools))
34790 (home-page "https://github.com/softvar/json2html")
34791 (synopsis "Convert JSON to HTML table")
34792 (description
34793 "@code{python-json2html} is a python module to convert JSON into a human
34794readable HTML table representation.")
34795 (license license:expat)))
34796
34797(define-public python-face
34798 (package
34799 (name "python-face")
34800 (version "24.0.0")
34801 (source
34802 (origin
34803 (method git-fetch)
34804 (uri (git-reference
34805 (url "https://github.com/mahmoud/face")
34806 (commit (string-append "v" version))))
34807 (file-name (git-file-name name version))
34808 (sha256
34809 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34810 (build-system pyproject-build-system)
34811 (native-inputs (list python-pytest python-setuptools))
34812 (propagated-inputs (list python-boltons))
34813 (home-page "https://github.com/mahmoud/face")
34814 (synopsis "CLI parsing and dispatching microframework")
34815 (description "@code{python-face} is a Pythonic microframework for building
34816command-line applications.
34817
34818@itemize
34819@item First-class subcommand support
34820@item Powerful middleware architecture
34821@item Separate parser layer
34822@item Built-in flagfile support
34823@item Handy testing utilities
34824@item Themeable help display
34825@end itemize")
34826 (license license:bsd-3)))
34827
34828(define-public python-glom
34829 (package
34830 (name "python-glom")
34831 (version "24.11.0")
34832 (source
34833 (origin
34834 (method git-fetch)
34835 (uri (git-reference
34836 (url "https://github.com/mahmoud/glom")
34837 (commit (string-append "v" version))))
34838 (file-name (git-file-name name version))
34839 (sha256
34840 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34841 (build-system pyproject-build-system)
34842 (native-inputs
34843 (list python-pytest
34844 python-pyyaml
34845 python-setuptools))
34846 (propagated-inputs
34847 (list python-attrs
34848 python-boltons
34849 python-face))
34850 (home-page "https://github.com/mahmoud/glom")
34851 (synopsis "Declaratively restructure data")
34852 (description "Real applications have real data, and real data
34853nests---objects inside of objects inside of lists of objects. glom is a new
34854and powerful way to handle real-world data, featuring:
34855
34856@itemize
34857@item Path-based access to nested data structures
34858@item Readable, meaningful error messages
34859@item Declarative data transformation, using lightweight, Pythonic specifications
34860@item Built-in data exploration and debugging features
34861@end itemize")
34862 (license license:bsd-3)))
34863
34864(define-public python-box
34865 (package
34866 (name "python-box")
34867 (version "7.3.2")
34868 (source
34869 (origin
34870 (method git-fetch)
34871 (uri
34872 (git-reference
34873 (url "https://github.com/cdgriffith/Box")
34874 (commit version)))
34875 (file-name (git-file-name name version))
34876 (sha256
34877 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34878 (build-system pyproject-build-system)
34879 (arguments
34880 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34881 (native-inputs
34882 (list python-pytest
34883 python-setuptools))
34884 (propagated-inputs
34885 (list python-msgpack
34886 python-ruamel.yaml
34887 python-tomli-w))
34888 (home-page "https://github.com/cdgriffith/Box")
34889 (synopsis "Advanced Python dictionaries with dot notation access")
34890 (description
34891 "This package provides the @code{python-box} Python module.
34892It implements advanced Python dictionaries with dot notation access.")
34893 (license license:expat)))
34894
34895(define-public python-fields
34896 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34897 (revision "0"))
34898 (package
34899 (name "python-fields")
34900 (version (git-version "5.0.0" revision commit))
34901 (source
34902 (origin
34903 (method git-fetch)
34904 (uri (git-reference
34905 (url "https://github.com/ionelmc/python-fields")
34906 (commit commit)))
34907 (file-name (git-file-name name version))
34908 (sha256
34909 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34910 (build-system pyproject-build-system)
34911 (arguments
34912 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34913 (native-inputs (list python-pytest-8
34914 python-pytest-benchmark
34915 python-setuptools
34916 python-wheel))
34917 (home-page "https://python-fields.readthedocs.io/")
34918 (synopsis "Python container class boilerplate killer")
34919 (description "Avoid repetitive boilerplate code in Python classes.")
34920 (license license:bsd-3))))
34921
34922(define-public python-aspectlib
34923 (package
34924 (name "python-aspectlib")
34925 (version "2.0.0")
34926 (source
34927 (origin
34928 (method git-fetch)
34929 (uri (git-reference
34930 (url "https://github.com/ionelmc/python-aspectlib")
34931 (commit (string-append "v" version))))
34932 (file-name (git-file-name name version))
34933 (sha256
34934 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
34935 (build-system pyproject-build-system)
34936 (arguments
34937 (list
34938 #:test-flags
34939 #~(list ;; XXX: Require more dependencies.
34940 "--ignore=tests/test_integrations.py"
34941 "--ignore=tests/test_integrations_py3.py")
34942 #:phases
34943 #~(modify-phases %standard-phases
34944 (add-after 'unpack 'fix-pytest-config
34945 (lambda _
34946 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
34947 ;; The (path: py.path.local) argument is deprecated, please
34948 ;; use (collection_path: pathlib.Path).
34949 (delete-file "pytest.ini"))))))
34950 (native-inputs
34951 (list python-pytest-8
34952 python-setuptools
34953 python-tornado))
34954 (propagated-inputs
34955 (list python-fields))
34956 (home-page "https://github.com/ionelmc/python-aspectlib")
34957 (synopsis "Python monkey-patching and decorators")
34958 (description
34959 "This package provides an aspect-oriented programming, monkey-patch
34960and decorators library. It is useful when changing behavior in existing
34961code is desired. It includes tools for debugging and testing:
34962simple mock/record and a complete capture/replay framework.")
34963 (license license:bsd-2)))
34964
34965(define-public python-ijson
34966 (package
34967 (name "python-ijson")
34968 (version "3.5.0")
34969 (source
34970 (origin
34971 (method url-fetch)
34972 (uri (pypi-uri "ijson" version))
34973 (sha256
34974 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
34975 (inputs
34976 ;; yajl is optional, but compiling with it makes faster
34977 ;; backends available to ijson:
34978 (list yajl))
34979 (native-inputs
34980 (list python-pytest
34981 python-setuptools))
34982 (build-system pyproject-build-system)
34983 (home-page "https://github.com/ICRAR/ijson")
34984 (synopsis "Iterative JSON parser with Python iterator interfaces")
34985 (description
34986 "Ijson is an iterative JSON parser with standard Python iterator
34987interfaces.")
34988 (license license:bsd-3)))
34989
34990(define-public python-ordered-set
34991 (package
34992 (name "python-ordered-set")
34993 (version "4.1.0")
34994 (source
34995 (origin
34996 (method url-fetch)
34997 (uri (pypi-uri "ordered-set" version))
34998 (sha256
34999 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
35000 (build-system pyproject-build-system)
35001 (native-inputs (list python-cython python-flit-core python-pytest))
35002 (home-page "https://github.com/simonpercivall/orderedset")
35003 (synopsis "Ordered Set implementation in Cython")
35004 (description "This library provides an @code{OrderedSet} data type that
35005works like a regular set, but remembers insertion order. It supports the full
35006Python @code{set} interface.")
35007 (license license:asl2.0)))
35008
35009(define-public python-orgparse
35010 (package
35011 (name "python-orgparse")
35012 (version "0.4.20251020")
35013 (source
35014 (origin
35015 (method git-fetch)
35016 (uri (git-reference
35017 (url "https://github.com/karlicoss/orgparse")
35018 (commit (string-append "v" version))))
35019 (file-name (git-file-name name version))
35020 (sha256
35021 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
35022 (build-system pyproject-build-system)
35023 (arguments
35024 (list
35025 #:test-flags
35026 #~(list "--ignore-glob=doc/*"
35027 ;; XXX: Unclear why those tests fail.
35028 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
35029 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
35030 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
35031 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
35032 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
35033 (home-page "https://github.com/karlicoss/orgparse")
35034 (synopsis "Emacs Org mode parser in Python")
35035 (description
35036 "This package is a Python module for reading Emacs Org mode files.")
35037 (license license:bsd-3)))
35038
35039(define-public dynaconf
35040 (package
35041 (name "dynaconf")
35042 (version "3.2.11")
35043 (source
35044 (origin
35045 (method git-fetch)
35046 (uri
35047 (git-reference
35048 (url "https://github.com/dynaconf/dynaconf")
35049 (commit version)))
35050 (file-name (git-file-name name version))
35051 (sha256
35052 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
35053 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
35054 (modules '((guix build utils)))
35055 ;; Remove vendored dependencies
35056 (snippet
35057 #~(let ((unvendor '("click" "ruamel" "toml")))
35058 (with-directory-excursion "dynaconf/vendor"
35059 (for-each delete-file-recursively unvendor))
35060 (substitute* (find-files "." "\\.py$")
35061 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
35062 _ target rest)
35063 (string-append "import " target rest))
35064 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
35065 target))))))
35066 (build-system pyproject-build-system)
35067 (arguments
35068 (list
35069 #:test-flags
35070 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
35071 "-k" #$(let ((click-tests '("test_negative_get"
35072 "test_not_found_key_exit_error[get]"
35073 "test_inspect_invalid_format")))
35074 ;; Disable integration tests
35075 (string-append "not integration and not "
35076 ;; These tests fail because we use
35077 ;; Click 8.* instead of Click 7
35078 (string-join click-tests " and not ")))
35079 "tests")
35080 #:phases
35081 #~(modify-phases %standard-phases
35082 (add-after 'unpack 'patch-for-click-8
35083 (lambda _
35084 (substitute* "dynaconf/cli.py"
35085 (("click.get_os_args\\()") ;deprecated from Click 8.1+
35086 "sys.argv[1:]")))))))
35087 (propagated-inputs
35088 (list python-click python-configobj python-ruamel.yaml-0.16
35089 python-toml python-tomli))
35090 (native-inputs
35091 (list python-django
35092 python-flask
35093 python-pytest
35094 python-pytest-mock
35095 python-setuptools))
35096 (home-page "https://www.dynaconf.com/")
35097 (synopsis "The dynamic configurator for your Python project")
35098 (description
35099 "This package provides @code{dynaconf} the dynamic configurator manager for
35100your Python project. It provides features such as:
35101
35102@itemize
35103@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
35104@item Settings management (default values, validation, parsing, templating);
35105@item Protection of sensitive information (passwords/tokens);
35106@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
35107loaders;
35108@item Full support for environment variables to override existing settings
35109(dotenv support included);
35110@item Optional layered system for multiple environments @code{[default,
35111development, testing, production]};
35112@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
35113@item Built-in extensions for Django and Flask web frameworks;
35114@item CLI for common operations such as @code{init, list, write, validate, export}.
35115@end itemize")
35116 (license license:expat)))
35117
35118(define-public python-pudb
35119 ;; TODO: Rename to pudb as it's a final program.
35120 (package
35121 (name "python-pudb")
35122 (version "2025.1.3")
35123 (source
35124 (origin
35125 (method url-fetch)
35126 (uri (pypi-uri "pudb" version))
35127 (sha256
35128 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
35129 (build-system pyproject-build-system)
35130 (arguments
35131 (list
35132 #:phases
35133 #~(modify-phases %standard-phases
35134 (add-before 'check 'pre-check
35135 (lambda _
35136 (setenv "HOME" "/tmp"))))))
35137 (native-inputs
35138 (list python-hatchling
35139 python-pytest
35140 python-pytest-mock
35141 python-numpy))
35142 (propagated-inputs
35143 (list python-jedi
35144 python-packaging
35145 python-pygments
35146 python-typing-extensions
35147 python-urwid
35148 python-urwid-readline))
35149 (home-page "https://documen.tician.de/pudb/")
35150 (synopsis "Console-based Python debugger")
35151 (description
35152 "@command{pudb} is a full-screen, console-based Python debugger providing
35153all the niceties of modern GUI-based debuggers in a more lightweight and
35154keyboard-friendly package.")
35155 (license license:expat)))
35156
35157(define-public python-iwlib
35158 (package
35159 (name "python-iwlib")
35160 (version "1.7.0")
35161 (source
35162 (origin
35163 (method git-fetch)
35164 (uri (git-reference
35165 (url "https://github.com/nhoad/python-iwlib")
35166 (commit version)))
35167 (file-name (git-file-name name version))
35168 (sha256
35169 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
35170 (build-system pyproject-build-system)
35171 (arguments
35172 (list
35173 #:phases
35174 #~(modify-phases %standard-phases
35175 (add-before 'check 'cleanup
35176 (lambda _
35177 (delete-file-recursively "iwlib"))))))
35178 (native-inputs (list python-pytest python-setuptools))
35179 (inputs (list wireless-tools))
35180 (propagated-inputs (list python-cffi))
35181 (home-page "https://github.com/nhoad/python-iwlib")
35182 (synopsis "Python module to interface with iwlib")
35183 (description
35184 "This package provides a Python interface to iw wireless tools.")
35185 (license license:gpl2)))
35186
35187(define-public python-pdoc3
35188 (package
35189 (name "python-pdoc3")
35190 (version "0.11.6")
35191 (source
35192 (origin
35193 (method url-fetch)
35194 (uri (pypi-uri "pdoc3" version))
35195 (sha256
35196 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
35197 (build-system pyproject-build-system)
35198 (arguments
35199 (list #:test-backend #~'unittest
35200 #:test-flags #~(list "-v" "pdoc.test")))
35201 (native-inputs
35202 (list python-setuptools-git
35203 python-setuptools
35204 python-setuptools-scm))
35205 (propagated-inputs
35206 (list python-mako
35207 python-markdown))
35208 (home-page "https://pdoc3.github.io/pdoc/")
35209 (synopsis "Auto-generate API documentation for Python projects")
35210 (description
35211 "This package auto-generates API documentation from Python projects
35212already existing modules and objects docstrings.")
35213 (license license:agpl3+)))
35214
35215(define-public python-piexif
35216 (package
35217 (name "python-piexif")
35218 (version "1.1.3")
35219 (source
35220 (origin
35221 (method git-fetch)
35222 (uri (git-reference
35223 (url "https://github.com/hMatoba/Piexif")
35224 (commit version)))
35225 (file-name (git-file-name name version))
35226 (sha256
35227 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
35228 (patches
35229 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
35230 (build-system pyproject-build-system)
35231 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
35232 (home-page "https://github.com/hMatoba/Piexif")
35233 (synopsis "Simplify exif manipulations with Python")
35234 (description
35235 "Piexif simplifies interacting with EXIF data in Python. It includes the
35236tools necessary for extracting, creating, manipulating, converting and writing
35237EXIF data to JPEG, WebP and TIFF files.")
35238 (license license:expat)))
35239
35240(define-public python-pyrss2gen
35241 (package
35242 (name "python-pyrss2gen")
35243 (version "1.1")
35244 (source
35245 (origin
35246 (method url-fetch)
35247 (uri (pypi-uri "PyRSS2Gen" version))
35248 (sha256
35249 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
35250 (build-system pyproject-build-system)
35251 (arguments (list #:tests? #f)) ; No tests.
35252 (native-inputs (list python-setuptools))
35253 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
35254 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
35255 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
35256PyRSS2Gen builds the feed up by using a XML generator.")
35257 (license license:bsd-3)))
35258
35259(define-public python-doit
35260 (package
35261 (name "python-doit")
35262 (version "0.36.0")
35263 (source
35264 (origin
35265 (method url-fetch)
35266 (uri (pypi-uri "doit" version))
35267 (sha256
35268 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
35269 (build-system pyproject-build-system)
35270 ;; This is not a serious test failure. It's probably due to the load path
35271 ;; at test time.
35272 (arguments (list #:test-flags '(list "-k" "not test_execute")))
35273 (propagated-inputs
35274 (list python-cloudpickle python-importlib-metadata))
35275 (native-inputs (list python-pytest python-setuptools python-wheel))
35276 (home-page "https://pydoit.org")
35277 (synopsis "Automation tool to execute any kind of task in a build-tools
35278fashion")
35279 (description "doit is an automation tool that brings the power of
35280build-tools to execute any kind of task.
35281
35282A task describes some computation to be done (actions), and contains some
35283extra meta-data. The actions can be external programs or Python functions. A
35284single task may define more than one action. doit uses the task’s meta-data
35285to:
35286
35287@itemize
35288@item cache task results
35289@item correct execution order
35290@item parallel execution
35291@item powerful dependency system
35292@end itemize")
35293 (license license:expat)))
35294
35295(define-public python-phpserialize
35296 (package
35297 (name "python-phpserialize")
35298 (version "1.3")
35299 (source
35300 (origin
35301 (method git-fetch)
35302 (uri (git-reference
35303 (url "https://github.com/mitsuhiko/phpserialize")
35304 (commit version)))
35305 (file-name (git-file-name name version))
35306 (sha256
35307 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
35308 (build-system pyproject-build-system)
35309 (arguments
35310 (list
35311 ;; XXX: Unclear why this test fails.
35312 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
35313 #:phases
35314 #~(modify-phases %standard-phases
35315 (add-after 'unpack 'patch-tests
35316 (lambda _
35317 (substitute* "tests.py"
35318 (("assert_\\(b'WP_User' in x\\)")
35319 "assertIn(b'WP_User', x)")))))))
35320 (native-inputs (list python-pytest python-setuptools))
35321 (home-page "https://github.com/mitsuhiko/phpserialize")
35322 (synopsis "Python port of the serialize and unserialize functions of PHP")
35323 (description
35324 "This package provides a port of the @code{serialize} and
35325@code{unserialize} functions of PHP for Python.")
35326 (license license:bsd-3)))
35327
35328(define-public python-pycapnp
35329 (package
35330 (name "python-pycapnp")
35331 (version "2.2.4")
35332 (source
35333 (origin
35334 (method git-fetch)
35335 (uri (git-reference
35336 (url "https://github.com/capnproto/pycapnp")
35337 (commit (string-append "v" version))))
35338 (file-name (git-file-name name version))
35339 (sha256
35340 (base32 "0vzz1s7zrp27dnsrppshrisbn054w56qbva3shbnwpkdcckw411j"))))
35341 (build-system pyproject-build-system)
35342 (arguments
35343 (list
35344 #:phases
35345 #~(modify-phases %standard-phases
35346 (add-before 'build 'set-force-system-capnp
35347 (lambda _
35348 (setenv "PIP_CONFIG_SETTINGS" "force-system-libcapnp=True")))
35349 (add-after 'install 'copy-missing-schemas
35350 (lambda _
35351 (let* ((out #$output)
35352 (capnp-clang #$(this-package-input "capnproto-clang"))
35353 (site-pkgs (car (find-files (string-append out "/lib")
35354 "^site-packages$"
35355 #:directories? #t)))
35356 (target-dir (string-append site-pkgs "/capnp"))
35357 (schema-files (find-files
35358 (string-append capnp-clang
35359 "/include/capnp")
35360 "\\.capnp$")))
35361 (for-each (lambda (file)
35362 (install-file file target-dir)) schema-files))))
35363 ;; The 'sanity-check' phase fails with "ModuleNotFoundError: No
35364 ;; module named 'schema_capnp'". This module is generated
35365 ;; dynamically via import hooks at runtime
35366 (delete 'sanity-check))))
35367 (native-inputs (list pkg-config
35368 python-cython
35369 python-jinja2
35370 python-pkgconfig
35371 python-pytest
35372 python-pytest-asyncio
35373 python-setuptools))
35374 (inputs (list capnproto-clang))
35375 (home-page "https://github.com/capnproto/pycapnp")
35376 (synopsis "Cython wrapping of the C++ Cap'n Proto library")
35377 (description
35378 "This package provides a cython wrapping of the C++ Cap'n Proto library.")
35379 (license license:bsd-2)))
35380
35381(define-public python-pydevtool
35382 (package
35383 (name "python-pydevtool")
35384 (version "0.3.0")
35385 (source
35386 (origin
35387 (method url-fetch)
35388 (uri (pypi-uri "pydevtool" version))
35389 (sha256
35390 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
35391 (build-system pyproject-build-system)
35392 (arguments (list #:tests? #false)) ;no tests
35393 (propagated-inputs (list python-doit python-rich-click))
35394 (native-inputs (list python-setuptools python-wheel))
35395 (home-page "https://github.com/pydoit/pydevtool")
35396 (synopsis "CLI dev tools powered by pydoit")
35397 (description "This package provides command line tools, powered by pydoit.
35398It offers integration with @code{click} and @code{rich} for custom CLI and
35399these linters: @code{pycodestlye}, @code{pyflakes}")
35400 (license license:expat)))
35401
35402(define-public nikola
35403 (package
35404 (name "nikola")
35405 (version "8.3.3")
35406 (source
35407 (origin
35408 (method url-fetch)
35409 (uri (pypi-uri "nikola" version))
35410 (sha256
35411 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
35412 (build-system pyproject-build-system)
35413 (arguments
35414 (list
35415 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
35416 #:test-flags
35417 #~(list "--durations=10"
35418 "--ignore=tests/integration/test_dev_server.py"
35419 "-k" (string-join
35420 ;; Some time difference in example tests.
35421 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
35422 "test_serves_root_dir[https://example.org:1234/blog]"
35423 "test_serves_root_dir[https://example.org:3456/blog/]"
35424 "test_serves_root_dir[https://example.org]"
35425 ;; AssertionError: Calls not found.
35426 "test_write_content_does_not_detroy_text"
35427 ;; AssertionError: assert 'January 10, 2006,
35428 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
35429 ;; 12:34:56\u202fPM EST'
35430 "test_format_date_timezone")
35431 " and not "))))
35432 (native-inputs
35433 (list nss-certs-for-test
35434 python-feedparser
35435 python-freezegun
35436 python-pytest
35437 python-setuptools))
35438 (inputs
35439 (list python-babel
35440 python-blinker
35441 python-dateutil
35442 python-docutils
35443 python-doit
35444 python-jinja2 ;; for themes
35445 python-lxml
35446 python-mako
35447 python-markdown
35448 python-natsort
35449 python-notebook ;; for ipynb
35450 python-phpserialize ;; for wordpress import
35451 python-piexif
35452 python-pillow
35453 python-pygments
35454 python-pyrss2gen
35455 python-requests
35456 python-ruamel.yaml ;; for YAML metadata
35457 python-toml
35458 python-unidecode
35459 python-yapsy))
35460 (home-page "https://getnikola.com/")
35461 (synopsis "Modular, fast and simple static website and blog generator")
35462 (description "Nikola generates static websites and blogs. Out of the box,
35463it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
35464and has plugins for many other formats.")
35465 (license license:expat)))
35466
35467(define-public nbss-upload
35468 (package
35469 (name "nbss-upload")
35470 (version "0.1")
35471 (source
35472 (origin
35473 (method git-fetch)
35474 (uri (git-reference
35475 (url "https://github.com/notebook-sharing-space/nbss-upload")
35476 (commit (string-append "v" version))))
35477 (file-name (git-file-name name version))
35478 (sha256
35479 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
35480 (build-system pyproject-build-system)
35481 (arguments (list #:tests? #f)) ;no tests
35482 (native-inputs (list python-setuptools))
35483 (propagated-inputs (list python-requests))
35484 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
35485 (synopsis "Upload notebooks to a notebooksharing.space instance")
35486 (description
35487 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
35488notebooksharing.space instance.")
35489 (license license:bsd-3)))
35490
35491(define-public python-reedsolo
35492 (package
35493 (name "python-reedsolo")
35494 (version "1.7.0")
35495 (source
35496 (origin
35497 (method git-fetch)
35498 (uri (git-reference
35499 (url "https://github.com/tomerfiliba/reedsolomon")
35500 (commit (string-append "v" version))))
35501 (file-name (git-file-name name version))
35502 (sha256
35503 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
35504 (build-system pyproject-build-system)
35505 (native-inputs (list python-pytest python-setuptools))
35506 (home-page "https://github.com/tomerfiliba/reedsolomon")
35507 (synopsis "Pure-Python Reed Solomon encoder/decoder")
35508 (description
35509 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
35510the tutorial at Wikiversity. This is a burst-type implementation, so that it
35511supports any Galois field higher than 2^3, but not binary streams.")
35512 (license license:public-domain)))
35513
35514(define-public python-esprima
35515 (package
35516 (name "python-esprima")
35517 (version "4.0.1")
35518 (source
35519 (origin
35520 (method git-fetch)
35521 (uri (git-reference
35522 (url "https://github.com/Kronuz/esprima-python")
35523 (commit (string-append "v" version))))
35524 (file-name (git-file-name name version))
35525 (sha256
35526 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
35527 (build-system pyproject-build-system)
35528 (arguments
35529 (list
35530 ;; XXX: pytest fails to collect tests, and a few tests are failing
35531 ;; using unittest backend. In particular, offsets with math characters
35532 ;; and uncompiled regexps.
35533 #:tests? #f
35534 #:test-backend #~'unittest
35535 #:test-flags
35536 #~(list "-k"
35537 (string-join (list
35538 ;; XXX: Character offsets with maths.
35539 "not test_math_alef"
35540 "test_math_dal_part"
35541 "test_math_kaf_lam"
35542 "test_math_zain_start"
35543 ;; XXX: Uncompiled regexps.
35544 "test_yield_arg_regexp1"
35545 "test_yield_arg_regexp2"
35546 "test_migrated_0005_source"
35547 "test_u_flag_valid_range"
35548 "test_migrated_0049"
35549 "test_migrated_0050_source")
35550 " and not "))))
35551 (native-inputs (list python-setuptools))
35552 (home-page "https://github.com/Kronuz/esprima-python")
35553 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
35554 (description
35555 "This package provides ECMAScript parsing infrastructure for
35556multipurpose analysis in Python.")
35557 (license license:bsd-3)))
35558
35559(define-public python-psycopg2-binary
35560 (package
35561 (name "python-psycopg2-binary")
35562 (version "2.9.10")
35563 (source
35564 (origin
35565 (method url-fetch)
35566 (uri (pypi-uri "psycopg2-binary" version))
35567 (sha256
35568 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
35569 (build-system pyproject-build-system)
35570 (arguments
35571 ;; Tests are disable because they need a live instance of PostgreSQL.
35572 '(#:tests? #f))
35573 (native-inputs (list python-setuptools python-wheel))
35574 (inputs (list postgresql))
35575 (home-page "https://psycopg.org/")
35576 (synopsis "PostgreSQL database adapter for Python")
35577 (description
35578 "Psycopg is a PostgreSQL database adapter for the Python programming
35579language. Its main features are the complete implementation of the Python DB
35580API 2.0 specification and the thread safety (several threads can share the
35581same connection). It was designed for heavily multi-threaded applications
35582that create and destroy lots of cursors and make a large number of concurrent
35583@code{INSERT}s or @code{UPDATE}s.
35584
35585Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
35586being both efficient and secure. It features client-side and
35587server-side cursors, asynchronous communication and notifications,
35588@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
35589out-of-the-box and adapted to matching PostgreSQL data types;
35590adaptation can be extended and customized thanks to a flexible objects
35591adaptation system.
35592
35593Psycopg 2 is both Unicode and Python 3 friendly.")
35594 (license license:lgpl3+)))
35595
35596(define-public python-pyfuse3
35597 (package
35598 (name "python-pyfuse3")
35599 (version "3.4.2")
35600 (source
35601 (origin
35602 (method git-fetch)
35603 (uri (git-reference
35604 (url "https://github.com/libfuse/pyfuse3")
35605 (commit (string-append "v" version))))
35606 (file-name (git-file-name name version))
35607 (sha256
35608 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
35609 (build-system pyproject-build-system)
35610 (arguments
35611 (list
35612 #:test-flags
35613 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
35614 #~(list "--deselect=test/test_api.py::test_listdir")))
35615 (native-inputs
35616 (list pkg-config
35617 python-cython
35618 python-pytest
35619 python-setuptools
35620 python-setuptools-scm))
35621 (inputs
35622 (list fuse))
35623 (propagated-inputs
35624 (list python-trio))
35625 (home-page "https://github.com/libfuse/pyfuse3")
35626 (synopsis "Python bindings to FUSE 3")
35627 (description "This package provides Python 3 bindings for libfuse 3 with
35628async I/O support.")
35629 (license license:gpl2+)))
35630
35631(define-public python-ansi-styles
35632 ;; Releases are not tagged in Git:
35633 ;; https://github.com/shawwn/ansi-styles-python/issues/2
35634 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
35635 (revision "0"))
35636 (package
35637 (name "python-ansi-styles")
35638 (version (git-version "0.2.2" revision commit))
35639 (source
35640 (origin
35641 (method git-fetch)
35642 (uri (git-reference
35643 (url "https://github.com/shawwn/ansi-styles-python")
35644 (commit commit)))
35645 (file-name (git-file-name name version))
35646 (sha256
35647 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
35648 (build-system pyproject-build-system)
35649 (native-inputs (list python-poetry-core python-pytest))
35650 (home-page "https://github.com/shawwn/ansi-styles-python")
35651 (synopsis "ANSI escape codes for styling strings in the terminal")
35652 (description
35653 "This Python package provide ANSI escape codes
35654for styling strings in the terminal.")
35655 (license license:expat))))
35656
35657(define-public python-multipart
35658 (package
35659 (name "python-multipart")
35660 (version "0.0.29")
35661 (source
35662 (origin
35663 (method git-fetch)
35664 (uri (git-reference
35665 (url "https://github.com/Kludex/python-multipart")
35666 (commit version)))
35667 (file-name (git-file-name name version))
35668 (sha256
35669 (base32 "06rxa2xymdqri8zydy7xw2cnpsnzlv2jzdy9g86m5fpfca0pp9fm"))))
35670 (build-system pyproject-build-system)
35671 (native-inputs
35672 (list python-hatchling
35673 python-pytest
35674 python-pyyaml))
35675 (home-page "https://github.com/Kludex/python-multipart")
35676 (synopsis "Streaming multipart parser for Python")
35677 (description
35678 "This package provides a streaming multipart parser for Python.")
35679 (license license:asl2.0)))
35680
35681(define-public python-aiopg
35682 (package
35683 (name "python-aiopg")
35684 (version "1.4.0")
35685 (source
35686 (origin
35687 (method git-fetch)
35688 (uri (git-reference
35689 (url "https://github.com/aio-libs/aiopg")
35690 (commit (string-append "v" version))))
35691 (file-name (git-file-name name version))
35692 (sha256
35693 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
35694 (build-system pyproject-build-system)
35695 (arguments
35696 (list
35697 #:tests? #f ;they need Docker
35698 #:phases
35699 #~(modify-phases %standard-phases
35700 (add-after 'unpack 'use-default-asyncio
35701 ;; async_timeout is deprecated, upstream recommends to use
35702 ;; asyncio, available since Python 3.11.
35703 (lambda _
35704 (substitute* "aiopg/pool.py"
35705 (("async_timeout") "asyncio"))))
35706 (add-after 'unpack 'relax-requirements
35707 (lambda _
35708 (substitute* "setup.py"
35709 (("psycopg2-binary") "psycopg2")
35710 ;; It's a part of Python 3.11+.
35711 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
35712 (native-inputs
35713 (list python-setuptools))
35714 (propagated-inputs
35715 (list python-psycopg2))
35716 (home-page "https://aiopg.readthedocs.io")
35717 (synopsis "Postgres integration with asyncio")
35718 (description
35719 "aiopg is a library for accessing a PostgreSQL database from the
35720asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
35721Psycopg database driver.")
35722 (license license:bsd-3)))
35723
35724(define-public python-shtab
35725 (package
35726 (name "python-shtab")
35727 (version "1.7.1")
35728 (source
35729 (origin
35730 (method url-fetch)
35731 (uri (pypi-uri "shtab" version))
35732 (sha256
35733 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
35734 (build-system pyproject-build-system)
35735 (native-inputs
35736 (list bash
35737 python-pytest
35738 python-pytest-timeout
35739 python-setuptools
35740 python-setuptools-scm
35741 python-wheel))
35742 (home-page "https://github.com/iterative/shtab")
35743 (synopsis "Automagic shell tab completion for Python CLI applications")
35744 (description
35745 "This package automatically generates shell tab completion scripts for
35746Python CLI apps.")
35747 (license license:asl2.0)))
35748
35749(define-public python-pyperf
35750 (package
35751 (name "python-pyperf")
35752 (version "2.10.0")
35753 (source
35754 (origin
35755 (method git-fetch)
35756 (uri (git-reference
35757 (url "https://github.com/psf/pyperf")
35758 (commit version)))
35759 (file-name (git-file-name name version))
35760 (sha256
35761 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
35762 (build-system pyproject-build-system)
35763 (arguments
35764 (list
35765 #:test-flags
35766 #~(list "--ignore=pyperf/tests/test_examples.py")))
35767 (native-inputs
35768 (list python-psutil-bootstrap
35769 python-pytest
35770 python-setuptools))
35771 (home-page "https://github.com/psf/pyperf")
35772 (synopsis "Toolkit for running Python benchmarks")
35773 (description
35774 "The Python @code{pyperf} module is a toolkit for writing, running and
35775analyzing benchmarks. It features a simple API that can:
35776
35777@itemize
35778@item automatically calibrate a benchmark for a time budget;
35779@item spawn multiple worker processes;
35780@item compute the mean and standard deviation;
35781@item detect if a benchmark result seems unstable;
35782@item store benchmark results in JSON format;
35783@item support multiple units: seconds, bytes and integer.
35784@end itemize")
35785 (license license:expat)))
35786
35787(define-public python-pydispatcher
35788 (package
35789 (name "python-pydispatcher")
35790 (version "2.0.7")
35791 (source
35792 (origin
35793 (method url-fetch)
35794 (uri (pypi-uri "PyDispatcher" version))
35795 (sha256
35796 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35797 (build-system pyproject-build-system)
35798 (native-inputs (list python-pytest python-setuptools))
35799 (home-page "https://pydispatcher.sourceforge.net")
35800 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35801 (description
35802 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35803@code{dispatcher.py} module. It provides the Python programmer with a robust
35804mechanism for event routing within various application contexts.
35805
35806Included in the package are the robustapply and saferef modules, which
35807provide the ability to selectively apply arguments to callable objects
35808and to reference instance methods using weak-references.")
35809 (license license:bsd-3)))
35810
35811(define-public python-pyee
35812 (package
35813 (name "python-pyee")
35814 (version "13.0.1")
35815 (source
35816 (origin
35817 (method git-fetch)
35818 (uri (git-reference
35819 (url "https://github.com/jfhbrook/pyee")
35820 (commit (string-append "v" version))))
35821 (file-name (git-file-name name version))
35822 (sha256
35823 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
35824 (build-system pyproject-build-system)
35825 (propagated-inputs (list python-typing-extensions))
35826 (native-inputs
35827 (list python-mock
35828 python-pytest
35829 python-pytest-asyncio
35830 python-pytest-trio
35831 python-setuptools
35832 python-trio
35833 python-twisted))
35834 (home-page "https://github.com/jfhbrook/pyee")
35835 (synopsis "Emit events with Python")
35836 (description
35837 "This package provides a port of node.js's EventEmitter to
35838python. Additionally, it includes a number of subclasses useful for
35839implementing async and threaded programming in python, such as async/await.")
35840 (license license:expat)))
35841
35842(define-public python-pypubsub
35843 (package
35844 (name "python-pypubsub")
35845 (version "4.0.3")
35846 (source
35847 (origin
35848 (method git-fetch)
35849 (uri (git-reference
35850 (url "https://github.com/schollii/pypubsub")
35851 (commit (string-append "v" version))))
35852 (file-name (git-file-name name version))
35853 (sha256
35854 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35855 (build-system pyproject-build-system)
35856 (arguments
35857 (list
35858 #:phases
35859 #~(modify-phases %standard-phases
35860 (replace 'check
35861 (lambda* (#:key tests? #:allow-other-keys)
35862 (when tests?
35863 (with-directory-excursion "tests/suite"
35864 (invoke "py.test"))))))))
35865 (native-inputs
35866 (list python-pytest
35867 python-setuptools
35868 python-wheel))
35869 (home-page "https://github.com/schollii/pypubsub")
35870 (synopsis "Python publish-subcribe library")
35871 (description
35872 "This library provides a publish-subscribe API to facilitate event-based
35873or message-based architecture in a single-process application. It is centered
35874on the notion of a topic - senders publish messages of a given topic, and
35875listeners subscribe to messages of a given topic, all inside the same
35876process.")
35877 (license license:bsd-2)))
35878
35879(define-public python-queuelib
35880 (package
35881 (name "python-queuelib")
35882 (version "1.8.0")
35883 (source
35884 (origin
35885 (method git-fetch)
35886 (uri (git-reference
35887 (url "https://github.com/scrapy/queuelib")
35888 (commit (string-append "v" version))))
35889 (file-name (git-file-name name version))
35890 (sha256
35891 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
35892 (build-system pyproject-build-system)
35893 (native-inputs (list python-hatchling python-pytest))
35894 (home-page "https://github.com/scrapy/queuelib")
35895 (synopsis "Collection of queues for Python")
35896 (description
35897 "Queuelib is a Python library that implements object collections which
35898are stored in memory or persisted to disk, provide a simple API, and run fast.
35899
35900Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
35901by priority and queues that are emptied in a round-robin fashion.")
35902 (license license:bsd-3)))
35903
35904(define-public python-posix-ipc
35905 (package
35906 (name "python-posix-ipc")
35907 (version "1.3.2")
35908 (source
35909 (origin
35910 (method git-fetch)
35911 (uri (git-reference
35912 (url "https://github.com/osvenskan/posix_ipc")
35913 (commit (string-append "rel" version))))
35914 (file-name (git-file-name name version))
35915 (sha256
35916 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35917 (build-system pyproject-build-system)
35918 (arguments
35919 (list
35920 #:test-flags
35921 ;; XXX: Collection fails due to stdin configuration.
35922 #~(list "--ignore=tests/test_memory.py")
35923 #:phases
35924 #~(modify-phases %standard-phases
35925 (add-after 'unpack 'set-cc-path
35926 (lambda _
35927 (setenv "CC" #$(cc-for-target)))))))
35928 (native-inputs (list python-pytest python-setuptools))
35929 (home-page "https://semanchuk.com/philip/posix_ipc/")
35930 (synopsis "POSIX IPC primitives for Python")
35931 (description
35932 "This package provides POSIX IPC primitives - semaphores, shared memory and
35933message queues for Python.")
35934 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35935
35936(define-public python-itemadapter
35937 (package
35938 (name "python-itemadapter")
35939 (version "0.12.0")
35940 (source
35941 (origin
35942 (method git-fetch)
35943 (uri (git-reference
35944 (url "https://github.com/scrapy/itemadapter")
35945 (commit (string-append "v" version))))
35946 (file-name (git-file-name name version))
35947 (sha256
35948 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35949 (build-system pyproject-build-system)
35950 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35951 (native-inputs (list python-hatchling))
35952 (home-page "https://github.com/scrapy/itemadapter")
35953 (synopsis "Common interface for data container classes")
35954 (description
35955 "The ItemAdapter class is a wrapper for data container objects, providing
35956a common interface to handle objects of different types in an uniform manner,
35957regardless of their underlying implementation.
35958
35959Currently supported types are:
35960@itemize
35961@item scrapy.item.Item
35962@item dict
35963@item dataclass-based classes
35964@item attrs-based classes
35965@item pydantic-based classes
35966@end itemize
35967
35968Additionally, interaction with arbitrary types is supported by
35969implementing a pre-defined interface.")
35970 (license license:bsd-3)))
35971
35972(define-public python-itemloaders
35973 (package
35974 (name "python-itemloaders")
35975 (version "1.3.2")
35976 (source
35977 (origin
35978 (method url-fetch)
35979 (uri (pypi-uri "itemloaders" version))
35980 (sha256
35981 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35982 (build-system pyproject-build-system)
35983 (native-inputs
35984 (list python-packaging
35985 python-pytest
35986 python-setuptools
35987 python-wheel))
35988 (propagated-inputs
35989 (list python-itemadapter python-jmespath python-parsel))
35990 (home-page "https://github.com/scrapy/itemloaders")
35991 (synopsis "Base library for scrapy's ItemLoader")
35992 (description "Itemloaders is a library that helps you collect data
35993from HTML and XML sources. It comes in handy to extract data from web
35994pages, as it supports data extraction using CSS and XPath Selectors.
35995
35996It’s specially useful when you need to standardize the data from many
35997sources. For example, it allows you to have all your casting and
35998parsing rules in a single place.")
35999 (license license:bsd-3)))
36000
36001(define-public python-iterable-io
36002 (package
36003 (name "python-iterable-io")
36004 (version "1.0.0")
36005 (source
36006 (origin
36007 (method url-fetch)
36008 (uri (pypi-uri "iterable-io" version))
36009 (sha256
36010 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
36011 (build-system pyproject-build-system)
36012 (native-inputs (list python-setuptools python-pytest))
36013 (home-page "https://github.com/pR0Ps/iterable-io")
36014 (synopsis "Adapt generators and other iterables to a file-like interface")
36015 (description
36016 "@code{iterable-io} is a small Python library that provides an adapter so
36017that it's possible to read from
36018@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
36019in the same way as
36020@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
36021objects.")
36022 (license license:lgpl3)))
36023
36024(define-public python-iteround
36025 (package
36026 (name "python-iteround")
36027 (version "1.0.4")
36028 ;; PyPI only has wheels.
36029 (source (origin
36030 (method git-fetch)
36031 (uri (git-reference
36032 (url "https://github.com/cgdeboer/iteround")
36033 (commit (string-append "v" version))))
36034 (file-name (git-file-name name version))
36035 (sha256
36036 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
36037 (build-system pyproject-build-system)
36038 (native-inputs
36039 (list python-pytest python-setuptools python-wheel))
36040 (home-page "https://github.com/cgdeboer/iteround")
36041 (synopsis "Sum-safe rounding for Iterables")
36042 (description "Iteround is a standard library sum-safe rounding library for
36043Python iterables (lists, tuples, dicts).")
36044 (license license:expat)))
36045
36046(define-public python-hypy-utils
36047 (package
36048 (name "python-hypy-utils")
36049 (version "1.0.29")
36050 (source
36051 (origin
36052 (method url-fetch)
36053 (uri (pypi-uri "hypy_utils" version))
36054 (sha256
36055 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
36056 (build-system pyproject-build-system)
36057 (arguments (list #:tests? #f)) ; No tests upstream.
36058 (native-inputs (list python-setuptools))
36059 (home-page "https://github.com/hykilpikonna/HyPyUtils")
36060 (synopsis "Python utility functions for HyDEV")
36061 (description "This module provides Python utility functions for modifying
36062and setting the color of terminal output, via HyDEV.")
36063 (license license:expat)))
36064
36065(define-public python-mike
36066 (package
36067 (name "python-mike")
36068 (version "2.1.3")
36069 (source
36070 (origin
36071 (method git-fetch) ; no tests data in PyPi package
36072 (uri (git-reference
36073 (url "https://github.com/jimporter/mike")
36074 (commit (string-append "v" version))))
36075 (file-name (git-file-name name version))
36076 (sha256
36077 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
36078 (build-system pyproject-build-system)
36079 (arguments
36080 (list
36081 #:test-flags
36082 ;; Most of integration tests hang or fail.
36083 #~(list "--ignore=test/integration/"
36084 ;; AttributeError: 'NoneType' object has no attribute 'group'
36085 "--ignore=test/unit/test_commands.py"
36086 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
36087 (native-inputs
36088 (list git-minimal/pinned
36089 python-pytest
36090 python-setuptools
36091 python-shtab
36092 python-wheel))
36093 (propagated-inputs
36094 (list python-importlib-metadata
36095 python-importlib-resources
36096 python-jinja2
36097 python-mkdocs
36098 python-pyparsing
36099 python-pyyaml
36100 python-pyyaml-env-tag
36101 python-verspec))
36102 (home-page "https://github.com/jimporter/mike")
36103 (synopsis "Manage multiple versions of MkDocs-powered documentation")
36104 (description
36105 "This package provides a Python utility to easily deploy multiple
36106versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
36107to Github via gh-pages.")
36108 (license license:bsd-3)))
36109
36110(define-public python-arpeggio
36111 (package
36112 (name "python-arpeggio")
36113 (version "2.0.2")
36114 (source
36115 (origin
36116 (method url-fetch)
36117 (uri (pypi-uri "Arpeggio" version))
36118 (sha256
36119 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
36120 (build-system pyproject-build-system)
36121 (native-inputs
36122 (list python-pytest
36123 python-setuptools
36124 python-wheel))
36125 (home-page "https://github.com/textX/Arpeggio")
36126 (synopsis "Packrat parser interpreter for Python")
36127 (description
36128 "This Python library provides a recursive descent parser with
36129backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
36130based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
36131for DSL development but it can be used for all sorts of general purpose
36132parsing.")
36133 (license license:expat)))
36134
36135(define-public python-flatten-json
36136 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
36137 ;; the commit associated with 0.1.14 version.
36138 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
36139 (revision "0"))
36140 (package
36141 (name "python-flatten-json")
36142 (version (git-version "0.1.14" revision commit))
36143 (source
36144 (origin
36145 (method git-fetch) ; no tests in PyPI release
36146 (uri (git-reference
36147 (url "https://github.com/amirziai/flatten")
36148 (commit commit)))
36149 (file-name (git-file-name name version))
36150 (sha256
36151 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
36152 (build-system pyproject-build-system)
36153 (native-inputs
36154 (list python-pytest
36155 python-setuptools
36156 python-wheel))
36157 (propagated-inputs
36158 (list python-six))
36159 (home-page "https://github.com/amirziai/flatten")
36160 (synopsis "Flatten JSON objects")
36161 (description
36162 "The @code{flatten_json} Python library flattens the hierarchy in your
36163object, which can be useful if you want to force your objects into a table.")
36164 (license license:expat))))
36165
36166(define-public python-deepdiff
36167 (package
36168 (name "python-deepdiff")
36169 (version "8.6.1")
36170 (source (origin
36171 (method url-fetch)
36172 (uri (pypi-uri "deepdiff" version))
36173 (sha256
36174 (base32
36175 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
36176 (build-system pyproject-build-system)
36177 (arguments
36178 ;; tests: 1028 passed, 10 skipped, 1 deselected
36179 ;; Ignore Polars test (not packaged).
36180 (list #:test-flags #~(list "-k" "not test_polars")))
36181 (propagated-inputs (list python-click ; for CLI
36182 python-pyyaml ; for CLI
36183 python-orderly-set
36184 python-orjson)) ; for optimization
36185 (native-inputs
36186 (list python-flit-core
36187 python-jsonpickle
36188 python-numpy
36189 python-pandas
36190 python-pydantic
36191 python-pytest
36192 python-pytest-benchmark
36193 python-pytz
36194 python-uuid6
36195 python-tomli-w))
36196 (home-page "https://github.com/seperman/deepdiff")
36197 (synopsis "Deep difference and search of any Python object/data")
36198 (description
36199 "This package provides tools for computing deep differences and searching
36200of any Python object/data. Recreate objects by adding adding deltas to each
36201other.")
36202 (license license:expat)))
36203
36204(define-public python-deepmerge
36205 (package
36206 (name "python-deepmerge")
36207 (version "1.0.1")
36208 (source
36209 (origin
36210 (method url-fetch)
36211 (uri (pypi-uri "deepmerge" version))
36212 (sha256
36213 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
36214 (build-system pyproject-build-system)
36215 (native-inputs
36216 (list python-setuptools-scm
36217 python-pytest
36218 python-setuptools
36219 python-wheel))
36220 (home-page "https://deepmerge.readthedocs.io/en/latest/")
36221 (synopsis "Merge nested data structures")
36222 (description
36223 "The @code{deep-merge} Python library provides a toolset to deeply merge
36224nested data structures in Python like lists and dictionaries.")
36225 (license license:expat)))
36226
36227(define-public python-durationpy
36228 (package
36229 (name "python-durationpy")
36230 (version "0.10")
36231 (source
36232 (origin
36233 (method git-fetch)
36234 (uri (git-reference
36235 (url "https://github.com/icholy/durationpy")
36236 (commit version)))
36237 (file-name (git-file-name name version))
36238 (sha256
36239 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
36240 (build-system pyproject-build-system)
36241 (arguments
36242 (list #:test-backend #~'custom
36243 #:test-flags #~(list "test.py")))
36244 (native-inputs (list python-setuptools))
36245 (home-page "https://github.com/icholy/durationpy")
36246 (synopsis "Python <-> Golang time duration formats converter")
36247 (description
36248 "This package implements a functionality to convert between
36249Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
36250 (license license:expat)))
36251
36252(define-public python-murmurhash3
36253 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
36254 (revision "0"))
36255 (package
36256 (name "python-murmurhash3")
36257 (version (git-version "2.3.5" revision commit))
36258 (source
36259 (origin
36260 (method git-fetch)
36261 (uri (git-reference
36262 (url "https://github.com/veegee/mmh3")
36263 (commit commit)))
36264 (file-name (git-file-name name version))
36265 (sha256
36266 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
36267 (build-system pyproject-build-system)
36268 (arguments
36269 (list
36270 #:phases
36271 #~(modify-phases %standard-phases
36272 (add-after 'unpack 'fix-package
36273 (lambda _
36274 (substitute* "mmh3module.cpp"
36275 (("#include <stdio\\.h>")
36276 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
36277 (native-inputs
36278 (list python-cython python-pytest python-setuptools python-wheel))
36279 (home-page "https://github.com/veegee/mmh3")
36280 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
36281 (description
36282 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
36283of fast and robust hash functions. This library is a Python extension module
36284written in C.")
36285 (license license:public-domain))))
36286
36287(define-public python-scooby
36288 (package
36289 (name "python-scooby")
36290 (version "0.11.0")
36291 (source
36292 (origin
36293 (method git-fetch)
36294 (uri (git-reference
36295 (url "https://github.com/banesullivan/scooby")
36296 (commit (string-append "v" version))))
36297 (file-name (git-file-name name version))
36298 (sha256
36299 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
36300 (build-system pyproject-build-system)
36301 (arguments
36302 (list
36303 ;; tests: 19 passed, 5 deselected, 1 warning
36304 #:test-flags
36305 ;; AssertionError: assert 'Module not found' == '0.1.0'
36306 #~(list "--deselect=tests/test_scooby.py::test_get_version"
36307 ;; ModuleNotFoundError: No module named 'no_version'
36308 "--deselect=tests/test_scooby.py::test_tracking"
36309 ;; Failed: DID NOT RAISE <class 'OSError'>
36310 "--deselect=tests/test_scooby.py::test_import_os_error"
36311 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
36312 "--deselect=tests/test_scooby.py::test_import_time"
36313 ;; Errored
36314 "--deselect=tests/test_scooby.py::test_cli")))
36315 (native-inputs
36316 (list python-beautifulsoup4
36317 python-numpy
36318 python-pytest
36319 python-pyvips
36320 python-scipy
36321 python-setuptools
36322 python-setuptools-scm))
36323 (propagated-inputs
36324 (list python-psutil))
36325 (home-page "https://github.com/banesullivan/scooby")
36326 (synopsis "Report hardware information and Python package versions")
36327 (description
36328 "The Scooby package reports the following information about the currently
36329running system:
36330
36331@itemize
36332@item operating system name;
36333@item hardware information including machine type (e.g., @samp{i386},
36334@samp{x86_64}, etc.), CPU count and total RAM;
36335@item Python environment (e.g., Python, IPython, etc.);
36336@item file system name;
36337@item Python version;
36338@item versions of specified Python packages.
36339@end itemize
36340
36341It can generate reports as HTML tables or plain text lists.
36342
36343Scooby has no required dependencies, and only few optional dependencies.")
36344 (license license:expat)))
36345
36346(define-public python-cymem
36347 (package
36348 (name "python-cymem")
36349 (version "2.0.6")
36350 (source
36351 (origin
36352 (method git-fetch)
36353 (uri (git-reference
36354 (url "https://github.com/explosion/cymem")
36355 (commit (string-append "v" version))))
36356 (file-name (git-file-name name version))
36357 (sha256
36358 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
36359 (build-system pyproject-build-system)
36360 (native-inputs (list python-cython python-pytest python-setuptools))
36361 (inputs (list python))
36362 (home-page "https://github.com/explosion/cymem")
36363 (synopsis "Cython memory pool for RAII-style memory management")
36364 (description
36365 "Cymem provides two small memory-management helpers for Cython. They make it
36366easy to tie memory to a Python object's life-cycle, so that the memory is freed
36367when the object is garbage collected.")
36368 (license license:expat)))
36369
36370(define-public python-preshed
36371 (package
36372 (name "python-preshed")
36373 (version "3.0.6")
36374 (source
36375 (origin
36376 (method git-fetch)
36377 (uri (git-reference
36378 (url "https://github.com/explosion/preshed")
36379 (commit (string-append "v" version))))
36380 (file-name (git-file-name name version))
36381 (sha256
36382 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
36383 (build-system pyproject-build-system)
36384 (arguments
36385 (list
36386 #:phases
36387 #~(modify-phases %standard-phases
36388 (add-after 'unpack 'patch-msvccompiler
36389 (lambda _
36390 (substitute* "setup.py"
36391 (("from distutils import ccompiler, msvccompiler")
36392 "from distutils import ccompiler")
36393 (("and msvccompiler.*")
36394 ""))))
36395 (replace 'check
36396 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
36397 (with-directory-excursion (site-packages inputs outputs)
36398 (for-each delete-file (find-files "." "\\.pyx$"))
36399 (apply (assoc-ref %standard-phases 'check) args)
36400 (delete-file-recursively "preshed/tests")))))))
36401 (native-inputs
36402 (list python-cython python-cymem python-pytest python-setuptools))
36403 (inputs (list python python-cymem python-murmurhash))
36404 (home-page "https://github.com/explosion/preshed")
36405 (synopsis "Cython hash tables that assume keys are pre-hashed")
36406 (description
36407 "Simple but high performance Cython hash table mapping pre-randomized keys
36408to void* values.")
36409 (license license:expat)))
36410
36411(define-public python-catalogue
36412 (package
36413 (name "python-catalogue")
36414 (version "2.0.10")
36415 (source
36416 (origin
36417 (method git-fetch)
36418 (uri (git-reference
36419 (url "https://github.com/explosion/catalogue")
36420 (commit (string-append "v" version))))
36421 (file-name (git-file-name name version))
36422 (sha256
36423 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
36424 (build-system pyproject-build-system)
36425 (native-inputs (list python-pytest python-setuptools))
36426 (home-page "https://github.com/explosion/catalogue")
36427 (synopsis "Lightweight function registries for your library")
36428 (description
36429 "This package is a tiny, zero-dependencies library that makes it easy to
36430add function (or object) registries to your code. Function registries are
36431helpful when you have objects that need to be both easily serializable and
36432fully customizable. Instead of passing a function into your object, you pass
36433in an identifier name, which the object can use to lookup the function from
36434the registry. This makes the object easy to serialize, because the name is a
36435simple string. If you instead saved the function, you'd have to use Pickle
36436for serialization, which has many drawbacks.")
36437 (license license:expat)))
36438
36439(define-public python-gatt
36440 (package
36441 (name "python-gatt")
36442 (version "0.2.7")
36443 (source (origin
36444 (method url-fetch)
36445 (uri (pypi-uri "gatt" version))
36446 (sha256
36447 (base32
36448 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
36449 (build-system pyproject-build-system)
36450 (arguments (list #:tests? #f)) ; No tests upstream.
36451 (propagated-inputs (list python-dbus-1.2 python-pygobject))
36452 (native-inputs (list python-setuptools))
36453 (home-page "https://github.com/getsenic/gatt-python")
36454 (synopsis "Bluetooth GATT SDK for Python")
36455 (description
36456 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
36457Software Development Kit} for Python helps you implement and communicate with
36458any Bluetooth Low Energy device that has a GATT profile. It supports:
36459
36460@itemize @bullet
36461@item Discovering nearby Bluetooth Low Energy devices
36462@item Connecting and disconnecting devices
36463@item Implementing your custom GATT profile
36464@item Accessing all GATT services
36465@item Accessing all GATT characteristics
36466@item Reading characteristic values
36467@item Writing characteristic values
36468@item Subscribing for characteristic value change notifications
36469@end itemize
36470
36471Currently, Linux is the only platform supported by this library.")
36472 (license license:expat)))
36473
36474(define-public python-dbus-fast
36475 (package
36476 (name "python-dbus-fast")
36477 (version "2.44.3")
36478 (source
36479 (origin
36480 (method git-fetch) ;No tests in PyPI package.
36481 (uri (git-reference
36482 (url "https://github.com/Bluetooth-Devices/dbus-fast")
36483 (commit (string-append "v" version))))
36484 (file-name (git-file-name name version))
36485 (sha256
36486 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
36487 (build-system pyproject-build-system)
36488 (arguments
36489 (list
36490 #:test-flags
36491 '(list
36492 ;; These tests need pytest_codspeed.
36493 "--ignore-glob=tests/benchmarks/test_*marshall.py"
36494 ;; These tests all fail with:
36495 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
36496 ;; set and could not get DISPLAY environment variable to get bus address
36497 "-m" "not asyncio")))
36498 (native-inputs (list python-cython
36499 python-poetry-core
36500 python-setuptools
36501 python-pytest
36502 python-pytest-asyncio
36503 python-covdefaults))
36504 (home-page "https://github.com/bluetooth-devices/dbus-fast")
36505 (synopsis "Faster version of dbus-next")
36506 (description "This package provides a faster version of dbus-next.")
36507 (license license:expat)))
36508
36509(define-public python-bleak
36510 (package
36511 (name "python-bleak")
36512 (version "3.0.2")
36513 (source
36514 (origin
36515 (method git-fetch)
36516 (uri (git-reference
36517 (url "https://github.com/hbldh/bleak")
36518 (commit (string-append "v" version))))
36519 (file-name (git-file-name name version))
36520 (sha256
36521 (base32 "1dlryjgi0pzmjjnssq9498chwnjzsx14kg1kyp1465waybgwvs93"))))
36522 (build-system pyproject-build-system)
36523 (arguments
36524 (list
36525 #:test-flags #~(list "--ignore=tests/integration")))
36526 (native-inputs
36527 (list python-coverage ;hard dependency
36528 python-pytest
36529 python-pytest-asyncio
36530 python-uv-build))
36531 (propagated-inputs
36532 (list python-dbus-fast))
36533 (home-page "https://github.com/hbldh/bleak")
36534 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
36535 (description "This package provides a Bluetooth Low Energy platform-agnostic
36536client library.")
36537 (license license:expat)))
36538
36539(define-public python-ndeflib
36540 (package
36541 (name "python-ndeflib")
36542 (version "0.3.3")
36543 (source
36544 (origin
36545 (method url-fetch)
36546 (uri (pypi-uri "ndeflib" version))
36547 (sha256
36548 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
36549 (build-system pyproject-build-system)
36550 (arguments
36551 (list
36552 ;; tests: 1571 passed, 37 deselected, 1 warning
36553 ;;
36554 ;; Three test fail with assertion not equal:
36555 ;;
36556 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
36557 ;; bytes] - AssertionError
36558 ;;
36559 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
36560 ;; 1 bytes] - AssertionError
36561 ;;
36562 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
36563 ;; AssertionError
36564 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
36565 "test_encode_error"))))
36566 (native-inputs (list python-pytest-8 python-setuptools))
36567 (home-page "https://ndeflib.readthedocs.io/")
36568 (synopsis "NFC Data Exchange Format decoder and encoder.")
36569 (description "This package provides a NFC (Near-Field Communication)
36570Data Exchange Format decoder and encoder.")
36571 (license license:isc)))
36572
36573(define-public python-nfcpy
36574 (package
36575 (name "python-nfcpy")
36576 (version "1.0.4")
36577 (source
36578 (origin
36579 (method url-fetch)
36580 (uri (pypi-uri "nfcpy" version))
36581 (sha256
36582 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
36583 (build-system pyproject-build-system)
36584 (arguments
36585 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
36586 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
36587 python-pyserial))
36588 (native-inputs (list python-setuptools python-wheel))
36589 (home-page "https://github.com/nfcpy/nfcpy")
36590 (synopsis "Python module for Near-Field Communication.")
36591 (description "This package provides a Python module for Near-Field
36592Communication.")
36593 (license license:eupl1.1)))
36594
36595(define-public python-clrprint
36596 (package
36597 (name "python-clrprint")
36598 (version "2.0.1")
36599 (source (origin
36600 (method url-fetch)
36601 (uri (pypi-uri "clrprint" version))
36602 (sha256
36603 (base32
36604 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
36605 (build-system pyproject-build-system)
36606 (arguments '(#:tests? #f)) ;there are no tests
36607 (native-inputs
36608 (list python-setuptools))
36609 (propagated-inputs (list python-colorama python-termcolor))
36610 (home-page "https://github.com/AbhijithAJ/clrprint")
36611 (synopsis "Print colorful output in the terminal")
36612 (description "@code{clrprint} is developed to print colorful output in the
36613terminal. It has red, blue, green, yellow, purple and black/white (default)
36614colors.")
36615 (license license:expat)))
36616
36617(define-public python-mido
36618 (package
36619 (name "python-mido")
36620 (version "1.3.2")
36621 (source (origin
36622 (method url-fetch)
36623 (uri (pypi-uri "mido" version))
36624 (sha256
36625 (base32
36626 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
36627 (build-system pyproject-build-system)
36628 (arguments
36629 (list #:phases
36630 #~(modify-phases %standard-phases
36631 ;; This package requires python-packaging~=23.1 which is not yet
36632 ;; updated to. As per pyproject.toml, it is required to provide
36633 ;; a nice version_info object.
36634 ;; TODO: After updating python-packaging, fix this.
36635 (delete 'sanity-check))))
36636 (propagated-inputs (list python-importlib-metadata python-packaging))
36637 (native-inputs (list python-pytest python-setuptools python-wheel))
36638 (home-page "https://mido.readthedocs.io/en/stable/")
36639 (synopsis "MIDI Objects for Python")
36640 (description "This library is for working with MIDI 1.0 ports, messages and
36641files.")
36642 (license license:expat)))
36643
36644(define-public python-musical-scales
36645 (package
36646 (name "python-musical-scales")
36647 (version "1.0.1")
36648 (source (origin
36649 (method url-fetch)
36650 (uri (pypi-uri "musical-scales" version))
36651 (sha256
36652 (base32
36653 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
36654 (build-system pyproject-build-system)
36655 (arguments (list #:tests? #f)) ;no tests
36656 (native-inputs (list python-setuptools))
36657 (home-page "https://github.com/hmillerbakewell/musical-scales")
36658 (synopsis "Retrieve a scale based on a given mode and starting note")
36659 (description
36660 "Retrieve a scale based on a given mode and starting note.
36661Information about these scales can be
36662@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
36663Wikipedia}.")
36664 (license license:expat)))
36665
36666(define-public python-langcodes
36667 (package
36668 (name "python-langcodes")
36669 (version "3.5.0")
36670 (source (origin
36671 (method url-fetch)
36672 (uri (pypi-uri "langcodes" version))
36673 (sha256
36674 (base32
36675 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
36676 (build-system pyproject-build-system)
36677 (native-inputs
36678 (list python-pytest
36679 python-setuptools
36680 python-setuptools-scm))
36681 (propagated-inputs
36682 ;; [optional:data]
36683 (list python-language-data))
36684 (home-page "https://github.com/rspeer/langcodes")
36685 (synopsis "Python library for working with language codes")
36686 (description
36687 "This package provides a Python library for working with and comparing
36688language codes.
36689
36690@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3669147}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3669247 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
36693with it, and it also implements recommendations from the
36694@url{http://cldr.unicode.org/, Unicode CLDR}.
36695
36696@code{python-langcodes} can also refer to a database of language properties
36697and names, built from Unicode CLDR and the IANA subtag registry, if you
36698install @code{python-language-data}.")
36699 (license license:expat)))
36700
36701(define-public python-anyascii
36702 (package
36703 (name "python-anyascii")
36704 (version "0.3.3")
36705 (source (origin
36706 (method url-fetch)
36707 (uri (pypi-uri "anyascii" version))
36708 (sha256
36709 (base32
36710 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
36711 (build-system pyproject-build-system)
36712 (native-inputs (list python-pytest python-flit-core))
36713 (home-page "https://anyascii.com")
36714 (synopsis "Unicode to ASCII transliteration")
36715 (description "@code{anyascii} converts Unicode characters to their best
36716ASCII representation.")
36717 (license license:isc)))
36718
36719(define-public python-geomet
36720 (package
36721 (name "python-geomet")
36722 (version "1.1.0")
36723 (source
36724 (origin
36725 (method git-fetch)
36726 (uri (git-reference
36727 (url "https://github.com/geomet/geomet")
36728 (commit version)))
36729 (file-name (git-file-name name version))
36730 (sha256
36731 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
36732 (build-system pyproject-build-system)
36733 (native-inputs (list python-pytest python-setuptools))
36734 (propagated-inputs (list python-click python-six))
36735 (home-page "https://github.com/geomet/geomet")
36736 (synopsis
36737 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
36738 (description
36739 "This package provides utilities and functions for converting
36740GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
36741versa. Extended WKB/WKT are also supported.")
36742 (license license:asl2.0)))
36743
36744(define-public python-cogapp
36745 (package
36746 (name "python-cogapp")
36747 (version "3.3.0")
36748 (source (origin
36749 (method url-fetch)
36750 (uri (pypi-uri "cogapp" version))
36751 (sha256
36752 (base32
36753 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
36754 (build-system pyproject-build-system)
36755 (native-inputs (list python-pytest python-setuptools python-wheel))
36756 (home-page "https://nedbatchelder.com/code/cog")
36757 (synopsis "Content generation tool that leverages Python")
36758 (description "Cog is a file generation tool. It allows using pieces of
36759Python code as generators in your source files to generate arbitrary text.")
36760 (license license:expat)))
36761
36762(define-public python-cxxheaderparser
36763 (package
36764 (name "python-cxxheaderparser")
36765 (version "1.7.0")
36766 (source
36767 (origin
36768 (method git-fetch)
36769 (uri (git-reference
36770 (url "https://github.com/robotpy/cxxheaderparser")
36771 (commit version)))
36772 (file-name (git-file-name name version))
36773 (sha256
36774 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
36775 (build-system pyproject-build-system)
36776 (native-inputs
36777 (list python-hatch-vcs python-pytest))
36778 (home-page "https://github.com/robotpy/cxxheaderparser/")
36779 (synopsis "Python C++ header parser")
36780 (description "Pure python C++ header parser that parses C++ headers in a
36781mildly naive manner that allows it to handle many C constructs, including
36782many (C++11 and beyond) features.")
36783 (license license:bsd-3)))
36784
36785(define-public python-bsdiff4
36786 (package
36787 (name "python-bsdiff4")
36788 (version "1.2.6")
36789 (source
36790 (origin
36791 (method git-fetch)
36792 (uri (git-reference
36793 (url "https://github.com/ilanschnell/bsdiff4")
36794 (commit version)))
36795 (file-name (git-file-name name version))
36796 (sha256
36797 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
36798 (build-system pyproject-build-system)
36799 (arguments
36800 (list
36801 #:test-flags #~(list "--pyargs" "bsdiff4")))
36802 (native-inputs
36803 (list python-pytest
36804 python-setuptools
36805 python-wheel))
36806 (home-page "https://github.com/ilanschnell/bsdiff4")
36807 (synopsis "Binary diff and patch using the BSDIFF4 format")
36808 (description
36809 "This package provides a Python library for the @code{bsdiff} binary diff
36810utility. It also provides two command-line tools, @code{bsdiff4} and
36811@code{bspatch4}.")
36812 (license license:bsd-2)))
36813
36814(define-public python-mpv
36815 (package
36816 (name "python-mpv")
36817 (version "1.0.8")
36818 (source
36819 (origin
36820 (method git-fetch)
36821 (uri (git-reference
36822 (url "https://github.com/jaseg/python-mpv")
36823 (commit (string-append "v" version))))
36824 (file-name (git-file-name name version))
36825 (sha256
36826 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
36827 (build-system pyproject-build-system)
36828 (arguments
36829 (list #:phases
36830 #~(modify-phases %standard-phases
36831 (add-before 'build 'patch-reference-to-mpv
36832 (lambda* (#:key inputs #:allow-other-keys)
36833 ;; Without an absolute path it is not able find and load libmpv.
36834 (substitute* "mpv.py"
36835 (("sofile = .*")
36836 (format #f "sofile = '~a/lib/libmpv.so'~%"
36837 #$(this-package-input "mpv"))))))
36838 (add-before 'check 'prepare-for-tests
36839 (lambda _
36840 ;; Fontconfig throws errors when it has no cache dir to use.
36841 (setenv "XDG_CACHE_HOME" (getcwd))
36842 ;; Some tests fail without a writable and readable HOME.
36843 (setenv "HOME" (getcwd))
36844 (setenv "PY_MPV_SKIP_TESTS"
36845 "test_wait_for_property_event_overflow"))))))
36846 (native-inputs
36847 (list python-pytest
36848 python-pyvirtualdisplay
36849 python-setuptools
36850 xorg-server-for-tests))
36851 (inputs (list mpv))
36852 (propagated-inputs (list python-pillow)) ;for raw screenshots
36853 (home-page "https://github.com/jaseg/python-mpv")
36854 (synopsis "Python interface to the mpv media player")
36855 (description
36856 "python-mpv is a ctypes-based python interface to the mpv media player.
36857It gives you more or less full control of all features of the player, just
36858as the lua interface does.")
36859 ;; From the project's README:
36860 ;; python-mpv inherits the underlying libmpv's license, which can be either
36861 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
36862 ;; copyright page.
36863 (license license:gpl2+)))
36864
36865(define-public python-biblib
36866 (let ((upstream-version "0.1.0")
36867 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
36868 (revision "1"))
36869 (package
36870 (name "python-biblib")
36871 (version (git-version upstream-version revision commit))
36872 (source
36873 (origin
36874 (method git-fetch)
36875 (uri (git-reference
36876 (url "https://github.com/aclements/biblib")
36877 (commit commit)))
36878 (sha256
36879 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
36880 (file-name (git-file-name name version))))
36881 (build-system pyproject-build-system)
36882 (arguments (list #:tests? #f)) ; No tests upstream.
36883 (native-inputs (list python-setuptools))
36884 (home-page "https://github.com/aclements/biblib")
36885 (synopsis "BibTeX parsing and transformation library")
36886 (description
36887 "Biblib provides a simple, standalone Python 3 package for parsing
36888BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
36889entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
36890source code for BibTeX and hence (barring bugs in translation) should be fully
36891compatible with BibTeX's own parser.")
36892 ;; N.B. It seems the parser was translated from WEB by hand: this
36893 ;; package does not contain any generated files.
36894 (license license:expat))))
36895
36896(define-public python-cyclic
36897 (package
36898 (name "python-cyclic")
36899 (version "1.0.0")
36900 (source
36901 (origin
36902 (method git-fetch)
36903 (uri (git-reference
36904 (url "https://github.com/neurobin/cyclic")
36905 ;; Release is not tagged on github, see
36906 ;; https://github.com/neurobin/cyclic/issues/2
36907 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
36908 (file-name (git-file-name name version))
36909 (sha256
36910 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
36911 (build-system pyproject-build-system)
36912 (arguments (list #:test-backend #~'unittest))
36913 (native-inputs (list python-setuptools))
36914 (home-page "https://github.com/neurobin/cyclic")
36915 (synopsis "Handle cyclic relations")
36916 (description "This package handles cyclic relations compared by value.")
36917 (license license:bsd-3)))
36918
36919(define-public python-rcslice
36920 (package
36921 (name "python-rcslice")
36922 (version "1.1.0")
36923 (source
36924 (origin
36925 (method git-fetch)
36926 (uri (git-reference
36927 (url "https://github.com/neurobin/rcslice")
36928 ;; Releases are not tagged on github, see
36929 ;; https://github.com/neurobin/rcslice/issues/2
36930 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
36931 (file-name (git-file-name name version))
36932 (sha256
36933 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
36934 (build-system pyproject-build-system)
36935 (arguments (list #:test-backend #~'unittest))
36936 (native-inputs (list python-setuptools))
36937 (home-page "https://github.com/neurobin/rcslice")
36938 (synopsis "Slice a list of sliceables")
36939 (description
36940 "This package provides Python module to slice a list of sliceables (1
36941indexed, both start and end index are inclusive). Helps to slice file content
36942line by line or column by column or a combination of both.")
36943 (license license:bsd-3)))
36944
36945(define-public python-rpds-py
36946 (package
36947 (name "python-rpds-py")
36948 (version "0.30.0")
36949 (source (origin
36950 (method url-fetch)
36951 (uri (pypi-uri "rpds_py" version))
36952 (sha256
36953 (base32
36954 "110y8k62b9xb3slny7gf89943xpbji3s7vl7yz0g0jh1j37zg3yx"))))
36955 (build-system cargo-build-system)
36956 (arguments
36957 (list
36958 #:imported-modules `(,@%cargo-build-system-modules
36959 ,@%pyproject-build-system-modules)
36960 #:modules '((guix build cargo-build-system)
36961 ((guix build pyproject-build-system) #:prefix py:)
36962 (guix build utils))
36963 #:phases
36964 #~(modify-phases %standard-phases
36965 (add-after 'build 'build-python-module
36966 (assoc-ref py:%standard-phases 'build))
36967 (add-after 'build-python-module 'install-python-module
36968 (assoc-ref py:%standard-phases 'install)))
36969 #:install-source? #false))
36970 (inputs
36971 (cons maturin (cargo-inputs 'python-rpds-py)))
36972 (native-inputs
36973 (list python-wrapper))
36974 (home-page "https://github.com/crate-py/rpds")
36975 (synopsis "Bindings to Rust rpds for persistent data structures")
36976 (description "This package provides Python bindings to the Rust rpds crate
36977for persistent data structures. It was written initially to support replacing
36978@code{python-pyrsistent}.")
36979 (license license:expat)))
36980
36981(define-public python-nanoid
36982 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36983 (revision "0"))
36984 (package
36985 (name "python-nanoid")
36986 (version "2.0.0")
36987 (source
36988 (origin
36989 (method git-fetch)
36990 (uri
36991 (git-reference
36992 (url "https://github.com/puyuan/py-nanoid")
36993 (commit commit)))
36994 (file-name (git-file-name name commit))
36995 (sha256
36996 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36997 (build-system pyproject-build-system)
36998 (native-inputs (list python-pytest python-setuptools))
36999 (home-page "https://github.com/puyuan/py-nanoid")
37000 (synopsis "Unique string ID generator")
37001 (description
37002 "This package provides a tiny, secure, URL-friendly, unique string ID
37003generator for Python.")
37004 (license license:expat))))
37005
37006(define-public python-misc-utils
37007 (package
37008 (name "python-misc-utils")
37009 (version "0.28")
37010 (source
37011 (origin
37012 (method git-fetch)
37013 (uri (git-reference
37014 (url "https://github.com/davidel/py_misc_utils")
37015 (commit version)))
37016 (file-name (git-file-name name version))
37017 (sha256
37018 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
37019 (build-system pyproject-build-system)
37020 (arguments
37021 (list
37022 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
37023 #:test-backend #~'custom
37024 #:test-flags #~(list "test/test_runner.py")))
37025 (propagated-inputs
37026 (list python-numpy python-pandas python-psutil python-pyyaml))
37027 (native-inputs (list python-setuptools))
37028 (home-page "https://github.com/davidel/py_misc_utils")
37029 (synopsis "Collection of Python utilities")
37030 (description "This package provides a collection of Python miscellaneous
37031utility tools mainly used by other projects of the same author.")
37032 (license license:asl2.0)))
37033
37034(define-public python-misskey
37035 (package
37036 (name "python-misskey")
37037 (version "4.1.0")
37038 (source (origin
37039 (method git-fetch)
37040 (uri (git-reference
37041 (url "https://github.com/YuzuRyo61/Misskey.py")
37042 (commit (string-append "v" version))))
37043 (file-name (git-file-name name version))
37044 (sha256
37045 (base32
37046 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
37047 (build-system pyproject-build-system)
37048 (arguments (list #:tests? #f)) ;needs network
37049 (native-inputs (list python-setuptools))
37050 (propagated-inputs (list python-requests))
37051 (home-page "https://misskeypy.readthedocs.io")
37052 (synopsis "Python bindings for Misskey's API")
37053 (description
37054 "This package provides access to Misskey's API. Misskey is a SNS
37055platform using the ActivityPub protocol.")
37056 (license license:expat)))
37057
37058(define-public python-lief
37059 (package
37060 (name "python-lief")
37061 (version "1.0.0")
37062 (source
37063 (origin
37064 (method git-fetch)
37065 (uri (git-reference
37066 (url "https://github.com/lief-project/LIEF")
37067 (commit version)))
37068 (file-name (git-file-name name version))
37069 (sha256
37070 (base32 "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2"))))
37071 (build-system pyproject-build-system)
37072 (arguments
37073 (list
37074 ;; TODO: Tests neeed some setup, see:
37075 ;; <.github/workflows/linux-x86-64.yml>.
37076 #:tests? #f
37077 #:phases
37078 #~(modify-phases %standard-phases
37079 (add-before 'build 'change-directory
37080 (lambda _
37081 (chdir "api/python"))))))
37082 (native-inputs
37083 (list ninja
37084 python-pydantic
37085 python-scikit-build-core
37086 python-tomli))
37087 (home-page "https://github.com/lief-project/LIEF")
37088 (synopsis "Library to instrument executable formats")
37089 (description
37090 "@code{python-lief} is a cross platform library which can parse, modify
37091and abstract ELF, PE and MachO formats.")
37092 (license license:asl2.0)))
37093
37094(define-public python-eris
37095 (package
37096 (name "python-eris")
37097 (version "1.0.0")
37098 (source
37099 (origin
37100 (method url-fetch)
37101 (uri (pypi-uri "eris" version))
37102 (sha256
37103 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
37104 (build-system pyproject-build-system)
37105 (arguments
37106 ;; No tests in PyPI, tests miss data files in Git:
37107 ;; - tests/test-vectors/test_encode
37108 ;; - tests/test-vectors/test_decode
37109 (list #:tests? #f))
37110 (native-inputs
37111 (list python-setuptools
37112 python-wheel))
37113 (propagated-inputs
37114 (list python-aiocoap
37115 python-pycryptodome))
37116 (home-page "https://codeberg.org/eris/python-eris")
37117 (synopsis "Python implementation of ERIS")
37118 (description
37119 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
37120Storage}.")
37121 (license license:lgpl3+)))
37122
37123(define-public python-pymonad
37124 (package
37125 (name "python-pymonad")
37126 (version "2.4.0")
37127 (source
37128 (origin
37129 (method git-fetch)
37130 (uri (git-reference
37131 (url "https://github.com/jasondelaat/pymonad")
37132 (commit (string-append "v" version))))
37133 (file-name (git-file-name name version))
37134 (sha256
37135 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
37136 (build-system pyproject-build-system)
37137 (arguments
37138 (list
37139 #:phases
37140 #~(modify-phases %standard-phases
37141 (replace 'check
37142 (lambda* (#:key tests? #:allow-other-keys)
37143 (when tests?
37144 (invoke "./run_tests.sh")))))))
37145 (native-inputs (list python-setuptools))
37146 (home-page "https://github.com/jasondelaat/pymonad")
37147 (synopsis "Monadic style functional programming for Python")
37148 (description "@code{python-pymonad} implements data structures typically
37149available in purely functional or functional first programming languages such
37150as Haskell and F#. Included are
37151
37152@itemize
37153@item Monad and Monoid data types with several common monads such as Maybe and
37154State
37155@item Useful tools such as the @code{@@curry} decorator for defining curried
37156functions
37157@item Type annotations to help ensure correct usage
37158@end itemize")
37159 (license license:bsd-3)))
37160
37161(define-public python-markdown-strings
37162 (package
37163 (name "python-markdown-strings")
37164 (version "3.3.0")
37165 (source
37166 (origin
37167 (method git-fetch)
37168 (uri (git-reference
37169 (url "https://github.com/awesmubarak/markdown_strings.git")
37170 (commit (string-append "v" version))))
37171 (file-name (git-file-name name version))
37172 (sha256
37173 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
37174 (build-system pyproject-build-system)
37175 (arguments
37176 (list
37177 #:test-backend #~'custom
37178 #:test-flags #~(list "test.py")))
37179 (native-inputs (list python-setuptools))
37180 (propagated-inputs (list python-lxml python-six))
37181 (home-page "https://github.com/awesmubarak/markdown_strings")
37182 (synopsis "Python library to create markdown-formatted text")
37183 (description "This package allows the programmatic creation of
37184markdown-compliant strings.")
37185 (license license:expat)))
37186
37187(define-public python-icecream
37188 (package
37189 (name "python-icecream")
37190 (version "2.1.9")
37191 (source
37192 (origin
37193 (method git-fetch)
37194 (uri (git-reference
37195 (url "https://github.com/gruns/icecream")
37196 (commit (string-append "v" version))))
37197 (file-name (git-file-name name version))
37198 (sha256
37199 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
37200 (build-system pyproject-build-system)
37201 (native-inputs
37202 (list python-hypothesis
37203 python-pytest
37204 python-setuptools))
37205 (propagated-inputs
37206 (list python-asttokens
37207 python-colorama
37208 python-executing
37209 python-pygments))
37210 (home-page "https://github.com/gruns/icecream")
37211 (synopsis
37212 "Single function call to debug variables, expressions, and program execution")
37213 (description
37214 "This tool lets you debug variables, expressions, and program execution
37215with one function call. IceCream makes print debugging a little sweeter.")
37216 (license license:expat)))
37217
37218;; XXX: Deprecated on <2026-07-12>.
37219(define-deprecated/public-alias python-icegrams
37220 (@ (gnu packages language) python-icegrams))
37221
37222(define-public python-sbsv
37223 (package
37224 (name "python-sbsv")
37225 (version "0.2.3")
37226 (source
37227 (origin
37228 (method git-fetch)
37229 (uri (git-reference
37230 (url "https://github.com/hsh814/sbsv")
37231 (commit (string-append "v" version))))
37232 (file-name (git-file-name name version))
37233 (sha256
37234 (base32 "1xzx0xhikwqvmzdbhprzljfvnxznr3an3jf0v07hwkixvh80s4f5"))
37235 (modules '((guix build utils)))
37236 (snippet #~(delete-file-recursively "libsbsv")))) ;separate C library
37237 (build-system pyproject-build-system)
37238 (native-inputs (list python-hatchling python-pytest))
37239 (home-page "https://github.com/hsh814/sbsv")
37240 (synopsis "Square bracket separated values")
37241 (description
37242 "This Python package provides a schema-driven structured log data format
37243for the ease of writing and parsing.")
37244 (license license:expat)))
37245
37246(define-public python-sqlglot
37247 (package
37248 (name "python-sqlglot")
37249 (version "26.33.0")
37250 (source
37251 (origin
37252 (method url-fetch)
37253 (uri (pypi-uri "sqlglot" version))
37254 (sha256
37255 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
37256 (build-system pyproject-build-system)
37257 (arguments
37258 (list
37259 #:test-backend #~'unittest
37260 #:phases
37261 #~(modify-phases %standard-phases
37262 (add-before 'check 'pre-check
37263 (lambda _
37264 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
37265 (native-inputs
37266 (list python-duckdb
37267 python-pytz
37268 python-pandas
37269 python-setuptools
37270 python-setuptools-scm
37271 python-tzdata))
37272 (home-page "https://sqlglot.com/")
37273 (synopsis "Python SQL Parser and Transpiler")
37274 (description
37275 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
37276engine. It can be used to format SQL or translate between 31 different
37277dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
37278BigQuery. It aims to read a wide variety of SQL inputs and output
37279syntactically and semantically correct SQL in the targeted dialects.")
37280 (license license:expat)))
37281
37282(define-public python-sqlglotrs
37283 (package
37284 (inherit python-sqlglot)
37285 (name "python-sqlglotrs")
37286 (version "0.6.1")
37287 (source
37288 (origin
37289 (method url-fetch)
37290 (uri (pypi-uri "sqlglotrs" version))
37291 (sha256
37292 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
37293 (build-system cargo-build-system)
37294 (arguments
37295 (list
37296 #:install-source? #false
37297 #:tests? #f ;no tests
37298 #:imported-modules `(,@%cargo-build-system-modules
37299 ,@%pyproject-build-system-modules)
37300 #:modules '((guix build cargo-build-system)
37301 ((guix build pyproject-build-system) #:prefix py:)
37302 (guix build utils))
37303 #:phases
37304 #~(modify-phases %standard-phases
37305 (add-after 'build 'build-python-module
37306 (assoc-ref py:%standard-phases 'build))
37307 (add-after 'build-python-module 'install-python-module
37308 (assoc-ref py:%standard-phases 'install))
37309 (add-after 'install-python-module 'add-install-to-pythonpath
37310 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
37311 (native-inputs
37312 (list maturin
37313 python-wrapper))
37314 (inputs
37315 (cargo-inputs 'python-sqlglotrs))))
37316
37317(define-public python-sqltrie
37318 (package
37319 (name "python-sqltrie")
37320 (version "0.11.2")
37321 (home-page "https://github.com/iterative/sqltrie/")
37322 (source
37323 (origin
37324 (method url-fetch)
37325 (uri (pypi-uri "sqltrie" version))
37326 (sha256
37327 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
37328 (build-system pyproject-build-system)
37329 (arguments
37330 (list
37331 #:test-flags
37332 #~(list "--ignore=tests/benchmarks/"
37333 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
37334 ;; yet in Guix.
37335 "--ignore=src/sqltrie/__pyinstaller")))
37336 (native-inputs
37337 (list python-pytest
37338 python-pytest-mock
37339 python-pytest-sugar
37340 python-setuptools
37341 python-setuptools-scm))
37342 (propagated-inputs
37343 (list python-attrs
37344 python-orjson
37345 python-pygtrie))
37346 (synopsis "SQL-based prefix tree for Python")
37347 (description
37348 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
37349python-diskcache.")
37350 (license license:asl2.0)))
37351
37352(define-public python-socksipy-branch
37353 (package
37354 (name "python-socksipy-branch")
37355 (version "1.01")
37356 (source
37357 (origin
37358 (method url-fetch)
37359 (uri (pypi-uri "SocksiPy-branch" version))
37360 (sha256
37361 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
37362 (build-system pyproject-build-system)
37363 (arguments (list #:tests? #f)) ; There are no tests
37364 (native-inputs (list python-setuptools))
37365 (home-page "https://code.google.com/archive/p/socksipy-branch/")
37366 (synopsis "Python SOCKS module")
37367 (description
37368 "SocksiPy - A Python SOCKS client module. It provides a socket-like
37369interface that supports connections to any TCP service through the use of a
37370SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
37371this is a branch created by Mario Vilas to address some open issues,as the
37372original project seems to have been abandoned circa 2007.")
37373 (license license:bsd-3)))
37374
37375(define-public python-socksipychain
37376 (package
37377 (name "python-socksipychain")
37378 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
37379 (revision . "0")))
37380 (version (git-version "2.1.3"
37381 (assoc-ref properties 'revision)
37382 (assoc-ref properties 'commit)))
37383 (source
37384 (origin
37385 (method git-fetch)
37386 (uri (git-reference
37387 (url "https://github.com/pagekite/PySocksipyChain")
37388 (commit (assoc-ref properties 'commit))))
37389 (file-name (git-file-name name version))
37390 (sha256
37391 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
37392 (build-system pyproject-build-system)
37393 (arguments (list #:tests? #f)) ; Tests try to access the network.
37394 (native-inputs (list python-setuptools))
37395 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
37396 (synopsis "Python SOCKS module with chained proxies support")
37397 (description
37398 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
37399adds support for arbitrary chaining of proxy servers and various modes of
37400TLS/SSL encryption. It was developed for use in PageKite, and also includes
37401a simple netcat replacement with chaining support.")
37402 (license license:bsd-3)))
37403
37404(define-public python-sortedcollections
37405 (package
37406 (name "python-sortedcollections")
37407 (version "2.1.0")
37408 (source
37409 (origin
37410 (method git-fetch)
37411 (uri (git-reference
37412 (url "https://github.com/grantjenks/python-sortedcollections")
37413 (commit (string-append "v" version))))
37414 (file-name (git-file-name name version))
37415 (sha256
37416 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
37417 (build-system pyproject-build-system)
37418 (native-inputs (list python-setuptools python-pytest python-wheel))
37419 (propagated-inputs (list python-sortedcontainers))
37420 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
37421 (synopsis "Python Sorted Collections")
37422 (description "Sorted Collections is a Python sorted collections library.")
37423 (license license:asl2.0)))
37424
37425(define-public python-sortedcontainers
37426 (package
37427 (name "python-sortedcontainers")
37428 (version "2.4.0")
37429 (source
37430 (origin
37431 (method git-fetch) ;no tests in PyPI archive
37432 (uri (git-reference
37433 (url "https://github.com/grantjenks/python-sortedcontainers")
37434 (commit (string-append "v" version))))
37435 (file-name (git-file-name name version))
37436 (sha256
37437 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
37438 (build-system pyproject-build-system)
37439 (arguments
37440 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
37441 (native-inputs
37442 (list python-pytest-bootstrap python-setuptools))
37443 (home-page "https://grantjenks.com/docs/sortedcontainers/")
37444 (synopsis "Sorted List, Sorted Dict, Sorted Set")
37445 (description
37446 "This package provides a sorted collections library, written in
37447pure-Python.")
37448 (license license:asl2.0)))
37449
37450(define-public python-soupsieve
37451 (package
37452 (name "python-soupsieve")
37453 (version "2.7")
37454 (source
37455 (origin
37456 (method url-fetch)
37457 (uri (pypi-uri "soupsieve" version))
37458 (sha256
37459 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
37460 (build-system pyproject-build-system)
37461 (native-inputs
37462 (list python-beautifulsoup4-bootstrap
37463 python-hatchling
37464 python-pytest))
37465 (home-page "https://github.com/facelessuser/soupsieve")
37466 (synopsis "CSS selector library")
37467 (description
37468 "Soup Sieve is a CSS selector library designed to be used with Beautiful
37469Soup 4. It aims to provide selecting, matching, and filtering using modern
37470CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
37471specifications up through the latest CSS level 4 drafts and beyond (though
37472some are not yet implemented).")
37473 (license license:expat)))
37474
37475(define-public python-spectra
37476 (package
37477 (name "python-spectra")
37478 (version "0.1.0")
37479 (source
37480 (origin
37481 (method url-fetch)
37482 (uri (pypi-uri "spectra" version))
37483 (sha256
37484 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
37485 (build-system pyproject-build-system)
37486 (propagated-inputs
37487 (list python-colormath2))
37488 (native-inputs
37489 (list python-pytest python-setuptools python-wheel))
37490 (home-page "https://github.com/jsvine/spectra")
37491 (synopsis "Color scales and color conversion")
37492 (description
37493 "This package provides a Python library intended to make color math,
37494color scales, and color space conversion easy. It has support for:
37495
37496@enumerate
37497@item Color scales
37498@item Color ranges
37499@item Color blending
37500@item Brightening/darkening colors
37501@item Saturating/desaturating colors
37502@item Conversion to/from multiple color spaces.
37503@end enumerate\n")
37504 (license license:expat)))
37505
37506(define-public python-speedy-antlr-tool
37507 (package
37508 (name "python-speedy-antlr-tool")
37509 (version "1.4.3")
37510 (source
37511 (origin
37512 (method git-fetch)
37513 (uri (git-reference
37514 (url "https://github.com/amykyta3/speedy-antlr-tool")
37515 (commit (string-append "v" version))))
37516 (file-name (git-file-name name version))
37517 (sha256
37518 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
37519 (build-system pyproject-build-system)
37520 (arguments '(#:tests? #f)) ;no test
37521 (native-inputs (list python-setuptools python-setuptools-scm))
37522 (propagated-inputs (list python-antlr4-runtime python-jinja2))
37523 (home-page "https://speedy-antlr-tool.readthedocs.io")
37524 (synopsis "Generate ANTLR parser as Python extension module")
37525 (description
37526 "This tool generates a Python extension that runs your parser
37527using ANTLR's C++ target, and then translates the parsed tree
37528back into Python.")
37529 (license license:bsd-3)))
37530
37531(define-public python-speg
37532 (package
37533 (name "python-speg")
37534 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
37535 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
37536 (revision . "0")))
37537 (version (git-version "0.3"
37538 (assoc-ref properties 'revision)
37539 (assoc-ref properties 'commit)))
37540 (source
37541 (origin
37542 (method git-fetch)
37543 (uri (git-reference
37544 (url "https://github.com/avakar/speg")
37545 (commit (assoc-ref properties 'commit))))
37546 (file-name (git-file-name name version))
37547 (sha256
37548 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
37549 (build-system pyproject-build-system)
37550 (native-inputs
37551 (list python-pytest
37552 python-setuptools))
37553 (propagated-inputs
37554 (list python-six))
37555 (home-page "https://github.com/avakar/speg")
37556 (synopsis "PEG-based parser interpreter with memoization")
37557 (description "This package is a PEG-based parser and interpreter with
37558memoization.")
37559 (license license:expat)))
37560
37561(define-public python-spinners
37562 (package
37563 (name "python-spinners")
37564 (version "0.0.24")
37565 (source
37566 (origin
37567 (method url-fetch)
37568 (uri (pypi-uri "spinners" version))
37569 (sha256
37570 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
37571 (build-system pyproject-build-system)
37572 (arguments
37573 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
37574 (native-inputs
37575 (list python-setuptools))
37576 (home-page "https://github.com/manrajgrover/py-spinners")
37577 (synopsis "Python library with graphical spinners for the terminal")
37578 (description
37579 "Spinners is a Python library that contains graphical spinners that can
37580be displayed terminal.")
37581 (license license:expat)))
37582
37583(define-public python-sre-yield
37584 (package
37585 (name "python-sre-yield")
37586 (version "1.2")
37587 (source
37588 (origin
37589 (method url-fetch)
37590 (uri (pypi-uri "sre_yield" version))
37591 (sha256
37592 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
37593 (build-system pyproject-build-system)
37594 (arguments
37595 (list #:test-backend #~'unittest))
37596 (native-inputs
37597 (list python-setuptools))
37598 (home-page "https://github.com/google/sre_yield")
37599 (synopsis "Expands a regular expression to its possible matches")
37600 (description
37601 "The goal of sre_yield is to efficiently generate all values that can
37602match a given regular expression, or count possible matches efficiently. It
37603uses the parsed regular expression, so you get a much more accurate result
37604than trying to just split strings.")
37605 (license license:asl2.0)))
37606
37607(define-public python-srsly
37608 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
37609 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
37610 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
37611 (package
37612 (name "python-srsly")
37613 (version "2.5.3")
37614 (source
37615 (origin
37616 (method git-fetch)
37617 (uri (git-reference
37618 (url "https://github.com/explosion/srsly")
37619 (commit (string-append "release-v" version))))
37620 (file-name (git-file-name name version))
37621 (sha256
37622 (base32 "1fjd6j540k5i2yrib41k99j05qpa281470birqgcn82dxg9v16vm"))))
37623 (build-system pyproject-build-system)
37624 (arguments
37625 (list
37626 ;; tests: 741 passed, 4 skipped, 22 xfailed
37627 #:test-flags
37628 #~(list "--pyargs" "srsly")
37629 #:phases
37630 #~(modify-phases %standard-phases
37631 (add-after 'unpack 'remove-broken-tests
37632 (lambda _
37633 ;; Tests depend on removed in 2.5.3 module
37634 ;; "srsly/cloudpickle/compat.py".
37635 ;; See: <https://github.com/explosion/srsly/issues/121>.
37636 (delete-file "srsly/tests/cloudpickle/cloudpickle_file_test.py")
37637 (delete-file "srsly/tests/cloudpickle/cloudpickle_test.py")))
37638 (add-before 'check 'remove-local-source
37639 (lambda _
37640 (delete-file-recursively "srsly"))))))
37641 (native-inputs
37642 (list python-cython
37643 python-mock
37644 python-numpy
37645 python-psutil
37646 python-pytest
37647 python-pytest-timeout
37648 python-setuptools))
37649 (propagated-inputs
37650 (list python-catalogue))
37651 (home-page "https://github.com/explosion/srsly")
37652 (synopsis "Serialization utilities for Python")
37653 (description "This package bundles some of the best Python serialization
37654libraries into one standalone package, with a high-level API that makes it
37655easy to write code that's correct across platforms and Pythons.")
37656 (license license:expat)))
37657
37658(define-public python-srt
37659 (package
37660 (name "python-srt")
37661 (version "3.5.3")
37662 (source
37663 (origin
37664 (method url-fetch)
37665 (uri (pypi-uri "srt" version))
37666 (sha256
37667 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
37668 (build-system pyproject-build-system)
37669 (native-inputs
37670 (list python-pytest
37671 python-setuptools
37672 python-wheel))
37673 (home-page "https://github.com/cdown/srt")
37674 (synopsis "SRT parsing library")
37675 (description
37676 "This package provides a Python library for parsing, modifying, and
37677composing subtitles in the SRT file format.")
37678 (license license:expat)))
37679
37680(define-public python-sshpubkeys
37681 (package
37682 (name "python-sshpubkeys")
37683 (version "3.2.0")
37684 (source
37685 (origin
37686 (method git-fetch)
37687 (uri (git-reference
37688 (url "https://github.com/ojarva/python-sshpubkeys")
37689 (commit (string-append "v" version))))
37690 (file-name (git-file-name name version))
37691 (sha256
37692 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
37693 (build-system pyproject-build-system)
37694 (arguments
37695 (list #:tests? #f)) ; XXX: All tests fail
37696 (native-inputs
37697 (list python-setuptools
37698 python-wheel))
37699 (propagated-inputs
37700 (list python-cryptography
37701 python-ecdsa))
37702 (home-page "https://github.com/ojarva/python-sshpubkeys")
37703 (synopsis "OpenSSH public key parser")
37704 (description
37705 "This package provides a library for parsing and validating OpenSSH
37706public key files.")
37707 (license license:bsd-3)))
37708
37709(define-public python-sshtunnel
37710 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
37711 (revision "0"))
37712 (package
37713 (name "python-sshtunnel")
37714 (version (git-version "0.4.0" revision commit))
37715 (source
37716 (origin
37717 (method git-fetch)
37718 (uri (git-reference
37719 (url "https://github.com/pahaz/sshtunnel")
37720 (commit commit)))
37721 (file-name (git-file-name name version))
37722 (sha256
37723 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
37724 (patches (search-patches "python-sshtunnel-pep518.patch"))))
37725 (build-system pyproject-build-system)
37726 (arguments
37727 (list
37728 #:phases
37729 #~(modify-phases %standard-phases
37730 (add-after 'unpack 'remove-deprecated-dsskey
37731 (lambda _
37732 (substitute* "sshtunnel.py"
37733 (("'dsa': paramiko\\.DSSKey,")
37734 "")
37735 (("paramiko\\.DSSKey, ")
37736 "")))))))
37737 (propagated-inputs (list python-paramiko))
37738 (native-inputs
37739 (list openssh python-mock python-pytest python-setuptools))
37740 (home-page "https://github.com/pahaz/sshtunnel")
37741 (synopsis "Python SSH tunnels library")
37742 (description
37743 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
37744in the background, using Python.")
37745 (license license:expat))))
37746
37747(define-public python-stack-data
37748 (package
37749 (name "python-stack-data")
37750 (version "0.6.3")
37751 (source
37752 (origin
37753 (method url-fetch)
37754 (uri (pypi-uri "stack_data" version))
37755 (sha256
37756 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
37757 (build-system pyproject-build-system)
37758 (arguments
37759 (list
37760 #:test-flags
37761 #~(list "-k" (string-join
37762 ;; XXX: Tests fail with HTML diff.
37763 (list "not test_executing_style_defs"
37764 "test_pygments_example"
37765 "test_example")
37766 " and not "))
37767 #:phases
37768 #~(modify-phases %standard-phases
37769 (add-after 'unpack 'set-home-env
37770 (lambda _
37771 (setenv "HOME" "/tmp"))))))
37772 (native-inputs
37773 (list python-cython
37774 python-littleutils
37775 python-pygments
37776 python-pytest
37777 python-setuptools
37778 python-setuptools-scm
37779 python-typeguard
37780 python-wheel))
37781 (propagated-inputs
37782 (list python-asttokens
37783 python-executing
37784 python-pure-eval))
37785 (home-page "https://github.com/alexmojaki/stack_data")
37786 (synopsis "Python stack frame and traceback manipulation library")
37787 (description
37788 "The @code{stack_data} Python library extracts data from stack frames and
37789tracebacks. Is can be used to display more useful tracebacks
37790than the default.")
37791 (license license:expat)))
37792
37793;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
37794;; from the standard library, <https://peps.python.org/pep-0594/>.
37795(define %python-standard-pep-594-version "3.13.0")
37796(define %python-standard-pep-594-source
37797 (origin
37798 (method git-fetch)
37799 (uri (git-reference
37800 (url "https://github.com/youknowone/python-deadlib")
37801 (commit (string-append "v" %python-standard-pep-594-version))))
37802 (file-name (git-file-name "python-standard-pep-594"
37803 %python-standard-pep-594-version))
37804 (sha256
37805 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
37806
37807(define-public python-standard-asynchat
37808 (package
37809 (name "python-standard-asynchat")
37810 (version %python-standard-pep-594-version)
37811 (source %python-standard-pep-594-source)
37812 (build-system pyproject-build-system)
37813 (arguments
37814 (list
37815 #:phases
37816 #~(modify-phases %standard-phases
37817 (add-after 'unpack 'chdir
37818 (lambda _
37819 (chdir "asynchat"))))))
37820 (native-inputs
37821 (list python-setuptools))
37822 (propagated-inputs
37823 (list python-standard-asyncore))
37824 (home-page "https://github.com/youknowone/python-deadlib")
37825 (synopsis "Backport of asynchat from Python 3.11")
37826 (description
37827 "Standard library @code{asynchat} redistribution. Deprecated since
37828version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37829@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37830standard library}.")
37831 (license license:psfl)))
37832
37833(define-public python-standard-asyncore
37834 (package
37835 (name "python-standard-asyncore")
37836 (version %python-standard-pep-594-version)
37837 (source %python-standard-pep-594-source)
37838 (build-system pyproject-build-system)
37839 (arguments
37840 (list
37841 #:phases
37842 #~(modify-phases %standard-phases
37843 (add-after 'unpack 'chdir
37844 (lambda _
37845 (chdir "asyncore"))))))
37846 (native-inputs
37847 (list python-setuptools))
37848 (home-page "https://github.com/youknowone/python-deadlib")
37849 (synopsis "Backport of asyncore from Python 3.11")
37850 (description
37851 "Standard library @code{asyncore} redistribution. Deprecated since
37852version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37853@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37854standard library}.")
37855 (license license:psfl)))
37856
37857(define-public python-standard-smtpd
37858 (package
37859 (name "python-standard-smtpd")
37860 (version %python-standard-pep-594-version)
37861 (source %python-standard-pep-594-source)
37862 (build-system pyproject-build-system)
37863 (arguments
37864 (list
37865 ;; ImportError: cannot import name 'mock_socket' from 'test'
37866 #:tests? #f
37867 #:phases
37868 #~(modify-phases %standard-phases
37869 (add-after 'unpack 'chdir
37870 (lambda _
37871 (chdir "smtpd"))))))
37872 (native-inputs
37873 (list python-setuptools))
37874 (propagated-inputs
37875 (list
37876 python-standard-asynchat
37877 python-standard-asyncore))
37878 (home-page "https://github.com/youknowone/python-deadlib")
37879 (synopsis "Backport of smtpd from Python 3.11")
37880 (description
37881 "Standard library @code{smtpd} redistribution. Deprecated since version
378823.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
37883replacement for this module, based on @code{asyncio}. See:
37884@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37885standard library}.")
37886 (license license:psfl)))
37887
37888(define-public python-stdio-mgr
37889 (package
37890 (name "python-stdio-mgr")
37891 (version "1.0.1")
37892 (source
37893 (origin
37894 (method git-fetch)
37895 (uri (git-reference
37896 (url "https://github.com/bskinn/stdio-mgr")
37897 (commit (string-append "v" version))))
37898 (file-name (git-file-name name version))
37899 (sha256
37900 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
37901 (build-system pyproject-build-system)
37902 (arguments
37903 (list
37904 ;; Do not run doctests requiring sphinx.
37905 #:test-flags #~(list "--ignore=README.rst")))
37906 (native-inputs
37907 (list python-pytest
37908 python-setuptools
37909 python-wheel))
37910 (propagated-inputs
37911 (list python-attrs))
37912 (home-page "https://github.com/bskinn/stdio-mgr")
37913 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
37914 (description
37915 "This package contains a context manager for mocking/wrapping
37916stdin/stdout/stderr.")
37917 (license license:expat)))
37918
37919;; TODO: This package is not necessary in Guix. It should be replaced by a
37920;; trivial python package providing the same functionality.
37921(define-public python-stdlib-list
37922 (package
37923 (name "python-stdlib-list")
37924 (version "0.11.1")
37925 (source
37926 (origin
37927 (method git-fetch)
37928 (uri (git-reference
37929 (url "https://github.com/jackmaney/python-stdlib-list")
37930 (commit (string-append "v" version))))
37931 (file-name (git-file-name name version))
37932 (sha256
37933 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
37934 (build-system pyproject-build-system)
37935 (native-inputs
37936 (list python-flit-core
37937 python-pytest
37938 python-sphinx))
37939 (home-page "https://github.com/jackmaney/python-stdlib-list")
37940 (synopsis "Python Standard Libraries")
37941 (description
37942 "This package contains a list of Python Standard Libraries.")
37943 (license license:expat)))
37944
37945(define-public python-stem
37946 ;; python-stem is mostly unmaintained, but still has occasional commits
37947 ;; added.
37948 (package
37949 (name "python-stem")
37950 (version "1.8.3")
37951 (source
37952 (origin
37953 (method git-fetch)
37954 (uri (git-reference
37955 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
37956 (commit version)))
37957 (file-name (git-file-name name version))
37958 (sha256
37959 (base32
37960 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
37961 (build-system pyproject-build-system)
37962 (arguments
37963 (list
37964 #:test-backend #~'custom
37965 #:test-flags #~(list "run_tests.py" "--unit")
37966 #:phases
37967 #~(modify-phases %standard-phases
37968 (add-after 'unpack 'fix-python-312
37969 (lambda _
37970 (substitute* (find-files "." "\\.py$")
37971 (("assertRaisesRegexp") "assertRaisesRegex")))))))
37972 (native-inputs
37973 (list python-setuptools
37974 python-wheel))
37975 (home-page "https://stem.torproject.org/")
37976 (synopsis
37977 "Python controller library that allows applications to interact with Tor")
37978 (description
37979 "Stem is a Python controller library for Tor. With it you can use Tor's
37980 control protocol to script against the Tor process and read descriptor data
37981 relays publish about themselves.")
37982 (license license:lgpl3)))
37983
37984(define-public python-stltools
37985 (package
37986 (name "python-stltools")
37987 (version "2022.01.20")
37988 (source
37989 (origin
37990 (method git-fetch)
37991 (uri (git-reference
37992 (url "https://github.com/rsmith-nl/stltools")
37993 (commit version)))
37994 (file-name (git-file-name name version))
37995 (sha256
37996 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
37997 (build-system pyproject-build-system)
37998 (arguments
37999 (list
38000 #:phases
38001 #~(modify-phases %standard-phases
38002 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
38003 (delete 'build)
38004 (replace 'install
38005 (lambda* (#:key inputs outputs #:allow-other-keys)
38006 (let ((moddir (string-append (site-packages inputs outputs)
38007 "/stltools"))
38008 (bindir (string-append #$output "/bin")))
38009 (copy-recursively "stltools" moddir)
38010 (mkdir-p bindir)
38011 (for-each
38012 (lambda (script)
38013 (let ((source (string-append script ".py"))
38014 (target (string-append bindir "/" script)))
38015 (copy-file source target)
38016 (chmod target #o555)))
38017 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
38018 (native-inputs
38019 (list python-pytest
38020 python-setuptools))
38021 (propagated-inputs
38022 (list python-pycairo))
38023 (home-page "https://github.com/rsmith-nl/stltools")
38024 (synopsis "Python modules and scripts for handling STL files")
38025 (description
38026 "This package consists of Python modules and scripts for manipulating
38027stereolithography (STL) files. It can convert STL files into POV-ray meshes,
38028PDF and PostScript. The Python modules allow for reading and writing STL
38029files. It supports both the text and binary forms of STL.")
38030 (license license:expat)))
38031
38032(define-public python-stone
38033 (package
38034 (name "python-stone")
38035 (version "3.3.9")
38036 (source
38037 (origin
38038 (method git-fetch)
38039 (uri (git-reference
38040 (url "https://github.com/dropbox/stone")
38041 (commit (string-append "v" version))))
38042 (file-name (git-file-name name version))
38043 (sha256
38044 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
38045 (build-system pyproject-build-system)
38046 (native-inputs
38047 (list python-pytest
38048 python-setuptools))
38049 (propagated-inputs
38050 (list python-jinja2
38051 python-packaging
38052 python-ply
38053 python-six)) ;hard requirement, still
38054 (home-page "https://github.com/dropbox/stone")
38055 (synopsis "Official Api Spec Language for Dropbox")
38056 (description
38057 "Stone is an interface description language (IDL) for APIs.")
38058 (license license:expat)))
38059
38060(define-public python-stopit
38061 (package
38062 (name "python-stopit")
38063 (version "1.1.2")
38064 (source
38065 (origin
38066 (method git-fetch)
38067 (uri (git-reference
38068 (url "https://github.com/glenfant/stopit")
38069 (commit version)))
38070 (file-name (git-file-name name version))
38071 (sha256
38072 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
38073 (build-system pyproject-build-system)
38074 (arguments
38075 (list #:test-backend #~'custom
38076 #:test-flags #~(list "tests.py")))
38077 (native-inputs (list python-setuptools))
38078 (home-page "https://pypi.python.org/pypi/stopit")
38079 (synopsis "Timeout control decorator and context managers")
38080 (description
38081 "Raise asynchronous exceptions in other threads, control the timeout of
38082blocks or callables with two context managers and two decorators.")
38083 (license license:expat)))
38084
38085(define-public python-straight-plugin
38086 (package
38087 (name "python-straight-plugin")
38088 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
38089 (revision . "0")))
38090 (version (git-version "1.4.1"
38091 (assoc-ref properties 'revision)
38092 (assoc-ref properties 'commit)))
38093 (source
38094 (origin
38095 (method git-fetch)
38096 (uri (git-reference
38097 (url "https://github.com/ironfroggy/straight.plugin")
38098 (commit (assoc-ref properties 'commit))))
38099 (file-name (git-file-name name version))
38100 (sha256
38101 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
38102 (build-system pyproject-build-system)
38103 (arguments
38104 (list
38105 ;; XXX: Some tests started failing with the move to [email protected].
38106 ;; Consider removing this leaf unmaintained package.
38107 #:tests? #f
38108 #:test-backend #~'custom
38109 #:test-flags #~(list "tests.py")
38110 #:phases
38111 #~(modify-phases %standard-phases
38112 (add-after 'unpack 'fix-python-3.12-incompatibility
38113 (lambda _
38114 (substitute* "straight/plugin/loaders.py"
38115 (("from imp import find_module")
38116 "")))))))
38117 (native-inputs (list python-mock python-setuptools))
38118 (home-page "https://github.com/ironfroggy/straight.plugin")
38119 (synopsis "Simple namespaced plugin facility")
38120 (description
38121 "Straight Plugin provides a type of plugin you can create from almost any
38122existing Python modules, and an easy way for outside developers to add
38123functionality and customization to your projects with their own plugins.")
38124 (license license:expat)))
38125
38126(define-public python-streamtracer
38127 (package
38128 (name "python-streamtracer")
38129 (version "2.4.0")
38130 (source
38131 (origin
38132 (method url-fetch)
38133 (uri (pypi-uri "streamtracer" version))
38134 (sha256
38135 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
38136 (build-system pyproject-build-system)
38137 (arguments
38138 (list
38139 #:imported-modules `(,@%cargo-build-system-modules
38140 ,@%pyproject-build-system-modules)
38141 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
38142 (guix build pyproject-build-system)
38143 (guix build utils))
38144 #:test-flags
38145 #~(list "--pyargs" "streamtracer")
38146 #:phases
38147 #~(modify-phases %standard-phases
38148 (add-after 'unpack 'prepare-cargo-build-system
38149 (lambda args
38150 (for-each (lambda (phase)
38151 (format #t "Running cargo phase: ~a~%" phase)
38152 (apply (assoc-ref cargo:%standard-phases phase)
38153 #:cargo-target #$(cargo-triplet)
38154 args))
38155 '(unpack-rust-crates
38156 configure
38157 check-for-pregenerated-files
38158 patch-cargo-checksums)))))))
38159 (native-inputs
38160 (append
38161 (list maturin
38162 python-pytest
38163 python-pytest-doctestplus
38164 rust
38165 `(,rust "cargo"))
38166 (or (and=> (%current-target-system)
38167 (compose list make-rust-sysroot))
38168 '())))
38169 (propagated-inputs
38170 (list python-numpy
38171 python-packaging))
38172 (inputs (cargo-inputs 'python-streamtracer))
38173 (home-page "https://github.com/sunpy/streamtracer")
38174 (synopsis "Rapid streamline tracing in Python")
38175 (description
38176 "streamtracer is a Python package for rapid streamline tracing on
38177regularly spaced grids. The actual streamline tracing is done at a low level
38178in Rust, with a nice Python API provided on top.")
38179 (license license:gpl3+)))
38180
38181(define-public python-strenum
38182 (package
38183 (name "python-strenum")
38184 (version "0.4.15")
38185 (source
38186 (origin
38187 (method git-fetch)
38188 (uri (git-reference
38189 (url "https://github.com/irgeek/StrEnum")
38190 (commit (string-append "v" version))))
38191 (file-name (git-file-name name version))
38192 (sha256
38193 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
38194 (snippet #~(delete-file "versioneer.py"))))
38195 (build-system pyproject-build-system)
38196 (arguments
38197 (list #:test-flags #~(list "tests")))
38198 (native-inputs
38199 (list python-pytest
38200 python-pytest-pylint
38201 python-setuptools
38202 python-versioneer))
38203 (home-page "https://github.com/irgeek/StrEnum")
38204 (synopsis "Enum that inherits from str")
38205 (description "StrEnum is a Python @code{enum.Enum} that inherits from
38206@code{str} to complement @code{enum.IntEnum} in the standard library.")
38207 (license license:expat)))
38208
38209(define-public python-structlog
38210 (package
38211 (name "python-structlog")
38212 (version "25.5.0")
38213 (source
38214 (origin
38215 (method url-fetch)
38216 (uri (pypi-uri "structlog" version))
38217 (sha256
38218 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
38219 (build-system pyproject-build-system)
38220 (native-inputs
38221 (list python-hatch-fancy-pypi-readme
38222 python-hatch-vcs
38223 python-hatchling
38224 python-pytest
38225 python-pytest-asyncio
38226 python-time-machine))
38227 (home-page "https://www.structlog.org/")
38228 (synopsis "Structured Logging for Python")
38229 (description "@code{structlog} changes logging in Python by adding structure
38230to your log entries.")
38231 (license (list license:asl2.0 license:expat))))
38232
38233(define-public python-style
38234 (package
38235 (name "python-style")
38236 (version "1.1.6")
38237 (source
38238 (origin
38239 (method url-fetch)
38240 (uri (pypi-uri "style" version))
38241 (sha256
38242 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
38243 (build-system pyproject-build-system)
38244 (arguments
38245 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
38246 (native-inputs
38247 (list python-setuptools))
38248 (home-page "https://github.com/lmittmann/style")
38249 (synopsis "Terminal string styling")
38250 (description
38251"@code{python-style} is a simple terminal string styling package. Its API is
38252a port of the chalk package for javascript.")
38253 (license license:expat)))
38254
38255(define-public python-svgelements
38256 (package
38257 (name "python-svgelements")
38258 (version "1.9.6")
38259 (source
38260 (origin
38261 (method git-fetch)
38262 (uri (git-reference
38263 (url "https://github.com/meerk40t/svgelements")
38264 (commit version)))
38265 (file-name (git-file-name name version))
38266 (sha256
38267 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
38268 (build-system pyproject-build-system)
38269 (arguments
38270 (list
38271 #:phases
38272 #~(modify-phases %standard-phases
38273 (add-after 'unpack 'fix-python-incompatibilities
38274 (lambda _
38275 (substitute* (find-files "test" "\\.py$")
38276 (("(assert(|NotAlmost)Equal)s" all out in)
38277 out)))))))
38278 (native-inputs
38279 (list python-anyio
38280 python-pytest
38281 python-numpy
38282 python-pillow
38283 python-scipy
38284 python-setuptools))
38285 (home-page "https://github.com/meerk40t/svgelements")
38286 (synopsis "SVG parsing for elements, paths, and other SVG objects")
38287 (description
38288 "This module does high fidelity SVG parsing and geometric rendering.
38289The goal is to successfully and correctly process SVG for use with any scripts
38290that may need or want to use SVG files as geometric data.")
38291 (license license:expat)))
38292
38293(define-public python-svgutils
38294 (package
38295 (name "python-svgutils")
38296 (version "0.3.4")
38297 (source
38298 (origin
38299 (method url-fetch)
38300 (uri (pypi-uri "svgutils" version))
38301 (sha256
38302 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
38303 (build-system pyproject-build-system)
38304 (arguments
38305 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
38306 (native-inputs
38307 (list python-setuptools))
38308 (propagated-inputs
38309 (list python-lxml))
38310 (home-page "https://svgutils.readthedocs.io")
38311 (synopsis "Python SVG editor")
38312 (description "This is an utility package that helps with editing and
38313concatenating SVG files. It is especially directed at scientists preparing
38314final figures for submission to journals. So far it supports arbitrary
38315placement and scaling of SVG figures and adding markers, such as labels.")
38316 (license license:expat)))
38317
38318(define-public python-svgwrite
38319 ;; XXX: Unmaintained since <2022-07-14>, used by python-qrbill.
38320 (package
38321 (name "python-svgwrite")
38322 (version "1.4.3")
38323 (source
38324 (origin
38325 (method git-fetch)
38326 (uri (git-reference
38327 (url "https://github.com/mozman/svgwrite")
38328 (commit (string-append "v" version))))
38329 (file-name (git-file-name name version))
38330 (sha256
38331 (base32 "14nvgsdhndpsgqlcp1vbmczd7rfyiddhjav2xja0a0rx2472psxq"))))
38332 (build-system pyproject-build-system)
38333 (arguments
38334 (list
38335 ;; Disable test which wants internet.
38336 #:test-flags
38337 #~(list "-k" "not test_embed_google_web_font")))
38338 (native-inputs (list python-pytest python-setuptools))
38339 (home-page "https://github.com/mozman/svgwrite")
38340 (synopsis "Python library to create SVG drawings")
38341 (description
38342 "This package provides a Python library to create SVG drawings.")
38343 (license license:expat)))
38344
38345(define-public python-swagger-spec-validator
38346 (package
38347 (name "python-swagger-spec-validator")
38348 (version "3.0.4")
38349 (source
38350 (origin
38351 (method git-fetch)
38352 (uri (git-reference
38353 (url "https://github.com/Yelp/swagger_spec_validator")
38354 (commit (string-append "v" version))))
38355 (file-name (git-file-name name version))
38356 (sha256
38357 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
38358 (build-system pyproject-build-system)
38359 (native-inputs
38360 (list python-pytest
38361 python-setuptools))
38362 (propagated-inputs
38363 (list python-importlib-resources
38364 python-jsonschema
38365 python-pyyaml
38366 python-typing-extensions))
38367 (home-page "https://github.com/Yelp/swagger_spec_validator")
38368 (synopsis "Validation of Swagger specifications")
38369 (description
38370 "@code{swagger_spec_validator} provides a library for validating Swagger
38371API specifications.")
38372 (license license:asl2.0)))
38373
38374(define-public python-syllables
38375 (package
38376 (name "python-syllables")
38377 (version "1.0.3")
38378 (source
38379 (origin
38380 (method git-fetch)
38381 (uri (git-reference
38382 (url "https://github.com/prosegrinder/python-syllables")
38383 (commit (string-append "v" version))))
38384 (file-name (git-file-name name version))
38385 (sha256
38386 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
38387 (build-system pyproject-build-system)
38388 (native-inputs
38389 (list python-cmudict
38390 python-pytest
38391 python-setuptools))
38392 (home-page "https://github.com/prosegrinder/python-syllables")
38393 (synopsis "Package for estimating the number of syllables in a word")
38394 (description
38395 "This package provides a Python package for estimating the number of
38396syllables in a word.")
38397 (license license:gpl3)))
38398
38399(define-public python-sympy
38400 (package
38401 (name "python-sympy")
38402 (version "1.13.3")
38403 (source
38404 (origin
38405 (method url-fetch)
38406 (uri (pypi-uri "sympy" version))
38407 (sha256
38408 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
38409 (build-system pyproject-build-system)
38410 (arguments
38411 '(#:phases
38412 (modify-phases %standard-phases
38413 (replace 'check
38414 (lambda* (#:key tests? #:allow-other-keys)
38415 (if tests?
38416 (invoke "python3" "-c"
38417 "import sympy; sympy.test(\"/core\")")))))))
38418 (propagated-inputs (list python-mpmath))
38419 (native-inputs
38420 (list python-hypothesis
38421 python-pytest
38422 python-setuptools
38423 python-wheel))
38424 (home-page "https://www.sympy.org/")
38425 (synopsis "Python library for symbolic mathematics")
38426 (description
38427 "SymPy is a Python library for symbolic mathematics. It aims to become a
38428full-featured computer algebra system (CAS) while keeping the code as simple
38429as possible in order to be comprehensible and easily extensible.")
38430 (license license:bsd-3)))
38431
38432(define-public python-tables
38433 (package
38434 (name "python-tables")
38435 (version "3.11.1")
38436 (source
38437 (origin
38438 (method git-fetch)
38439 (uri (git-reference
38440 (url "https://github.com/PyTables/PyTables")
38441 (commit (string-append "v" version))))
38442 (file-name (git-file-name name version))
38443 (sha256
38444 (base32 "03ifagvxzvgfdpjw508l1lq1j3ki9nbhxkls4zf1bchfdprv89fv"))
38445 (snippet '(begin
38446 (use-modules (guix build utils))
38447 (delete-file-recursively "hdf5-blosc")
38448 (delete-file-recursively "c-blosc")))))
38449 (build-system pyproject-build-system)
38450 (arguments
38451 (list
38452 #:test-flags
38453 ;; Performing only a light (yet comprehensive) subset of the test suite.
38454 ;; If you want a more complete test, try passing the --heavy flag to
38455 ;; this script (or set the 'heavy' parameter in case you are using
38456 ;; tables.test() call). The whole suite will take more than 4 hours to
38457 ;; complete on a relatively modern CPU and around 512 MB of main memory.
38458 #~(list "--pyargs" "tables.tests.test_all")
38459 #:phases
38460 #~(modify-phases %standard-phases
38461 (add-after 'unpack 'disable-tuning
38462 (lambda _
38463 (substitute* "setup.py"
38464 (("cpu_flags = .*")
38465 "cpu_flags = ['sse2']\n"))))
38466 (add-after 'unpack 'fix-reference-to-blosc2
38467 (lambda* (#:key inputs #:allow-other-keys)
38468 (substitute* "tables/__init__.py"
38469 (("\"\",") ;default
38470 (string-append "'"
38471 (dirname
38472 (search-input-file inputs "/lib/libblosc2.so"))
38473 "',\n")))))
38474 (add-before 'build 'pre-build
38475 (lambda _
38476 (substitute* "setup.py"
38477 (("hdf5-blosc/src")
38478 (format #f "~a/src"
38479 #$(package-source
38480 (this-package-input "hdf5-blosc-parallel-openmpi")))))
38481 (invoke "make" "distclean") ;Regenerate C code with Cython
38482 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
38483 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
38484 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
38485 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
38486 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
38487 (add-before 'check 'pre-check
38488 (lambda _
38489 (setenv "HOME" "/tmp"))))))
38490 (native-inputs
38491 (list pkg-config
38492 python-cython
38493 python-pytest
38494 python-setuptools
38495 python-sphinx))
38496 (inputs
38497 (list bzip2
38498 c-blosc
38499 c-blosc2
38500 hdf5-parallel-openmpi
38501 hdf5-blosc-parallel-openmpi
38502 lzo))
38503 (propagated-inputs
38504 (list python-blosc2
38505 python-numexpr
38506 python-numpy
38507 python-packaging
38508 python-py-cpuinfo
38509 python-typing-extensions))
38510 (home-page "https://www.pytables.org/")
38511 (synopsis "Hierarchical datasets for Python")
38512 (description "PyTables is a package for managing hierarchical datasets and
38513designed to efficiently cope with extremely large amounts of data.")
38514 (license license:bsd-3)))
38515
38516(define-public python-tablib
38517 (package
38518 (name "python-tablib")
38519 (version "3.9.0")
38520 (source
38521 (origin
38522 (method url-fetch)
38523 (uri (pypi-uri "tablib" version))
38524 (sha256
38525 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
38526 (build-system pyproject-build-system)
38527 (native-inputs
38528 (list python-pytest python-setuptools python-setuptools-scm))
38529 (inputs ;; [cli]
38530 (list python-tabulate))
38531 (propagated-inputs
38532 (list python-markuppy
38533 python-odfpy
38534 python-openpyxl
38535 python-pyyaml
38536 python-xlrd
38537 python-xlwt))
38538 (home-page "https://tablib.readthedocs.io")
38539 (synopsis "Format agnostic tabular data library")
38540 (description
38541 "@code{tablib} is a format-agnostic tabular dataset library,
38542written in Python. Supported output formats are Excel (Sets + Books),
38543JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
38544TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
38545
38546@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
38547quite huge, this Guix package doesn't depend on pandas. In case, just also
38548install @code{python-pandas}.")
38549 (license license:expat)))
38550
38551(define-public python-tabulate
38552 (package
38553 (name "python-tabulate")
38554 (version "0.9.0")
38555 (source
38556 (origin
38557 (method url-fetch)
38558 (uri (pypi-uri "tabulate" version))
38559 (sha256
38560 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
38561 (build-system pyproject-build-system)
38562 (native-inputs
38563 (list python-pytest
38564 python-setuptools-scm
38565 python-setuptools))
38566 (propagated-inputs
38567 (list python-wcwidth))
38568 (home-page "https://github.com/astanin/python-tabulate")
38569 (synopsis "Pretty-print tabular data")
38570 (description
38571 "Tabulate is a library and command-line utility to pretty-print tabular
38572data in Python.")
38573 (license license:expat)))
38574
38575(define-public python-takethetime
38576 (package
38577 (name "python-takethetime")
38578 (version "0.3.1")
38579 (source
38580 (origin
38581 (method url-fetch)
38582 (uri (pypi-uri "TakeTheTime" version))
38583 (sha256
38584 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
38585 (build-system pyproject-build-system)
38586 (arguments
38587 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
38588 (native-inputs
38589 (list python-setuptools
38590 python-wheel))
38591 (home-page "https://github.com/ErikBjare/TakeTheTime")
38592 (synopsis "Timing chunks of code")
38593 (description
38594 "This package implements a functionality for time taking using context
38595managers.")
38596 (license license:expat)))
38597
38598(define-public python-targ
38599 (package
38600 (name "python-targ")
38601 (version "0.6.0")
38602 (source
38603 (origin
38604 (method git-fetch)
38605 (uri (git-reference
38606 (url "https://github.com/piccolo-orm/targ/")
38607 (commit version)))
38608 (file-name (git-file-name name version))
38609 (sha256
38610 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
38611 (build-system pyproject-build-system)
38612 (native-inputs
38613 (list python-pytest
38614 python-setuptools))
38615 (propagated-inputs
38616 (list python-colorama
38617 python-docstring-parser))
38618 (home-page "https://github.com/piccolo-orm/targ/")
38619 (synopsis "Python CLI builder using type hints and docstrings")
38620 (description
38621 "Targ is a package to build a Python @acronym{Command Line Interface,
38622CLI} for applications by using type hints and docstrings.")
38623 (license license:expat)))
38624
38625(define-public python-tasklib
38626 (package
38627 (name "python-tasklib")
38628 (version "2.5.1")
38629 (source
38630 (origin
38631 (method git-fetch)
38632 (uri (git-reference
38633 (url "https://github.com/GothenburgBitFactory/tasklib")
38634 (commit version)))
38635 (file-name (git-file-name name version))
38636 (sha256
38637 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
38638 (build-system pyproject-build-system)
38639 (arguments
38640 (list
38641 #:test-backend
38642 #~'unittest))
38643 (inputs (list taskwarrior))
38644 (native-inputs (list python-setuptools tzdata-for-tests))
38645 (home-page "https://github.com/GothenburgBitFactory/tasklib")
38646 (synopsis "Official Taskwarrior library for Python")
38647 (description "@code{tasklib} is a Python library for interacting with
38648Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
38649 (license license:bsd-3)))
38650
38651(define-public python-tasklogger
38652 (package
38653 (name "python-tasklogger")
38654 (version "1.2.0")
38655 (source
38656 (origin
38657 (method url-fetch)
38658 (uri (pypi-uri "tasklogger" version))
38659 (sha256
38660 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
38661 (build-system pyproject-build-system)
38662 (native-inputs
38663 (list python-pytest
38664 python-numpy
38665 python-setuptools))
38666 (propagated-inputs
38667 (list python-deprecated))
38668 (home-page "https://github.com/scottgigante/tasklogger")
38669 (synopsis "Extension to the core Python logging library")
38670 (description "This package provides an extension to the core Python
38671logging library for logging the beginning and completion of tasks and
38672subtasks.")
38673 (license license:gpl2)))
38674
38675(define-public python-tatsu
38676 (package
38677 (name "python-tatsu")
38678 (version "5.13.2")
38679 (source
38680 (origin
38681 (method git-fetch)
38682 (uri (git-reference
38683 (url "https://github.com/neogeny/TatSu")
38684 (commit (string-append "v" version))))
38685 (file-name (git-file-name name version))
38686 (sha256
38687 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
38688 (build-system pyproject-build-system)
38689 (native-inputs
38690 (list python-pytest
38691 python-setuptools))
38692 (home-page "https://tatsu.readthedocs.io/en/stable/")
38693 (synopsis "PEG/Packrat Parser generator for Python")
38694 (description
38695 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
38696Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
38697or Packrat parser in Python.")
38698 (license license:bsd-2)))
38699
38700(define-public python-tblib
38701 (package
38702 (name "python-tblib")
38703 (version "3.1.0")
38704 (source
38705 (origin
38706 (method url-fetch)
38707 (uri (pypi-uri "tblib" version))
38708 (sha256
38709 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
38710 (build-system pyproject-build-system)
38711 (arguments
38712 (list
38713 ;; Don't run benchmark tests.
38714 #:test-flags #~(list "--ignore=tests/test_perf.py")
38715 #:phases
38716 #~(modify-phases %standard-phases
38717 (add-after 'unpack 'fix-pytest-config
38718 (lambda _
38719 (substitute* "pytest.ini"
38720 (("--benchmark-disable") "")))))))
38721 (native-inputs
38722 (list python-pytest
38723 python-setuptools))
38724 (home-page "https://github.com/ionelmc/python-tblib")
38725 (synopsis "Traceback serialization library")
38726 (description
38727 "Traceback serialization allows you to:
38728
38729@enumerate
38730@item Pickle tracebacks and raise exceptions with pickled tracebacks in
38731different processes. This allows better error handling when running code over
38732multiple processes (imagine multiprocessing, billiard, futures, celery etc).
38733
38734@item Parse traceback strings and raise with the parsed tracebacks.
38735@end enumerate\n")
38736 (license license:bsd-3)))
38737
38738(define-public python-tcolorpy
38739 (package
38740 (name "python-tcolorpy")
38741 (version "0.1.7")
38742 (source
38743 (origin
38744 (method git-fetch)
38745 (uri (git-reference
38746 (url "https://github.com/thombashi/tcolorpy")
38747 (commit (string-append "v" version))))
38748 (file-name (git-file-name name version))
38749 (sha256
38750 (base32 "18cck1s0w9i5llaaw9s37g61dqg3vpjjgd3ywc72n1i02k0yj1fh"))))
38751 (build-system pyproject-build-system)
38752 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
38753 (home-page "https://github.com/thombashi/tcolorpy")
38754 (synopsis "Apply true color for terminal text")
38755 (description
38756 "@code{tcolorpy} is a Python library to apply true color for terminal
38757text.
38758You can set the following @code{tcolor} arguments:
38759
38760@itemize
38761@item color
38762@item bgcolor
38763@item styles
38764@end itemize")
38765 (license license:expat)))
38766
38767(define-public python-telethon
38768 (package
38769 (name "python-telethon")
38770 (version "1.44.0")
38771 (source
38772 (origin
38773 (method git-fetch)
38774 (uri (git-reference
38775 (url "https://codeberg.org/Lonami/Telethon")
38776 (commit (string-append "v" version))))
38777 (file-name (git-file-name name version))
38778 (sha256
38779 (base32 "1y1bzna7gqs6ck4jmh2spm7s8frw0qs6p52v9ar6qbbk1h7yacip"))))
38780 (build-system pyproject-build-system)
38781 (arguments
38782 (list
38783 #:phases
38784 #~(modify-phases %standard-phases
38785 (add-after 'build 'generate-tl-code
38786 (lambda _
38787 ;; The custom hatchling build hook (hatch_build.py) generates
38788 ;; telethon/tl/{types,functions}.py only inside hatchling's
38789 ;; isolated build directory, but deletes them again.
38790 ;; Regenerate the same code here too for tests; see
38791 ;; readthedocs/developing/project-structure.rst.
38792 (invoke "python3" "setup.py" "gen"))))))
38793 (native-inputs
38794 (list python-hatchling
38795 python-pytest
38796 python-pytest-asyncio
38797 python-pytest-trio
38798 python-setuptools))
38799 (propagated-inputs
38800 (list python-rsa python-pyaes))
38801 (home-page "https://docs.telethon.dev")
38802 (synopsis "Full-featured Telegram client library for Python 3")
38803 (description "This library is designed to make it easy to write Python
38804programs that can interact with Telegram.")
38805 (license license:expat)))
38806
38807(define-public python-tempdir
38808 (package
38809 (name "python-tempdir")
38810 (version "0.7.1")
38811 (source
38812 (origin
38813 (method url-fetch)
38814 (uri (pypi-uri "tempdir" version))
38815 (sha256
38816 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
38817 (build-system pyproject-build-system)
38818 (arguments (list #:tests? #f)) ; No tests.
38819 (native-inputs (list python-setuptools))
38820 (home-page "https://pypi.org/project/tempdir/")
38821 (synopsis "Python library for managing temporary directories")
38822 (description
38823 "This library manages temporary directories that are automatically
38824deleted with all their contents when they are no longer needed. It is
38825particularly convenient for use in tests.")
38826 (license license:expat)))
38827
38828(define-public python-tempora
38829 (package
38830 (name "python-tempora")
38831 (version "5.8.1")
38832 (source
38833 (origin
38834 (method url-fetch)
38835 (uri (pypi-uri "tempora" version))
38836 (sha256
38837 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
38838 (build-system pyproject-build-system)
38839 (arguments
38840 (list
38841 ;; Do not test the myproject.toml build as it tries to pull dependencies
38842 ;; from the Internet.
38843 #:test-flags #~(list "-k" "not project"
38844 "tests")))
38845 (native-inputs
38846 (list python-freezegun
38847 python-pytest
38848 python-setuptools
38849 python-setuptools-scm
38850 python-tzdata))
38851 (propagated-inputs (list python-dateutil python-jaraco-functools))
38852 (home-page "https://github.com/jaraco/tempora")
38853 (synopsis "Python date and time objects and routines")
38854 (description
38855 "The @code{tempora} Python library contains miscellaneous date and time
38856related utilities and constants, routines for measuring, profiling, and
38857getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
38858well as an event scheduler.")
38859 (license license:expat)))
38860
38861(define-public python-tenacity
38862 (package
38863 (name "python-tenacity")
38864 (version "9.0.0")
38865 (source
38866 (origin
38867 (method url-fetch)
38868 (uri (pypi-uri "tenacity" version))
38869 (sha256
38870 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
38871 (build-system pyproject-build-system)
38872 (native-inputs
38873 (list python-pytest
38874 python-setuptools
38875 python-setuptools-scm
38876 python-tornado
38877 python-typeguard
38878 python-wheel))
38879 (home-page "https://github.com/jd/tenacity")
38880 (synopsis "Retrying library for python")
38881 (description
38882 "Tenacity is a general-purpose python library to simplify the task of
38883adding retry behavior to just about anything.")
38884 (license license:asl2.0)))
38885
38886(define-public python-term-background
38887 (package
38888 (name "python-term-background")
38889 (version "1.0.2")
38890 (source
38891 (origin
38892 (method url-fetch)
38893 (uri (pypi-uri "term_background" version))
38894 (sha256
38895 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
38896 (arguments
38897 (list
38898 #:phases
38899 '(modify-phases %standard-phases
38900 (add-after 'unpack 'fix-build
38901 (lambda _ (delete-file "setup.py"))))))
38902 (build-system pyproject-build-system)
38903 (native-inputs
38904 (list python-pytest
38905 python-setuptools
38906 python-setuptools-scm
38907 python-wrapper
38908 python-wheel))
38909 (home-page "http://github.com/rocky/shell-term-background")
38910 (synopsis "Determine if shell has a light or dark background")
38911 (description "This package determines if shell has a light or dark
38912background.")
38913 (license license:gpl2+)))
38914
38915(define-public python-term-image
38916 (package
38917 (name "python-term-image")
38918 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
38919 (revision . "0")))
38920 (version (git-version "0.7.2"
38921 (assoc-ref properties 'revision)
38922 (assoc-ref properties 'commit)))
38923 (source
38924 (origin
38925 (method git-fetch)
38926 (uri (git-reference
38927 (url "https://github.com/AnonymouX47/term-image")
38928 (commit (assoc-ref properties 'commit))))
38929 (file-name (git-file-name name version))
38930 (sha256
38931 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
38932 (build-system pyproject-build-system)
38933 (arguments
38934 (list
38935 #:test-flags
38936 #~(list "tests"
38937 ;; These tests require network access.
38938 "-k" (string-append "not test_from_url"
38939 " and not test_source"
38940 " and not test_close"))
38941 #:phases
38942 #~(modify-phases %standard-phases
38943 (add-after 'unpack 'bump-pillow-requirement
38944 (lambda _
38945 (substitute* "src/term_image/image/common.py"
38946 (("\\.getdata")
38947 ".get_flattened_data"))
38948 (let* ((major #$(version-major
38949 (package-version
38950 (this-package-input "python-pillow"))))
38951 (next (number->string (+ 1 (string->number major)))))
38952 (substitute* "pyproject.toml"
38953 (("pillow>=9.1,<12")
38954 (string-append "pillow>=9.1,<" next)))))))))
38955 (propagated-inputs (list python-pillow python-requests))
38956 (native-inputs
38957 (list python-pytest
38958 python-setuptools
38959 python-urwid))
38960 (home-page "https://github.com/AnonymouX47/term-image")
38961 (synopsis "Display images in the terminal")
38962 (description "term-image is a library and program to display images on
38963compatible terminals.
38964
38965Features:
38966@enumerate
38967@item Multiple image formats (basically all formats supported by
38968@code{PIL.Image.open()})
38969@item Multiple image source types: PIL image instance, local file, URL
38970@item Multiple image render styles (with automatic support detection)
38971@item Support for multiple terminal graphics protocols, including Kitty
38972@item Transparency support (with multiple options)
38973@item Animated image support (including transparent ones)
38974@item Integration into various TUI / terminal-based output libraries
38975@item Terminal size awareness
38976@item Automatic and manual image sizing
38977@item Horizontal and vertical alignment
38978@item Automatic and manual font ratio adjustment (to preserve image aspect
38979ratio)
38980@end enumerate")
38981 (license license:expat)))
38982
38983(define-public python-termcolor
38984 (package
38985 (name "python-termcolor")
38986 (version "2.5.0")
38987 (source
38988 (origin
38989 (method url-fetch)
38990 (uri (pypi-uri "termcolor" version))
38991 (sha256
38992 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
38993 (build-system pyproject-build-system)
38994 (arguments
38995 (list
38996 #:phases
38997 #~(modify-phases %standard-phases
38998 (add-after 'unpack 'relax-coverage-requirements
38999 (lambda _
39000 (substitute* "pyproject.toml"
39001 ((".*coverage.*") "")))))))
39002 (native-inputs
39003 (list python-hatch-vcs python-hatchling python-pytest))
39004 (home-page "https://pypi.org/project/termcolor/")
39005 (synopsis "ANSII Color formatting for terminal output")
39006 (description
39007 "This package provides ANSII Color formatting for output in terminals.")
39008 (license license:expat)))
39009
39010(define-public python-termcolor-1
39011 (package
39012 (inherit python-termcolor)
39013 (version "1.1.0")
39014 (source
39015 (origin
39016 (method url-fetch)
39017 (uri (pypi-uri "termcolor" version))
39018 (sha256
39019 (base32
39020 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
39021 ;; There are no tests
39022 (arguments (list #:tests? #false))
39023 (native-inputs
39024 (list python-setuptools
39025 python-wheel))))
39026
39027(define-public python-termcolor-next
39028 (package
39029 (inherit python-termcolor)
39030 (name "python-termcolor-next")
39031 (version "3.1.0")
39032 (source
39033 (origin
39034 (method url-fetch)
39035 (uri (pypi-uri "termcolor" version))
39036 (sha256
39037 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
39038 (arguments '())))
39039
39040(define-public python-terminaltables
39041 (package
39042 (name "python-terminaltables")
39043 (version "3.1.0")
39044 (source
39045 (origin
39046 (method git-fetch)
39047 (uri (git-reference
39048 (url "https://github.com/Robpol86/terminaltables")
39049 (commit (string-append "v" version))))
39050 (file-name (git-file-name name version))
39051 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
39052 (build-system pyproject-build-system)
39053 ;; XXX: A lot of test fail with flaky behavior.
39054 (arguments (list #:tests? #f))
39055 (native-inputs
39056 (list python-colorclass
39057 python-colorama
39058 python-pytest
39059 python-setuptools
39060 python-termcolor))
39061 (home-page "https://github.com/Robpol86/terminaltables")
39062 (synopsis
39063 "Generate simple tables in terminals from a nested list of strings")
39064 (description
39065 "This package makes it easy to draw tables in terminal/console
39066applications from a list of lists of strings. It supports multi-line rows.")
39067 (license license:expat)))
39068
39069(define-public python-termstyle
39070 (package
39071 (name "python-termstyle")
39072 (version "0.1.11")
39073 (source
39074 (origin
39075 (method url-fetch)
39076 (uri (pypi-uri "termstyle" version))
39077 (sha256
39078 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
39079 (build-system pyproject-build-system)
39080 (arguments
39081 (list #:test-backend #~'custom
39082 #:test-flags #~(list "test3.py")))
39083 (native-inputs
39084 (list python-setuptools))
39085 (home-page "https://github.com/gfxmonk/termstyle")
39086 (synopsis "Console text coloring for Python")
39087 (description "This package provides console text coloring for Python.")
39088 (license license:bsd-3)))
39089
39090(define-public python-text-unidecode
39091 (package
39092 (name "python-text-unidecode")
39093 (version "1.3")
39094 (source
39095 (origin
39096 (method url-fetch)
39097 (uri (pypi-uri "text-unidecode" version))
39098 (sha256
39099 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
39100 (build-system pyproject-build-system)
39101 (native-inputs
39102 (list python-pytest
39103 python-setuptools))
39104 (home-page "https://github.com/kmike/text-unidecode/")
39105 (synopsis "Decode Unicode data")
39106 (description
39107 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
39108Perl library. It can create ASCII representations of Unicode data. In general
39109users should prefer the @code{python-unidecode} package which offers better
39110memory usage and transliteration quality.")
39111 ;; The user can choose either license.
39112 (license (list license:clarified-artistic license:gpl2+))))
39113
39114(define-public python-textdistance
39115 (package
39116 (name "python-textdistance")
39117 (version "4.6.3")
39118 (source
39119 (origin
39120 (method git-fetch)
39121 (uri (git-reference
39122 (url "https://github.com/life4/textdistance")
39123 (commit version)))
39124 (file-name (git-file-name name version))
39125 (sha256
39126 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
39127 (build-system pyproject-build-system)
39128 ;; tests: 430 passed, 1446 warnings
39129 (native-inputs
39130 (list python-numpy
39131 python-pytest
39132 python-setuptools))
39133 (propagated-inputs
39134 (list python-jellyfish
39135 python-distance
39136 python-levenshtein
39137 python-pylev
39138 python-pyxdameraulevenshtein
39139 python-rapidfuzz))
39140 (home-page "https://github.com/life4/textdistance")
39141 (synopsis "Compute distance between the two texts")
39142 (description "@code{textdistance} is a pure Python library for comparing
39143distance between two or more sequences by many algorithms.")
39144 (license license:expat)))
39145
39146(define-public python-textparser
39147 (package
39148 (name "python-textparser")
39149 (version "0.24.0")
39150 (source
39151 (origin
39152 (method url-fetch)
39153 (uri (pypi-uri "textparser" version))
39154 (sha256
39155 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
39156 (build-system pyproject-build-system)
39157 (arguments
39158 (list #:test-backend #~'unittest))
39159 (native-inputs (list python-setuptools))
39160 (home-page "https://github.com/eerimoq/textparser")
39161 (synopsis "Fast text parser for Python")
39162 (description "This library provides a text parser written in the Python
39163language. It aims to be fast.")
39164 (license license:expat)))
39165
39166(define-public python-texttable
39167 (package
39168 (name "python-texttable")
39169 (version "1.7.0")
39170 (source
39171 (origin
39172 (method git-fetch)
39173 (uri (git-reference
39174 (url "https://github.com/foutaise/texttable/")
39175 (commit (string-append "v" version))))
39176 (file-name (git-file-name name version))
39177 (sha256
39178 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
39179 (build-system pyproject-build-system)
39180 (arguments (list #:test-flags #~(list "tests.py")))
39181 (native-inputs (list python-pytest python-setuptools))
39182 (home-page "https://github.com/foutaise/texttable/")
39183 (synopsis "Create simple ASCII tables in Python")
39184 (description
39185 "This package provides a Python module for creating simple ASCII
39186tables.")
39187 (license license:expat)))
39188
39189(define-public python-textual
39190 (package
39191 (name "python-textual")
39192 (version "7.4.0")
39193 (source
39194 (origin
39195 (method git-fetch)
39196 (uri (git-reference
39197 (url "https://github.com/Textualize/textual")
39198 (commit (string-append "v" version))))
39199 (file-name (git-file-name name version))
39200 (sha256
39201 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
39202 (build-system pyproject-build-system)
39203 (arguments
39204 (list
39205 #:test-flags
39206 ;; Snapshot tests require python-pytest-textual-snapshot which
39207 ;; in turn depends on python-textual.
39208 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
39209 "-k" (string-append
39210 ;; Broken for unknown reason.
39211 "not test_textual_env_var"
39212 ;; Tests that require python-treesitter-languages.
39213 " and not test_widget_construct"
39214 " and not test_setting_builtin_language_via_constructor"
39215 " and not test_setting_builtin_language_via_attribute"
39216 " and not test_setting_language_to_none"
39217 " and not test_setting_unknown_language"
39218 " and not test_register_language"
39219 " and not test_update_highlight_query"
39220 " and not test_default_theme"
39221 " and not test_setting_builtin_themes"
39222 " and not test_setting_unknown_theme_raises_exception"
39223 " and not test_registering_and_setting_theme"
39224 " and not test_progress_bar_width_1fr"))
39225 #:phases
39226 #~(modify-phases %standard-phases
39227 (add-after 'unpack 'relax-requirements
39228 (lambda _
39229 (substitute* "pyproject.toml"
39230 (("pygments =.*")
39231 "pygments = \"*\"\n")))))))
39232 (propagated-inputs
39233 (list python-markdown-it-py
39234 python-mdit-py-plugins
39235 python-platformdirs
39236 python-rich
39237 python-tree-sitter
39238 ;; python-tree-sitter-languages ; optional, not packed yet
39239 python-typing-extensions))
39240 (native-inputs
39241 (list python-poetry-core
39242 python-pytest
39243 python-pytest-asyncio
39244 python-pytest-xdist))
39245 (home-page "https://github.com/Textualize/textual")
39246 (synopsis "Build text user interfaces in Python")
39247 (description "Textual is a @acronym{TUI, Text User Interface} framework
39248for Python inspired by modern web development.")
39249 (license license:expat)))
39250
39251(define-public python-tftpy
39252 (package
39253 (name "python-tftpy")
39254 (version "0.8.6")
39255 (source
39256 (origin
39257 (method git-fetch)
39258 (uri (git-reference
39259 (url "https://github.com/msoulier/tftpy")
39260 (commit version)))
39261 (file-name (git-file-name name version))
39262 (sha256
39263 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
39264 (build-system pyproject-build-system)
39265 (arguments
39266 (list
39267 #:test-backend #~'unittest
39268 #:test-flags #~(list "tests/test.py")
39269 #:phases
39270 #~(modify-phases %standard-phases
39271 (add-before 'check 'configure-tests
39272 (lambda* (#:key tests? #:allow-other-keys)
39273 (when tests?
39274 ;; The default DEBUG logging level is way too verbose.
39275 (substitute* "tests/test.py"
39276 (("logging\\.DEBUG")
39277 "logging.INFO"))))))))
39278 (native-inputs (list python-setuptools))
39279 (home-page "https://tftpy.sourceforge.net/")
39280 (synopsis "Python trivial file transfer protocol (TFTP) library")
39281 (description
39282 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
39283be used to act both as a TFTP client or TFTP server.")
39284 (license license:expat)))
39285
39286(define-public python-thefuzz
39287 (package
39288 (name "python-thefuzz")
39289 (version "0.22.1")
39290 (source
39291 (origin
39292 (method git-fetch)
39293 (uri (git-reference
39294 (url "https://github.com/seatgeek/thefuzz")
39295 (commit version)))
39296 (file-name (git-file-name name version))
39297 (sha256
39298 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
39299 (build-system pyproject-build-system)
39300 (arguments
39301 (list #:test-flags #~'("-k" "not TestCodeFormat")
39302 #:phases #~(modify-phases %standard-phases
39303 ;; pycodestyle is only used in TestCodeFormat.
39304 (add-after 'unpack 'unrequire-pycodestyle
39305 (lambda _
39306 (substitute* "test_thefuzz.py"
39307 (("import pycodestyle.*") "")))))))
39308 (propagated-inputs (list python-rapidfuzz))
39309 (native-inputs (list python-hypothesis
39310 python-pytest
39311 python-setuptools))
39312 (home-page "https://github.com/seatgeek/thefuzz")
39313 (synopsis "Fuzzy string matching in Python")
39314 (description
39315 "This Python package implements fuzzing string matching
39316using Levenshtein distance.")
39317 (license license:expat)))
39318
39319(define-public python-three-merge
39320 (package
39321 (name "python-three-merge")
39322 (version "0.1.1")
39323 (source
39324 (origin
39325 ;; There are no tests in the PyPI tarball.
39326 (method git-fetch)
39327 (uri (git-reference
39328 (url "https://github.com/spyder-ide/three-merge")
39329 (commit (string-append "v" version))))
39330 (file-name (git-file-name name version))
39331 (sha256
39332 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
39333 (build-system pyproject-build-system)
39334 (propagated-inputs
39335 (list python-diff-match-patch))
39336 (native-inputs
39337 (list python-pytest python-setuptools python-wheel))
39338 (home-page "https://github.com/spyder-ide/three-merge")
39339 (synopsis "Library for merging two strings with respect to a base one")
39340 (description
39341 "This package provides a Python library to perform a 3-way merge between
39342strings, based on @code{diff-match-patch}. This library performs merges at a
39343character level, as opposed to most VCS systems, which opt for a line-based
39344approach.")
39345 (license license:expat)))
39346
39347(define-public python-throttler
39348 (package
39349 (name "python-throttler")
39350 (version "1.2.3")
39351 (source
39352 (origin
39353 (method git-fetch)
39354 (uri (git-reference
39355 (url "https://github.com/uburuntu/throttler")
39356 (commit (string-append "v" version))))
39357 (file-name (git-file-name name version))
39358 (sha256
39359 (base32 "1k0a3hxih2qk3fxljcwbbpa723bshrvcqgz2lxgll32g1lfa3hnd"))))
39360 (build-system pyproject-build-system)
39361 (native-inputs
39362 (list python-aiohttp
39363 python-pytest
39364 python-pytest-asyncio
39365 python-setuptools))
39366 (home-page "https://github.com/uburuntu/throttler")
39367 (synopsis "Throttling with asyncio support")
39368 (description
39369 "This is a Python package for easy throttling with asyncio support.")
39370 (license license:expat)))
39371
39372(define-public python-tifffile
39373 (package
39374 (name "python-tifffile")
39375 (version "2025.10.4")
39376 (source
39377 (origin
39378 (method url-fetch)
39379 (uri (pypi-uri "tifffile" version))
39380 (sha256
39381 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
39382 (build-system pyproject-build-system)
39383 ;; Tests require lfdfiles, which depends on tifffile
39384 (arguments (list #:tests? #f))
39385 (propagated-inputs
39386 (list python-numpy))
39387 (native-inputs
39388 (list python-setuptools))
39389 (home-page "https://www.lfd.uci.edu/~gohlke/")
39390 (synopsis "Read and write TIFF(r) files")
39391 (description
39392 "This package lets you read image and metadata from many bio-scientific
39393formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
39394MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
39395to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
39396 (license license:bsd-3)))
39397
39398(define-public python-tiktoken
39399 (package
39400 (name "python-tiktoken")
39401 (version "0.9.0")
39402 (source
39403 (origin
39404 (method url-fetch)
39405 (uri (pypi-uri "tiktoken" version))
39406 (sha256
39407 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
39408 (build-system cargo-build-system)
39409 (arguments
39410 (list
39411 #:install-source? #false
39412 #:imported-modules
39413 (append %pyproject-build-system-modules
39414 %cargo-build-system-modules)
39415 #:modules
39416 '((guix build cargo-build-system)
39417 ((guix build pyproject-build-system) #:prefix py:)
39418 (guix build utils))
39419 #:phases
39420 #~(modify-phases %standard-phases
39421 (replace 'build
39422 (assoc-ref py:%standard-phases 'build))
39423 (add-after 'install 'wrap
39424 (lambda _
39425 ;; Collection of python- and pyproject-build-system phases
39426 ;; between 'install and 'check.
39427 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
39428 (assoc-ref py:%standard-phases 'add-install-to-path)
39429 (assoc-ref py:%standard-phases 'wrap)
39430 (assoc-ref py:%standard-phases 'create-entrypoints)
39431 (assoc-ref py:%standard-phases 'compile-bytecode)))
39432 (replace 'install
39433 (assoc-ref py:%standard-phases 'install)))))
39434 (propagated-inputs (list python-regex python-requests))
39435 (inputs (cargo-inputs 'python-tiktoken))
39436 (native-inputs
39437 (list python-setuptools
39438 python-setuptools-rust
39439 python-wheel
39440 python-wrapper))
39441 (home-page "https://github.com/openai/tiktoken/")
39442 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
39443 (description
39444 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
39445@code{OpenAI's} models.")
39446 (license license:expat)))
39447
39448(define-public python-timeout-decorator
39449 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
39450 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
39451 (package
39452 (name "python-timeout-decorator")
39453 (version "0.5.0")
39454 (source
39455 (origin
39456 (method url-fetch)
39457 (uri (pypi-uri "timeout-decorator" version))
39458 (sha256
39459 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
39460 (build-system pyproject-build-system)
39461 (arguments (list #:tests? #f))
39462 (native-inputs (list python-setuptools python-wheel))
39463 (home-page "https://github.com/pnpnpn/timeout-decorator")
39464 (synopsis "Timeout decorator")
39465 (description "This package provides a decorator that raises an error
39466when an operation takes longer than expected.")
39467 (license license:expat)))
39468
39469(define-public python-titlecase
39470 (package
39471 (name "python-titlecase")
39472 (version "2.4.1")
39473 (source
39474 (origin
39475 (method url-fetch)
39476 (uri (pypi-uri "titlecase" version))
39477 (sha256
39478 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
39479 (build-system pyproject-build-system)
39480 (arguments
39481 (list
39482 #:test-backend #~'unittest))
39483 (native-inputs
39484 (list python-setuptools))
39485 (home-page "https://github.com/ppannuto/python-titlecase")
39486 (synopsis "Capitalize strings similar to book titles")
39487 (description
39488 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
39489It capitalizes (predominantly English) strings in a way that is similar to
39490book titles, using the New York Times Manual of Style to leave certain words
39491lowercase.")
39492 (license license:expat)))
39493
39494(define-public python-tlsh
39495 (package
39496 (name "python-tlsh")
39497 (version "4.11.2")
39498 (home-page "https://github.com/trendmicro/tlsh")
39499 (source
39500 (origin
39501 (method git-fetch)
39502 (uri (git-reference (url home-page) (commit version)))
39503 (file-name (git-file-name name version))
39504 (sha256
39505 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
39506 (build-system pyproject-build-system)
39507 (arguments
39508 (list
39509 #:phases
39510 #~(modify-phases %standard-phases
39511 (add-before 'build 'configure
39512 (lambda _
39513 (invoke "cmake" "."))) ;to generate tlsh_version.h
39514 (add-after 'configure 'chdir
39515 (lambda _
39516 (chdir "py_ext")))
39517 (replace 'check
39518 (lambda* (#:key tests? #:allow-other-keys)
39519 (when tests?
39520 (with-directory-excursion "../Testing"
39521 (invoke "./python_test.sh"))))))))
39522 (native-inputs (list cmake-minimal python-setuptools))
39523 (synopsis "Fuzzy matching library for Python")
39524 (description
39525 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
39526Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
39527value which can be used for similarity comparisons. Similar objects have
39528similar hash values, which allows for the detection of similar objects by
39529comparing their hash values. The byte stream should have a sufficient amount
39530of complexity; for example, a byte stream of identical bytes will not generate
39531a hash value.")
39532 (license license:asl2.0)))
39533
39534(define-public python-tlv8
39535 (package
39536 (name "python-tlv8")
39537 (version "0.10.0")
39538 (source
39539 (origin
39540 (method git-fetch)
39541 (uri (git-reference
39542 (url "https://github.com/jlusiardi/tlv8_python")
39543 (commit (string-append "v" version))))
39544 (file-name (git-file-name name version))
39545 (sha256
39546 (base32 "0q25y5lz7cigfk7l30rdm2z8as8662pzd8ki5vvs1c0saqq72zhv"))))
39547 (build-system pyproject-build-system)
39548 (native-inputs (list python-setuptools python-pytest))
39549 (home-page "https://github.com/jlusiardi/tlv8_python")
39550 (synopsis
39551 "Python library for @acronym{TLV, type-length-value} encoded data")
39552 (description
39553 "Python library for @acronym{TLV, type-length-value} encoding and decoding.
39554Represents type and length by one byte each, hence the name @code{tlv8}.")
39555 (license license:asl2.0)))
39556
39557(define-public python-tokenize-rt
39558 (package
39559 (name "python-tokenize-rt")
39560 (version "6.2.0")
39561 (source
39562 (origin
39563 (method git-fetch)
39564 (uri (git-reference
39565 (url "https://github.com/asottile/tokenize-rt")
39566 (commit (string-append "v" version))))
39567 (file-name (git-file-name name version))
39568 (sha256
39569 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
39570 (build-system pyproject-build-system)
39571 (native-inputs (list python-pytest python-setuptools))
39572 (home-page "https://github.com/asottile/tokenize-rt")
39573 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
39574 (description
39575 "This Python library is a wrapper around @code{tokenize} from the Python
39576standard library. It provides two additional tokens @code{ESCAPED_NL} and
39577@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
39578and @code{tokens_to_src} to roundtrip.")
39579 (license license:expat)))
39580
39581(define-public python-tomlkit
39582 (package
39583 (name "python-tomlkit")
39584 (version "0.15.0")
39585 (source
39586 (origin
39587 (method git-fetch)
39588 (uri (git-reference
39589 (url "https://github.com/sdispater/tomlkit")
39590 (commit version)))
39591 (file-name (git-file-name name version))
39592 (sha256
39593 (base32 "00sv5x8j78zkirzh9rl89lkpwfwhkhrq4mql2p4rqws1j37zx88g"))))
39594 (build-system pyproject-build-system)
39595 (arguments
39596 (list
39597 #:phases
39598 #~(modify-phases %standard-phases
39599 ;; toml-test is submodule to
39600 ;; <https://github.com/toml-lang/toml-test>.
39601 (add-after 'unpack 'copy-toml-test-source
39602 (lambda _
39603 (copy-recursively
39604 #$(package-source (this-package-native-input "toml-test"))
39605 "tests/toml-test"))))))
39606 (native-inputs
39607 (list python-poetry-core
39608 python-pytest
39609 toml-test))
39610 (home-page "https://github.com/sdispater/tomlkit")
39611 (synopsis "Style-preserving TOML library")
39612 (description
39613 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
39614preserves all comments, indentations, whitespace and internal element ordering,
39615and makes them accessible and editable via an intuitive API. It can also
39616create new TOML documents from scratch using the provided helpers. Part of the
39617implementation has been adapted, improved, and fixed from Molten.")
39618 (license license:expat)))
39619
39620(define-public python-toolrack
39621 (package
39622 (name "python-toolrack")
39623 (version "4.0.3")
39624 (source
39625 (origin
39626 (method git-fetch)
39627 (uri (git-reference
39628 (url "https://github.com/albertodonato/toolrack")
39629 (commit (string-append "v" version))))
39630 (file-name (git-file-name name version))
39631 (sha256
39632 (base32
39633 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
39634 (build-system pyproject-build-system)
39635 (arguments
39636 (list
39637 #:phases
39638 #~(modify-phases %standard-phases
39639 (add-after 'unpack 'patch-/bin/sh
39640 (lambda _
39641 (substitute* "tests/aio/process_test.py"
39642 (("/bin/sh")
39643 (which "sh"))))))))
39644 (native-inputs
39645 (list python-pytest
39646 python-pytest-asyncio
39647 python-pytest-mock
39648 python-setuptools))
39649 (home-page "https://github.com/albertodonato/toolrack")
39650 (synopsis "Collection of Python utility functions and classes")
39651 (description "This package provides a collection of miscellaneous utility
39652functions and classes.")
39653 (license license:lgpl3+)))
39654
39655(define-public python-toolshed
39656 (package
39657 (name "python-toolshed")
39658 (version "0.4.8")
39659 (source
39660 (origin
39661 (method git-fetch)
39662 (uri (git-reference
39663 (url "https://github.com/brentp/toolshed")
39664 (commit (string-append "v" version))))
39665 (file-name (git-file-name name version))
39666 (sha256
39667 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
39668 (build-system pyproject-build-system)
39669 (native-inputs
39670 (list python-pytest
39671 python-setuptools))
39672 (home-page "https://github.com/brentp/toolshed/")
39673 (synopsis "Collection of modules and functions for working with data")
39674 (description "This is a collection of well-tested, simple modules and
39675functions that aim to reduce boilerplate when working with data.")
39676 (license license:bsd-2)))
39677
39678(define-public python-toolz
39679 (package
39680 (name "python-toolz")
39681 (version "1.1.0")
39682 (source
39683 (origin
39684 (method git-fetch)
39685 (uri (git-reference
39686 (url "https://github.com/pytoolz/toolz")
39687 (commit version)))
39688 (file-name (git-file-name name version))
39689 (sha256
39690 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
39691 (build-system pyproject-build-system)
39692 (arguments
39693 (list
39694 #:phases
39695 #~(modify-phases %standard-phases
39696 (add-after 'unpack 'set-version
39697 (lambda _
39698 (substitute* "pyproject.toml"
39699 (("\\[tool.setuptools-git-versioning\\]" all)
39700 (string-append "[tool.setuptools_scm]\n"
39701 "write_to = \"toolz/_version.py\"\n"
39702 all))))))))
39703 (native-inputs
39704 (list python-pytest
39705 python-setuptools
39706 ;; Project expects setuptools-git-versioning to build version, but
39707 ;; it does not support envar override as seuptools-scm.
39708 python-setuptools-scm))
39709 (home-page "https://github.com/pytoolz/toolz/")
39710 (synopsis "List processing tools and functional utilities")
39711 (description
39712 "This package provides a set of utility functions for iterators,
39713functions, and dictionaries.")
39714 (license license:bsd-3)))
39715
39716(define-public python-toposort
39717 (package
39718 (name "python-toposort")
39719 (version "1.10")
39720 (source
39721 (origin
39722 (method url-fetch)
39723 (uri (pypi-uri "toposort" version))
39724 (sha256
39725 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
39726 (build-system pyproject-build-system)
39727 (arguments
39728 (list #:test-backend #~'custom
39729 #:test-flags #~(list "-m" "test.test_toposort")))
39730 (native-inputs (list python-setuptools))
39731 (home-page "https://gitlab.com/ericvsmith/toposort")
39732 (synopsis "Topological sort algorithm")
39733 (description
39734 "This package provides an implementation of a topological sort
39735algorithm.")
39736 (license license:asl2.0)))
39737
39738(define-public python-towncrier
39739 (package
39740 (name "python-towncrier")
39741 (version "25.8.0")
39742 (source
39743 (origin
39744 (method url-fetch)
39745 (uri (pypi-uri "towncrier" version))
39746 (sha256
39747 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
39748 (build-system pyproject-build-system)
39749 (native-inputs
39750 (list git-minimal/pinned ;tests create git repositories
39751 python-hatchling
39752 python-pytest
39753 python-twisted))
39754 (propagated-inputs
39755 (list python-click
39756 python-jinja2))
39757 (home-page "https://towncrier.readthedocs.io/en/stable/")
39758 (synopsis "Manage release notes")
39759 (description
39760 "@code{towncrier} is a utility to produce useful, summarized news files
39761 (also known as changelogs) for a project.")
39762 (license license:expat)))
39763
39764(define-public python-tqdm
39765 (package
39766 (name "python-tqdm")
39767 (version "4.67.1")
39768 (source
39769 (origin
39770 (method url-fetch)
39771 (uri (pypi-uri "tqdm" version))
39772 (sha256
39773 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
39774 (build-system pyproject-build-system)
39775 (arguments
39776 (list #:test-flags
39777 '(list "-o" "asyncio_mode=auto"
39778 "-k" "not perf and not test_rlock_creation")))
39779 (native-inputs
39780 (list python-pytest
39781 python-pytest-asyncio
39782 python-pytest-timeout
39783 python-setuptools
39784 python-setuptools-scm
39785 python-toml
39786 python-wheel))
39787 (home-page "https://github.com/tqdm/tqdm")
39788 (synopsis "Fast, extensible progress meter")
39789 (description
39790 "Make loops show a progress bar on the console by just wrapping any
39791iterable with @code{|tqdm(iterable)|}. Offers many options to define
39792design and layout.")
39793 (license (list license:mpl2.0 license:expat))))
39794
39795(define-public python-traitlets
39796 (package
39797 (name "python-traitlets")
39798 (version "5.14.3")
39799 (source
39800 (origin
39801 (method url-fetch)
39802 (uri (pypi-uri "traitlets" version))
39803 (sha256
39804 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
39805 (build-system pyproject-build-system)
39806 ;; tests: 566 passed, 3 skipped, 1 warning
39807 (native-inputs
39808 (list python-hatchling
39809 python-pytest))
39810 (home-page "https://ipython.org")
39811 (synopsis "Configuration system for Python applications")
39812 (description
39813 "Traitlets is a framework that lets Python classes have attributes with
39814type checking, dynamically calculated default values, and ‘on change’
39815callbacks. The package also includes a mechanism to use traitlets for
39816configuration, loading values from files or from command line arguments. This
39817is a distinct layer on top of traitlets, so you can use traitlets in your code
39818without using the configuration machinery.")
39819 (license license:bsd-3)))
39820
39821(define-public python-translate-toolkit
39822 (package
39823 (name "python-translate-toolkit")
39824 (version "3.15.6")
39825 (source
39826 (origin
39827 (method url-fetch)
39828 (uri (pypi-uri "translate_toolkit" version))
39829 (sha256
39830 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
39831 (build-system pyproject-build-system)
39832 (arguments
39833 (list
39834 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
39835 #:test-flags
39836 ;; TODO: Some of the optional inputs are not packaged yet.
39837 #~(list #$@(map (lambda (file) (string-append "--ignore="
39838 "tests/translate/"
39839 file))
39840 (list "convert/test_ini2po.py"
39841 "convert/test_php2po.py"
39842 "convert/test_po2ini.py"
39843 "convert/test_po2php.py"
39844 "storage/test_cpo.py"
39845 "storage/test_fluent.py"
39846 "storage/test_ini.py"
39847 "storage/test_php.py"
39848 "storage/test_po.py"
39849 "storage/test_pypo.py"
39850 "storage/test_subtitles.py"))
39851 #$@(map (lambda (test) (string-append "--deselect="
39852 "tests/translate/storage/"
39853 test))
39854 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
39855 ;; 0xff in position 0: invalid start byte
39856 (list "test_csvl10n.py::TestCSV::test_encoding_save"
39857 ;; FileNotFoundError: [Errno 2] No such file or
39858 ;; directory: 'msgfmt'
39859 "test_mo.py::TestMOFile::test_output"
39860 ;; assert 0 == -16200
39861 "test_poheader.py::test_timezones"))
39862 #$@(map (lambda (test) (string-append "--deselect="
39863 "tests/translate/tools/"
39864 test))
39865 ;; XXX: Some issues with XML parsing.
39866 (list "test_junitmsgfmt.py::test_output"
39867 "test_pocount.py::test_output"
39868 "test_pocount.py::test_cases"))
39869 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
39870 (native-inputs
39871 (list python-pytest
39872 python-setuptools
39873 python-setuptools-scm))
39874 (propagated-inputs
39875 (list python-cwcwidth
39876 python-cheroot
39877 ;; python-aeidon
39878 ;; python-fluent
39879 python-iniparse
39880 python-lxml
39881 python-mistletoe
39882 python-phply
39883 python-pyparsing
39884 python-ruamel.yaml
39885 python-vobject))
39886 (home-page "https://toolkit.translatehouse.org")
39887 (synopsis "Tools and API for translation and localization engineering")
39888 (description
39889 "Tools and API for translation and localization engineering. It contains
39890several utilities, as well as an API for building localization tools.")
39891 (license license:gpl2+)))
39892
39893;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
39894(define-public python-translate-toolkit-for-offlate
39895 (hidden-package
39896 (package
39897 (inherit python-translate-toolkit)
39898 (version "3.6.2")
39899 (source
39900 (origin
39901 (method url-fetch)
39902 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
39903 (sha256
39904 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
39905 (arguments
39906 (list #:tests? #f)))))
39907
39908(define-public python-translitcodec
39909 (package
39910 (name "python-translitcodec")
39911 (version "0.7.0")
39912 (source
39913 (origin
39914 (method git-fetch)
39915 (uri (git-reference
39916 (url "https://github.com/claudep/translitcodec")
39917 (commit (string-append "version-" version))))
39918 (file-name (git-file-name name version))
39919 (sha256
39920 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
39921 (build-system pyproject-build-system)
39922 (native-inputs (list python-pytest python-setuptools))
39923 (home-page "https://github.com/claudep/translitcodec")
39924 (synopsis "Unicode to 8-bit charset transliteration codec")
39925 (description
39926 "This package contains codecs for transliterating ISO 10646 texts into
39927best-effort representations using smaller coded character sets (ASCII,
39928ISO 8859, etc.).")
39929 (license license:expat)))
39930
39931(define-public python-treelib
39932 (package
39933 (name "python-treelib")
39934 (version "1.8.0")
39935 (source
39936 (origin
39937 (method git-fetch)
39938 (uri (git-reference
39939 (url "https://github.com/caesar0301/treelib")
39940 (commit (string-append "v" version))))
39941 (file-name (git-file-name name version))
39942 (sha256
39943 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
39944 (patches
39945 (search-patches "python-treelib-remove-python2-compat.patch"))))
39946 (build-system pyproject-build-system)
39947 (native-inputs (list python-poetry-core python-pytest))
39948 (home-page "https://github.com/caesar0301/treelib")
39949 (synopsis "Implementation of a tree structure in Python")
39950 (description
39951 "This package provides a Python implementation of a tree structure.")
39952 (license license:asl2.0)))
39953
39954(define-public python-trio
39955 (package
39956 (name "python-trio")
39957 (version "0.33.0")
39958 (source
39959 (origin
39960 (method git-fetch)
39961 (uri (git-reference
39962 (url "https://github.com/python-trio/trio")
39963 (commit (string-append "v" version))))
39964 (file-name (git-file-name name version))
39965 (sha256
39966 (base32 "1ibkp7bgdv0k099szk8181rfn7jm60kh8kpfrkfr4pnwjd6abslf"))))
39967 (build-system pyproject-build-system)
39968 (arguments
39969 (list
39970 ;; tests: 507 passed, 45 skipped, 37 deselected
39971 #:test-flags
39972 #~(list
39973 #$@(if (package? (this-package-native-input "python-trustme"))
39974 #~()
39975 #~("--ignore=src/trio/_tests/test_dtls.py"
39976 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
39977 "--ignore=src/trio/_tests/test_ssl.py"))
39978 ;; Skip tests for the upstream repository's tooling.
39979 "--ignore=src/trio/_tests/tools"
39980 "-k" (string-join
39981 (list
39982 ;; Keyboard interrupts misbehave in the build sandbox.
39983 "not test_ki_in_repl"
39984 "test_KI_interrupts"
39985 "test_run_in_trio_thread_ki"
39986 ;; Somehow f'{check_errno_is_5!r}' evaluates
39987 ;; to "'check_errno_is_5'" instead of "<function ...>",
39988 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
39989 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
39990 ;; will probably be removed in version 0.35.
39991 "test_Matcher_check"
39992 "test_matcher_tostring"
39993 "test_raisesgroup_tostring"
39994 ;; Failure in name resolution.
39995 "test_SocketType_resolve"
39996 ;; OSError: protocol not found.
39997 "test_getprotobyname"
39998 ;; Drop pylint and jedi.
39999 "test_static_tool_sees_all_symbols")
40000 " and not ")
40001 "src/trio/_tests")
40002 #:phases
40003 #~(modify-phases %standard-phases
40004 (add-after 'unpack 'patch-pthread-path
40005 (lambda* (#:key inputs #:allow-other-keys)
40006 (substitute* '("src/trio/_core/_thread_cache.py"
40007 "src/trio/_tests/test_threads.py")
40008 (("ctypes.util.find_library\\(\"pthread\"\\)")
40009 (simple-format #f "~s"
40010 (search-input-file inputs "lib/libpthread.so.0"))))))
40011 (add-before 'check 'set-env
40012 (lambda _
40013 ;; Tests require a writable home.
40014 (setenv "HOME" "/tmp"))))))
40015 (native-inputs
40016 (append
40017 (if (supported-package? python-pyopenssl)
40018 (list python-pyopenssl)
40019 '())
40020 (if (supported-package? python-trustme)
40021 (list python-trustme)
40022 '())
40023 (list python-async-generator)
40024 (if (supported-package? python-cryptography)
40025 (list python-cryptography)
40026 '())
40027 (list python-pytest
40028 python-setuptools)))
40029 (propagated-inputs
40030 (list python-attrs
40031 python-idna
40032 python-outcome
40033 python-sniffio
40034 python-sortedcontainers))
40035 (home-page "https://github.com/python-trio/trio")
40036 ;; (home-page "https://trio.readthedocs.io")
40037 (synopsis "Friendly Python library for async concurrency and I/O")
40038 (description
40039 "Trio strives to be a production-quality, async/await-native I/O library
40040for Python. Like all async libraries, its main purpose is to help you write
40041programs that do multiple things at the same time with parallelized I/O.")
40042 ;; Either license applies.
40043 (license (list license:expat license:asl2.0))))
40044
40045(define-public python-trio-typing
40046 (package
40047 (name "python-trio-typing")
40048 (version "0.10.0")
40049 (source
40050 (origin
40051 (method git-fetch)
40052 (uri (git-reference
40053 (url "https://github.com/python-trio/trio-typing")
40054 (commit (string-append "v" version))))
40055 (file-name (git-file-name name version))
40056 (sha256
40057 (base32 "127zpngp6r87kapvx5bwcl5awhyrsykwmvnxrb67qv7yz1s4z278"))))
40058 (build-system pyproject-build-system)
40059 (arguments
40060 (list #:tests? #f )) ;no proper tests
40061 (native-inputs
40062 (list python-setuptools))
40063 (propagated-inputs
40064 (list python-async-generator
40065 python-importlib-metadata
40066 python-mypy-extensions
40067 python-packaging
40068 python-trio
40069 python-typing-extensions))
40070 (home-page "https://github.com/python-trio/trio-typing")
40071 (synopsis "Static type checking support for Trio and related projects")
40072 (description
40073 "This package provides:
40074
40075@itemize
40076@item PEP 561 typing stubs packages for the Trio project packages:
40077
40078@itemize
40079@item trio (@code{trio-stubs})
40080@item outcome (@code{outcome-stubs})
40081@item async_generator (@code{async_generator-stubs})
40082@end itemize
40083
40084@item A package @code{trio_typing} containing types that Trio programs often
40085want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
40086a mypy plugin that smooths over some limitations in the basic type hints.
40087@end itemize")
40088 ;; Either license applies.
40089 (license (list license:expat license:asl2.0))))
40090
40091(define-public python-trubar
40092 (package
40093 (name "python-trubar")
40094 (version "0.3.4")
40095 (source
40096 (origin
40097 (method url-fetch)
40098 (uri (pypi-uri "trubar" version))
40099 (sha256
40100 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
40101 (build-system pyproject-build-system)
40102 (arguments
40103 (list
40104 #:test-flags
40105 #~(list "-k" (string-join
40106 ;; AttributeError: module 'libcst' has no attribute
40107 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
40108 (list "not test_import_from_future"
40109 "test_inport_after_docstring"
40110 ;; AssertionError: Items in the second set but not
40111 ;; the first
40112 "test_walk_files")
40113 " and not "))))
40114 (native-inputs
40115 (list python-pytest
40116 python-setuptools
40117 python-wheel))
40118 (propagated-inputs
40119 (list python-libcst
40120 python-pyyaml))
40121 (home-page "https://github.com/janezd/trubar")
40122 (synopsis "Utility for translation of Python sources")
40123 (description
40124 "This package provides a tool for translation and localization of Python
40125programs via modification of source files. Trubar supports f-strings and does
40126not require any changes to the original source code, such as marking strings
40127for translation.")
40128 (license license:expat)))
40129
40130(define-public python-twine
40131 (package
40132 (name "python-twine")
40133 (version "6.2.0")
40134 (source
40135 (origin
40136 (method url-fetch)
40137 (uri (pypi-uri "twine" version))
40138 (sha256
40139 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
40140 (build-system pyproject-build-system)
40141 (arguments
40142 (list
40143 ;; tests: 228 passed, 1 deselected
40144 #:test-flags
40145 ;; Assertion is not equal for one tests.
40146 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
40147 (native-inputs
40148 (list python-pretend
40149 python-pytest
40150 python-pytest-socket
40151 python-setuptools
40152 python-setuptools-scm))
40153 (propagated-inputs
40154 (list python-id
40155 python-keyring
40156 python-packaging
40157 python-readme-renderer
40158 python-requests
40159 python-requests-toolbelt
40160 python-rfc3986
40161 python-rich
40162 python-urllib3))
40163 (home-page "https://github.com/pypa/twine")
40164 (synopsis "Collection of utilities for interacting with PyPI")
40165 (description
40166 "@code{twine} currently supports registering projects and uploading
40167distributions. It authenticates the user over HTTPS, allows them to pre-sign
40168their files and supports any packaging format (including wheels).")
40169 (license license:asl2.0)))
40170
40171(define-public python-twisted
40172 (package
40173 (name "python-twisted")
40174 (version "25.5.0")
40175 (source
40176 (origin
40177 (method git-fetch)
40178 (uri (git-reference
40179 (url "https://github.com/twisted/twisted")
40180 (commit (string-append "twisted-" version))))
40181 (file-name (git-file-name name version))
40182 (sha256
40183 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
40184 (build-system pyproject-build-system)
40185 (arguments
40186 (list
40187 ;; tests: skips=638, successes=9759
40188 #:test-backend #~'custom
40189 #:test-flags
40190 #~(list "-m" "twisted.trial"
40191 "--temp-directory=/tmp/_trial_temp"
40192 (string-append "-j" (number->string (min 8 (parallel-job-count))))
40193 "twisted")
40194 #:phases
40195 #~(modify-phases %standard-phases
40196 (add-after 'unpack 'disable-broken-tests
40197 (lambda _
40198 (for-each delete-file
40199 (list
40200 ;; No idea why they fail
40201 "src/twisted/test/test_log.py"
40202 ;; Network tests
40203 "src/twisted/conch/test/test_cftp.py"
40204 "src/twisted/internet/test/test_endpoints.py"
40205 "src/twisted/protocols/test/test_tls.py"
40206 "src/twisted/test/test_sslverify.py"
40207 "src/twisted/web/test/test_agent.py"
40208 "src/twisted/web/test/test_tap.py"
40209 ;; These need a git executable
40210 "src/twisted/python/test/test_release.py"
40211 ;; These leave behind a socket file, which breaks the
40212 ;; build with "...has an unsupported type"
40213 "src/twisted/internet/test/test_unix.py"
40214 "src/twisted/test/test_unix.py"
40215 ;; These complain about missing test modules.
40216 "src/twisted/test/test_failure.py"
40217 "src/twisted/web/test/test_http2.py"
40218 "src/twisted/conch/test/test_forwarding.py")))))))
40219 (propagated-inputs
40220 (list python-attrs
40221 python-automat
40222 python-bcrypt
40223 python-constantly
40224 python-hyperlink
40225 python-incremental
40226 python-typing-extensions
40227 python-zope-interface
40228 ;; [conch]
40229 (list python "tk")
40230 python-appdirs
40231 python-bcrypt
40232 python-cryptography
40233 ;; [http2]
40234 python-h2
40235 python-priority
40236 ;; [tls]
40237 python-idna
40238 python-pyopenssl
40239 python-service-identity
40240 ;; [serial]
40241 python-pyserial))
40242 (native-inputs
40243 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
40244 python-hatch-fancy-pypi-readme
40245 python-hatchling
40246 python-httpx
40247 python-hypothesis
40248 python-incremental
40249 python-pyhamcrest
40250 python-pytest))
40251 (home-page "https://twistedmatrix.com/")
40252 (synopsis "Asynchronous networking framework written in Python")
40253 (description
40254 "Twisted is an extensible framework for Python programming, with special
40255focus on event-based network programming and multiprotocol integration.")
40256 (license license:expat)))
40257
40258(define-public python-txredisapi
40259 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
40260 ;; The latest version is 1.4.11, but it contains a bug:
40261 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
40262 ;; patched in commit d2259a3.
40263 (revision "0"))
40264 (package
40265 (name "python-txredisapi")
40266 (version (git-version "1.4.11" revision commit))
40267 (source
40268 (origin
40269 (method git-fetch)
40270 ;; The source distribution on PyPi is missing test files:
40271 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
40272 (uri (git-reference
40273 (url "https://github.com/IlyaSkriblovsky/txredisapi")
40274 (commit commit)))
40275 (file-name (git-file-name name version))
40276 (sha256
40277 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
40278 (build-system pyproject-build-system)
40279 (arguments
40280 (list #:test-backend #~'custom
40281 #:test-flags #~(list "-m" "twisted.trial" "tests")
40282 #:phases
40283 #~(modify-phases %standard-phases
40284 ;; The tests require a running Redis server.
40285 (add-before 'check 'start-redis
40286 (lambda _
40287 (invoke "redis-server" "--daemonize" "yes"))))))
40288 (propagated-inputs (list python-twisted))
40289 (native-inputs (list python-mock python-setuptools redis))
40290 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
40291 (synopsis "Non-blocking Redis client for Python")
40292 (description "txredisapi is a non-blocking client driver for the Redis
40293database, written in Python. It uses Twisted for asynchronous communication
40294with Redis.")
40295 (license license:asl2.0))))
40296
40297(define-public python-typeapi
40298 (package
40299 (name "python-typeapi")
40300 (version "2.2.4")
40301 (source
40302 (origin
40303 (method url-fetch)
40304 (uri (pypi-uri "typeapi" version))
40305 (sha256
40306 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
40307 (build-system pyproject-build-system)
40308 (arguments
40309 (list
40310 #:tests? #false)) ;there are none
40311 (propagated-inputs (list python-typing-extensions))
40312 (native-inputs (list python-hatchling))
40313 (home-page "https://pypi.org/project/typeapi/")
40314 (synopsis "Type hints")
40315 (description "The typeapi package provides an object-oriented interface
40316for introspecting PEP484 type hints at runtime, including forward references
40317that make use of the more recent PEP585 and PEP604 type hint features in
40318Python versions that don't natively support them.")
40319 (license license:expat)))
40320
40321(define-public python-typer
40322 (package
40323 (name "python-typer")
40324 ;; XXX: starting from 0.26.0, Typer vendors Click.
40325 (version "0.26.4")
40326 (source
40327 (origin
40328 (method git-fetch)
40329 (uri (git-reference
40330 (url "https://github.com/fastapi/typer")
40331 (commit version)))
40332 (file-name (git-file-name name version))
40333 (sha256
40334 (base32 "0cmk9wsnml1yykzs5sxfdww3bchh9f2f63cj6nirw39zilp1jjw0"))))
40335 (build-system pyproject-build-system)
40336 (arguments
40337 (list
40338 #:phases
40339 #~(modify-phases %standard-phases
40340 (add-before 'check 'pre-check
40341 (lambda _
40342 (setenv "HOME" "/tmp"))))
40343 #:test-flags
40344 #~(list "-k" "not test_cli"
40345 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
40346 (native-inputs
40347 (list python-coverage ;this is required in tests
40348 python-pdm-backend
40349 python-pytest
40350 python-pytest-xdist))
40351 (propagated-inputs
40352 (list python-annotated-doc
40353 python-rich
40354 python-shellingham))
40355 (home-page "https://github.com/fastapi/typer")
40356 (synopsis "Typer builds CLI based on Python type hints")
40357 (description
40358 "Typer is a library for building CLI applications. It's based on Python
403593.6+ type hints.")
40360 (license license:expat)))
40361
40362;; Starting from 0.26.0, Typer vendors its own fork of Click (typer._click) and no longer
40363;; recognises subclasses of the real click.Context as the injected CLI
40364;; context, breaking some packages at import time. Keep until all dependents migrated.
40365(define-public python-typer-without-click
40366 (hidden-package
40367 (package
40368 (inherit python-typer)
40369 (version "0.25.1")
40370 (source
40371 (origin
40372 (method git-fetch)
40373 (uri (git-reference
40374 (url "https://github.com/fastapi/typer")
40375 (commit version)))
40376 (file-name (git-file-name "python-typer" version))
40377 (sha256
40378 (base32 "0z6k7qpd49wqvxl3q5jwq2kl0y3w8dxwxmp42qbkbvwixfqxg2qw"))))
40379 (propagated-inputs
40380 (list python-click
40381 python-typing-extensions
40382 python-annotated-doc
40383 python-rich
40384 python-shellingham))
40385 (arguments
40386 (substitute-keyword-arguments arguments
40387 ((#:test-flags flags #~'())
40388 ;; Ignore tests that fail due to Click error-message wording.
40389 ;; These happen because Click version is more recent than expected.
40390 #~(cons*
40391 (string-append "--deselect=tests/test_suggest_commands.py"
40392 "::test_typo_suggestion_disabled")
40393 (string-append "--ignore=tests/test_tutorial/test_commands/"
40394 "test_callback/test_tutorial001.py")
40395 (string-append "--ignore-glob=tests/test_tutorial/"
40396 "test_parameter_types/test_bool/test_tutorial0*.py")
40397 #$flags)))))))
40398
40399(define-public python-types-aiofiles
40400 (package
40401 (name "python-types-aiofiles")
40402 (version "25.1.0.20251011")
40403 (source
40404 (origin
40405 (method url-fetch)
40406 (uri (pypi-uri "types_aiofiles" version))
40407 (sha256
40408 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
40409 (build-system pyproject-build-system)
40410 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40411 (native-inputs (list python-setuptools))
40412 (home-page "https://github.com/python/typeshed")
40413 (synopsis "Typing stubs for python-aiofiles")
40414 (description "This package providis typing stubs for python-aiofiles.")
40415 (license license:asl2.0)))
40416
40417(define-public python-types-colorama
40418 (package
40419 (name "python-types-colorama")
40420 (version "0.4.15.20250801")
40421 (source
40422 (origin
40423 (method url-fetch)
40424 (uri (pypi-uri "types_colorama" version))
40425 (sha256
40426 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
40427 (build-system pyproject-build-system)
40428 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40429 (native-inputs
40430 (list python-setuptools))
40431 (home-page "https://github.com/python/typeshed")
40432 (synopsis "Typing stubs for colorama")
40433 (description "This package provides typing stubs for colorama.")
40434 (license license:asl2.0)))
40435
40436(define-public python-types-dataclasses
40437 (package
40438 (name "python-types-dataclasses")
40439 (version "0.6.6")
40440 (source
40441 (origin
40442 (method url-fetch)
40443 (uri (pypi-uri "types-dataclasses" version))
40444 (sha256
40445 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
40446 (build-system pyproject-build-system)
40447 (arguments (list #:tests? #f)) ;no tests
40448 (native-inputs (list python-setuptools))
40449 (home-page "https://github.com/python/typeshed")
40450 (synopsis "Typing stubs for dataclasses")
40451 (description
40452 "This package provides a collection of library stubs for Python, with
40453static types.")
40454 (license license:asl2.0)))
40455
40456(define-public python-types-dateutil
40457 (package
40458 (name "python-types-dateutil")
40459 (version "2.9.0.20240316")
40460 (source
40461 (origin
40462 (method url-fetch)
40463 (uri (pypi-uri "types-python-dateutil" version))
40464 (sha256
40465 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
40466 (build-system pyproject-build-system)
40467 (arguments (list #:tests? #f)) ; no tests
40468 (native-inputs
40469 (list python-pytest python-setuptools python-wheel))
40470 (home-page "https://github.com/python/typeshed")
40471 (synopsis "Typing stubs for python-dateutil")
40472 (description
40473 "This is a PEP 561 type stub package for the @code{python-dateutil}
40474package.")
40475 (license license:asl2.0)))
40476
40477(define-public python-types-docutils
40478 (package
40479 (name "python-types-docutils")
40480 (version "0.22.2.20251006")
40481 (source
40482 (origin
40483 (method url-fetch)
40484 (uri (pypi-uri "types_docutils" version))
40485 (sha256
40486 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
40487 (build-system pyproject-build-system)
40488 (arguments (list #:tests? #f)) ;no tests
40489 (native-inputs (list python-setuptools))
40490 (home-page "https://github.com/python/typeshed")
40491 (synopsis "Typing stubs for docutils")
40492 (description "This package provides a collection of library stubs for
40493Python, with static types.")
40494 (license license:asl2.0)))
40495
40496(define-public python-types-freezegun
40497 (package
40498 (name "python-types-freezegun")
40499 (version "1.1.8")
40500 (source
40501 (origin
40502 (method url-fetch)
40503 (uri (pypi-uri "types-freezegun" version))
40504 (sha256
40505 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
40506 (build-system pyproject-build-system)
40507 (arguments
40508 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40509 ;; right files from source, so ignore them for now.
40510 (list #:tests? #f))
40511 (native-inputs (list python-setuptools python-wheel))
40512 (home-page "https://github.com/python/typeshed")
40513 (synopsis "Typing stubs for @code{freezegun}")
40514 (description "This package contains typing stubs for for @code{freezegun}, a
40515very small subset the Python stubs contained in the complete @code{typeshed}
40516collection.")
40517 (license license:asl2.0)))
40518
40519(define-public python-types-orjson
40520 (package
40521 (name "python-types-orjson")
40522 (version "3.6.2")
40523 (source
40524 (origin
40525 (method url-fetch)
40526 (uri (pypi-uri "types-orjson" version))
40527 (sha256
40528 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
40529 (build-system pyproject-build-system)
40530 (arguments (list #:tests? #f)) ;no tests
40531 (native-inputs (list python-setuptools))
40532 (home-page "https://github.com/python/typeshed")
40533 (synopsis "Typing stubs for orjson")
40534 (description "This is a PEP 561 type stub package for the @code{orjson}
40535package. It can be used by type-checking tools like mypy, PyCharm, pytype
40536etc. to check code that uses @code{orjson}.")
40537 (license license:asl2.0)))
40538
40539(define-public python-types-protobuf
40540 (package
40541 (name "python-types-protobuf")
40542 (version "3.20.1")
40543 (source (origin
40544 (method url-fetch)
40545 (uri (pypi-uri "types-protobuf" version))
40546 (sha256
40547 (base32
40548 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
40549 (build-system pyproject-build-system)
40550 (arguments
40551 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40552 ;; right files from source, so ignore them for now.
40553 (list #:tests? #f))
40554 (native-inputs (list python-setuptools python-wheel))
40555 (home-page "https://github.com/python/typeshed")
40556 (synopsis "Typing stubs for @code{protobuf}")
40557 (description "This package contains typing stubs for @code{protobuf}, a
40558very small subset the Python stubs contained in the complete @code{typeshed}
40559collection.")
40560 (license license:asl2.0)))
40561
40562(define-public python-types-pyside6
40563 (package
40564 (name "python-types-pyside6")
40565 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
40566 ;; variant.
40567 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
40568 (revision . "0")))
40569 (version (git-version "6.10.1.1"
40570 (assoc-ref properties 'revision)
40571 (assoc-ref properties 'commit)))
40572 (source
40573 (origin
40574 (method git-fetch)
40575 (uri (git-reference
40576 (url "https://github.com/LumaPictures/cg-stubs")
40577 (commit (assoc-ref properties 'commit))))
40578 (file-name (git-file-name name version))
40579 (sha256
40580 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
40581 (build-system pyproject-build-system)
40582 (arguments
40583 (list
40584 #:tests? #f ;XXX: all tests failed
40585 #:phases
40586 #~(modify-phases %standard-phases
40587 (add-after 'unpack 'select-pyside6
40588 (lambda _
40589 (chdir "pyside6"))))))
40590 (native-inputs
40591 (list python-hatchling))
40592 (home-page "https://github.com/LumaPictures/cg-stubs")
40593 (synopsis "Accurate stubs for PySide6")
40594 (description
40595 "This package provides PySide6 stubs produced with @code{mypy}'s official
40596stubgen tool to directly generate stubs, with a set of corrections applied.")
40597 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
40598 ;; v2.1 . See file LICENSE for more details.
40599 ;;
40600 ;; MIT in pyproject.toml
40601 (license (list license:lgpl2.1+
40602 license:expat))))
40603
40604(define-public python-types-python-dateutil
40605 (package
40606 (name "python-types-python-dateutil")
40607 (version "2.9.0.20250708")
40608 (source
40609 (origin
40610 (method url-fetch)
40611 (uri (pypi-uri "types_python_dateutil" version))
40612 (sha256
40613 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
40614 (build-system pyproject-build-system)
40615 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40616 (native-inputs (list python-setuptools))
40617 (home-page "https://github.com/python/typeshed")
40618 (synopsis "Typing stubs for python-dateutil")
40619 (description "This package providis typing stubs for python-dateutil.")
40620 (license license:asl2.0)))
40621
40622(define-public python-types-pytz
40623 (package
40624 (name "python-types-pytz")
40625 (version "2025.2.0.20250809")
40626 (source
40627 (origin
40628 (method url-fetch)
40629 (uri (pypi-uri "types_pytz" version))
40630 (sha256
40631 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
40632 (build-system pyproject-build-system)
40633 (arguments
40634 (list #:tests? #f)) ;no tests provided
40635 (native-inputs (list python-setuptools))
40636 (home-page "https://github.com/python/typeshed")
40637 (synopsis "Typing stubs for pytz")
40638 (description "This package contains typing stubs for @code{pytz}, a very
40639small subset the Python stubs contained in the complete @code{typeshed}
40640collection.")
40641 (license license:asl2.0)))
40642
40643(define-public python-types-pyyaml
40644 (package
40645 (name "python-types-pyyaml")
40646 (version "6.0.12.20250915")
40647 (source
40648 (origin
40649 (method url-fetch)
40650 (uri (pypi-uri "types_pyyaml" version))
40651 (sha256
40652 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
40653 (build-system pyproject-build-system)
40654 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40655 (native-inputs
40656 (list python-setuptools))
40657 (home-page " https://github.com/python/typeshed")
40658 (synopsis "Typing stubs for PyYAML")
40659 (description "This package provides typing stubs for @code{PyYAML}.")
40660 (license license:asl2.0)))
40661
40662(define-public python-types-regex
40663 (package
40664 (name "python-types-regex")
40665 (version "2025.9.18.20250921")
40666 (source
40667 (origin
40668 (method url-fetch)
40669 (uri (pypi-uri "types_regex" version))
40670 (sha256
40671 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
40672 (build-system pyproject-build-system)
40673 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40674 (native-inputs (list python-setuptools))
40675 (home-page "https://github.com/python/typeshed")
40676 (synopsis "Typing stubs for regex")
40677 (description "This package provides typing stubs for regex.")
40678 (license license:asl2.0)))
40679
40680(define-public python-types-requests
40681 (package
40682 (name "python-types-requests")
40683 (version "2.32.4.20250611")
40684 (source
40685 (origin
40686 (method url-fetch)
40687 (uri (pypi-uri "types_requests" version))
40688 (sha256
40689 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
40690 (build-system pyproject-build-system)
40691 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40692 (native-inputs
40693 (list python-setuptools))
40694 (propagated-inputs
40695 (list python-urllib3))
40696 (home-page "https://github.com/python/typeshed")
40697 (synopsis "Typing stubs for requests")
40698 (description "This package provides typing stubs for requests.")
40699 (license license:asl2.0)))
40700
40701(define-public python-types-setuptools
40702 (package
40703 (name "python-types-setuptools")
40704 (version "80.9.0.20250529")
40705 (source
40706 (origin
40707 (method url-fetch)
40708 (uri (pypi-uri "types_setuptools" version))
40709 (sha256
40710 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
40711 (build-system pyproject-build-system)
40712 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40713 (native-inputs
40714 (list python-setuptools))
40715 (home-page "https://github.com/python/typeshed")
40716 (synopsis "Typing stubs for setuptools")
40717 (description "This package provides typing stubs for setuptools.")
40718 (license license:asl2.0)))
40719
40720(define-public python-types-simplejson
40721 (package
40722 (name "python-types-simplejson")
40723 (version "3.19.0.20241221")
40724 (source
40725 (origin
40726 (method url-fetch)
40727 (uri (pypi-uri "types_simplejson" version))
40728 (sha256
40729 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
40730 (build-system pyproject-build-system)
40731 (arguments
40732 (list
40733 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
40734 (native-inputs
40735 (list python-setuptools python-wheel))
40736 (home-page "https://github.com/python/typeshed")
40737 (synopsis "Typing stubs for simplejson")
40738 (description "Typing stubs for simplejson.")
40739 (license license:asl2.0)))
40740
40741(define-public python-types-toml
40742 (package
40743 (name "python-types-toml")
40744 (version "0.10.8.20240310")
40745 (source
40746 (origin
40747 (method url-fetch)
40748 (uri (pypi-uri "types-toml" version))
40749 (sha256
40750 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
40751 (build-system pyproject-build-system)
40752 (arguments
40753 (list #:tests? #f)) ;no tests provided
40754 (native-inputs (list python-setuptools))
40755 (home-page "https://github.com/python/typeshed")
40756 (synopsis "Typing stubs for TOML")
40757 (description
40758 "This package contains typing stubs for TOML, a very small subset the
40759Python stubs contained in the complete @code{typeshed} collection.")
40760 (license license:asl2.0)))
40761
40762(define-public python-types-tqdm
40763 (package
40764 (name "python-types-tqdm")
40765 (version "4.67.0.20250809")
40766 (source
40767 (origin
40768 (method url-fetch)
40769 (uri (pypi-uri "types_tqdm" version))
40770 (sha256
40771 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
40772 (build-system pyproject-build-system)
40773 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40774 (native-inputs (list python-setuptools))
40775 (propagated-inputs (list python-types-requests))
40776 (home-page "https://github.com/python/typeshed")
40777 (synopsis "Typing stubs for python-tqdm")
40778 (description "This package providis typing stubs for python-tqdm.")
40779 (license license:asl2.0)))
40780
40781(define-public python-types-ujson
40782 (package
40783 (name "python-types-ujson")
40784 (version "5.10.0.20250822")
40785 (source
40786 (origin
40787 (method url-fetch)
40788 (uri (pypi-uri "types_ujson" version))
40789 (sha256
40790 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
40791 (build-system pyproject-build-system)
40792 (arguments
40793 (list #:tests? #f)) ;no tests provided
40794 (native-inputs (list python-setuptools))
40795 (home-page "https://github.com/python/typeshed")
40796 (synopsis "Typing stubs for ujson")
40797 (description
40798 "This is a PEP 561 type stub package for the ujson package. It can be
40799used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
40800uses ujson.")
40801 (license license:asl2.0)))
40802
40803(define-public python-types-urllib3
40804 (package
40805 (name "python-types-urllib3")
40806 (version "1.26.25.14")
40807 (source
40808 (origin
40809 (method url-fetch)
40810 (uri (pypi-uri "types-urllib3" version))
40811 (sha256
40812 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
40813 (build-system pyproject-build-system)
40814 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40815 (native-inputs
40816 (list python-setuptools))
40817 (home-page "https://github.com/python/typeshed")
40818 (synopsis "Typing stubs for urllib3")
40819 (description "This package provides typing stubs for urllib3.")
40820 (license license:asl2.0)))
40821
40822(define-public python-typeshed-client
40823 (package
40824 (name "python-typeshed-client")
40825 (version "2.8.2")
40826 (source
40827 (origin
40828 (method git-fetch)
40829 (uri (git-reference
40830 (url "https://github.com/JelleZijlstra/typeshed_client")
40831 (commit (string-append "v" version))))
40832 (file-name (git-file-name name version))
40833 (sha256
40834 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
40835 (build-system pyproject-build-system)
40836 (arguments
40837 (list #:test-backend #~'custom
40838 #:test-flags #~(list "tests/test.py")))
40839 (native-inputs
40840 (list python-setuptools))
40841 (propagated-inputs
40842 (list python-importlib-resources
40843 python-typing-extensions))
40844 (home-page "https://github.com/JelleZijlstra/typeshed_client")
40845 (synopsis "Library for accessing stubs in typeshed")
40846 (description
40847 "This package provides a library for accessing stubs in typeshed.")
40848 (license license:expat)))
40849
40850(define-public python-typing-inspect
40851 (package
40852 (name "python-typing-inspect")
40853 (version "0.9.0")
40854 (source
40855 (origin
40856 (method url-fetch)
40857 (uri (pypi-uri "typing_inspect" version))
40858 (sha256
40859 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
40860 (build-system pyproject-build-system)
40861 (native-inputs
40862 (list python-pytest
40863 python-setuptools
40864 python-wheel))
40865 (propagated-inputs
40866 (list python-mypy-extensions
40867 python-typing-extensions))
40868 (home-page "https://github.com/ilevkivskyi/typing_inspect")
40869 (synopsis "API for inspection of types in the Python @code{typing} module")
40870 (description
40871 "The @code{typing_inspect} module defines experimental API for runtime
40872inspection of types defined in the Python standard typing module.")
40873 (license license:expat)))
40874
40875(define-public python-typing-inspection
40876 (package
40877 (name "python-typing-inspection")
40878 (version "0.4.2")
40879 (source
40880 (origin
40881 (method git-fetch)
40882 (uri (git-reference
40883 (url "https://github.com/pydantic/typing-inspection")
40884 (commit (string-append "v" version))))
40885 (file-name (git-file-name name version))
40886 (sha256
40887 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
40888 (build-system pyproject-build-system)
40889 ;; tests: 89 passed, 3 skipped
40890 (native-inputs
40891 (list python-pytest
40892 python-hatchling))
40893 (propagated-inputs
40894 (list python-typing-extensions))
40895 (home-page "https://github.com/pydantic/typing-inspection")
40896 (synopsis "Runtime typing introspection tools")
40897 (description
40898 "@code{typing-inspection} provides tools to inspect type annotations at
40899runtime.")
40900 (license license:expat)))
40901
40902(define-public python-typogrify
40903 (package
40904 (name "python-typogrify")
40905 (version "2.1.0")
40906 (source
40907 (origin
40908 (method url-fetch)
40909 (uri (pypi-uri "typogrify" version))
40910 (sha256
40911 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
40912 (build-system pyproject-build-system)
40913 (arguments
40914 (list
40915 #:test-flags
40916 #~(list "--doctest-modules"
40917 "typogrify/filters.py"
40918 "typogrify/packages/titlecase/tests.py")))
40919 (native-inputs
40920 (list python-pytest
40921 python-hatchling))
40922 (propagated-inputs
40923 (list python-smartypants))
40924 (home-page "https://github.com/justinmayer/typogrify")
40925 (synopsis "Filters to transform text into typographically-improved HTML")
40926 (description
40927 "@code{typogrify} provides a set of custom filters that automatically
40928apply various transformations to plain text in order to yield
40929typographically-improved HTML. While often used in conjunction with Jinja and
40930Django template systems, the filters can be used in any environment.")
40931 (license license:bsd-3)))
40932
40933(define-public python-ua-parser
40934 (package
40935 (name "python-ua-parser")
40936 (version "0.10.0")
40937 (source
40938 (origin
40939 (method url-fetch)
40940 (uri (pypi-uri "ua-parser" version))
40941 (sha256
40942 (base32
40943 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
40944 (build-system pyproject-build-system)
40945 (arguments
40946 `(#:tests? #f)) ;no test suite in release
40947 (native-inputs
40948 (list python-pyyaml
40949 python-setuptools))
40950 (home-page "https://github.com/ua-parser/uap-python")
40951 (synopsis "User agent parser")
40952 (description
40953 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
40954 (license license:asl2.0)))
40955
40956(define-public python-ubelt
40957 (package
40958 (name "python-ubelt")
40959 (version "1.3.6")
40960 (source
40961 (origin
40962 (method git-fetch)
40963 (uri (git-reference
40964 (url "https://github.com/Erotemic/ubelt")
40965 (commit (string-append "v" version))))
40966 (file-name (git-file-name name version))
40967 (sha256
40968 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
40969 (build-system pyproject-build-system)
40970 (arguments
40971 (list
40972 ;; The builder user home doesn't match HOME, which causes this test to
40973 ;; fail.
40974 #:test-flags #~(list "-k" "not userhome")
40975 #:phases
40976 #~(modify-phases %standard-phases
40977 (add-before 'check 'pre-check
40978 (lambda _
40979 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
40980 (native-inputs
40981 (list python-pytest
40982 python-requests
40983 python-setuptools
40984 python-wheel
40985 python-xdoctest))
40986 (propagated-inputs
40987 (list python-ordered-set))
40988 (home-page "https://github.com/Erotemic/ubelt")
40989 (synopsis "Python library for hashing, caching, timing and more")
40990 (description
40991 "Ubelt is a small library of simple functions that extend the Python
40992standard library. It includes an @acronym{API, Application Programming
40993Interface} to simplify common problems such as caching, timing, computing
40994progress, among other things.")
40995 (license license:asl2.0)))
40996
40997(define-public python-uc-micro-py
40998 (package
40999 (name "python-uc-micro-py")
41000 (version "2.0.0")
41001 (source (origin
41002 (method git-fetch)
41003 (uri (git-reference
41004 (url "https://github.com/tsutsu3/uc.micro-py")
41005 (commit (string-append "v" version))))
41006 (file-name (git-file-name name version))
41007 (sha256
41008 (base32
41009 "06dx8zh0fa13aldqxhzghdnbbaqbb1dklbyqzdxy14dcbqmx92m3"))))
41010 (build-system pyproject-build-system)
41011 (native-inputs (list python-pytest python-setuptools))
41012 (home-page "https://github.com/tsutsu3/uc.micro-py")
41013 (synopsis "Unicode data files for linkify-it-py projects")
41014 (description "This package contains a micro subset of Unicode data files
41015for linkify-it-py projects.")
41016 (license license:expat)))
41017
41018(define-public python-udapi
41019 (package
41020 (name "python-udapi")
41021 (version "0.5.2")
41022 (source
41023 (origin
41024 (method git-fetch)
41025 (uri (git-reference
41026 (url "https://github.com/udapi/udapi-python")
41027 (commit version)))
41028 (file-name (git-file-name name version))
41029 (sha256
41030 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
41031 (build-system pyproject-build-system)
41032 (native-inputs
41033 (list python-pytest python-setuptools))
41034 (propagated-inputs
41035 (list python-colorama python-termcolor))
41036 (home-page "http://udapi.readthedocs.io")
41037 (synopsis "Framework for processing Universal Dependencies data")
41038 (description
41039 "This package is a Python library providing an API for processing
41040Universal Dependencies data.")
41041 (license license:gpl3+)))
41042
41043(define-public python-ujson
41044 (package
41045 (name "python-ujson")
41046 (version "5.10.0")
41047 (source
41048 (origin
41049 (method url-fetch)
41050 (uri (pypi-uri "ujson" version))
41051 (sha256
41052 (base32
41053 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
41054 (modules '((guix build utils)))
41055 (snippet
41056 #~(begin (delete-file-recursively "deps")))))
41057 (build-system pyproject-build-system)
41058 (arguments
41059 (list
41060 #:phases
41061 #~(modify-phases %standard-phases
41062 (add-after 'unpack 'link-to-system-double-conversion
41063 (lambda* (#:key inputs #:allow-other-keys)
41064 (let ((d-c (assoc-ref inputs "double-conversion")))
41065 (substitute* "setup.py"
41066 (("./deps/double-conversion/double-conversion\"")
41067 (string-append d-c "/include/double-conversion\""))
41068 (("-lstdc++" stdc)
41069 (string-append "-L" d-c "/lib\","
41070 " \"-ldouble-conversion\","
41071 " \"" stdc)))))))))
41072 (native-inputs
41073 (list double-conversion
41074 python-pytest
41075 python-setuptools
41076 python-setuptools-scm
41077 python-wheel))
41078 (home-page "https://github.com/ultrajson/ultrajson")
41079 (synopsis "Ultra fast JSON encoder and decoder for Python")
41080 (description
41081 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
41082bindings for Python 3.")
41083 (license license:bsd-3)))
41084
41085(define-public python-ukkonen
41086 (package
41087 (name "python-ukkonen")
41088 (version "1.0.1")
41089 (source
41090 (origin
41091 ;; There are no tests in the PyPI tarball.
41092 (method git-fetch)
41093 (uri (git-reference
41094 (url "https://github.com/asottile/ukkonen")
41095 (commit (string-append "v" version))))
41096 (file-name (git-file-name name version))
41097 (sha256
41098 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
41099 (build-system pyproject-build-system)
41100 (native-inputs (list python-pytest python-setuptools python-wheel))
41101 (propagated-inputs (list python-cffi))
41102 (home-page "https://github.com/asottile/ukkonen")
41103 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
41104 (description "This package is an implementation of of bounded Levenshtein
41105distance (Ukkonen).")
41106 (license license:expat)))
41107
41108(define-public python-ulid
41109 (package
41110 (name "python-ulid")
41111 (version "3.1.0")
41112 (source
41113 (origin
41114 (method git-fetch)
41115 (uri (git-reference
41116 (url "https://github.com/mdomke/python-ulid")
41117 (commit version)))
41118 (file-name (git-file-name name version))
41119 (sha256
41120 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
41121 (build-system pyproject-build-system)
41122 (arguments
41123 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
41124 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
41125 ;; 68 passed, 1 deselected in 2.55s
41126 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
41127 (native-inputs
41128 (list python-freezegun
41129 python-hatch-fancy-pypi-readme
41130 python-hatch-vcs
41131 python-hatchling
41132 python-pytest))
41133 (propagated-inputs
41134 (list python-pydantic))
41135 (home-page "https://github.com/mdomke/python-ulid")
41136 (synopsis "Universally unique lexicographically sortable identifier")
41137 (description
41138 "ULID is a universally unique lexicographically sortable identifier.
41139It is:
41140@itemize
41141@item 128-bit compatible with UUID
41142@item 1.21e+24 unique ULIDs per millisecond
41143@item lexicographically sortable!
41144@item canonically encoded as a 26 character string, as opposed to the 36
41145character UUID
41146@item uses Crockford's base32 for better efficiency and readability (5 bits
41147per character)
41148@item case insensitive
41149@item no special characters (URL safe)
41150@item monotonic sort order (correctly detects and handles the same
41151millisecond)
41152@end itemize")
41153 (license license:expat)))
41154
41155(define-public python-uncertainties
41156 (package
41157 (name "python-uncertainties")
41158 (version "3.2.3")
41159 (source
41160 (origin
41161 (method url-fetch)
41162 (uri (pypi-uri "uncertainties" version))
41163 (sha256
41164 (base32
41165 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
41166 (build-system pyproject-build-system)
41167 (native-inputs
41168 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
41169 (propagated-inputs (list python-numpy))
41170 (home-page "https://uncertainties.readthedocs.io/en/latest/")
41171 (synopsis "Calculations with uncertainties")
41172 (description
41173 "The uncertainties package transparently handles calculations with
41174numbers with uncertainties. It can also yield the derivatives of any
41175expression.")
41176 (license license:bsd-3)))
41177
41178(define-public python-unicode-linebreak
41179 (package
41180 (name "python-unicode-linebreak")
41181 (version "0.0.2")
41182 (source
41183 (origin
41184 (method git-fetch)
41185 (uri (git-reference
41186 (url "https://github.com/mondeja/py-unicode-linebreak")
41187 (commit (string-append "v" version))))
41188 (file-name (git-file-name name version))
41189 (sha256
41190 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
41191 (build-system pyproject-build-system)
41192 (arguments
41193 (list
41194 #:imported-modules `(,@%cargo-build-system-modules
41195 ,@%pyproject-build-system-modules)
41196 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
41197 (guix build pyproject-build-system)
41198 (guix build utils))
41199 #:test-backend #~'unittest
41200 #:phases
41201 #~(modify-phases %standard-phases
41202 (add-after 'unpack 'prepare-cargo-build-system
41203 (lambda args
41204 (for-each
41205 (lambda (phase)
41206 (format #t "Running cargo phase: ~a~%" phase)
41207 (apply (assoc-ref cargo:%standard-phases phase)
41208 #:cargo-target #$(cargo-triplet)
41209 args))
41210 '(unpack-rust-crates
41211 configure
41212 check-for-pregenerated-files
41213 patch-cargo-checksums)))))))
41214 (native-inputs
41215 (append
41216 (list maturin
41217 rust
41218 `(,rust "cargo"))
41219 (or (and=> (%current-target-system)
41220 (compose list make-rust-sysroot))
41221 '())))
41222 (inputs (cargo-inputs 'unicode_linebreak))
41223 (home-page "https://github.com/mondeja/py-unicode-linebreak")
41224 (synopsis "Markdown paragraph wrapper")
41225 (description
41226 "This package provides a Markdown paragraph wrapper using Unicode Line
41227Breaking Algorithm written in Rust with Python bindings.")
41228 (license license:expat)))
41229
41230(define-public python-unicodedata2
41231 (package
41232 (name "python-unicodedata2")
41233 (version "16.0.0")
41234 (source
41235 (origin
41236 (method url-fetch)
41237 (uri (pypi-uri "unicodedata2" version))
41238 (sha256
41239 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
41240 (build-system pyproject-build-system)
41241 (native-inputs
41242 (list python-pytest
41243 python-setuptools))
41244 (home-page "https://github.com/fonttools/unicodedata2")
41245 (synopsis "Python unicodedata backport")
41246 (description "This package corresponds to the latest @code{unicodedata}
41247standard Python module.")
41248 (license license:asl2.0)))
41249
41250(define-public python-unicodeitplus
41251 (package
41252 (name "python-unicodeitplus")
41253 (version "0.3.1")
41254 (source
41255 (origin
41256 (method url-fetch)
41257 (uri (pypi-uri "unicodeitplus" version))
41258 (sha256
41259 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
41260 (build-system pyproject-build-system)
41261 (native-inputs
41262 (list python-pytest
41263 python-setuptools
41264 python-setuptools-scm))
41265 (propagated-inputs
41266 (list python-lark))
41267 (home-page "https://github.com/HDembinski/unicodeitplus")
41268 (synopsis "Convert simple LaTeX to an Unicode approximation")
41269 (description
41270 "This package provides a more complete LaTeX to Unicode converter than
41271@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
41272Backus-Naur Form} with the Lark library.")
41273 (license license:bsd-3)))
41274
41275(define-public python-unidecode
41276 (package
41277 (name "python-unidecode")
41278 (version "1.4.0")
41279 (source
41280 (origin
41281 (method url-fetch)
41282 (uri (pypi-uri "Unidecode" version))
41283 (sha256
41284 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
41285 (build-system pyproject-build-system)
41286 (native-inputs
41287 (list python-pytest python-setuptools))
41288 (home-page "https://pypi.org/project/Unidecode/")
41289 (synopsis "ASCII transliterations of Unicode text")
41290 (description
41291 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
41292useful when integrating with legacy code that doesn't support Unicode, or for
41293ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
41294machine identifiers from human-readable Unicode strings that should still be
41295somewhat intelligible.")
41296 (license license:gpl2+)))
41297
41298(define-public python-unique-log-filter
41299 (package
41300 (name "python-unique-log-filter")
41301 (version "0.1.0")
41302 (source
41303 (origin
41304 (method git-fetch)
41305 (uri (git-reference
41306 (url "https://github.com/twizmwazin/unique_log_filter")
41307 (commit (string-append "v" version))))
41308 (file-name (git-file-name name version))
41309 (sha256
41310 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
41311 (build-system pyproject-build-system)
41312 (arguments
41313 (list #:test-backend #~'custom
41314 #:test-flags #~(list "test_unique_log_filter.py")))
41315 (native-inputs (list python-flit-core))
41316 (home-page "https://github.com/twizmwazin/unique_log_filter")
41317 (synopsis "Log filter that removes duplicate log messages")
41318 (description
41319 "This library provides a filter for the @code{logging} module
41320from the Python standard library which allows removing duplicate log
41321messages.")
41322 (license license:bsd-2)))
41323
41324(define-public python-uniseg
41325 (package
41326 (name "python-uniseg")
41327 (version "0.10.0")
41328 (source
41329 (origin
41330 (method url-fetch)
41331 (uri (pypi-uri "uniseg" version))
41332 (sha256
41333 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
41334 (build-system pyproject-build-system)
41335 (native-inputs
41336 (list python-pytest
41337 python-setuptools
41338 python-setuptools-scm))
41339 (home-page "https://bitbucket.org/emptypage/uniseg-python")
41340 (synopsis "Python library to determine Unicode text segmentations")
41341 (description
41342 "Uniseg is a Python package used to determine Unicode text segmentations.
41343Supported segmentations include:
41344@enumerate
41345@item @dfn{Code point} (any value in the Unicode codespace)
41346@item @dfn{Grapheme cluster} (user-perceived character made of a single or
41347multiple Unicode code points, e.g. \"G\" + acute-accent)
41348@item Word break
41349@item Sentence break
41350@item Line break
41351@end enumerate")
41352 (license license:expat)))
41353
41354(define-public python-universal-pathlib
41355 (package
41356 (name "python-universal-pathlib")
41357 (version "0.2.6")
41358 (source
41359 (origin
41360 (method git-fetch)
41361 (uri (git-reference
41362 (url "https://github.com/fsspec/universal_pathlib")
41363 (commit (string-append "v" version))))
41364 (file-name (git-file-name name version))
41365 (sha256
41366 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
41367 (build-system pyproject-build-system)
41368 (arguments
41369 (list
41370 #:tests? #f)) ;requires network
41371 (native-inputs
41372 (list python-setuptools
41373 python-setuptools-scm))
41374 (propagated-inputs
41375 (list python-fsspec
41376 python-pathlib-abc))
41377 (home-page "https://github.com/fsspec/universal_pathlib")
41378 (synopsis
41379 "@code{pathlib} API extended to use @code{fsspec} backends")
41380 (description
41381 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
41382API to support a variety of backend filesystems via filesystem_spec.")
41383 (license license:expat)))
41384
41385(define-public python-unpaddedbase64
41386 (package
41387 (name "python-unpaddedbase64")
41388 (version "2.1.0")
41389 (source
41390 (origin
41391 (method git-fetch)
41392 (uri (git-reference
41393 (url "https://github.com/matrix-org/python-unpaddedbase64")
41394 (commit (string-append "v" version))))
41395 (file-name (git-file-name name version))
41396 (sha256
41397 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
41398 (build-system pyproject-build-system)
41399 (native-inputs (list python-poetry-core
41400 python-pytest
41401 python-setuptools
41402 python-wheel))
41403 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
41404 (synopsis "Encode and decode Base64 without “=” padding")
41405 (description
41406 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
41407using “=” characters. However this conveys no benefit so many protocols
41408choose to use Base64 without the “=” padding.")
41409 (license license:asl2.0)))
41410
41411(define-public python-update-checker
41412 (package
41413 (name "python-update-checker")
41414 (version "0.18.0")
41415 (source
41416 (origin
41417 (method url-fetch)
41418 (uri (pypi-uri "update-checker" version))
41419 (sha256
41420 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
41421 (build-system pyproject-build-system)
41422 (native-inputs
41423 (list python-pytest
41424 python-setuptools))
41425 (propagated-inputs
41426 (list python-requests))
41427 (home-page "https://github.com/bboe/update_checker")
41428 (synopsis "Python module that will check for package updates")
41429 (description "This package provides a Python module that will check for
41430package updates.")
41431 (license license:bsd-2)))
41432
41433(define-public python-uri-template
41434 (package
41435 (name "python-uri-template")
41436 (version "1.3.0")
41437 (source
41438 (origin
41439 (method git-fetch)
41440 (uri (git-reference
41441 (url "https://gitlab.linss.com/open-source/python/uri-template")
41442 (commit (string-append "v" version))))
41443 (file-name (git-file-name name version))
41444 (sha256
41445 (base32 "0z1g5hpxzi5rh4xsra6bsvyg5qzmnx7a8j5q7rngmj9slcbcbhfz"))))
41446 (build-system pyproject-build-system)
41447 (arguments
41448 (list
41449 #:test-backend #~'custom
41450 #:test-flags #~(list "test.py")))
41451 (native-inputs
41452 (list python-setuptools
41453 python-setuptools-scm))
41454 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
41455 (synopsis "RFC 6570 URI Template Processor")
41456 (description "This package implements URI Template expansion in strict
41457adherence to RFC 6570, but adds a few extensions.")
41458 (license license:expat)))
41459
41460(define-public python-uritools
41461 (package
41462 (name "python-uritools")
41463 (version "6.0.1")
41464 (source
41465 (origin
41466 (method git-fetch)
41467 (uri (git-reference
41468 (url "https://github.com/tkem/uritools/")
41469 (commit (string-append "v" version))))
41470 (file-name (git-file-name name version))
41471 (sha256
41472 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
41473 (build-system pyproject-build-system)
41474 (native-inputs
41475 (list python-pytest
41476 python-setuptools))
41477 (home-page "https://github.com/tkem/uritools/")
41478 (synopsis "URI parsing, classification and composition")
41479 (description
41480 "This package provides RFC 3986 compliant functions for parsing,
41481classifying and composing URIs and URI references, largely replacing the
41482Python Standard Library's urllib.parse module.")
41483 (license license:expat)))
41484
41485(define-public python-urwid
41486 (package
41487 (name "python-urwid")
41488 (version "3.0.3")
41489 (source
41490 (origin
41491 (method url-fetch)
41492 (uri (pypi-uri "urwid" version))
41493 (sha256
41494 (base32
41495 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
41496 (build-system pyproject-build-system)
41497 (arguments
41498 (list
41499 #:test-flags
41500 #~(list "tests"
41501 ;; According to Debian these tests are cursed.
41502 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
41503 "--ignore=tests/test_vterm.py")))
41504 (native-inputs
41505 (list python-pytest python-setuptools python-setuptools-scm))
41506 (propagated-inputs
41507 (list python-wcwidth
41508 ;; [optional]
41509 python-pygobject
41510 python-pyzmq
41511 python-tornado
41512 python-pyserial
41513 python-twisted))
41514 (home-page "https://urwid.org")
41515 (synopsis "Console user interface library for Python")
41516 (description
41517 "Urwid is a curses-based UI/widget library for Python. It includes many
41518features useful for text console applications.")
41519 (license license:lgpl2.1+)))
41520
41521(define-public python-urwid-2
41522 (package
41523 (inherit python-urwid)
41524 (name "python-urwid")
41525 (version "2.6.16")
41526 (source
41527 (origin
41528 (method url-fetch)
41529 (uri (pypi-uri "urwid" version))
41530 (sha256
41531 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
41532
41533(define-deprecated/public-alias python-urwid-3
41534 python-urwid) ;may be removed after 2025-11-12
41535
41536(define-public python-urwid-for-zulip-term
41537 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
41538 ;; to pass, remove when no longer required.
41539 (hidden-package
41540 (package
41541 (inherit python-urwid)
41542 (version "2.1.2")
41543 (source
41544 (origin
41545 (method url-fetch)
41546 (uri (pypi-uri "urwid" version))
41547 (sha256
41548 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
41549 (arguments
41550 (list #:tests? #f)))))
41551
41552(define-public python-urwid-readline
41553 (package
41554 (name "python-urwid-readline")
41555 (version "0.15.1")
41556 (source
41557 (origin
41558 (method git-fetch)
41559 (uri (git-reference
41560 (url "https://github.com/rr-/urwid_readline")
41561 (commit version)))
41562 (file-name (git-file-name name version))
41563 (sha256
41564 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
41565 (build-system pyproject-build-system)
41566 (native-inputs
41567 (list python-pytest
41568 python-setuptools))
41569 (propagated-inputs
41570 (list python-urwid))
41571 (home-page "https://github.com/rr-/urwid_readline")
41572 (synopsis "Text input widget for urwid that supports readline shortcuts")
41573 (description
41574 "This package provides a textbox edit widget for @code{python-urwid} that
41575supports @code{readline} shortcuts.")
41576 (license license:expat)))
41577
41578(define-public python-urwidgets
41579 (package
41580 (name "python-urwidgets")
41581 (version "0.2.1")
41582 (source
41583 (origin
41584 (method url-fetch)
41585 (uri (pypi-uri "urwidgets" version))
41586 (sha256
41587 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
41588 (build-system pyproject-build-system)
41589 (arguments
41590 (list #:tests? #f)) ;no tests
41591 (native-inputs
41592 (list python-setuptools))
41593 (propagated-inputs
41594 (list python-urwid-2))
41595 (home-page "https://github.com/AnonymouX47/urwidgets")
41596 (synopsis "Collection of widgets for urwid")
41597 (description
41598 "This package provides a collection of widgets for urwid.")
41599 (license license:expat)))
41600
41601(define-public python-urwidtrees
41602 (package
41603 (name "python-urwidtrees")
41604 (version "1.0.4")
41605 (source
41606 (origin
41607 (method git-fetch)
41608 ;; package author intends on distributing via github rather than pypi:
41609 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
41610 (uri (git-reference
41611 (url "https://github.com/pazz/urwidtrees")
41612 (commit version)))
41613 (file-name (git-file-name name version))
41614 (sha256
41615 (base32
41616 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
41617 (build-system pyproject-build-system)
41618 (arguments
41619 '(#:tests? #f)) ; no tests
41620 (propagated-inputs (list python-urwid))
41621 (native-inputs (list python-mock python-setuptools python-wheel))
41622 (home-page "https://github.com/pazz/urwidtrees")
41623 (synopsis "Tree widgets for urwid")
41624 (description "Urwidtrees is a Widget Container API for the @code{urwid}
41625toolkit. Use it to build trees of widgets.")
41626 (license license:gpl3+)))
41627
41628(define-public python-user-agents
41629 (package
41630 (name "python-user-agents")
41631 (version "2.2.0")
41632 (source
41633 (origin
41634 (method git-fetch)
41635 (uri (git-reference
41636 (url "https://github.com/selwin/python-user-agents")
41637 (commit (string-append "v" version))))
41638 (file-name (git-file-name name version))
41639 (sha256
41640 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
41641 (build-system pyproject-build-system)
41642 (arguments
41643 (list #:test-backend #~'unittest))
41644 (native-inputs
41645 (list python-setuptools))
41646 (propagated-inputs
41647 (list python-ua-parser))
41648 (home-page "https://github.com/selwin/python-user-agents")
41649 (synopsis "User Agent strings parsing library")
41650 (description
41651 "A library to identify devices (phones, tablets) and their capabilities by
41652parsing (browser/HTTP) user agent strings.")
41653 (license license:expat)))
41654
41655(define-public python-userpath
41656 (package
41657 (name "python-userpath")
41658 (version "1.9.2")
41659 (source
41660 (origin
41661 (method url-fetch)
41662 (uri (pypi-uri "userpath" version))
41663 (sha256
41664 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
41665 (build-system pyproject-build-system)
41666 (arguments
41667 ;; See https://github.com/ofek/userpath/issues/43.
41668 ;; In Guix, tests try to find the temporary build directory in PATH, but
41669 ;; only the store output is present.
41670 (list #:tests? #f))
41671 (native-inputs (list python-hatchling python-pytest))
41672 (propagated-inputs (list python-click))
41673 (home-page "https://github.com/ofek/userpath")
41674 (synopsis "Add locations to the user's PATH")
41675 (description "This package provides a tool for modifying a user's PATH.")
41676 (license license:expat)))
41677
41678(define-public python-userspacefs
41679 (package
41680 (name "python-userspacefs")
41681 (version "3.2.1")
41682 (source
41683 (origin
41684 (method url-fetch)
41685 (uri (pypi-uri "userspacefs" version))
41686 (sha256
41687 (base32 "0n3mp9y1xgkl292m44i6xrkha2ffja1zrf5yaykz0yyvm85cfip4"))))
41688 (build-system pyproject-build-system)
41689 (arguments
41690 (list #:tests? #f ;no tests
41691 #:phases
41692 #~(modify-phases %standard-phases
41693 (add-after 'unpack 'hardcode-libfuse
41694 (lambda* (#:key inputs #:allow-other-keys)
41695 (substitute* "userspacefs/fusepy.py"
41696 (("^_libfuse_path.*")
41697 (string-append "_libfuse_path = '"
41698 (search-input-file inputs "lib/libfuse3.so")
41699 "'\n"))))))))
41700 (inputs (list fuse))
41701 (native-inputs (list python-setuptools))
41702 (propagated-inputs (list python-aiohttp python-typing-extensions))
41703 (home-page "https://thelig.ht/code/userspacefs/readme.html")
41704 (synopsis "User-space file systems for Python")
41705 (description
41706 "@code{userspacefs} is a library that allows you to easily write
41707user-space file systems in Python.")
41708 (license license:gpl3+)))
41709
41710(define-public python-utils
41711 (package
41712 (name "python-utils")
41713 (version "3.9.1")
41714 (source
41715 (origin
41716 (method url-fetch)
41717 (uri (pypi-uri "python_utils" version))
41718 (sha256
41719 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
41720 (build-system pyproject-build-system)
41721 (native-inputs
41722 (list python-pytest
41723 python-pytest-asyncio
41724 python-setuptools))
41725 (propagated-inputs
41726 (list python-loguru
41727 python-typing-extensions))
41728 (home-page "https://github.com/WoLpH/python-utils")
41729 (synopsis "Convenient utilities not included with the standard Python install")
41730 (description
41731 "Python Utils is a collection of small Python functions and classes
41732which make common patterns shorter and easier.")
41733 (license license:bsd-2)))
41734
41735(define-public python-uuid6
41736 (package
41737 (name "python-uuid6")
41738 (version "2025.0.1")
41739 (source
41740 (origin
41741 (method git-fetch)
41742 (uri (git-reference
41743 (url "https://github.com/oittaa/uuid6-python")
41744 (commit version)))
41745 (file-name (git-file-name name version))
41746 (sha256
41747 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
41748 (build-system pyproject-build-system)
41749 (arguments
41750 (list
41751 #:test-flags
41752 ;; Test is time based: AssertionError: 13987034766.015247 !=
41753 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
41754 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
41755 (native-inputs
41756 (list python-pytest
41757 python-setuptools
41758 python-setuptools-scm))
41759 (home-page "https://github.com/oittaa/uuid6-python")
41760 (synopsis "Time-based UUID formats which are suited for use as a database key")
41761 (description
41762 "This module extends immutable UUID objects (the UUID class) with the
41763functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
41764@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
41765 (license license:expat)))
41766
41767(define-public python-validate-email
41768 (package
41769 (name "python-validate-email")
41770 (version "1.3")
41771 (source
41772 (origin
41773 (method url-fetch)
41774 (uri (pypi-uri "validate_email" version))
41775 (sha256
41776 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
41777 (build-system pyproject-build-system)
41778 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
41779 (native-inputs
41780 (list python-setuptools))
41781 (home-page "https://github.com/syrusakbary/validate_email")
41782 (synopsis "Verifies if an email address is valid and really exists")
41783 (description
41784 "@code{validate_email} can be used to verify if an email address is
41785valid and really exists.")
41786 (license license:lgpl3+)))
41787
41788(define-public python-validators
41789 ;; TODO: Move to (gnu packages python-web) or (gnu packages python-crypto).
41790 (package
41791 (name "python-validators")
41792 (version "0.35.0")
41793 (source
41794 (origin
41795 (method git-fetch)
41796 (uri (git-reference
41797 (url "https://github.com/kvesteri/validators")
41798 (commit version)))
41799 (file-name (git-file-name name version))
41800 (sha256
41801 (base32 "1q4mhcr10f22f8lwbsplhjyy0m3axddawd3mcax7qzm6p8lj6ybg"))))
41802 (build-system pyproject-build-system)
41803 (native-inputs
41804 (list python-pytest
41805 python-setuptools))
41806 (propagated-inputs
41807 (list python-eth-hash))
41808 (home-page "https://github.com/kvesteri/validators")
41809 (synopsis "Data validation library")
41810 (description
41811 "This package contains validators for different things such as email
41812addresses, IP addresses, URLs, hashes and more. It has been designed to be
41813easy to use and not require defining a schema or form just to validate some
41814input.")
41815 (license license:expat)))
41816
41817(define-public python-valkey
41818 (package
41819 (name "python-valkey")
41820 (version "6.1.1")
41821 (source
41822 (origin
41823 (method git-fetch)
41824 (uri (git-reference
41825 (url "https://github.com/valkey-io/valkey-py")
41826 (commit (string-append "v" version))))
41827 (file-name (git-file-name name version))
41828 (sha256
41829 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
41830 (build-system pyproject-build-system)
41831 (arguments
41832 ;; XXX: A lot of tests fail with ConnectionError
41833 ;; Maybe we need to spawn a valkey server?
41834 (list #:tests? #f))
41835 (native-inputs
41836 (list python-setuptools))
41837 (home-page "https://github.com/valkey-io/valkey-py")
41838 (synopsis "Python client for Valkey")
41839 (description
41840 "This package provides a python client for the @code{Valkey} key-value
41841store, forked from redis-py.")
41842 (license license:expat)))
41843
41844;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
41845;; package.
41846(define-public python-vcversioner
41847 (package
41848 (name "python-vcversioner")
41849 (version "2.16.0.0")
41850 (source
41851 (origin
41852 (method url-fetch)
41853 (uri (pypi-uri "vcversioner" version))
41854 (sha256
41855 (base32
41856 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
41857 (build-system pyproject-build-system)
41858 (arguments
41859 (list #:tests? #f)) ;no tests in PyPI archive
41860 (native-inputs
41861 (list python-setuptools))
41862 (home-page "https://github.com/habnabit/vcversioner")
41863 (synopsis "Python library for version number discovery")
41864 (description
41865 "Vcversioner is a Python library that inspects tagging information in a
41866variety of version control systems in order to discover version numbers.")
41867 (license license:isc)))
41868
41869(define-public python-vdf
41870 (package
41871 (name "python-vdf")
41872 (version "3.4")
41873 (source
41874 (origin
41875 (method git-fetch) ; no tests in PyPI release
41876 (uri (git-reference
41877 (url "https://github.com/ValvePython/vdf")
41878 (commit (string-append "v" version))))
41879 (file-name (git-file-name name version))
41880 (sha256
41881 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
41882 (build-system pyproject-build-system)
41883 (native-inputs
41884 (list python-pytest python-setuptools))
41885 (home-page "https://github.com/ValvePython/vdf")
41886 (synopsis "Work with Valve's VDF text format")
41887 (description
41888 "This package provides @code{python-vdf}, a library for working with
41889 Valve's VDF text format.")
41890 (license license:expat)))
41891
41892(define-public python-vendetect
41893 (package
41894 (name "python-vendetect")
41895 (version "0.0.3")
41896 (source
41897 (origin
41898 (method url-fetch)
41899 (uri (pypi-uri "vendetect" version))
41900 (sha256
41901 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
41902 (build-system pyproject-build-system)
41903 (propagated-inputs (list python-copydetect python-rich))
41904 (native-inputs (list python-hatchling python-pytest))
41905 (home-page "https://github.com/trailofbits/vendetect")
41906 (synopsis "Detect vendored and copy-pasted code")
41907 (description
41908 "Vendetect helps identify copied or vendored code between repositories,
41909making it easier to detect when code has been copied with or without
41910attribution. It uses similarity detection algorithms to compare code files
41911and highlight matching sections.")
41912 (license license:agpl3+)))
41913
41914;; XXX: No updates since 2017.
41915(define-public python-verboselogs
41916 (package
41917 (name "python-verboselogs")
41918 (version "1.7")
41919 (source
41920 (origin
41921 (method url-fetch)
41922 (uri (pypi-uri "verboselogs" version))
41923 (sha256
41924 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
41925 (build-system pyproject-build-system)
41926 (arguments
41927 (list
41928 #:test-flags
41929 ;; Do not run pylint plugin test, as astroid is an old unsupported
41930 ;; version.
41931 #~(list "-k" "not test_pylint_plugin"
41932 "verboselogs/tests.py")))
41933 (native-inputs
41934 (list python-mock
41935 python-pytest
41936 python-setuptools))
41937 (home-page "https://verboselogs.readthedocs.io")
41938 (synopsis "Verbose logging level for Python's logging module")
41939 (description
41940 "The @code{verboselogs} package extends Python's @code{logging} module to
41941add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
41942 (license license:expat)))
41943
41944(define-public python-verlib2
41945 (package
41946 (name "python-verlib2")
41947 (version "0.3.1")
41948 (source
41949 (origin
41950 (method git-fetch)
41951 (uri (git-reference
41952 (url "https://github.com/pyveci/verlib2")
41953 (commit (string-append "v" version))))
41954 (file-name (git-file-name name version))
41955 (sha256
41956 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
41957 (build-system pyproject-build-system)
41958 (native-inputs
41959 (list python-pretend python-pytest python-setuptools))
41960 (home-page "https://github.com/pyveci/verlib2")
41961 (synopsis "Python versioning utilities")
41962 (description
41963 "This package provides a standalone variant of @code{distutils.version} and
41964@code{packaging.version}, without anything else.")
41965 (license license:bsd-2)))
41966
41967;; XXX: No updates since 2018, consider to remove when fails to build, it's a
41968;; leaf package.
41969(define-public python-version
41970 ;; No version tags available in the git repo; just using bare commit instead.
41971 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
41972 (revision "1"))
41973 (package
41974 (name "python-version")
41975 (version (git-version "0.0.2" revision commit))
41976 (source
41977 (origin
41978 (method git-fetch)
41979 (uri (git-reference
41980 (url "https://gitlab.com/halfak/python_version")
41981 (commit commit)))
41982 (file-name (git-file-name name version))
41983 (sha256
41984 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
41985 (build-system pyproject-build-system)
41986 (arguments
41987 (list #:tests? #f)) ;no tests
41988 (native-inputs
41989 (list python-setuptools))
41990 (home-page "https://gitlab.com/halfak/python_version")
41991 (synopsis "Python version checking utility")
41992 (description
41993 "This package provides a simple utility for checking the python version.")
41994 (license license:expat))))
41995
41996(define-public python-versioneer
41997 (package
41998 (name "python-versioneer")
41999 (version "0.29")
42000 (source
42001 (origin
42002 (method url-fetch)
42003 (uri (pypi-uri "versioneer" version))
42004 (sha256
42005 (base32
42006 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
42007 (patches (search-patches "python-versioneer-guix-support.patch"))))
42008 (build-system pyproject-build-system)
42009 (arguments
42010 (list
42011 ;; Minimize test requirements.
42012 #:test-flags
42013 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
42014 "--ignore=test/git/test_invocations.py"
42015 "--ignore=test/test_render.py")
42016 #:phases
42017 #~(modify-phases %standard-phases
42018 (add-before 'check 'pre-check
42019 (lambda _
42020 (invoke "python" "setup.py" "make_versioneer"
42021 "make_long_version_py_git"))))))
42022 (native-inputs
42023 (list git-minimal/pinned
42024 python-pytest
42025 python-setuptools))
42026 (propagated-inputs
42027 (list python-tomli))
42028 (home-page "https://github.com/python-versioneer/python-versioneer")
42029 (synopsis "Version-string management for VCS-controlled trees")
42030 (description
42031 "@code{versioneer} is a tool for managing a recorded version number in
42032distutils-based python projects. The goal is to remove the tedious and
42033error-prone \"update the embedded version string\" step from your release
42034process.")
42035 (license license:unlicense)))
42036
42037(define-public python-verspec
42038 (package
42039 (name "python-verspec")
42040 (version "0.1.0")
42041 (source
42042 (origin
42043 (method url-fetch)
42044 (uri (pypi-uri "verspec" version))
42045 (sha256
42046 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
42047 (build-system pyproject-build-system)
42048 (arguments
42049 (list
42050 #:phases
42051 #~(modify-phases %standard-phases
42052 (add-before 'check 'pre-check
42053 (lambda _
42054 (invoke "touch" "test/__init__.py"))))))
42055 (native-inputs
42056 (list python-pretend
42057 python-pytest
42058 python-setuptools))
42059 (home-page "https://github.com/jimporter/verspec")
42060 (synopsis "Flexible version handling for Python")
42061 (description
42062 "This Python library handles software versions and specifiers. It is
42063adapted from the @code{packaging} package.")
42064 (license (list license:bsd-2 license:asl2.0))))
42065
42066(define-public python-vine
42067 (package
42068 (name "python-vine")
42069 (version "5.1.0")
42070 (source
42071 (origin
42072 (method url-fetch)
42073 (uri (pypi-uri "vine" version))
42074 (sha256
42075 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
42076 (build-system pyproject-build-system)
42077 (arguments
42078 (list
42079 #:test-flags
42080 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
42081 #~(list "-k" (string-join
42082 (list "not test_evaluate"
42083 "test_reverse"
42084 "test_cancel"
42085 "test_throw")
42086 " and not "))))
42087 (native-inputs
42088 (list python-pytest python-setuptools python-wheel))
42089 (home-page "https://github.com/celery/vine")
42090 (synopsis "Promises for Python")
42091 (description
42092 "@code{vine} provides a special implementation of promises in that it can
42093be used both for \"promise of a value\" and lazy evaluation. The biggest
42094upside for this is that everything in a promise can also be a promise,
42095e.g. filters, callbacks and errbacks can all be promises.")
42096 (license license:bsd-3)))
42097
42098(define-public python-virtualenv
42099 (package
42100 (name "python-virtualenv")
42101 (version "20.35.4")
42102 (source
42103 (origin
42104 (method git-fetch)
42105 (uri (git-reference
42106 (url "https://github.com/pypa/virtualenv")
42107 (commit version)))
42108 (file-name (git-file-name name version))
42109 (sha256
42110 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
42111 (build-system pyproject-build-system)
42112 (arguments
42113 (list
42114 ;; tests: 347 passed, 43 skipped, 8 deselected
42115 #:test-flags
42116 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
42117 (string-join ls "::")))
42118 '(("discovery/py_info/test_py_info.py"
42119 "test_fallback_existent_system_executable")
42120 ("discovery/test_discovery.py"
42121 "test_get_paths_no_path_env")
42122 ("create/via_global_ref/test_build_c_ext.py"
42123 "test_can_build_c_extensions[cpython3-posix]")
42124 ("create/via_global_ref/test_build_c_ext.py"
42125 "test_can_build_c_extensions[venv]")
42126 ("create/test_creator.py"
42127 "test_create_distutils_cfg[cpython3-posix]")
42128 ("create/test_creator.py"
42129 "test_create_distutils_cfg[venv]")
42130 ("seed/embed/test_bootstrap_link_via_app_data.py"
42131 "test_seed_link_via_app_data[True]")
42132 ("seed/embed/test_bootstrap_link_via_app_data.py"
42133 "test_seed_link_via_app_data[False]"))))))
42134 (native-inputs
42135 (list python-flaky
42136 python-hatch-vcs
42137 python-hatchling
42138 python-packaging
42139 python-pytest
42140 python-pytest-env
42141 python-pytest-freezer
42142 python-pytest-mock
42143 python-pytest-timeout
42144 python-setuptools
42145 python-time-machine))
42146 (propagated-inputs
42147 (list python-distlib
42148 python-filelock
42149 python-platformdirs))
42150 (home-page "https://virtualenv.pypa.io/")
42151 (synopsis "Virtual Python environment builder")
42152 (description
42153 "Virtualenv is a tool to create isolated Python environments.")
42154 (license license:expat)))
42155
42156(define-public python-vncdotool
42157 (package
42158 (name "python-vncdotool")
42159 (version "1.2.0")
42160 (source
42161 (origin
42162 (method git-fetch)
42163 (uri (git-reference
42164 (url "http://github.com/sibson/vncdotool")
42165 (commit (string-append "v" version))))
42166 (file-name (git-file-name name version))
42167 (sha256
42168 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
42169 (build-system pyproject-build-system)
42170 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
42171 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
42172 python-setuptools python-wheel))
42173 (home-page "http://github.com/sibson/vncdotool")
42174 (synopsis "Command line VNC client")
42175 (description
42176 "This package provides a Python command line VNC client. It can be
42177useful to automating interactions with virtual machines or hardware devices
42178that are otherwise difficult to control.")
42179 (license license:expat)))
42180
42181(define-public python-vncdotool-bootstrap
42182 (hidden-package
42183 (package/inherit python-vncdotool
42184 (arguments (list #:tests? #f))
42185 (native-inputs (list python-pexpect python-pytest python-setuptools
42186 python-wheel)))))
42187
42188(define-public python-vobject
42189 (package
42190 (name "python-vobject")
42191 (version "0.9.9")
42192 (source (origin
42193 (method url-fetch)
42194 (uri (pypi-uri "vobject" version))
42195 (sha256
42196 (base32
42197 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
42198 (build-system pyproject-build-system)
42199 (arguments
42200 '(;; The test suite relies on some non-portable Windows interfaces. Tests
42201 ;; are rewokred on master's HEAD.
42202 #:tests? #f))
42203 (native-inputs
42204 (list python-setuptools))
42205 (propagated-inputs
42206 (list python-dateutil
42207 python-pytz
42208 python-six)) ;it's dropped on master's HEAD
42209 (home-page "https://py-vobject.github.io/")
42210 (synopsis "Parse and generate vCard and vCalendar files")
42211 (description
42212 "Vobject is intended to be a full featured Python package for parsing
42213and generating vCard and vCalendar files. Currently, iCalendar files are
42214supported and well tested. vCard 3.0 files are supported, and all data should
42215be imported, but only a few components are understood in a sophisticated way.")
42216 (license license:asl2.0)))
42217
42218(define-public python-voluptuous
42219 (package
42220 (name "python-voluptuous")
42221 (version "0.15.2")
42222 (source
42223 (origin
42224 (method url-fetch)
42225 (uri (pypi-uri "voluptuous" version))
42226 (sha256
42227 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
42228 (build-system pyproject-build-system)
42229 (native-inputs
42230 (list python-pytest
42231 python-setuptools))
42232 (home-page "https://github.com/alecthomas/voluptuous")
42233 (synopsis "Python data validation library")
42234 (description
42235 "Voluptuous is a Python data validation library. It is primarily
42236intended for validating data coming into Python as JSON, YAML, etc.")
42237 (license license:bsd-3)))
42238
42239(define-public python-wadler-lindig
42240 (package
42241 (name "python-wadler-lindig")
42242 (version "0.1.7")
42243 (source
42244 (origin
42245 ;; GitHub includes the tests, unlike the PyPI tarball
42246 (method git-fetch)
42247 (uri (git-reference
42248 (url "https://github.com/patrick-kidger/wadler_lindig")
42249 (commit (string-append "v" version))))
42250 (file-name (git-file-name name version))
42251 (sha256
42252 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
42253 (build-system pyproject-build-system)
42254 (native-inputs (list python-hatchling python-pytest python-numpy))
42255 (home-page "https://docs.kidger.site/wadler_lindig")
42256 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
42257 (description
42258 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
42259library for Python that implements a simplified version of the Wadler-Lindig
42260algorithm. Designed to consume less horizontal space than Python's
42261built-in pprint.pprint, it produces compact, well-formatted representations
42262even for complex custom types.")
42263 (license license:asl2.0)))
42264
42265(define-public python-wand
42266 (package
42267 (name "python-wand")
42268 (version "0.7.1")
42269 (source
42270 (origin
42271 (method git-fetch)
42272 (uri (git-reference
42273 (url "https://github.com/emcconville/wand")
42274 (commit version)))
42275 (file-name (git-file-name name version))
42276 (sha256
42277 (base32 "0yzv3jwbfg0h2n102718cw392gx2dkrbpj4b54khszrcgrsifa2a"))))
42278 (build-system pyproject-build-system)
42279 (arguments
42280 (list
42281 #:phases
42282 #~(modify-phases %standard-phases
42283 (add-after 'unpack 'hardcode-lib-path
42284 (lambda _
42285 (substitute* "wand/api.py"
42286 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
42287 (string-append "\"" #$(this-package-input "imagemagick") "\""))
42288 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
42289 "\".Q16\"")))))))
42290 (native-inputs
42291 (list python-setuptools python-pytest))
42292 (inputs
42293 (list imagemagick))
42294 (home-page "https://docs.wand-py.org/")
42295 (synopsis "MagickWand API binding for Python")
42296 (description
42297 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
42298 (license license:expat)))
42299
42300(define-public python-wasabi
42301 (package
42302 (name "python-wasabi")
42303 (version "1.1.3")
42304 (source
42305 (origin
42306 (method url-fetch)
42307 (uri (pypi-uri "wasabi" version))
42308 (sha256
42309 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
42310 (build-system pyproject-build-system)
42311 (arguments
42312 (list
42313 #:test-flags
42314 ;; Test requires nbconvert which is huge.
42315 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
42316 (native-inputs
42317 (list python-pytest
42318 python-setuptools))
42319 (propagated-inputs
42320 (list python-colorama))
42321 (home-page "https://github.com/ines/wasabi")
42322 (synopsis "Console printing and formatting toolkit")
42323 (description
42324 "This package provides a lightweight console printing and formatting
42325toolkit for Python.")
42326 (license license:expat)))
42327
42328(define-public python-watchdog
42329 (package
42330 (name "python-watchdog")
42331 (version "6.0.0")
42332 (source
42333 (origin
42334 (method url-fetch)
42335 (uri (pypi-uri "watchdog" version))
42336 (sha256
42337 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
42338 (build-system pyproject-build-system)
42339 (arguments
42340 (list
42341 #:test-flags
42342 #~(list "-k" (string-join
42343 (list "not test_kill_auto_restart"
42344 "test_auto_restart_on_file_change_debounce"
42345 ;; Fails with too many open files.
42346 "test_select_fd")
42347 " and not "))))
42348 (native-inputs
42349 (list python-pytest python-setuptools))
42350 (propagated-inputs
42351 (list python-pyyaml))
42352 (home-page "https://github.com/gorakhargosh/watchdog")
42353 (synopsis "File system events monitoring")
42354 (description
42355 "This package provides a way to monitor file system events such as a file
42356modification and trigger an action. This is similar to inotify, but
42357portable.")
42358 (license license:asl2.0)))
42359
42360(define-public python-watchfiles
42361 (package
42362 (name "python-watchfiles")
42363 (version "1.1.1")
42364 (source
42365 (origin
42366 (method git-fetch)
42367 (uri (git-reference
42368 (url "https://github.com/samuelcolvin/watchfiles")
42369 (commit (string-append "v" version))))
42370 (file-name (git-file-name name version))
42371 (sha256
42372 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
42373 (build-system pyproject-build-system)
42374 (arguments
42375 (list
42376 ;; Missing file in source.
42377 #:test-flags ''("-k" "not test_docs_examples")
42378 #:imported-modules `(,@%cargo-build-system-modules
42379 ,@%pyproject-build-system-modules)
42380 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
42381 (guix build pyproject-build-system)
42382 (guix build utils))
42383 #:phases
42384 #~(modify-phases %standard-phases
42385 (add-after 'unpack 'prepare-cargo-build-system
42386 (lambda args
42387 (for-each
42388 (lambda (phase)
42389 (format #t "Running cargo phase: ~a~%" phase)
42390 (apply (assoc-ref cargo:%standard-phases phase)
42391 #:cargo-target #$(cargo-triplet)
42392 args))
42393 '(unpack-rust-crates
42394 configure
42395 check-for-pregenerated-files
42396 patch-cargo-checksums))))
42397 (add-after 'build 'install-rust-library
42398 (lambda _
42399 (copy-file "target/release/lib_rust_notify.so"
42400 "watchfiles/_rust_notify.so"))))))
42401 (native-inputs
42402 (append
42403 (list maturin
42404 python-anyio
42405 python-dirty-equals
42406 python-pytest
42407 python-pytest-mock
42408 python-pytest-timeout
42409 rust
42410 `(,rust "cargo"))
42411 (or (and=> (%current-target-system)
42412 (compose list make-rust-sysroot))
42413 '())))
42414 (inputs
42415 (cargo-inputs 'python-watchfiles))
42416 (propagated-inputs
42417 (list python-anyio))
42418 (home-page "https://github.com/samuelcolvin/watchfiles")
42419 (synopsis "Simple, modern file watching and code reload in Python")
42420 (description
42421 "Simple, modern file watching and code reload in Python inspired by
42422@code{watchdog}. Among the differences are a unified approach for each
42423operating systems and an elegant approach to concurrency using threading.")
42424 (license license:expat)))
42425
42426(define-public python-wcmatch
42427 (package
42428 (name "python-wcmatch")
42429 (version "10.1")
42430 (source
42431 (origin
42432 (method git-fetch)
42433 (uri (git-reference
42434 (url "https://github.com/facelessuser/wcmatch")
42435 (commit version)))
42436 (file-name (git-file-name name version))
42437 (sha256
42438 (base32 "1pz6wyz2hlckl88y6z7v32sm5mfp2mqgar4z5f1kz7mixsdpmh41"))))
42439 (build-system pyproject-build-system)
42440 (arguments
42441 (list #:test-flags
42442 ;; ``test_glob_match_real_outside_curdir`` walks paths outside
42443 ;; the build directory which the sandbox does not permit.
42444 #~(list "-k" "not test_glob_match_real_outside_curdir")
42445 #:phases
42446 #~(modify-phases %standard-phases
42447 (add-before 'check 'set-home
42448 (lambda _
42449 (setenv "HOME" (getcwd)))))))
42450 (native-inputs
42451 (list python-hatchling
42452 python-pytest))
42453 (propagated-inputs
42454 (list python-bracex))
42455 (home-page "https://facelessuser.github.io/wcmatch/")
42456 (synopsis "Wildcard and glob file name matcher")
42457 (description
42458 "Wcmatch provides an enhanced @code{fnmatch}, @code{glob}, and
42459@code{pathlib} library. It adds features such as brace expansion,extended
42460glob patterns, and recursive globbing with configurable behavior.")
42461 (license license:expat)))
42462
42463(define-public python-wcwidth
42464 (package
42465 (name "python-wcwidth")
42466 (version "0.2.13")
42467 (source (origin
42468 (method url-fetch)
42469 (uri (pypi-uri "wcwidth" version))
42470 (sha256
42471 (base32
42472 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
42473 (build-system pyproject-build-system)
42474 (native-inputs (list python-pytest python-setuptools))
42475 (home-page "https://github.com/jquast/wcwidth")
42476 (synopsis "Measure number of terminal column cells of wide-character codes")
42477 (description
42478 "Wcwidth measures the number of terminal column cells of wide-character
42479codes. It is useful for those implementing a terminal emulator, or programs
42480that carefully produce output to be interpreted by one. It is a Python
42481implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
42482in POSIX.1-2001 and POSIX.1-2008.")
42483 (license license:expat)))
42484
42485(define-public python-whatever
42486 (package
42487 (name "python-whatever")
42488 (version "0.7")
42489 (source
42490 (origin
42491 (method git-fetch)
42492 (uri (git-reference
42493 (url "https://github.com/Suor/whatever")
42494 (commit version)))
42495 (file-name (git-file-name name version))
42496 (sha256
42497 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
42498 (build-system pyproject-build-system)
42499 (native-inputs
42500 (list python-pytest python-setuptools python-wheel))
42501 (home-page "https://github.com/Suor/whatever")
42502 (synopsis "Make anonymous functions by partial application of operators")
42503 (description "@code{whatever} provides an easy way to make anonymous
42504functions by partial application of operators.")
42505 (license license:bsd-3)))
42506
42507(define-public python-whatthepatch
42508 (package
42509 (name "python-whatthepatch")
42510 (version "1.0.7")
42511 (source
42512 (origin
42513 (method url-fetch)
42514 (uri (pypi-uri "whatthepatch" version))
42515 (sha256
42516 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
42517 (build-system pyproject-build-system)
42518 (native-inputs (list python-pytest python-setuptools))
42519 (home-page "https://github.com/cscorley/whatthepatch")
42520 (synopsis "Patch parsing and application library")
42521 (description
42522 "This package provides a patch parsing and application library.")
42523 (license license:expat)))
42524
42525(define-public python-wheel-filename
42526 (package
42527 (name "python-wheel-filename")
42528 (version "1.4.2")
42529 (source
42530 (origin
42531 (method url-fetch)
42532 (uri (pypi-uri "wheel_filename" version))
42533 (sha256
42534 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
42535 (build-system pyproject-build-system)
42536 (native-inputs (list python-hatchling python-pytest))
42537 (home-page "https://github.com/wheelodex/wheel-filename")
42538 (synopsis "Parse wheel filenames")
42539 (description
42540 "This software allows you to verify
42541@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
42542filenames and parse them into their component fields.
42543
42544This package adheres strictly to the standard, with the following
42545exceptions:
42546
42547@itemize @bullet
42548@item
42549Version components may be any sequence of the relevant set of
42550characters; they are not verified for PEP 440 compliance.
42551@item
42552The @file{.whl} file extension is matched case-insensitively.
42553@end itemize")
42554 (license license:expat)))
42555
42556(define-public python-whenever
42557 (package
42558 (name "python-whenever")
42559 (version "0.9.2")
42560 (source
42561 (origin
42562 (method url-fetch)
42563 (uri (pypi-uri "whenever" version))
42564 (sha256
42565 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
42566 (build-system pyproject-build-system)
42567 (arguments
42568 (list
42569 ;; tests: 2170 passed, 3 skipped, 2 warnings
42570 #:phases
42571 #~(modify-phases %standard-phases
42572 ;; Use the pure python version
42573 (add-before 'build 'setenv
42574 (lambda _
42575 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
42576 (add-before 'check 'set-check-environment
42577 (lambda* (#:key inputs #:allow-other-keys)
42578 (setenv "TZ" "UTC")
42579 (setenv "TZDIR"
42580 (search-input-directory inputs
42581 "share/zoneinfo")))))))
42582 (propagated-inputs
42583 (list python-time-machine python-tzdata python-tzlocal))
42584 (native-inputs
42585 (list python-pytest
42586 python-setuptools
42587 tzdata-for-tests))
42588 (home-page "https://whenever.readthedocs.io/")
42589 (synopsis "Modern datetime library for Python")
42590 (description "Modern datetime library for Python. Supports:
42591@itemize
42592@item DST-safe arithmetic
42593@item Nanosecond precision
42594@item Date arithmetic
42595@end itemize")
42596 (license license:expat)))
42597
42598;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
42599(define-public python-whichcraft
42600 (package
42601 (name "python-whichcraft")
42602 (version "0.6.1")
42603 (source
42604 (origin
42605 (method url-fetch)
42606 (uri (pypi-uri "whichcraft" version))
42607 (sha256
42608 (base32
42609 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
42610 (build-system pyproject-build-system)
42611 (native-inputs
42612 (list python-pytest python-setuptools))
42613 (home-page "https://github.com/pydanny/whichcraft")
42614 (synopsis "Cross-platform cross-python shutil.which functionality")
42615 (description
42616 "This package provides a shim of the shutil.which function that's
42617designed to work across multiple versions of Python.")
42618 (license license:bsd-3)))
42619
42620(define-public python-widgetsnbextension
42621 (package
42622 (name "python-widgetsnbextension")
42623 (version "4.0.14")
42624 (source
42625 (origin
42626 (method url-fetch)
42627 (uri (pypi-uri "widgetsnbextension" version))
42628 (sha256
42629 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
42630 (build-system pyproject-build-system)
42631 (arguments
42632 (list #:tests? #f)) ;no tests in PyPI or git
42633 (native-inputs
42634 (list python-jupyter-packaging
42635 python-setuptools))
42636 (home-page "https://ipython.org")
42637 (synopsis "IPython HTML widgets for Jupyter")
42638 (description "This package provides interactive HTML widgets for Jupyter
42639notebooks.")
42640 (license license:bsd-3)))
42641
42642(define-public python-wrapt
42643 (package
42644 (name "python-wrapt")
42645 (version "2.0.1")
42646 (source
42647 (origin
42648 (method url-fetch)
42649 (uri (pypi-uri "wrapt" version))
42650 (sha256
42651 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
42652 (build-system pyproject-build-system)
42653 (arguments
42654 (list
42655 ;; tests: 562 passed, 1 deselected
42656 #:test-flags
42657 ;; AssertionError: Output did not match expected for
42658 ;; mypy_function_wrapper_fn_t6.py
42659 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
42660 (native-inputs
42661 (list python-mypy-for-tests ;hard dependencies in tests
42662 python-pytest
42663 python-setuptools))
42664 (home-page "https://github.com/GrahamDumpleton/wrapt")
42665 (synopsis "Module for decorators, wrappers and monkey patching")
42666 (description
42667 "The aim of the wrapt module is to provide a transparent object proxy for
42668 Python, which can be used as the basis for the construction of function
42669 wrappers and decorator functions.")
42670 (license license:bsd-2)))
42671
42672(define-public python-wurlitzer
42673 (package
42674 (name "python-wurlitzer")
42675 (version "3.1.1")
42676 (source
42677 (origin
42678 (method url-fetch)
42679 (uri (pypi-uri "wurlitzer" version))
42680 (sha256
42681 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
42682 (build-system pyproject-build-system)
42683 (arguments
42684 (list #:test-flags #~(list "test.py")))
42685 (native-inputs
42686 (list python-pytest
42687 python-setuptools))
42688 (home-page "https://github.com/minrk/wurlitzer")
42689 (synopsis "Capture C-level output in context managers")
42690 (description
42691 "This library helps to redirect @code{sys.stdout} to a stream or a file
42692while executing some piece of code, including C code running within a Python
42693process.")
42694 (license license:expat)))
42695
42696(define-public python-xattr
42697 (package
42698 (name "python-xattr")
42699 (version "1.2.0")
42700 (source
42701 (origin
42702 (method url-fetch)
42703 (uri (pypi-uri "xattr" version))
42704 (sha256
42705 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
42706 (build-system pyproject-build-system)
42707 (native-inputs
42708 (list python-pytest
42709 python-setuptools))
42710 (propagated-inputs
42711 (list python-cffi))
42712 (home-page "https://github.com/xattr/xattr")
42713 (synopsis "Python wrapper for extended file system attributes")
42714 (description "This package provides a Python wrapper for using extended
42715file system attributes. Extended attributes extend the basic attributes of files
42716and directories in the file system. They are stored as name:data pairs
42717associated with file system objects (files, directories, symlinks, etc).")
42718 (license license:expat)))
42719
42720(define-public python-xdg-base-dirs
42721 (package
42722 (name "python-xdg-base-dirs")
42723 (version "6.0.2")
42724 (source
42725 (origin
42726 (method git-fetch)
42727 (uri (git-reference
42728 (url "https://github.com/srstevenson/xdg-base-dirs")
42729 (commit version)))
42730 (file-name (git-file-name name version))
42731 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
42732 (modules '((guix build utils)))
42733 ;; All pytest options are for coverage; remove snippet in next release:
42734 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
42735 (snippet #~(substitute* "pyproject.toml"
42736 (("^addopts = .*") "")))))
42737 (build-system pyproject-build-system)
42738 (native-inputs
42739 (list python-poetry-core python-pytest))
42740 (home-page "https://github.com/srstevenson/xdg-base-dirs")
42741 (synopsis "Variables defined by the XDG Base Directory Specification")
42742 (description "xdg-base-dirs is a Python module that provides functions to
42743return paths to the directories defined by the XDG Base Directory
42744Specification, to save you from duplicating the same snippet of logic in every
42745Python utility you write that deals with user cache, configuration, or data
42746files.")
42747 (license license:isc)))
42748
42749;; XXX: Deprecated on <2026-02-19>.
42750(define-deprecated-package python-xdg
42751 python-xdg-base-dirs)
42752
42753(define-public python-xkbcommon
42754 (package
42755 (name "python-xkbcommon")
42756 (version "1.0.1")
42757 (source
42758 (origin
42759 (method git-fetch)
42760 (uri (git-reference
42761 (url "https://github.com/sde1000/python-xkbcommon")
42762 (commit (string-append "v" version))))
42763 (file-name (git-file-name name version))
42764 (sha256
42765 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
42766 (build-system pyproject-build-system)
42767 (propagated-inputs (list python-cffi))
42768 (native-inputs (list libxkbcommon python-setuptools))
42769 (arguments
42770 (list
42771 #:test-backend
42772 #~'unittest
42773 #:phases
42774 #~(modify-phases %standard-phases
42775 (add-before 'check 'cleanup
42776 (lambda _
42777 (delete-file-recursively "xkbcommon"))))))
42778 (home-page "https://github.com/sde1000/python-xkbcommon")
42779 (synopsis "Bindings for libxkbcommon using cffi")
42780 (description "Bindings for libxkbcommon using cffi.")
42781 (license license:expat)))
42782
42783(define-public python-xlib
42784 (package
42785 (name "python-xlib")
42786 (version "0.33")
42787 (source
42788 (origin
42789 (method git-fetch)
42790 (uri (git-reference
42791 (url "https://github.com/python-xlib/python-xlib")
42792 (commit version)))
42793 (file-name (git-file-name name version))
42794 (sha256
42795 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
42796 (build-system pyproject-build-system)
42797 (arguments
42798 `(#:phases
42799 (modify-phases %standard-phases
42800 (add-before 'check 'start-xserver
42801 (lambda* (#:key inputs #:allow-other-keys)
42802 (let ((xorg-server (assoc-ref inputs "xorg-server")))
42803 ;; There must be a running X server and make check doesn't
42804 ;; start one. Therefore we must do it.
42805 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
42806 (setenv "DISPLAY" ":1")))))))
42807 (native-inputs
42808 (list python-mock
42809 python-pytest
42810 python-setuptools
42811 xorg-server))
42812 (propagated-inputs
42813 (list python-six))
42814 (home-page "https://github.com/python-xlib/python-xlib")
42815 (synopsis "Python X11 client library")
42816 (description
42817 "The Python X Library is intended to be a fully functional
42818X client library for Python programs. It is useful to implement
42819low-level X clients. It is written entirely in Python.")
42820 (license license:gpl2+)))
42821
42822(define-public python-xlrd
42823 (package
42824 (name "python-xlrd")
42825 (version "2.0.2")
42826 (source
42827 (origin
42828 (method git-fetch) ;no tests in PyPI archive
42829 (uri (git-reference
42830 (url "https://github.com/python-excel/xlrd")
42831 (commit version)))
42832 (file-name (git-file-name name version))
42833 (sha256
42834 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
42835 (build-system pyproject-build-system)
42836 (native-inputs
42837 (list python-pytest
42838 python-setuptools))
42839 (home-page "https://www.python-excel.org/")
42840 (synopsis "Library for extracting data from Excel files")
42841 (description "This package provides a library to extract data from
42842spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
42843@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
42844Unicode-aware. It is not intended as an end-user tool.")
42845 (license license:bsd-3)))
42846
42847(define-public python-xlsxwriter
42848 (package
42849 (name "python-xlsxwriter")
42850 (version "3.2.0")
42851 (source
42852 (origin
42853 ;; There are no tests in the PyPI tarball.
42854 (method git-fetch)
42855 (uri (git-reference
42856 (url "https://github.com/jmcnamara/XlsxWriter")
42857 (commit (string-append "RELEASE_" version))))
42858 (file-name (git-file-name name version))
42859 (sha256
42860 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
42861 (build-system pyproject-build-system)
42862 (native-inputs
42863 (list python-setuptools
42864 python-wheel))
42865 (home-page "https://github.com/jmcnamara/XlsxWriter")
42866 (synopsis "Python module for creating Excel XLSX files")
42867 (description
42868 "XlsxWriter is a Python module that can be used to write text, numbers,
42869formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
42870 (license license:bsd-2)))
42871
42872;;; Note: this package is unmaintained since 2018 (archived on GitHub).
42873(define-public python-xlwt
42874 (package
42875 (name "python-xlwt")
42876 (version "1.3.0")
42877 (source
42878 (origin
42879 (method url-fetch)
42880 (uri (pypi-uri "xlwt" version))
42881 (sha256
42882 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
42883 (build-system pyproject-build-system)
42884 (native-inputs (list python-pytest python-setuptools python-wheel))
42885 (home-page "https://www.python-excel.org/")
42886 (synopsis "Library for creating spreadsheet Excel files")
42887 (description
42888 "@code{xlwt} is a library for writing data and formatting information to
42889older Excel files (i.e. .xls). The package itself is pure Python with no
42890dependencies on modules or packages outside the standard Python distribution.
42891It is not intended as an end-user tool.")
42892 (license license:bsd-3)))
42893
42894(define-public python-xmldiff
42895 (package
42896 (name "python-xmldiff")
42897 (version "3.0b1")
42898 (source
42899 (origin
42900 (method git-fetch)
42901 (uri (git-reference
42902 (url "https://github.com/Shoobx/xmldiff")
42903 (commit version)))
42904 (file-name (git-file-name name version))
42905 (sha256
42906 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
42907 (build-system pyproject-build-system)
42908 (native-inputs (list python-pytest python-setuptools))
42909 (propagated-inputs (list python-lxml))
42910 (home-page "https://github.com/Shoobx/xmldiff")
42911 (synopsis "Creates diffs of XML files")
42912 (description "This Python tool figures out the differences between two
42913similar XML files, in the same way the @command{diff} utility does it.")
42914 (license license:expat)))
42915
42916(define-public python-xmlsec
42917 (package
42918 (name "python-xmlsec")
42919 (version "1.3.17")
42920 (source
42921 (origin
42922 (method git-fetch)
42923 (uri (git-reference
42924 (url "https://github.com/xmlsec/python-xmlsec")
42925 (commit version)))
42926 (file-name (git-file-name name version))
42927 (sha256
42928 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
42929 (build-system pyproject-build-system)
42930 (arguments
42931 (list
42932 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
42933 #:test-flags #~(list "-n" "1")))
42934 (inputs (list openssl libltdl libxslt libxml2))
42935 (propagated-inputs (list python-lxml xmlsec-openssl))
42936 (native-inputs (list pkg-config
42937 python-lxml
42938 python-pkgconfig
42939 python-pytest
42940 python-pytest-xdist
42941 python-setuptools
42942 python-setuptools-scm
42943 python-wheel))
42944 (home-page "https://github.com/xmlsec/python-xmlsec")
42945 (synopsis "Python bindings for the XML Security Library")
42946 (description "This package provides Python bindings for the XML Security
42947Library.")
42948 (license license:expat)))
42949
42950(define-public python-xmp-toolkit
42951 (package
42952 (name "python-xmp-toolkit")
42953 (version "2.1.0")
42954 (source
42955 (origin
42956 (method url-fetch)
42957 (uri (pypi-uri "python_xmp_toolkit" version))
42958 (sha256
42959 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
42960 (build-system pyproject-build-system)
42961 (arguments
42962 (list
42963 #:phases
42964 #~(modify-phases %standard-phases
42965 (add-after 'unpack 'patch-source
42966 (lambda* (#:key inputs #:allow-other-keys)
42967 (substitute* "libxmp/exempi.py"
42968 (("ctypes.util.find_library\\('exempi'\\)")
42969 (format #f "~s" (search-input-file
42970 inputs "lib/libexempi.so")))))))))
42971 (native-inputs
42972 (list python-pytest
42973 python-flit-core))
42974 (inputs
42975 (list exempi))
42976 (propagated-inputs
42977 (list python-pytz))
42978 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
42979 (synopsis "Python XMP Toolkit for working with metadata")
42980 (description "Python XMP Toolkit is a library for working with XMP
42981metadata, as well as reading/writing XMP metadata stored in many different
42982file formats.
42983
42984Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
42985based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
42986are easily incorporated into the library with a minimum amount of work.")
42987 (license license:bsd-3)))
42988
42989(define-public python-yamlcore
42990 (package
42991 (name "python-yamlcore")
42992 (version "0.0.4")
42993 (source
42994 (origin
42995 (method git-fetch)
42996 (uri (git-reference
42997 (url "https://github.com/perlpunk/pyyaml-core")
42998 (commit (string-append "v" version))))
42999 (file-name (git-file-name name version))
43000 (sha256
43001 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
43002 (build-system pyproject-build-system)
43003 (arguments
43004 (list
43005 #:phases
43006 #~(modify-phases %standard-phases
43007 (add-after 'unpack 'fix-test-file-names
43008 (lambda _
43009 (rename-file "tests/test-schema.py" "tests/test_schema.py")
43010 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
43011 (native-inputs (list python-pytest python-setuptools))
43012 (inputs (list python-pyyaml))
43013 (home-page "https://github.com/perlpunk/pyyaml-core")
43014 (synopsis "YAML 1.2 support for PyYAML")
43015 (description "This module can be used on top of PyYAML to load YAML 1.2
43016files.")
43017 (license license:expat)))
43018
43019(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
43020
43021(define-public python-yamllint
43022 (package
43023 (name "python-yamllint")
43024 (version "1.37.1")
43025 (source
43026 (origin
43027 (method url-fetch)
43028 (uri (pypi-uri "yamllint" version))
43029 (sha256
43030 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
43031 (build-system pyproject-build-system)
43032 (arguments
43033 (list #:test-backend #~'unittest))
43034 (native-inputs
43035 (list python-setuptools))
43036 (propagated-inputs
43037 (list python-pathspec python-pyyaml))
43038 (home-page "https://github.com/adrienverge/yamllint")
43039 (synopsis "Linter for YAML files")
43040 (description
43041 "Yamllint is a linter for YAML files. yamllint does not only check for
43042syntax validity, but for weirdnesses like key repetition and cosmetic problems
43043such as lines length, trailing spaces, indentation, etc.")
43044 (license license:gpl3+)))
43045
43046(define-public python-yamlloader
43047 (package
43048 (name "python-yamlloader")
43049 (version "1.6.0")
43050 (source
43051 (origin
43052 (method url-fetch)
43053 (uri (pypi-uri "yamlloader" version))
43054 (sha256
43055 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
43056 (build-system pyproject-build-system)
43057 (arguments
43058 (list #:test-backend #~'unittest
43059 #:test-flags #~(list "discover" "-v")))
43060 (native-inputs
43061 (list python-hatch-vcs
43062 python-hatchling
43063 python-hypothesis
43064 python-pytest))
43065 (propagated-inputs
43066 (list python-pyyaml))
43067 (home-page "https://github.com/Phynix/yamlloader")
43068 (synopsis "Ordered YAML loader and dumper for PyYAML")
43069 (description
43070 "This package provides loaders and dumpers for PyYAML. Currently, an
43071OrderedDict loader/dumper is implemented, allowing to keep items order when
43072loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
43073dicts are supported and are the default items to be loaded to. As of Python
430743.7 preservation of insertion order is a language feature of regular dicts.)
43075It was originally mirrored from
43076@url{https://github.com/fmenabe/python-yamlordereddictloader,
43077yamlordereddict}.")
43078 (license license:expat)))
43079
43080;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
43081;; an improved version of this library with unit tests, performance
43082;; improvements (by providing access to the C implementation of PyYAML) and is
43083;; more actively developed.
43084(define-public python-yamlordereddictloader
43085 (package
43086 (name "python-yamlordereddictloader")
43087 (version "0.4.2")
43088 (source
43089 (origin
43090 (method git-fetch)
43091 (uri (git-reference
43092 (url "https://github.com/fmenabe/python-yamlordereddictloader")
43093 (commit version)))
43094 (file-name (git-file-name name version))
43095 (sha256
43096 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
43097 (build-system pyproject-build-system)
43098 (arguments
43099 (list #:tests? #f)) ;no tests
43100 (native-inputs
43101 (list python-setuptools))
43102 (propagated-inputs
43103 (list python-pyyaml))
43104 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
43105 (synopsis "Loader and a dumper for PyYAML")
43106 (description
43107 "yamlordereddictloader is a Python package that provides a loader and a
43108dumper for PyYAML allowing to keep items order when loading a file (by putting
43109them in OrderedDict objects) and to manage OrderedDict objects when dumping to
43110a file.")
43111 (license license:expat)))
43112
43113(define-public python-yapf
43114 (package
43115 (name "python-yapf")
43116 (version "0.43.0")
43117 (source
43118 (origin
43119 (method url-fetch)
43120 (uri (pypi-uri "yapf" version))
43121 (sha256
43122 (base32
43123 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
43124 (build-system pyproject-build-system)
43125 (propagated-inputs
43126 (list python-platformdirs python-tomli))
43127 (native-inputs
43128 (list python-pytest python-setuptools python-wheel))
43129 (home-page "https://github.com/google/yapf")
43130 (synopsis "Formatter for Python code")
43131 (description "YAPF is a formatter for Python code. It's based off of
43132@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
43133takes the code and reformats it to the best formatting that conforms to the
43134style guide, even if the original code didn't violate the style guide.")
43135 (license license:asl2.0)))
43136
43137(define-public python-yappi
43138 (package
43139 (name "python-yappi")
43140 (version "1.7.6")
43141 (source
43142 (origin
43143 (method git-fetch)
43144 (uri (git-reference
43145 (url "https://github.com/sumerc/yappi")
43146 (commit (string-append "v" version))))
43147 (file-name (git-file-name name version))
43148 (sha256
43149 (base32 "08jhsflxyj3vf1m06vngsw9d6qyblykcx1j2mq4qn0ray0s7v8qj"))))
43150 (build-system pyproject-build-system)
43151 (arguments
43152 (list #:test-backend #~'unittest
43153 #:test-flags #~'("discover" "tests")))
43154 (native-inputs (list python-gevent python-setuptools))
43155 (home-page "https://github.com/sumerc/yappi")
43156 (synopsis "Python Profiler")
43157 (description "@acronym{YAPPI, Yet Another Python Profiler} is a robust and
43158intuitive, standard compliant Python profiler.")
43159 (license license:expat)))
43160
43161(define-public python-yapsy
43162 (package
43163 (name "python-yapsy")
43164 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
43165 ;; 3.12+; move back to git tag when released.
43166 (properties '((commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
43167 (revision . "0")))
43168 (version (git-version "1.12.2"
43169 (assoc-ref properties 'revision)
43170 (assoc-ref properties 'commit)))
43171 (source
43172 (origin
43173 (method git-fetch)
43174 (uri (git-reference
43175 (url "https://github.com/tibonihoo/yapsy")
43176 (commit (assoc-ref properties 'commit))))
43177 (file-name (git-file-name name version))
43178 (sha256
43179 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
43180 (build-system pyproject-build-system)
43181 (native-inputs
43182 (list python-pytest python-setuptools))
43183 (home-page "https://yapsy.sourceforge.net")
43184 (synopsis "Simple plugin system for Python applications")
43185 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
43186implementing the core mechanisms needed to build a plugin system into a wider
43187application.
43188
43189The main purpose is to depend only on Python's standard libraries and to
43190implement only the basic functionalities needed to detect, load and keep track
43191of several plugins.")
43192 (license license:bsd-3)))
43193
43194(define-public python-yaspin
43195 (package
43196 (name "python-yaspin")
43197 (version "3.2.0")
43198 (source
43199 (origin
43200 (method url-fetch)
43201 (uri
43202 (pypi-uri "yaspin" version))
43203 (sha256
43204 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
43205 (build-system pyproject-build-system)
43206 ;; tests: 3007 passed, 1758 skipped
43207 (native-inputs
43208 (list python-poetry-core
43209 python-pytest
43210 python-pytest-mock))
43211 (propagated-inputs
43212 (list python-termcolor-next))
43213 (home-page "https://github.com/pavdmyt/yaspin")
43214 (synopsis "Yet Another Terminal Spinner")
43215 (description "Yaspin provides a terminal spinner to indicate the progress
43216during long operations.")
43217 (license license:expat)))
43218
43219(define-public python-yattag
43220 (package
43221 (name "python-yattag")
43222 (version "1.16.1")
43223 (source
43224 (origin
43225 (method url-fetch)
43226 (uri (pypi-uri "yattag" version))
43227 (sha256
43228 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
43229 (build-system pyproject-build-system)
43230 (native-inputs
43231 (list python-pytest
43232 python-setuptools
43233 python-wheel))
43234 (home-page "https://www.yattag.org/")
43235 (synopsis "HTML or XML generator for Python")
43236 (description
43237 "Yattag is a Python library for generating HTML or XML in a pythonic
43238way.")
43239 (license license:lgpl2.1)))
43240
43241(define-public python-yq
43242 (package
43243 (name "python-yq")
43244 (version "3.4.3")
43245 (source
43246 (origin
43247 (method url-fetch)
43248 (uri (pypi-uri "yq" version))
43249 (sha256
43250 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
43251 (build-system pyproject-build-system)
43252 (arguments
43253 (list
43254 #:test-backend #~'custom
43255 #:test-flags #~(list "test/test.py" "-v")
43256 #:phases
43257 #~(modify-phases %standard-phases
43258 (add-after 'unpack 'patch
43259 (lambda _
43260 (substitute* "yq/__init__.py"
43261 (("Popen\\(\\[\"jq")
43262 (string-append
43263 "Popen([\""
43264 #$(this-package-input "jq") "/bin/jq"))))))))
43265 (native-inputs
43266 (list python-hatchling
43267 python-hatch-vcs))
43268 (inputs
43269 (list jq))
43270 (propagated-inputs
43271 (list python-argcomplete
43272 python-pyyaml
43273 python-tomlkit
43274 python-xmltodict))
43275 (home-page "https://github.com/kislyuk/yq")
43276 (synopsis "Command-line YAML/XML processor")
43277 (description
43278 "This package provides @command{yq} and @command{xq} for processing YAML
43279and XML respectively. The processing is done through @command{jq},
43280@command{jq} filters can be used to process the data as it passes through.")
43281 (license license:asl2.0)))
43282
43283(define-public python-yte
43284 (package
43285 (name "python-yte")
43286 (version "1.8.1") ;TODO higher versions depend on uv_build
43287 (source
43288 (origin
43289 (method git-fetch)
43290 (uri (git-reference
43291 (url "https://github.com/koesterlab/yte")
43292 (commit (string-append "v" version))))
43293 (sha256
43294 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
43295 (build-system pyproject-build-system)
43296 (arguments
43297 (list
43298 #:test-flags #~(list "tests.py")
43299 #:phases
43300 '(modify-phases %standard-phases
43301 (add-after 'unpack 'set-HOME
43302 (lambda _ (setenv "HOME" "/tmp"))))))
43303 (propagated-inputs (list python-dpath python-plac python-pyyaml))
43304 (native-inputs (list python-numpy python-poetry-core python-pytest))
43305 (home-page "https://github.com/koesterlab/yte")
43306 (synopsis "YAML template engine with Python expressions")
43307 (description
43308 "This package provides a YAML template engine with Python expressions.")
43309 (license license:expat)))
43310
43311(define-public python-zarr
43312 (package
43313 (name "python-zarr")
43314 (version "3.2.1")
43315 (source
43316 (origin
43317 (method git-fetch)
43318 (uri (git-reference
43319 (url "https://github.com/zarr-developers/zarr-python")
43320 (commit (string-append "v" version))))
43321 (file-name (git-file-name name version))
43322 (sha256
43323 (base32 "1qzbpy6j8mgpr6wb69j8yyjyr95rmagn64v8pcdljjl3969rmjf6"))))
43324 (build-system pyproject-build-system)
43325 (arguments
43326 (list
43327 ;; tests: 5339 passed, 384 skipped, 1 deselected, 7 xfailed
43328 #:test-flags
43329 #~(list "--ignore=tests/benchmarks/"
43330 ;; This test wants uv.
43331 (string-append "--deselect=tests/test_examples.py"
43332 "::test_scripts_can_run[script_path0]"))
43333 #:phases
43334 #~(modify-phases %standard-phases
43335 (add-after 'unpack 'disable-service-tests
43336 (lambda _
43337 (setenv "ZARR_TEST_ABS" "0")
43338 (setenv "ZARR_TEST_MONGO" "0")
43339 (setenv "ZARR_TEST_REDIS" "0"))))))
43340 (native-inputs
43341 (list python-hatch-vcs
43342 python-hatchling
43343 python-numpydoc ;tests/test_api/test_synchronous.py
43344 python-pytest
43345 python-pytest-asyncio
43346 python-pytest-benchmark
43347 python-tomlkit))
43348 (propagated-inputs
43349 (list python-donfig
43350 python-google-crc32c
43351 python-numcodecs
43352 python-numpy
43353 python-packaging
43354 python-typing-extensions))
43355 (home-page "https://github.com/zarr-developers/zarr-python")
43356 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
43357 (description
43358 "This package provides an implementation of chunked, compressed,
43359N-dimensional arrays for Python.")
43360 (license license:expat)))
43361
43362(define-public python-zeroc-ice
43363 (package
43364 (name "python-zeroc-ice")
43365 (version "3.7.10.1")
43366 (source (origin
43367 (method url-fetch)
43368 (uri (pypi-uri "zeroc-ice" version))
43369 (sha256
43370 (base32
43371 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
43372 (build-system pyproject-build-system)
43373 (arguments
43374 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
43375 ;; tag.
43376 ;;
43377 ;; See:
43378 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
43379 ;; - File: <ice/refs/heads/main/python/allTests.py>
43380 (list #:tests? #f))
43381 (inputs (list openssl))
43382 (native-inputs (list python-setuptools))
43383 (home-page "https://zeroc.com")
43384 (synopsis "RPC framework")
43385 (description
43386 "Ice is a comprehensive RPC framework. Ice helps you network your
43387software by taking care of all interactions with low-level network programming
43388interfaces.")
43389 (license license:gpl2)))
43390
43391;; Package variant to build [email protected]
43392(define-public python-zeroc-ice-3.6
43393 (package
43394 (inherit python-zeroc-ice)
43395 (version "3.6.5")
43396 (source (origin
43397 (method url-fetch)
43398 (uri (pypi-uri "zeroc-ice" version))
43399 (sha256
43400 (base32
43401 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
43402 (patches
43403 (search-patches
43404 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
43405 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
43406 (arguments
43407 (substitute-keyword-arguments arguments
43408 ((#:phases phases #~%standard-phases)
43409 #~(modify-phases #$phases
43410 (add-before 'build 'relax-gcc-14-strictness
43411 (lambda _
43412 (setenv "CFLAGS"
43413 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
43414
43415(define-public python-zeroconf
43416 (package
43417 (name "python-zeroconf")
43418 (version "0.38.1")
43419 (source
43420 (origin
43421 (method git-fetch)
43422 (uri (git-reference
43423 (url "https://github.com/jstasiak/python-zeroconf")
43424 (commit version)))
43425 (file-name (git-file-name name version))
43426 (sha256
43427 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
43428 (build-system pyproject-build-system)
43429 (arguments
43430 (list
43431 #:test-flags
43432 #~(list
43433 "-k" (string-append
43434 ;; XXX: Despite asyncio, this test fails.
43435 "not test_run_coro_with_timeout and not "
43436 ;; XXX: Networking isn't available.
43437 (string-join
43438 (list "test_integration_with_listener_ipv6"
43439 "test_launch_and_close_v4_v6"
43440 "test_launch_and_close_context_manager"
43441 "test_launch_and_close"
43442 "test_close_multiple_times")
43443 " and not ")))))
43444 (native-inputs
43445 (list python-pytest python-pytest-asyncio python-setuptools))
43446 (propagated-inputs
43447 (list python-ifaddr))
43448 (home-page "https://github.com/jstasiak/python-zeroconf")
43449 (synopsis "Pure Python mDNS service discovery")
43450 (description "Pure Python multicast DNS (mDNS) service discovery library
43451(Bonjour/Avahi compatible).")
43452 (license license:lgpl2.1+)))
43453
43454(define-public python-zict
43455 (package
43456 (name "python-zict")
43457 (version "3.0.0")
43458 (source
43459 (origin
43460 (method url-fetch)
43461 (uri (pypi-uri "zict" version))
43462 (sha256
43463 (base32
43464 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
43465 (build-system pyproject-build-system)
43466 (arguments
43467 (list
43468 #:test-flags
43469 ;; This uses "importorskip", but it won't skip.
43470 '(list "--ignore=tests/test_lmdb.py")))
43471 (propagated-inputs
43472 (list python-heapdict))
43473 (native-inputs
43474 (list python-pytest
43475 python-pytest-asyncio
43476 python-pytest-repeat
43477 python-pytest-timeout
43478 python-setuptools
43479 python-wheel))
43480 (home-page "https://zict.readthedocs.io/en/latest/")
43481 (synopsis "Composable mutable mapping tools")
43482 (description "This package provides abstract @code{MutableMapping} classes
43483that consume and build on other @code{MutableMappings}. Several of these can
43484be composed with one another to form intuitive interfaces over complex storage
43485systems policies.")
43486 (license license:bsd-3)))
43487
43488(define-public python-zipfly
43489 (package
43490 (name "python-zipfly")
43491 (version "6.0.5")
43492 (source
43493 (origin
43494 (method url-fetch)
43495 (uri (pypi-uri "zipfly" version))
43496 (sha256
43497 (base32
43498 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
43499 (build-system pyproject-build-system)
43500 (arguments
43501 (list #:test-backend #~'unittest))
43502 (native-inputs (list python-setuptools))
43503 (home-page "https://github.com/sandes/zipfly")
43504 (synopsis "Zip archive generator")
43505 (description "ZipFly is a zip archive generator. It was created to
43506generate very large zip archives for immediate sending out to clients, or
43507for writing large zip archives without memory inflation.")
43508 (license license:expat)))
43509
43510(define-public python-zipstream-new
43511 (package
43512 (name "python-zipstream-new")
43513 (version "1.1.8")
43514 (source
43515 (origin
43516 (method git-fetch) ; no tests in PyPI release
43517 (uri (git-reference
43518 (url "https://github.com/arjan-s/python-zipstream")
43519 (commit (string-append "v" version))))
43520 (file-name (git-file-name name version))
43521 (sha256
43522 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
43523 (build-system pyproject-build-system)
43524 (arguments
43525 (list #:test-backend #~'unittest))
43526 (native-inputs (list python-setuptools))
43527 (home-page "https://github.com/arjan-s/python-zipstream")
43528 (synopsis "Zipfile generator that takes input files as well as streams")
43529 (description "@code{zipstream.py} is a zip archive generator based on
43530@code{zipfile.py}. It was created to generate a zip file generator for
43531streaming. This is beneficial for when you want to provide a downloadable
43532archive of a large collection of regular files, which would be infeasible
43533to generate the archive prior to downloading or of a very large file that
43534you do not want to store entirely on disk or on memory.")
43535 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
43536 (license license:gpl3)))
43537
43538(define-public shrinkwrap
43539 (package
43540 (name "shrinkwrap")
43541 (version "0.1.0")
43542 (source
43543 (origin
43544 (method git-fetch)
43545 (uri (git-reference
43546 (url "https://github.com/fzakaria/shrinkwrap")
43547 (commit (string-append "v" version))))
43548 (file-name (git-file-name name version))
43549 (sha256
43550 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
43551 (build-system pyproject-build-system)
43552 (native-inputs
43553 (list python-click
43554 python-poetry-core
43555 python-pypa-build
43556 python-pytest))
43557 (inputs (list python-lief python-sh))
43558 (home-page "https://github.com/fzakaria/shrinkwrap")
43559 (synopsis "Emboss needed dependencies on the top level executable")
43560 (description
43561 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
43562shared objects, and lift them up to the executable referenced by absolute
43563path.")
43564 (license license:expat)))
43565
43566(define-public staticsite
43567 (package
43568 (name "staticsite")
43569 (version "2.5")
43570 (source
43571 (origin
43572 (method git-fetch)
43573 (uri (git-reference
43574 (url "https://github.com/spanezz/staticsite")
43575 (commit (string-append "v" version))))
43576 (file-name (git-file-name name version))
43577 (sha256
43578 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
43579 (build-system pyproject-build-system)
43580 (arguments
43581 (list
43582 #:phases
43583 #~(modify-phases %standard-phases
43584 (add-after 'unpack 'use-themes-in-output
43585 (lambda _
43586 (substitute* "staticsite/global_settings.py"
43587 (("/usr/share/staticsite") #$output))))
43588 (add-after 'install 'install-themes
43589 (lambda _
43590 (let ((themedir (string-append #$output "/themes")))
43591 (copy-recursively "themes" themedir)))))))
43592 (native-inputs
43593 (list python-hatchling
43594 python-pytest))
43595 (inputs
43596 (list perl-image-exiftool
43597 python-dateutil
43598 python-docutils
43599 python-jinja2
43600 python-markdown
43601 python-pillow
43602 python-pytz
43603 python-pyyaml
43604 python-ruamel.yaml
43605 python-slugify
43606 python-toml
43607 tzdata-for-tests))
43608 (home-page "https://github.com/spanezz/staticsite")
43609 (synopsis "Static site generator")
43610 (description
43611 "Statistic is a static site generator based on Markdown and Jinja2.")
43612 (license (list license:gpl3+ license:expat))))
43613
43614;;;
43615;;; Avoid adding new packages to the end of this file. To reduce the chances
43616;;; of a merge conflict, place them above in alphabetic order:
43617;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
43618;;;