projects/guix·blob librewolf-updates · refs

41366 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 Arun Isaac <[email protected]>
33;;; Copyright © 2016, 2017, 2018, 2020, 2021 Julien Lepiller <[email protected]>
34;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <[email protected]>
35;;; Copyright © 2016, 2017 Thomas Danckaert <[email protected]>
36;;; Copyright © 2017 Carlo Zancanaro <[email protected]>
37;;; Copyright © 2017 Frederick M. Muriithi <[email protected]>
38;;; Copyright © 2017, 2018 Adriano Peluso <[email protected]>
39;;; Copyright © 2017 Ben Sturmfels <[email protected]>
40;;; Copyright © 2017, 2018, 2019, 2021, 2022 Mathieu Othacehe <[email protected]>
41;;; Copyright © 2017 José Miguel Sánchez García <[email protected]>
42;;; Copyright © 2017, 2020, 2021 Roel Janssen <[email protected]>
43;;; Copyright © 2017, 2018, 2019 Kei Kebreau <[email protected]>
44;;; Copyright © 2017 Rutger Helling <[email protected]>
45;;; Copyright © 2017, 2019, 2021, 2025 Brendan Tildesley <[email protected]>
46;;; Copyright © 2018 Ethan R. Jones <[email protected]
47;;; Copyright © 2018 Fis Trivial <[email protected]>
48;;; Copyright © 2018 Vijayalakshmi Vedantham <[email protected]>
49;;; Copyright © 2018 Mathieu Lirzin <[email protected]>
50;;; Copyright © 2018 Adam Massmann <[email protected]>
51;;; Copyright © 2016, 2018 Tomáš Čech <[email protected]>
52;;; Copyright © 2018-2025 Nicolas Goaziou <[email protected]>
53;;; Copyright © 2018 Oleg Pykhalov <[email protected]>
54;;; Copyright © 2018, 2019, 2021, 2023 Clément Lassieur <[email protected]>
55;;; Copyright © 2018-2025 Maxim Cournoyer <[email protected]>
56;;; Copyright © 2018 Luther Thompson <[email protected]>
57;;; Copyright © 2018 Vagrant Cascadian <[email protected]>
58;;; Copyright © 2015, 2018 Pjotr Prins <[email protected]>
59;;; Copyright © 2019 [email protected] <[email protected]>
60;;; Copyright © 2019, 2020 Brett Gilio <[email protected]>
61;;; Copyright © 2019 Sam <[email protected]>
62;;; Copyright © 2019, 2023 Jack Hill <[email protected]>
63;;; Copyright © 2019-2023, Guillaume Le Vaillant <[email protected]>
64;;; Copyright © 2019, 2020 Alex Griffin <[email protected]>
65;;; Copyright © 2019, 2020, 2021, 2022, 2023 Pierre Langlois <[email protected]>
66;;; Copyright © 2019 Jacob MacDonald <[email protected]>
67;;; Copyright © 2019-2021, 2023, 2024, 2026 Giacomo Leidi <[email protected]>
68;;; Copyright © 2019 Wiktor Żelazny <[email protected]>
69;;; Copyright © 2019, 2020, 2021, 2022, 2026 Tanguy Le Carrour <[email protected]>
70;;; Copyright © 2019, 2021-2023 Mădălin Ionel Patrașcu <[email protected]>
71;;; Copyright © 2020 Riku Viitanen <[email protected]>
72;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
73;;; Copyright © 2020 sirgazil <[email protected]>
74;;; Copyright © 2020 Sebastian Schott <[email protected]>
75;;; Copyright © 2020, 2021 Alexandros Theodotou <[email protected]>
76;;; Copyright © 2020 Josh Marshall <[email protected]>
77;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
78;;; Copyright © 2020 Alex ter Weele <[email protected]>
79;;; Copyright © 2020, 2022 Matthew James Kraai <[email protected]>
80;;; Copyright © 2020 Ryan Prior <[email protected]>
81;;; Copyright © 2020 Josh Holland <[email protected]>
82;;; Copyright © 2020 Yuval Kogman <[email protected]>
83;;; Copyright © 2020, 2022 Michael Rohleder <[email protected]>
84;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <[email protected]>
85;;; Copyright © 2020 Guy Fleury Iteriteka <[email protected]>
86;;; Copyright © 2020 Hendursaga <[email protected]>
87;;; Copyright © 2020 Malte Frank Gerdes <[email protected]>
88;;; Copyright © 2020 Joseph LaFreniere <[email protected]>
89;;; Copyright © 2020 Tim Gesthuizen <[email protected]>
90;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <[email protected]>
91;;; Copyright © 2020 Ekaitz Zarraga <[email protected]>
92;;; Copyright © 2020 Diego N. Barbato <[email protected]>
93;;; Copyright © 2020 Liliana Marie Prikler <[email protected]>
94;;; Copyright © 2019 Kristian Trandem <[email protected]>
95;;; Copyright © 2020, 2021, 2024, 2025 Zheng Junjie <[email protected]>
96;;; Copyright © 2020 EuAndreh <[email protected]>
97;;; Copyright © 2021, 2022 Morgan Smith <[email protected]>
98;;; Copyright © 2021-2026 Sharlatan Hellseher <[email protected]>
99;;; Copyright © 2021 Ellis Kenyő <[email protected]>
100;;; Copyright © 2021 LibreMiami <[email protected]>
101;;; Copyright © 2021 Mathieu Othacehe <[email protected]>
102;;; Copyright © 2021 Xinglu Chen <[email protected]>
103;;; Copyright © 2021 Raghav Gururajan <[email protected]>
104;;; Copyright © 2021, 2023-2025 jgart <[email protected]>
105;;; Copyright © 2021 Danial Behzadi <[email protected]>
106;;; Copyright © 2021 Maxime Devos <[email protected]>
107;;; Copyright © 2021 Hugo Lecomte <[email protected]>
108;;; Copyright © 2021 Franck Pérignon <[email protected]>
109;;; Copyright © 2021, 2022 Petr Hodina <[email protected]>
110;;; Copyright © 2021 Simon Streit <[email protected]>
111;;; Copyright © 2021 Stefan Reichör <[email protected]>
112;;; Copyright © 2021, 2022, 2023 Daniel Meißner <[email protected]>
113;;; Copyright © 2021, 2022 Pradana Aumars <[email protected]>
114;;; Copyright © 2021–2024, 2026 Felix Gruber <[email protected]>
115;;; Copyright © 2021 Sébastien Lerique <[email protected]>
116;;; Copyright © 2021 Raphaël Mélotte <[email protected]>
117;;; Copyright © 2021 ZmnSCPxj <[email protected]>
118;;; Copyright © 2021 Filip Lajszczak <[email protected]>
119;;; Copyright © 2021 Greg Hogan <[email protected]>
120;;; Copyright © 2022, 2023 John Kehayias <[email protected]>
121;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
122;;; Copyright © 2022, 2024, 2025 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;;;
184;;; This file is part of GNU Guix.
185;;;
186;;; GNU Guix is free software; you can redistribute it and/or modify it
187;;; under the terms of the GNU General Public License as published by
188;;; the Free Software Foundation; either version 3 of the License, or (at
189;;; your option) any later version.
190;;;
191;;; GNU Guix is distributed in the hope that it will be useful, but
192;;; WITHOUT ANY WARRANTY; without even the implied warranty of
193;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
194;;; GNU General Public License for more details.
195;;;
196;;; You should have received a copy of the GNU General Public License
197;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
198
199(define-module (gnu packages python-xyz)
200 #:use-module ((guix licenses) #:prefix license:)
201 #:use-module (gnu packages)
202 #:use-module (gnu packages adns)
203 #:use-module (gnu packages algebra)
204 #:use-module (gnu packages attr)
205 #:use-module (gnu packages autotools)
206 #:use-module (gnu packages backup)
207 #:use-module (gnu packages base)
208 #:use-module (gnu packages bash)
209 #:use-module (gnu packages bdw-gc)
210 #:use-module (gnu packages bioinformatics)
211 #:use-module (gnu packages boost)
212 #:use-module (gnu packages build-tools)
213 #:use-module (gnu packages nss)
214 #:use-module (gnu packages check)
215 #:use-module (gnu packages cmake)
216 #:use-module (gnu packages compression)
217 #:use-module (gnu packages c)
218 #:use-module (gnu packages cpp)
219 #:use-module (gnu packages crypto)
220 #:use-module (gnu packages databases)
221 #:use-module (gnu packages dbm)
222 #:use-module (gnu packages dictionaries)
223 #:use-module (gnu packages digest)
224 #:use-module (gnu packages django)
225 #:use-module (gnu packages djvu)
226 #:use-module (gnu packages documentation)
227 #:use-module (gnu packages duckdb)
228 #:use-module (gnu packages elf)
229 #:use-module (gnu packages emulators)
230 #:use-module (gnu packages enchant)
231 #:use-module (gnu packages file)
232 #:use-module (gnu packages fonts)
233 #:use-module (gnu packages fontutils)
234 #:use-module (gnu packages freedesktop)
235 #:use-module (gnu packages gcc)
236 #:use-module (gnu packages gdb)
237 #:use-module (gnu packages geo)
238 #:use-module (gnu packages ghostscript)
239 #:use-module (gnu packages glib)
240 #:use-module (gnu packages gnome)
241 #:use-module (gnu packages gnupg)
242 #:use-module (gnu packages graphviz)
243 #:use-module (gnu packages gsasl)
244 #:use-module (gnu packages gtk)
245 #:use-module (gnu packages guile-xyz)
246 #:use-module (gnu packages haskell-xyz)
247 #:use-module (gnu packages icu4c)
248 #:use-module (gnu packages image)
249 #:use-module (gnu packages image-processing)
250 #:use-module (gnu packages imagemagick)
251 #:use-module (gnu packages inkscape)
252 #:use-module (gnu packages iso-codes)
253 #:use-module (gnu packages java)
254 #:use-module (gnu packages javascript)
255 #:use-module (gnu packages jupyter)
256 #:use-module (gnu packages kerberos)
257 #:use-module (gnu packages less)
258 #:use-module (gnu packages libevent)
259 #:use-module (gnu packages libffi)
260 #:use-module (gnu packages libusb)
261 #:use-module (gnu packages linux)
262 #:use-module (gnu packages llvm)
263 #:use-module (gnu packages machine-learning)
264 #:use-module (gnu packages man)
265 #:use-module (gnu packages markup)
266 #:use-module (gnu packages maths)
267 #:use-module (gnu packages messaging)
268 #:use-module (gnu packages monitoring)
269 #:use-module (gnu packages multiprecision)
270 #:use-module (gnu packages ncurses)
271 #:use-module (gnu packages networking)
272 #:use-module (gnu packages ninja)
273 #:use-module (gnu packages node)
274 #:use-module (gnu packages openstack)
275 #:use-module (gnu packages pcre)
276 #:use-module (gnu packages pdf)
277 #:use-module (gnu packages perl)
278 #:use-module (gnu packages photo)
279 #:use-module (gnu packages pkg-config)
280 #:use-module (gnu packages protobuf)
281 #:use-module (gnu packages python)
282 #:use-module (gnu packages python-build)
283 #:use-module (gnu packages python-check)
284 #:use-module (gnu packages python-compression)
285 #:use-module (gnu packages python-crypto)
286 #:use-module (gnu packages python-science)
287 #:use-module (gnu packages python-web)
288 #:use-module (gnu packages qt)
289 #:use-module (gnu packages rdf)
290 #:use-module (gnu packages readline)
291 #:use-module (gnu packages regex)
292 #:use-module (gnu packages rpc)
293 #:use-module (gnu packages rust)
294 #:use-module (gnu packages rust-apps)
295 #:use-module (gnu packages scanner)
296 #:use-module (gnu packages search)
297 #:use-module (gnu packages serialization)
298 #:use-module (gnu packages shells)
299 #:use-module (gnu packages sphinx)
300 #:use-module (gnu packages ssh)
301 #:use-module (gnu packages statistics)
302 #:use-module (gnu packages tcl)
303 #:use-module (gnu packages tex)
304 #:use-module (gnu packages texinfo)
305 #:use-module (gnu packages time)
306 #:use-module (gnu packages tls)
307 #:use-module (gnu packages tree-sitter)
308 #:use-module (gnu packages version-control)
309 #:use-module (gnu packages video)
310 #:use-module (gnu packages web)
311 #:use-module (gnu packages wxwidgets)
312 #:use-module (gnu packages xml)
313 #:use-module (gnu packages xdisorg)
314 #:use-module (gnu packages xorg)
315 #:use-module (guix packages)
316 #:use-module (guix build-system cargo)
317 #:use-module (guix build-system cmake)
318 #:use-module (guix build-system copy)
319 #:use-module (guix build-system gnu)
320 #:use-module (guix build-system meson)
321 #:use-module (guix build-system pyproject)
322 #:use-module (guix build-system python)
323 #:use-module (guix deprecation)
324 #:use-module (guix download)
325 #:use-module (guix hg-download)
326 #:use-module (guix git-download)
327 #:use-module (guix gexp)
328 #:use-module (guix utils)
329 #:use-module (ice-9 match)
330 #:use-module (srfi srfi-1)
331 #:use-module (srfi srfi-26))
332
333(define-public python-anaconda-cli-base
334 (package
335 (name "python-anaconda-cli-base")
336 (version "0.8.1")
337 (source
338 (origin
339 (method url-fetch)
340 (uri (pypi-uri "anaconda_cli_base" version))
341 (sha256
342 (base32 "0r2cvz99vrvcm399qsfxiak5qb3mbr0kbvdrkbnm20l9lq2g18zr"))))
343 (build-system pyproject-build-system)
344 (arguments
345 (list
346 #:phases
347 #~(modify-phases %standard-phases
348 (add-after 'unpack 'fix-pytest-config
349 (lambda _
350 (substitute* "pyproject.toml"
351 ((".*--cov.*") "")))))))
352 (native-inputs
353 (list python-hatch-vcs
354 python-hatchling
355 python-pytest-8
356 python-pytest-mock
357 python-setuptools-scm))
358 (propagated-inputs
359 (list python-click
360 python-packaging
361 python-pydantic-settings
362 python-readchar
363 python-rich
364 python-tomli
365 python-tomlkit
366 python-typer))
367 (home-page "https://anaconda.github.io/anaconda-cli-base/")
368 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
369 (description
370 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
371 (license license:bsd-3)))
372
373(define-public python-annexremote
374 (package
375 (name "python-annexremote")
376 (version "1.6.6")
377 (source
378 (origin
379 (method git-fetch)
380 (uri (git-reference
381 (url "https://github.com/Lykos153/AnnexRemote")
382 (commit (string-append "v" version))))
383 (file-name (git-file-name name version))
384 (sha256
385 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
386 (build-system pyproject-build-system)
387 (native-inputs
388 (list python-pytest
389 python-setuptools
390 python-setuptools-scm))
391 (home-page "https://github.com/Lykos153/AnnexRemote")
392 (synopsis "Helper module to easily develop git-annex special remotes")
393 (description
394 "This package provides a helper module to develop special remotes for
395git-annex. AnnexRemote implements the line-based external special remote
396protocol of git-annex, while leaving the behavior of the remote up to the
397user.")
398 (license license:gpl3)))
399
400(define-public python-annotated-doc
401 (package
402 (name "python-annotated-doc")
403 (version "0.0.4")
404 (source
405 (origin
406 (method git-fetch)
407 (uri (git-reference
408 (url "https://github.com/fastapi/annotated-doc")
409 (commit version)))
410 (file-name (git-file-name name version))
411 (sha256
412 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
413 (build-system pyproject-build-system)
414 (native-inputs
415 (list python-pytest
416 python-pdm-backend))
417 (home-page "https://github.com/fastapi/annotated-doc")
418 (synopsis "Annotated for some Python objects")
419 (description
420 "This package implements a funtionality for document parameters, class
421attributes, return types, and variables inline, with
422Annotated.")
423 (license license:expat)))
424
425(define-public python-archspec
426 (package
427 (name "python-archspec")
428 (version "0.2.5")
429 (source
430 (origin
431 (method git-fetch)
432 (uri (git-reference
433 (url "https://github.com/archspec/archspec")
434 (commit (string-append "v" version))
435 (recursive? #t)))
436 (file-name (git-file-name name version))
437 (sha256
438 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
439 (build-system pyproject-build-system)
440 (native-inputs
441 (list python-jsonschema
442 python-poetry-core
443 python-pytest))
444 (home-page "https://github.com/archspec/archspec")
445 (synopsis "Library to query system architecture")
446 (description
447 "Archspec offers human-readable labels for system architecture aspects.
448These aspects include CPU, network fabrics, etc. In addition, it offers
449APIs to detect, query, and compare them.")
450 (license license:expat)))
451
452(define-public python-asyncclick
453 (package
454 (name "python-asyncclick")
455 (version "8.3.0.3")
456 (source
457 (origin
458 (method url-fetch)
459 (uri (pypi-uri "asyncclick" version))
460 (sha256
461 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
462 (build-system pyproject-build-system)
463 ;; tests: 1418 passed, 21 skipped, 1 xfailed
464 (native-inputs
465 (list less
466 python-flit-core
467 python-pytest
468 python-trio))
469 (propagated-inputs
470 (list python-anyio))
471 (home-page "https://github.com/python-trio/asyncclick")
472 (synopsis "Python composable command line utility, trio-compatible version ")
473 (description
474 "AsyncClick is a fork of Click that works well with anyio, Trio, or
475asyncio.")
476 (license license:bsd-3)))
477
478(define-public python-asyncstdlib
479 (package
480 (name "python-asyncstdlib")
481 (version "3.13.0")
482 (source
483 (origin
484 (method url-fetch)
485 (uri (pypi-uri "asyncstdlib" version))
486 (sha256
487 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
488 (build-system pyproject-build-system)
489 (native-inputs (list python-flit-core python-pytest))
490 (home-page "https://asyncstdlib.readthedocs.io")
491 (synopsis "Compatibility layer between the Python stdlib and @code{async}
492callables")
493 (description
494 "The @code{asyncstdlib} library re-implements functions and classes of
495the Python standard library to make them compatible with @code{async}
496callables, iterables and context managers. It is fully agnostic to
497@code{async} event loops and seamlessly works with @code{asyncio}, third-party
498libraries such as @code{trio}, as well as any custom @code{async} event
499loop.")
500 (license license:expat)))
501
502(define-public python-awesomeversion
503 (package
504 (name "python-awesomeversion")
505 (version "24.6.0")
506 (source
507 (origin
508 (method git-fetch)
509 (uri (git-reference
510 (url "https://github.com/ludeeus/awesomeversion")
511 (commit version)))
512 (file-name (git-file-name name version))
513 (sha256
514 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
515 (modules '((guix build utils)))
516 (snippet #~(substitute* "pyproject.toml"
517 (("version = \"0\"")
518 (format #f "version = \"~a\"" #$version))))))
519 (build-system pyproject-build-system)
520 (native-inputs
521 (list python-poetry-core
522 python-pytest
523 python-pytest-snapshot))
524 (home-page "https://github.com/ludeeus/awesomeversion")
525 (synopsis "Create and compare version objects")
526 (description
527 "This package provides a way to make anything a version object, and
528compare against a vast section of other version formats.")
529 (license license:expat)))
530
531(define-public python-awkward-cpp
532 (package
533 (name "python-awkward-cpp")
534 ;; TODO: any higher versions need pybind11 >= 3, see:
535 ;; <https://codeberg.org/guix/guix/pulls/4696>.
536 (version "47")
537 (source
538 (origin
539 (method url-fetch)
540 (uri (pypi-uri "awkward_cpp" version))
541 (sha256
542 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
543 (build-system pyproject-build-system)
544 ;; tests: 22304 passed, 524 skipped
545 (native-inputs
546 (list cmake-minimal
547 pybind11-2
548 python-pytest
549 python-scikit-build-core))
550 (propagated-inputs
551 (list python-numpy))
552 (home-page "https://awkward-array.org/")
553 (synopsis "CPU kernels and compiled extensions for Awkward Array")
554 (description "Awkward CPP provides precompiled routines for the awkward
555package. It is not useful on its own, only as a dependency for awkward.")
556 (license license:bsd-3)))
557
558(define-public python-awkward
559 (package
560 (name "python-awkward")
561 (version "2.8.5")
562 (source
563 (origin
564 (method url-fetch)
565 (uri (pypi-uri "awkward" version))
566 (sha256
567 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
568 (build-system pyproject-build-system)
569 (arguments
570 (list
571 ;; tests: 2798 passed, 156 skipped
572 #:test-flags
573 ;; CUDA is and requires proprietary software.
574 #~(list "--ignore=tests-cuda-kernels/"
575 "--ignore=tests-cuda/")))
576 (native-inputs
577 (list python-hatch-fancy-pypi-readme
578 python-hatchling
579 python-pytest))
580 (propagated-inputs
581 (list python-awkward-cpp
582 python-fsspec
583 python-importlib-metadata
584 python-numpy
585 python-packaging))
586 (home-page "https://awkward-array.org/")
587 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
588 (description "Awkward Array is a library for nested, variable-sized data,
589including arbitrary-length lists, records, mixed types, and missing data,
590using NumPy-like idioms.")
591 (license license:bsd-3)))
592
593(define-public python-bresenham
594 (package
595 (name "python-bresenham")
596 (version "0.2.1")
597 (source
598 (origin
599 (method git-fetch)
600 (uri (git-reference
601 (url "https://github.com/encukou/bresenham")
602 (commit (string-append "v" version))))
603 (file-name (git-file-name name version))
604 (sha256
605 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
606 (build-system pyproject-build-system)
607 (native-inputs
608 (list python-pytest
609 python-setuptools
610 python-wheel))
611 (home-page "https://github.com/encukou/bresenham")
612 (synopsis "Implementation of Bresenham's line drawing algorithm")
613 (description
614 "This package provides a Python implementation of
615@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
616line drawing algorithm}.")
617 (license license:expat)))
618
619(define-public python-calmjs-parse
620 (package
621 (name "python-calmjs-parse")
622 (version "1.3.3")
623 (source
624 (origin
625 (method git-fetch)
626 (uri (git-reference
627 (url "https://github.com/calmjs/calmjs.parse/")
628 (commit version)))
629 (file-name (git-file-name name version))
630 (sha256
631 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
632 (build-system pyproject-build-system)
633 ;; tests: 797 passed, 1 warning
634 (native-inputs (list python-pytest python-setuptools))
635 (propagated-inputs (list python-ply))
636 (home-page "https://github.com/calmjs/calmjs.parse/")
637 (synopsis "Parsers for ECMA standards")
638 (description
639 "@code{Calmjs-parse} is a collection of helper libraries for
640understanding ECMA script.")
641 (license license:expat)))
642
643(define-public python-chameleon
644 (package
645 (name "python-chameleon")
646 (version "4.6.0")
647 (source
648 (origin
649 (method url-fetch)
650 (uri (pypi-uri "Chameleon" version))
651 (sha256
652 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
653 (build-system pyproject-build-system)
654 (native-inputs
655 (list python-pytest
656 python-setuptools))
657 (home-page "https://chameleon.readthedocs.io")
658 (synopsis "Fast HTML/XML Template Compiler")
659 (description
660 "Chameleon is an HTML/XML template engine for Python. It uses the page
661templates language.")
662 ;; Project is duo licensed, see: LICENSE.txt.
663 (license (list license:zpl2.1
664 license:psfl))))
665
666(define-public python-conda-content-trust
667 (package
668 (name "python-conda-content-trust")
669 (version "0.2.0")
670 (source
671 (origin
672 (method git-fetch)
673 (uri (git-reference
674 (url "https://github.com/conda/conda-content-trust")
675 (commit version)))
676 (file-name (git-file-name name version))
677 (sha256
678 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
679 (build-system pyproject-build-system)
680 (arguments
681 (list
682 #:test-flags
683 ;; XXX: Not packaged yet:
684 ;; <https://github.com/secure-systems-lab/securesystemslib>.
685 ;;
686 ;; ImportError: The securesystemslib library is required, which appears
687 ;; to be unavailable.
688 #~(list #$@(map (lambda (test) (string-append "--deselect="
689 "tests/test_root.py::"
690 test))
691 (list "test_sign_root_metadata_dict_via_gpg"
692 "test_sign_root_metadata_via_gpg"
693 "test_gpg_pubkey_in_ssl_format")))
694 #:phases
695 #~(modify-phases %standard-phases
696 (add-after 'unpack 'fix-pytest-config
697 (lambda _
698 (substitute* "setup.cfg"
699 (("--cov.*") "")))))))
700 (native-inputs
701 (list python-hatch-vcs
702 python-hatchling
703 python-pytest))
704 (propagated-inputs
705 (list python-cryptography))
706 (home-page "https://github.com/conda/conda-content-trust")
707 (synopsis "Signing and verification tools for Conda")
708 (description
709 "This package implements a functionalit of signing and verification tools
710for Conda. @url{https://theupdateframework.io/, Based on The Update
711Framework (TUF)}, conda-content-trust is intended to ensure that when users in
712the conda ecosystem obtain a package or data about that package, they can know
713whether or not it is trustworthy (e.g. originally comes from a reliable source
714and has not been tampered with). A basic library and basic CLI are included
715to provide signing, verification, and trust delegation functionality.")
716 (license license:bsd-3)))
717
718(define-public python-conda-inject
719 (package
720 (name "python-conda-inject")
721 (version "1.3.2")
722 (source
723 (origin
724 (method git-fetch)
725 (uri (git-reference
726 (url "https://github.com/koesterlab/conda-inject")
727 (commit (string-append "v" version))))
728 (file-name (git-file-name name version))
729 (sha256
730 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
731 (build-system pyproject-build-system)
732 (arguments
733 (list #:tests? #f)) ; tests require setting up Conda
734 (native-inputs
735 (list python-poetry-core))
736 (propagated-inputs
737 (list python-pyyaml))
738 (home-page "https://github.com/koesterlab/conda-inject")
739 (synopsis "Inject a conda environment into the current python environment")
740 (description
741 "This package provides helper functions for injecting a conda
742environment into the current python environment (by modifying @code{sys.path},
743without actually changing the current python environment).")
744 (license license:expat)))
745
746(define-public python-copydetect
747 (package
748 (name "python-copydetect")
749 (version "0.5.0")
750 (source
751 (origin
752 (method git-fetch)
753 (uri (git-reference
754 (url "https://github.com/blingenf/copydetect")
755 (commit version)))
756 (sha256
757 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
758 (build-system pyproject-build-system)
759 (propagated-inputs (list python-jinja2
760 python-matplotlib
761 python-numpy
762 python-pygments
763 python-tqdm))
764 (native-inputs (list python-setuptools
765 python-pytest
766 python-wheel))
767 (home-page "https://github.com/blingenf/copydetect")
768 (synopsis "Code plagiarism detection tool")
769 (description "Copydetect is a tool to detect likely instances of plagiarism
770based on the winnowing algorithm. It takes a list of directories as input and
771generates an HTML report displaying copied slices as output.")
772 (license license:expat)))
773
774(define-public python-couleur
775 (package
776 (name "python-couleur")
777 (version "0.7.4")
778 (source
779 (origin
780 (method url-fetch)
781 (uri (pypi-uri "couleur" version))
782 (sha256
783 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
784 (build-system pyproject-build-system)
785 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
786 (native-inputs
787 (list python-setuptools
788 python-wheel))
789 (home-page "https://github.com/gabrielfalcao/couleur")
790 (synopsis "ANSI terminal tool for Python")
791 (description
792 "This package provides an ANSI terminal tool for Python, colored shell
793and other handy fancy features.")
794 (license license:lgpl3+)))
795
796(define-public python-crc
797 (package
798 (name "python-crc")
799 (version "7.1.0")
800 (source
801 (origin
802 (method git-fetch)
803 (uri (git-reference
804 (url "https://github.com/Nicoretti/crc/")
805 (commit version)))
806 (file-name (git-file-name name version))
807 (sha256
808 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
809 (build-system pyproject-build-system)
810 (native-inputs
811 (list python-poetry-core
812 python-pytest
813 python-wheel))
814 (home-page "https://nicoretti.github.io/crc/")
815 (synopsis "Pure Python CRC library")
816 (description
817 "This library computes and verifies @acronym{Cyclic Redundancy Check,
818CRC} checksums, using predefined and custom CRC configurations.
819
820Configurations:
821@table @asis
822@item CRC8
823 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
824@item CRC16
825 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
826@item CRC32
827 CRC32 AUTOSAR BZIP2 POSIX
828@item CRC64
829 CRC64
830@end table")
831 (license license:bsd-2)))
832
833(define-public python-cron-converter
834 (package
835 (name "python-cron-converter")
836 (version "1.3.1")
837 (source
838 (origin
839 (method git-fetch)
840 (uri (git-reference
841 (url "https://github.com/Sonic0/cron-converter")
842 (commit (string-append "v" version))))
843 (file-name (git-file-name name version))
844 (sha256
845 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
846 (build-system pyproject-build-system)
847 (arguments
848 (list #:test-backend #~'unittest
849 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
850 (native-inputs
851 (list python-dateutil
852 python-setuptools))
853 (propagated-inputs
854 (list python-dateutil))
855 (home-page "https://github.com/Sonic0/cron-converter")
856 (synopsis "Cron string parser and scheduler for Python")
857 (description
858 "Cron-converter provides a Cron string parser (from string/lists to
859string/lists) and iteration for the datetime object with a cron like format.")
860 (license license:expat)))
861
862(define-public python-curtsies
863 (package
864 (name "python-curtsies")
865 (version "0.4.3")
866 (source
867 (origin
868 (method url-fetch)
869 (uri (pypi-uri "curtsies" version))
870 (sha256
871 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
872 (build-system pyproject-build-system)
873 (native-inputs
874 (list python-pyte
875 python-pytest
876 python-setuptools
877 python-wheel))
878 (propagated-inputs
879 (list python-blessed
880 python-cwcwidth))
881 (home-page "https://github.com/bpython/curtsies")
882 (synopsis "Library for curses-like terminal interaction with colored strings")
883 (description
884 "Curtsies is a Python library for interacting with the terminal. It
885features string-like objects which carry formatting information, per-line
886fullscreen terminal rendering, and keyboard input event reporting.")
887 (license license:expat)))
888
889(define-public python-customtkinter
890 (package
891 (name "python-customtkinter")
892 (version "5.2.2")
893 (source
894 (origin
895 (method git-fetch)
896 (uri (git-reference
897 (url "https://github.com/TomSchimansky/CustomTkinter")
898 (commit (string-append "v" version))))
899 (file-name (git-file-name name version))
900 (sha256
901 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
902 (build-system pyproject-build-system)
903 (arguments
904 (list
905 #:phases
906 #~(modify-phases %standard-phases
907 (add-before 'check 'start-xorg-server
908 (lambda _
909 (setenv "HOME" "/tmp")
910 ;; The test suite requires a running X server.
911 (system "Xvfb :99 -screen 0 1024x768x24 &")
912 (setenv "DISPLAY" ":99.0")))
913 (replace 'check
914 (lambda* (#:key tests? #:allow-other-keys)
915 (when tests?
916 (with-directory-excursion "test"
917 (invoke "python" "unit_tests/test_all.py"))))))))
918 (propagated-inputs
919 (list (list python "tk")
920 python-darkdetect
921 python-packaging))
922 (native-inputs
923 (list python-setuptools
924 xorg-server-for-tests))
925 (home-page "https://customtkinter.tomschimansky.com")
926 (synopsis
927 "Python @acronym{User Interface, UI} library based on Tkinter")
928 (description
929 "CustomTkinter provides fully customizable widgets, created and used
930like normal Tkinter widgets, which can also be used in combination with normal
931Tkinter elements.")
932 (license license:expat)))
933
934(define-public python-darkdetect
935 (package
936 (name "python-darkdetect")
937 (version "0.8.0")
938 (source
939 (origin
940 (method url-fetch)
941 (uri (pypi-uri "darkdetect" version))
942 (sha256
943 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
944 (build-system pyproject-build-system)
945 (arguments
946 (list
947 #:tests? #f)) ;no tests in PyPI or Git.
948 (native-inputs (list python-setuptools))
949 (home-page "https://github.com/albertosottile/darkdetect")
950 (synopsis "Detect OS dark mode from Python")
951 (description
952 "This package allows to detect if the user is using Dark Mode.")
953 (license license:bsd-3)))
954
955(define-public python-decopatch
956 (package
957 (name "python-decopatch")
958 (version "1.4.10")
959 (source
960 (origin
961 (method url-fetch)
962 (uri (pypi-uri "decopatch" version))
963 (sha256
964 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
965 (build-system pyproject-build-system)
966 (arguments
967 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
968 (native-inputs
969 (list python-setuptools
970 python-setuptools-scm))
971 (propagated-inputs
972 (list python-makefun))
973 (home-page "https://github.com/smarie/python-decopatch")
974 (synopsis "Create decorators easily in Python")
975 (description
976 "This package provide implements a functionality to simplify writing
977decorators in Python.")
978 (license license:bsd-3)))
979
980(define-public python-distance
981 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
982 (revision "0"))
983 (package
984 (name "python-distance")
985 (version (git-version "0.1.3" revision commit))
986 (source
987 (origin
988 (method git-fetch)
989 (uri (git-reference
990 (url "https://github.com/doukremt/distance")
991 (commit commit)))
992 (file-name (git-file-name name version))
993 (sha256
994 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
995 (build-system pyproject-build-system)
996 (arguments
997 (list #:test-backend #~'custom
998 #:test-flags #~(list "tests/tests.py")))
999 (native-inputs (list python-setuptools))
1000 (home-page "https://github.com/doukremt/distance")
1001 (synopsis "Utilities for comparing sequences")
1002 (description
1003 "This package provides helpers for computing similarities between
1004arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1005Sorensen distance, plus some bonuses. All distance computations are
1006implemented in pure Python, and most of them are also implemented in C.")
1007 (license license:gpl2+))))
1008
1009(define-public python-domdf-python-tools
1010 (package
1011 (name "python-domdf-python-tools")
1012 (version "3.10.0")
1013 (source
1014 (origin
1015 (method url-fetch)
1016 (uri (pypi-uri "domdf_python_tools" version))
1017 (sha256
1018 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1019 (build-system pyproject-build-system)
1020 (native-inputs (list python-hatch-requirements-txt))
1021 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1022 (propagated-inputs
1023 (list python-natsort
1024 python-typing-extensions))
1025 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1026 (synopsis "Helpful functions for Python")
1027 (description
1028 "This package provide helpfull functions for Python's testing and
1029packaging tasks.")
1030 (license license:expat)))
1031
1032(define-public python-envs
1033 (package
1034 (name "python-envs")
1035 (version "1.4")
1036 (source
1037 (origin
1038 (method url-fetch)
1039 (uri (pypi-uri "envs" version))
1040 (sha256
1041 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1042 (build-system pyproject-build-system)
1043 (arguments
1044 (list #:test-backend #~'unittest))
1045 (native-inputs
1046 (list python-packaging python-poetry-core))
1047 (propagated-inputs
1048 (list python-click python-jinja2 python-terminaltables))
1049 (home-page "https://github.com/capless/envs")
1050 (synopsis "Easy access of environment variables from Python")
1051 (description
1052 "This package implements a functionality to access of environment
1053variables from Python with support for strings, booleans, list, tuples, and
1054dicts.")
1055 (license license:asl2.0)))
1056
1057(define-public python-exitcode
1058 (package
1059 (name "python-exitcode")
1060 (version "0.1.0")
1061 (source
1062 (origin
1063 (method url-fetch)
1064 (uri (pypi-uri "exitcode" version))
1065 (sha256
1066 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1067 (build-system pyproject-build-system)
1068 (arguments
1069 (list #:tests? #f)) ; no tests in PyPI or Git
1070 (native-inputs
1071 (list python-poetry-core
1072 python-setuptools))
1073 (home-page "https://github.com/rumpelsepp/exitcode")
1074 (synopsis "Preferred system exit codes as defined by sysexits.h")
1075 (description
1076 "This package implements a preferred system exit codes as defined by
1077@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1078Rust's @url{https://docs.rs/exitcode, exitcode}.")
1079 (license license:expat)))
1080
1081(define-public python-ezdxf
1082 (package
1083 (name "python-ezdxf")
1084 (version "1.3.5")
1085 (source
1086 (origin
1087 (method git-fetch)
1088 (uri (git-reference
1089 (url "https://github.com/mozman/ezdxf")
1090 (commit (string-append "v" version))))
1091 (sha256
1092 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1093 (build-system pyproject-build-system)
1094 (native-inputs (list python-cython python-pillow python-pytest
1095 python-setuptools unzip))
1096 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1097 python-typing-extensions))
1098 (home-page "https://ezdxf.mozman.at/")
1099 (synopsis "Python library to read and write DXF drawings")
1100 (description "ezdxf is a Python package to create new DXF files and
1101read/modify/write existing DXF files.")
1102 (license license:expat)))
1103
1104(define-public python-fastnumbers
1105 (package
1106 (name "python-fastnumbers")
1107 (version "5.1.1")
1108 (source
1109 (origin
1110 (method url-fetch)
1111 (uri (pypi-uri "fastnumbers" version))
1112 (sha256
1113 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1114 (build-system pyproject-build-system)
1115 (native-inputs
1116 (list python-numpy
1117 python-pytest
1118 python-setuptools
1119 python-setuptools-scm))
1120 (home-page "https://github.com/SethMMorton/fastnumbers")
1121 (synopsis "Super-fast and clean conversions to numbers")
1122 (description
1123 "This package provides provides drop-in replacements for the Python
1124built-in @code{int} and @code{float} that are on par or faster with the Python
1125equivalents.")
1126 (license license:expat)))
1127
1128(define-public python-findpython
1129 (package
1130 (name "python-findpython")
1131 (version "0.7.0")
1132 (source
1133 (origin
1134 (method url-fetch)
1135 (uri (pypi-uri "findpython" version))
1136 (sha256
1137 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1138 (build-system pyproject-build-system)
1139 (native-inputs
1140 (list python-pdm-backend
1141 python-pytest))
1142 (propagated-inputs
1143 (list python-packaging
1144 python-platformdirs))
1145 (home-page "https://github.com/frostming/findpython")
1146 (synopsis "Find Python versions the system")
1147 (description
1148 "This package provides a utility to find Python versions on the current
1149system.")
1150 (license license:expat)))
1151
1152(define-public python-flexcache
1153 (package
1154 (name "python-flexcache")
1155 (version "0.3")
1156 (source
1157 (origin
1158 (method url-fetch)
1159 (uri (pypi-uri "flexcache" version))
1160 (sha256
1161 (base32 "0mh6c3s0ykmnnhzys72xq5ls4myzpz1y86fmz0ngw6v2l3aknx0q"))))
1162 (build-system pyproject-build-system)
1163 (native-inputs
1164 (list python-pytest
1165 python-pytest-cov
1166 python-pytest-mpl
1167 python-pytest-subtests
1168 python-setuptools
1169 python-setuptools-scm
1170 python-wheel))
1171 (propagated-inputs
1172 (list python-typing-extensions))
1173 (home-page "https://github.com/hgrecco/flexcache")
1174 (synopsis "Caching transformed versions of a source object")
1175 (description
1176 "This package implements a functionality to cache on disk the result of
1177expensive calculations. It was started as part of
1178@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1179 (license license:bsd-3)))
1180
1181(define-public python-flexparser
1182 (package
1183 (name "python-flexparser")
1184 (version "0.4")
1185 (source
1186 (origin
1187 (method url-fetch)
1188 (uri (pypi-uri "flexparser" version))
1189 (sha256
1190 (base32 "1cpn5scxnxbd2jrnany4znzzn9im5h5gwr59bp62rglman89hv96"))))
1191 (build-system pyproject-build-system)
1192 (native-inputs
1193 (list python-pytest
1194 python-pytest-cov
1195 python-pytest-mpl
1196 python-pytest-subtests
1197 python-setuptools
1198 python-setuptools-scm
1199 python-wheel))
1200 (propagated-inputs
1201 (list python-typing-extensions))
1202 (home-page "https://github.com/hgrecco/flexparser")
1203 (synopsis "Parsing made fun ... using typing")
1204 (description "This project provides a typed parser. It was started as
1205part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1206package. ")
1207 (license license:bsd-3)))
1208
1209(define-public python-grapheme
1210 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1211 ;; branch.
1212 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1213 (revision "0"))
1214 (package
1215 (name "python-grapheme")
1216 (version (git-version "0.6.0" revision commit))
1217 (source
1218 (origin
1219 (method git-fetch)
1220 (uri (git-reference
1221 (url "https://github.com/alvinlindstam/grapheme")
1222 (commit commit)))
1223 (file-name (git-file-name name version))
1224 (sha256
1225 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1226 (build-system pyproject-build-system)
1227 (native-inputs
1228 (list python-pytest
1229 python-setuptools))
1230 (home-page "https://github.com/alvinlindstam/grapheme")
1231 (synopsis "Unicode grapheme helpers")
1232 (description
1233 "This package provides a functionality for working with user perceived
1234characters. More specifically, string manipulation and calculation functions
1235for working with grapheme cluster groups (graphemes) as defined by the
1236@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1237 (license license:expat))))
1238
1239(define-public python-halo
1240 (package
1241 (name "python-halo")
1242 (version "0.0.31")
1243 (source
1244 (origin
1245 (method url-fetch)
1246 (uri (pypi-uri "halo" version))
1247 (sha256
1248 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1249 (build-system pyproject-build-system)
1250 (arguments
1251 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1252 (native-inputs
1253 (list python-setuptools))
1254 (propagated-inputs
1255 (list python-colorama
1256 python-log-symbols
1257 python-six
1258 python-spinners
1259 python-termcolor))
1260 (home-page "https://github.com/manrajgrover/halo")
1261 (synopsis "Python library to display graphical spinners in the terminal")
1262 (description
1263 "Halo is a Python library to display graphical spinners in the terminal.
1264It also supports IPython/Jupyter.")
1265 (license license:expat)))
1266
1267(define-public python-hatch-argparse-manpage
1268 (package
1269 (name "python-hatch-argparse-manpage")
1270 (version "1.0.0")
1271 (source
1272 (origin
1273 (method url-fetch)
1274 (uri (pypi-uri "hatch_argparse_manpage" version))
1275 (sha256
1276 (base32 "1zbbww9akz1lca3br67zik80ql774xpfg22njxdxjiw4kpz5alb6"))))
1277 (build-system pyproject-build-system)
1278 (native-inputs (list python-hatchling))
1279 (propagated-inputs (list python-argparse-manpage python-rich))
1280 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1281 (synopsis "Hatch build hook plugin to generate manual pages")
1282 (description
1283 "This package provides a build hook plugin for Hatch to automatically
1284 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1285by Pavel Raiskup.")
1286 (license license:gpl3+)))
1287
1288(define-public python-hatch-gettext
1289 (package
1290 (name "python-hatch-gettext")
1291 (version "1.1.0")
1292 (source
1293 (origin
1294 (method url-fetch)
1295 (uri (pypi-uri "hatch_gettext" version))
1296 (sha256
1297 (base32 "05sh574p1c4wdf9gky965km3f5n904hxkyils07f1b0jyswlm3nh"))))
1298 (build-system pyproject-build-system)
1299 (native-inputs (list python-hatchling))
1300 (propagated-inputs (list python-rich))
1301 (home-page "https://github.com/damonlynch/hatch-gettext")
1302 (synopsis "Hatch build hook plugin for GNU gettext")
1303 (description
1304 "This package provides a build hook plugin for Hatch that compiles
1305 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1306 (license license:gpl3+)))
1307
1308;; TODO: Move to ci or task-runners, see:
1309;; <https://codeberg.org/guix/guix/issues/3096>.
1310(define-public python-huey
1311 (package
1312 (name "python-huey")
1313 (version "2.5.3")
1314 (source
1315 (origin
1316 (method git-fetch)
1317 (uri (git-reference
1318 (url "https://github.com/coleifer/huey")
1319 (commit version)))
1320 (file-name (git-file-name name version))
1321 (sha256
1322 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
1323 (build-system pyproject-build-system)
1324 (arguments
1325 (list
1326 #:phases
1327 #~(modify-phases %standard-phases
1328 (add-after 'unpack 'remove-which
1329 (lambda _
1330 (substitute* "huey/tests/test_kt_huey.py"
1331 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
1332 "has_ktserver = False"))))
1333 (replace 'check
1334 (lambda* (#:key tests? #:allow-other-keys)
1335 (when tests?
1336 (spawn "redis-server" '("redis-server"))
1337 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
1338 (native-inputs (list python-setuptools redis tzdata-for-tests))
1339 (propagated-inputs (list python-redis))
1340 (home-page "https://huey.readthedocs.io")
1341 (synopsis "Lightweight task queue for Python")
1342 (description
1343 "Huey is a lightweight task queue for Python applications. Huey
1344supports:
1345@itemize
1346@item Redis, SQLite, file-system, or in-memory storage
1347@item multi-process, multi-thread or greenlet task execution models
1348@item scheduling tasks to execute at a given time, or after a given delay
1349@item scheduling recurring tasks, like a crontab
1350@item automatically retrying tasks that fail
1351@item task prioritization
1352@item task result storage
1353@item task expiration
1354@item task locking
1355@item task pipelines and chains
1356@end itemize")
1357 (license license:expat)))
1358
1359(define-public python-id
1360 (package
1361 (name "python-id")
1362 (version "1.5.0")
1363 (source
1364 (origin
1365 (method url-fetch)
1366 (uri (pypi-uri "id" version))
1367 (sha256
1368 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
1369 (build-system pyproject-build-system)
1370 (native-inputs
1371 (list python-flit-core
1372 python-pretend
1373 python-pytest))
1374 (propagated-inputs
1375 (list python-requests))
1376 (home-page "https://github.com/di/id")
1377 (synopsis "Tool for generating OIDC identities")
1378 (description
1379 "This package provides a tool for generating @code{OIDC, OpenID Connect}
1380identities.")
1381 (license license:asl2.0)))
1382
1383(define-public python-iniparse
1384 (package
1385 (name "python-iniparse")
1386 (version "0.5.1")
1387 (source
1388 (origin
1389 (method git-fetch)
1390 (uri (git-reference
1391 (url "https://github.com/candlepin/python-iniparse")
1392 (commit version)))
1393 (file-name (git-file-name name version))
1394 (sha256
1395 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
1396 (build-system pyproject-build-system)
1397 (arguments
1398 (list
1399 #:test-backend #~'custom
1400 #:test-flags #~(list "runtests.py")
1401 #:phases
1402 #~(modify-phases %standard-phases
1403 (add-before 'check 'disable-tests
1404 (lambda _
1405 ;; XXX: Three tests failed to compare lists.
1406 (substitute* "tests/test_compat.py"
1407 (("test_read_returns_file_list")
1408 "disabled_test_read_returns_file_list")))))))
1409 (native-inputs
1410 (list python-setuptools))
1411 (home-page "https://github.com/candlepin/python-iniparse")
1412 (synopsis "Accessing and Modifying INI files")
1413 (description
1414 "iniparse is a INI parser for Python which is:
1415@itemize
1416@item Compatible with ConfigParser: Backward compatible implementations of
1417ConfigParser, RawConfigParser, and SafeConfigParser are included that are
1418API-compatible with the Python standard library.
1419@item Preserves structure of INI files: Order of sections & options,
1420indentation, comments, and blank lines are preserved as far as possible when
1421data is updated.
1422@item More convenient: Values can be accessed using dotted notation
1423(@code{cfg.user.name}), or using container syntax
1424(@code{cfg['user']['name']}).
1425@end itemize")
1426 (license license:expat)))
1427
1428(define-public python-inotify
1429 (package
1430 (name "python-inotify")
1431 (version "0.2.12")
1432 (source
1433 (origin
1434 (method git-fetch)
1435 (uri (git-reference
1436 (url "https://github.com/dsoprea/PyInotify")
1437 (commit version)))
1438 (file-name (git-file-name name version))
1439 (sha256
1440 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
1441 (build-system pyproject-build-system)
1442 (arguments
1443 (list
1444 #:phases
1445 #~(modify-phases %standard-phases
1446 (add-after 'unpack 'fix-requirements
1447 (lambda _
1448 (substitute* "inotify/resources/requirements.txt"
1449 (("build")
1450 "")))))))
1451 (native-inputs (list python-pytest python-setuptools))
1452 (home-page "https://github.com/dsoprea/PyInotify")
1453 (synopsis "Linux filesystem activity monitor library for Python")
1454 (description
1455 "This package provides an efficient and elegant inotify (Linux filesystem
1456activity monitor) library for Python.")
1457 (license license:gpl2)))
1458
1459(define-public python-intervaltree
1460 (package
1461 (name "python-intervaltree")
1462 (version "3.1.0")
1463 (source
1464 (origin
1465 (method url-fetch)
1466 (uri (pypi-uri "intervaltree" version))
1467 (sha256
1468 (base32
1469 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
1470 (build-system pyproject-build-system)
1471 (arguments
1472 `(#:phases
1473 (modify-phases %standard-phases
1474 ;; pytest seems to have a check to make sure the user is testing
1475 ;; their checked-out code and not an installed, potentially
1476 ;; out-of-date copy. This is harmless here, since we just installed
1477 ;; the package, so we disable the check to avoid skipping tests
1478 ;; entirely.
1479 (add-before 'check 'import-mismatch-error-workaround
1480 (lambda _
1481 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
1482 #t)))))
1483 (propagated-inputs
1484 (list python-sortedcontainers))
1485 (native-inputs
1486 (list python-setuptools python-pytest))
1487 (home-page "https://github.com/chaimleib/intervaltree")
1488 (synopsis "Editable interval tree data structure")
1489 (description
1490 "This package provides a mutable, self-balancing interval tree
1491implementation for Python. Queries may be by point, by range overlap, or by
1492range envelopment. This library was designed to allow tagging text and time
1493intervals, where the intervals include the lower bound but not the upper
1494bound.")
1495 (license license:asl2.0)))
1496
1497(define-public python-jschon
1498 (package
1499 (name "python-jschon")
1500 (version "0.11.1")
1501 (source
1502 (origin
1503 (method git-fetch)
1504 (uri (git-reference
1505 (url "https://github.com/marksparkza/jschon/")
1506 (commit (string-append "v" version))
1507 (recursive? #t))) ;required for tests
1508 (sha256
1509 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
1510 (file-name (git-file-name name version))))
1511 (build-system pyproject-build-system)
1512 (propagated-inputs
1513 (list python-rfc3986))
1514 (native-inputs
1515 (list python-coverage
1516 python-hypothesis
1517 python-pytest
1518 python-pytest-benchmark
1519 python-pytest-httpserver
1520 python-requests
1521 python-setuptools))
1522 (home-page "https://jschon.readthedocs.io/")
1523 (synopsis "Object-oriented JSON Schema implementation for Python")
1524 (description
1525 "This package provides a JSON toolkit for Python developers.")
1526 (license license:expat)))
1527
1528(define-public python-jsonpath-ng
1529 (package
1530 (name "python-jsonpath-ng")
1531 (version "1.7.0" )
1532 (source
1533 (origin
1534 (method url-fetch)
1535 (uri (pypi-uri "jsonpath-ng" version))
1536 (sha256
1537 (base32 "0g5bpq02pl9mv7mbqixvnagq8f9v0jab6wqmbxw9rxsz9vyzgxgn"))))
1538 (build-system pyproject-build-system)
1539 (native-inputs
1540 (list python-pytest
1541 python-setuptools
1542 python-wheel))
1543 (propagated-inputs
1544 (list python-ply))
1545 (home-page "https://github.com/h2non/jsonpath-ng")
1546 (synopsis "JSONPath Next-Generation")
1547 (description
1548 "This package provides a final implementation of @code{JSONPath} for
1549Python that aims to be standard compliant, including arithmetic and binary
1550comparison operators, as defined in the original
1551@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
1552 (license license:asl2.0)))
1553
1554(define-public python-json-log-formatter
1555 (package
1556 (name "python-json-log-formatter")
1557 (version "1.1.1")
1558 (source
1559 (origin
1560 (method git-fetch)
1561 (uri (git-reference
1562 (url "https://github.com/marselester/json-log-formatter")
1563 (commit (string-append "v" version))))
1564 (file-name (git-file-name name version))
1565 (sha256
1566 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
1567 (build-system pyproject-build-system)
1568 (arguments
1569 (list
1570 #:phases
1571 #~(modify-phases %standard-phases
1572 (replace 'check
1573 (lambda* (#:key tests? #:allow-other-keys)
1574 (when tests?
1575 (invoke "pytest" "-s" "tests.py")))))))
1576 (native-inputs (list python-django
1577 python-pytest
1578 python-setuptools
1579 python-simplejson
1580 python-ujson
1581 python-wheel))
1582 (home-page "https://github.com/marselester/json-log-formatter")
1583 (synopsis "JSON log formatter")
1584 (description "The library helps you to store logs in JSON format.")
1585 (license license:expat)))
1586
1587(define-public python-keeper-secrets-manager-core
1588 ;; released from a monorepo with other packages following various versioning
1589 ;; schemes. This commit was selected because some failing tests were fixed
1590 ;; since the most recent release of the Python SDK packages.
1591 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1592 (revision "0"))
1593 (package
1594 (name "python-keeper-secrets-manager-core")
1595 (version (git-version "17.0.0" revision commit))
1596 (source
1597 (origin
1598 (method git-fetch)
1599 (uri (git-reference
1600 (url "https://github.com/Keeper-Security/secrets-manager")
1601 (commit commit)))
1602 (file-name (git-file-name name version))
1603 (sha256
1604 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1605 (build-system pyproject-build-system)
1606 (arguments
1607 (list
1608 #:phases
1609 #~(modify-phases %standard-phases
1610 (add-after 'unpack 'chdir
1611 (lambda _
1612 (chdir "sdk/python/core"))))))
1613 (propagated-inputs
1614 (list python-cryptography
1615 python-importlib-metadata
1616 python-requests))
1617 (native-inputs
1618 (list python-pytest
1619 python-setuptools))
1620 (home-page "https://github.com/Keeper-Security/secrets-manager")
1621 (synopsis "Keeper Secrets Manager for Python SDK")
1622 (description
1623 "The Keeper Secrets Manager Python SDK provides access to
1624@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
1625Management} services.")
1626 (license license:expat))))
1627
1628(define-public python-keeper-secrets-manager-helper
1629 ;; released alongside keeper-secrets-manager-core, but with a different
1630 ;; versioning scheme.
1631 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1632 (revision "0"))
1633 (package
1634 (name "python-keeper-secrets-manager-helper")
1635 (version (git-version "1.0.6" revision commit))
1636 (source
1637 (origin
1638 (method git-fetch)
1639 (uri (git-reference
1640 (url "https://github.com/Keeper-Security/secrets-manager")
1641 (commit commit)))
1642 (file-name (git-file-name name version))
1643 (sha256
1644 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1645 (build-system pyproject-build-system)
1646 (arguments
1647 (list
1648 #:phases
1649 #~(modify-phases %standard-phases
1650 (add-after 'unpack 'chdir
1651 (lambda _
1652 (chdir "sdk/python/helper"))))))
1653 (propagated-inputs
1654 (list python-iso8601
1655 python-keeper-secrets-manager-core
1656 python-pyyaml))
1657 (native-inputs
1658 (list python-pytest
1659 python-setuptools))
1660 (home-page "https://github.com/Keeper-Security/secrets-manager")
1661 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
1662 (description
1663 "Keeper Secrets Manager SDK helper is for creating and managing secret
1664records. It is intended to be used with @code{keeper-secrets-manager-core}.")
1665 (license license:expat))))
1666
1667(define-public python-language-data
1668 (package
1669 (name "python-language-data")
1670 (version "1.3.0")
1671 (source
1672 (origin
1673 (method url-fetch)
1674 (uri (pypi-uri "language_data" version))
1675 (sha256
1676 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
1677 (build-system pyproject-build-system)
1678 (native-inputs
1679 (list python-pytest
1680 python-setuptools
1681 python-setuptools-scm))
1682 (propagated-inputs
1683 (list python-marisa-trie))
1684 (home-page "https://github.com/georgkrause/language_data")
1685 (synopsis "Supplementary data about languages used by the langcodes module")
1686 (description
1687 "language_data is a supplement to the langcodes module, for working with
1688standardized codes for human languages. It stores the more bulky and
1689hard-to-index data about languages, particularly what they are named in
1690various languages.")
1691 (license license:expat)))
1692
1693(define-public python-log-symbols
1694 (package
1695 (name "python-log-symbols")
1696 (version "0.0.14")
1697 (source
1698 (origin
1699 (method url-fetch)
1700 (uri (pypi-uri "log_symbols" version))
1701 (sha256
1702 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
1703 (build-system pyproject-build-system)
1704 (arguments
1705 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
1706 (native-inputs
1707 (list python-setuptools))
1708 (propagated-inputs
1709 (list python-colorama))
1710 (home-page "https://github.com/manrajgrover/py-log-symbols")
1711 (synopsis "Python library with graphical symbols for logging on the terminal")
1712 (description
1713 "This package provides a Python library with graphical symbols that can
1714be displayed on the terminal, with color if possible, for logging purposes.")
1715 (license license:expat)))
1716
1717(define-public python-lsprotocol
1718 (package
1719 (name "python-lsprotocol")
1720 (version "2025.0.0")
1721 (source
1722 (origin
1723 (method git-fetch)
1724 (uri (git-reference
1725 (url "https://github.com/microsoft/lsprotocol")
1726 (commit version)))
1727 (file-name (git-file-name name version))
1728 (sha256
1729 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
1730 (build-system pyproject-build-system)
1731 (arguments
1732 (list
1733 #:tests? #f ;no tests for Python package
1734 #:phases
1735 #~(modify-phases %standard-phases
1736 (add-after 'unpack 'cd-packages-python
1737 (lambda _
1738 (chdir "packages/python"))))))
1739 (native-inputs
1740 (list python-flit-core))
1741 (propagated-inputs
1742 (list python-attrs
1743 python-cattrs))
1744 (home-page "https://github.com/microsoft/lsprotocol")
1745 (synopsis "Python types for Language Server Protocol.")
1746 (description
1747 "@code{lsprotocol} is a Python implementation of object types used in
1748the Language Server Protocol (LSP). This repository contains the code
1749generator and the generated types for LSP.")
1750 (license license:expat)))
1751
1752(define-public python-marisa-trie
1753 (package
1754 (name "python-marisa-trie")
1755 (version "1.3.1")
1756 (source
1757 (origin
1758 (method url-fetch)
1759 (uri (pypi-uri "marisa_trie" version))
1760 (sha256
1761 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
1762 (build-system pyproject-build-system)
1763 (native-inputs
1764 (list python-cython
1765 python-hypothesis
1766 python-pytest
1767 python-readme-renderer
1768 python-setuptools))
1769 (home-page "https://github.com/pytries/marisa-trie")
1770 (synopsis "Static memory-efficient Trie-like structures for Python")
1771 (description
1772 "This package provides static memory-efficient and fast Trie-like structures
1773for Python.")
1774 (license license:expat)))
1775
1776(define-public python-menuinst
1777 (package
1778 (name "python-menuinst")
1779 (version "2.4.1")
1780 (source
1781 (origin
1782 (method git-fetch)
1783 (uri (git-reference
1784 (url "https://github.com/conda/menuinst")
1785 (commit version)))
1786 (file-name (git-file-name name version))
1787 (sha256
1788 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
1789 (build-system pyproject-build-system)
1790 (arguments
1791 (list
1792 #:tests? #f)) ;tests need conda
1793 (native-inputs
1794 (list python-setuptools
1795 python-setuptools-scm))
1796 (home-page "https://conda.github.io/menuinst/")
1797 (synopsis "Cross platform menu item installation")
1798 (description
1799 "This package provides cross platform menu item installation for conda
1800packages.")
1801 (license license:bsd-3)))
1802
1803(define-public python-multiplex
1804 (package
1805 (name "python-multiplex")
1806 (version "0.6.1")
1807 (source
1808 (origin
1809 (method git-fetch) ;no tests in PyPI archive
1810 (uri (git-reference
1811 (url "https://github.com/dankilman/multiplex")
1812 (commit version)))
1813 (file-name (git-file-name name version))
1814 (sha256
1815 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
1816 (build-system pyproject-build-system)
1817 (native-inputs
1818 (list python-poetry-core
1819 python-pytest
1820 python-pytest-asyncio))
1821 (propagated-inputs
1822 (list python-aiofiles
1823 python-aiostream
1824 python-click
1825 python-easy-ansi-0.3
1826 python-pyte))
1827 (home-page "https://github.com/dankilman/multiplex")
1828 (synopsis "Parallel stream of outputs from multiple processes")
1829 (description
1830 "This package provides a functionality to view output of multiple
1831processes, in parallel, in the console, with an interactive TUI.")
1832 (license license:expat)))
1833
1834(define-public python-num2words
1835 (package
1836 (name "python-num2words")
1837 (version "0.5.14")
1838 (source
1839 (origin
1840 (method git-fetch)
1841 (uri (git-reference
1842 (url "https://github.com/savoirfairelinux/num2words")
1843 (commit (string-append "v" version))))
1844 (file-name (git-file-name name version))
1845 (sha256
1846 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
1847 (build-system pyproject-build-system)
1848 (arguments
1849 (list
1850 #:test-flags
1851 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
1852 (native-inputs (list python-pytest python-setuptools))
1853 (propagated-inputs (list python-docopt))
1854 (home-page "https://github.com/savoirfairelinux/num2words")
1855 (synopsis "Convert numbers to words in multiple languages")
1856 (description
1857 "@code{num2words} is a library that converts numbers like 42 to words like
1858forty-two. It supports multiple languages, and can even generate ordinal
1859numbers like forty-second.")
1860 (license license:lgpl2.1)))
1861
1862(define-public python-orderly-set
1863 (package
1864 (name "python-orderly-set")
1865 (version "5.5.0")
1866 (source
1867 (origin
1868 (method url-fetch)
1869 (uri (pypi-uri "orderly_set" version))
1870 (sha256
1871 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
1872 (build-system pyproject-build-system)
1873 (native-inputs (list python-flit-core python-pytest))
1874 (home-page "https://github.com/seperman/orderly-set")
1875 (synopsis "Multiple implementations of Ordered Set")
1876 (description "Orderly Set is a package containing multiple implementations
1877of Ordered Set.")
1878 (license license:expat)))
1879
1880(define-public python-pandocfilters
1881 (package
1882 (name "python-pandocfilters")
1883 (version "1.5.1")
1884 (source
1885 (origin
1886 (method url-fetch)
1887 (uri (pypi-uri "pandocfilters" version))
1888 (sha256
1889 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
1890 (build-system pyproject-build-system)
1891 (arguments
1892 (list #:tests? #f)) ;require pandoc to run tests
1893 (native-inputs
1894 (list python-setuptools))
1895 (home-page "https://github.com/jgm/pandocfilters")
1896 (synopsis "Python module for writing Pandoc filters")
1897 (description "Pandoc is a powerful utility to transform various
1898input formats into a wide range of output formats. To alter the
1899exported output document, Pandoc allows the usage of filters, which
1900are pipes that read a JSON serialization of the Pandoc AST from stdin,
1901transform it in some way, and write it to stdout. It allows therefore
1902to alter the processing of Pandoc's supported input formats, for
1903instance one can add new syntax elements to markdown, etc.
1904
1905This package provides Python bindings.")
1906 (license license:bsd-3)))
1907
1908(define-public python-panflute
1909 (package
1910 (name "python-panflute")
1911 (version "2.3.1")
1912 (source
1913 (origin
1914 (method url-fetch)
1915 (uri (pypi-uri "panflute" version))
1916 (sha256
1917 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
1918 (build-system pyproject-build-system)
1919 (arguments
1920 (list #:tests? #f)) ;require pandoc to run tests
1921 (native-inputs
1922 (list python-setuptools))
1923 (propagated-inputs
1924 (list python-click
1925 python-pyyaml))
1926 (home-page "http://scorreia.com/software/panflute/")
1927 (synopsis "Pythonic Pandoc filters")
1928 (description
1929 "Panflute is a Python package that makes Pandoc filters fun to write.
1930It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
1931is heavily inspired.")
1932 (license license:bsd-3)))
1933
1934(define-public python-pastel
1935 (package
1936 (name "python-pastel")
1937 (version "0.2.1")
1938 (source
1939 (origin
1940 (method git-fetch)
1941 (uri (git-reference
1942 (url "https://github.com/sdispater/pastel")
1943 (commit version)))
1944 (file-name (git-file-name name version))
1945 (sha256
1946 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
1947 (build-system pyproject-build-system)
1948 (arguments
1949 (list
1950 #:test-flags
1951 #~(list "pastel" "tests/")
1952 #:phases
1953 #~(modify-phases %standard-phases
1954 (add-after 'unpack 'use-poetry-core
1955 (lambda _
1956 ;; Patch to use the core poetry API.
1957 (substitute* "pyproject.toml"
1958 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
1959 (native-inputs (list python-poetry-core python-pytest))
1960 (home-page "https://github.com/sdispater/pastel")
1961 (synopsis "Library to colorize strings in your terminal")
1962 (description
1963 "Pastel is a simple library to help you colorize strings in your
1964terminal.")
1965 (license license:expat)))
1966
1967(define-public python-pathlib-abc
1968 (package
1969 (name "python-pathlib-abc")
1970 (version "0.5.0")
1971 (source
1972 (origin
1973 (method url-fetch)
1974 (uri (pypi-uri "pathlib_abc" version))
1975 (sha256
1976 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
1977 (build-system pyproject-build-system)
1978 (native-inputs (list python-pytest python-hatchling))
1979 (home-page "https://github.com/barneygale/pathlib-abc")
1980 (synopsis "Python base classes for rich path objects")
1981 (description
1982 "This package is a preview of pathlib functionality planned for a future
1983release of Python; specifically, it provides three ABCs that can be used to
1984implement path classes for non-local filesystems")
1985 (license license:psfl)))
1986
1987;; XXX: It's for [email protected], remove when no longer required.
1988(define-public python-pathlib-abc-for-python-pathy
1989 (hidden-package
1990 (package
1991 (inherit python-pathlib-abc)
1992 (version "0.1.1")
1993 (source
1994 (origin
1995 (method url-fetch)
1996 (uri (pypi-uri "pathlib_abc" version))
1997 (sha256
1998 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
1999
2000(define-public python-pbs-installer
2001 (package
2002 (name "python-pbs-installer")
2003 (version "2025.09.18")
2004 (source
2005 (origin
2006 (method git-fetch)
2007 (uri (git-reference
2008 (url "https://github.com/frostming/pbs-installer")
2009 (commit version)))
2010 (file-name (git-file-name name version))
2011 (sha256
2012 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2013 (build-system pyproject-build-system)
2014 (arguments
2015 (list
2016 #:tests? #f ;no tests provided
2017 #:phases
2018 #~(modify-phases %standard-phases
2019 (add-before 'build 'set-version
2020 (lambda _
2021 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2022 (native-inputs
2023 (list python-pdm-backend
2024 python-pytest))
2025 (propagated-inputs
2026 (list python-httpx
2027 python-zstandard))
2028 (home-page "https://github.com/frostming/pbs-installer")
2029 (synopsis "Installer for Python Build Standalone")
2030 (description
2031 "This package implements an installer for
2032@url{https://github.com/astral-sh/python-build-standalone, Python Build
2033Standalone}.")
2034 (license license:expat)))
2035
2036(define-public python-phply
2037 (package
2038 (name "python-phply")
2039 (version "1.2.6")
2040 (source
2041 (origin
2042 (method url-fetch)
2043 (uri (pypi-uri "phply" version))
2044 (sha256
2045 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2046 (build-system pyproject-build-system)
2047 (native-inputs
2048 (list python-pytest
2049 python-setuptools))
2050 (propagated-inputs
2051 (list python-ply))
2052 (home-page "https://github.com/viraptor/phply")
2053 (synopsis "PHP parser written in Python using PLY")
2054 (description
2055 "@code{phply} is a parser for the PHP programming language written using
2056PLY,a Lex/YACC-style parser generator toolkit for Python.")
2057 (license license:bsd-3)))
2058
2059(define-public python-puccinialin
2060 (package
2061 (name "python-puccinialin")
2062 (version "0.1.5")
2063 (source
2064 (origin
2065 (method url-fetch)
2066 (uri (pypi-uri "puccinialin" version))
2067 (sha256
2068 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2069 (build-system pyproject-build-system)
2070 (arguments
2071 (list #:tests? #f)) ;no tests in PyPI or Git
2072 (native-inputs
2073 (list python-hatchling))
2074 (propagated-inputs
2075 (list python-httpx
2076 python-platformdirs
2077 python-tqdm))
2078 (home-page "https://github.com/konstin/puccinialin")
2079 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2080 (description
2081 "This tool helps to install Rust into a temporary directory, allowing
2082support of Rust-based Python builds. Cargo and rustc are installed into a
2083cache directory, to avoid modifying the host's environment, and further
2084activated using a set of environment variables.")
2085 (license (list license:expat license:asl2.0))))
2086
2087(define-public python-pygls
2088 (package
2089 (name "python-pygls")
2090 (version "2.0.0")
2091 (source
2092 (origin
2093 (method git-fetch)
2094 (uri (git-reference
2095 (url "https://github.com/openlawlibrary/pygls")
2096 (commit (string-append "v" version))))
2097 (file-name (git-file-name name version))
2098 (sha256
2099 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
2100 (build-system pyproject-build-system)
2101 ;; tests: 265 passed, 8 skipped
2102 (native-inputs
2103 (list python-pytest
2104 python-pytest-asyncio
2105 python-poetry-core))
2106 (propagated-inputs
2107 (list python-attrs
2108 python-cattrs
2109 python-lsprotocol))
2110 (home-page "https://github.com/openlawlibrary/pygls")
2111 (synopsis "Pythonic generic language server")
2112 (description
2113 "This package provides a pythonic generic language server (pronounced
2114like pie glass').")
2115 (license license:asl2.0)))
2116
2117(define-public python-pypydispatcher
2118 (package
2119 (name "python-pypydispatcher")
2120 (version "2.1.2")
2121 (source
2122 (origin
2123 (method url-fetch)
2124 (uri (pypi-uri "PyPyDispatcher" version))
2125 (sha256
2126 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
2127 (build-system pyproject-build-system)
2128 (native-inputs
2129 (list python-pytest
2130 python-setuptools
2131 python-setuptools-scm))
2132 (home-page "https://github.com/scrapy/pypydispatcher")
2133 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
2134 (description
2135 "This package implements a functionality of pulti-producer-multi-consumer
2136signal dispatching mechanism. It's a fork of
2137http://pydispatcher.sourceforge.net/ with PyPy support.")
2138 (license license:bsd-3)))
2139
2140(define-public python-pyread-eagle
2141 (package
2142 (name "python-pyread-eagle")
2143 (version "1.0.3")
2144 (source
2145 (origin
2146 (method git-fetch)
2147 (uri (git-reference
2148 (url "https://github.com/kyleaoman/pyread_eagle")
2149 (commit version)))
2150 (file-name (git-file-name name version))
2151 (sha256
2152 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
2153 (build-system pyproject-build-system)
2154 (arguments
2155 ;; TODO: Tests need additional test data, see tests/test_regions.py.
2156 (list #:tests? #f))
2157 (native-inputs
2158 (list python-setuptools))
2159 (propagated-inputs
2160 (list python-h5py
2161 python-numpy))
2162 (home-page "https://github.com/kyleaoman/pyread_eagle")
2163 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
2164 (description
2165 "This package provides a pure-python port of
2166@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
2167 (license license:gpl3)))
2168
2169(define-public python-pyte
2170 (package
2171 (name "python-pyte")
2172 (version "0.8.2")
2173 (source
2174 (origin
2175 (method git-fetch)
2176 (uri (git-reference
2177 (url "https://github.com/selectel/pyte")
2178 (commit version)))
2179 (file-name (git-file-name name version))
2180 (sha256
2181 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
2182 (build-system pyproject-build-system)
2183 (propagated-inputs (list python-wcwidth))
2184 (native-inputs (list python-pytest python-setuptools python-wheel))
2185 (home-page "https://pyte.readthedocs.io/")
2186 (synopsis "Simple VTXXX-compatible terminal emulator")
2187 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
2188emulator. @var{VTxxx} stands for a series of video terminals, developed by
2189DEC between 1970 and 1995. The first and probably most famous one was the
2190VT100 terminal, which is now a de-facto standard for all virtual terminal
2191emulators.
2192
2193pyte is a fork of vt102, which was an incomplete pure Python implementation
2194of VT100 terminal.")
2195 (license license:lgpl3+)))
2196
2197(define-public python-pyxdameraulevenshtein
2198 (package
2199 (name "python-pyxdameraulevenshtein")
2200 (version "1.8.0")
2201 (source
2202 (origin
2203 (method git-fetch)
2204 (uri (git-reference
2205 (url "https://github.com/lanl/pyxDamerauLevenshtein")
2206 (commit (string-append "v" version))))
2207 (file-name (git-file-name name version))
2208 (sha256
2209 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
2210 (build-system pyproject-build-system)
2211 (native-inputs (list python-cython python-pytest python-setuptools))
2212 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
2213 (synopsis "Damerau-Levenshtein edit distance algorithm")
2214 (description
2215 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
2216edit distance algorithm for Python in Cython for high performance.")
2217 (license license:bsd-3)))
2218
2219(define-public python-represent
2220 (package
2221 (name "python-represent")
2222 (version "2.1")
2223 (source
2224 (origin
2225 (method url-fetch)
2226 (uri (pypi-uri "Represent" version))
2227 (sha256
2228 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
2229 (build-system pyproject-build-system)
2230 (native-inputs
2231 ;; XXX This might be too much for testing, maybe switch them off as it's
2232 ;; a simple middleware library.
2233 (list python-ipython
2234 python-pytest
2235 python-rich
2236 python-setuptools))
2237 (home-page "https://github.com/RazerM/represent")
2238 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
2239 (description
2240 "This package implements a functionality to generate Python
2241@code{__repr__} methods automatically or declaratively.")
2242 (license license:expat)))
2243
2244(define-public python-rich-argparse
2245 (package
2246 (name "python-rich-argparse")
2247 (version "1.7.1")
2248 (source
2249 (origin
2250 (method git-fetch)
2251 (uri (git-reference
2252 (url "https://github.com/hamdanal/rich-argparse")
2253 (commit (string-append "v" version))))
2254 (file-name (git-file-name name version))
2255 (sha256
2256 (base32
2257 "0wydhy1167yv7lm07iy3aysyhxyixc24ma1wdna36c06d24wbdc0"))))
2258 (build-system pyproject-build-system)
2259 (native-inputs
2260 (list python-pytest
2261 python-hatchling))
2262 (propagated-inputs
2263 (list python-rich))
2264 (home-page "https://github.com/hamdanal/rich-argparse")
2265 (synopsis "Format argparse and optparse help using rich")
2266 (description
2267 "This package improves the look and readability of argparse's help while
2268requiring minimal changes to the code.")
2269 (license license:expat)))
2270
2271(define-public python-roman-numerals
2272 (package
2273 (name "python-roman-numerals")
2274 (version "3.1.0")
2275 (source
2276 (origin
2277 (method url-fetch)
2278 (uri (pypi-uri "roman_numerals" version))
2279 (sha256
2280 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
2281 (build-system pyproject-build-system)
2282 (native-inputs (list python-flit-core python-pytest))
2283 (home-page "https://pypi.org/project/roman-numbers/")
2284 (synopsis "Python library to manipulate Roman numerals")
2285 (description "This package provides a Python library to manipulate
2286well-formed Roman numerals.")
2287 (license license:expat)))
2288
2289(define-public python-rush
2290 (package
2291 (name "python-rush")
2292 (version "2021.04.0")
2293 (source
2294 (origin
2295 (method git-fetch)
2296 (uri (git-reference
2297 (url "https://github.com/sigmavirus24/rush")
2298 (commit version)))
2299 (file-name (git-file-name name version))
2300 (sha256
2301 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
2302 (build-system pyproject-build-system)
2303 (arguments
2304 (list
2305 #:test-flags
2306 ;; E ValueError: Redis URL must specify one of the following schemes
2307 ;; (redis://, rediss://, unix://)
2308 #~(list "-k" (string-append "not test_valid_url[redis://]"
2309 " and not test_valid_url[rediss://]"))))
2310 (native-inputs
2311 (list python-mock
2312 python-redis
2313 python-rfc3986
2314 python-pytest
2315 python-setuptools))
2316 (propagated-inputs
2317 (list python-attrs))
2318 (home-page "https://github.com/sigmavirus24/rush")
2319 (synopsis "Throttling and rate-limiting algorithms for Python")
2320 (description
2321 "This package provides is a small collection of algorithms that can be
2322reused when throttling user interactions with a resource (e.g., an API).")
2323 (license license:expat)))
2324
2325(define-public python-safety-schemas
2326 (package
2327 (name "python-safety-schemas")
2328 (version "0.0.14")
2329 (source
2330 (origin
2331 (method url-fetch)
2332 (uri (pypi-uri "safety_schemas" version))
2333 (sha256
2334 (base32 "0smgszbd3nb7jh61cgpycqhcvfwwdyaai5amw8mmf6g9b5x3z5a9"))))
2335 (build-system pyproject-build-system)
2336 (arguments
2337 (list
2338 #:test-flags
2339 #~(list "-k" (string-join
2340 ;; These tests are failing for unknown reasons.
2341 ;; (AssertionError).
2342 (list "not test_model[ConfigModel-ConfigModel]"
2343 "test_model[MetadataModel-MetadataModel]"
2344 "test_model[PolicyFileModel-PolicyFileModel]"
2345 "test_model[ProjectModel-ProjectModel]"
2346 "test_model[ReportModel-ReportModel]")
2347 " and not "))))
2348 (propagated-inputs (list python-dparse
2349 python-packaging
2350 python-pydantic
2351 python-ruamel.yaml
2352 python-typing-extensions))
2353 (native-inputs (list python-deepdiff python-hatchling python-pytest))
2354 ;; Source code is not yet published outside of PyPI:
2355 ;; https://github.com/pyupio/safety/issues/494
2356 (home-page "https://pypi.org/project/safety-schemas/")
2357 (synopsis "Schemas for Safety tools")
2358 (description "This package contains models and schemas used by Safety.")
2359 (license license:expat)))
2360
2361(define-public python-senf
2362 (package
2363 (name "python-senf")
2364 (version "1.5.0")
2365 (source
2366 (origin
2367 (method url-fetch)
2368 (uri (pypi-uri "senf" version))
2369 (sha256
2370 (base32 "1lcccdb4hrfksbr8vy4nljial85six1w39l5xlw16m4qx884anch"))))
2371 (build-system pyproject-build-system)
2372 (arguments
2373 (list
2374 #:test-flags
2375 '(list "--deselect" "tests/test_api.py::test_getuserdir"
2376 "--deselect" "tests/test_api.py::test_expanduser_user")))
2377 (native-inputs (list python-setuptools python-wheel python-pytest))
2378 (home-page "https://github.com/quodlibet/senf")
2379 (synopsis "Text, bytes and paths conversion functions for Python")
2380 (description "Senf introduces a new platform native string type called
2381fsnative. It adds functions to convert text, bytes and paths to and from that
2382new type and helper functions to integrate it nicely with the Python
2383stdlib.")
2384 (license license:expat)))
2385
2386(define-public python-session-info2
2387 (package
2388 (name "python-session-info2")
2389 (version "0.2")
2390 (source
2391 (origin
2392 (method url-fetch)
2393 (uri (pypi-uri "session_info2" version))
2394 (sha256
2395 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
2396 (build-system pyproject-build-system)
2397 (arguments
2398 (list
2399 #:test-flags
2400 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
2401 ;; Tests require Jupyter Client.
2402 "--ignore=tests/test_subprocess.py")))
2403 (native-inputs
2404 (list python-hatch-docstring-description
2405 python-hatch-vcs
2406 python-hatchling
2407 python-pytest
2408 python-pytest-asyncio))
2409 (home-page "https://session-info2.readthedocs.io/")
2410 (synopsis "Print versions of imported packages")
2411 (description
2412 "This package implements a functionality to print versions of imported
2413Python packages.")
2414 (license license:mpl2.0)))
2415
2416(define-public python-show-in-file-manager
2417 (package
2418 (name "python-show-in-file-manager")
2419 (version "1.1.5")
2420 (source
2421 (origin
2422 (method url-fetch)
2423 (uri (pypi-uri "show-in-file-manager" version))
2424 (sha256
2425 (base32 "111d363i7m0lr295301q39j6h0l6nfybyn2cvn7xi3yll60a24zd"))))
2426 (build-system pyproject-build-system)
2427 (native-inputs
2428 (list python-argparse-manpage
2429 python-setuptools))
2430 (propagated-inputs
2431 (list python-packaging
2432 ;; python-pywin32
2433 python-pyxdg))
2434 (home-page "https://github.com/damonlynch/showinfilemanager")
2435 (synopsis "Open the system file manager and select files in it")
2436 (description
2437 "Show in File Manager is a Python package to open the system file manager
2438and optionally select files in it. The point is not to open the files, but to
2439select them in the file manager, thereby highlighting the files and allowing
2440the user to quickly do something with them.")
2441 (license license:expat)))
2442
2443(define-public python-shxparser
2444 (package
2445 (name "python-shxparser")
2446 (version "0.0.2")
2447 (source
2448 (origin
2449 (method url-fetch)
2450 (uri (pypi-uri "shxparser" version))
2451 (sha256
2452 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
2453 (build-system pyproject-build-system)
2454 (arguments (list #:test-backend #~'unittest))
2455 (native-inputs
2456 (list python-svgelements python-setuptools))
2457 (home-page "https://github.com/tatarize/shxparser")
2458 (synopsis "SHX line font parser")
2459 (description
2460 "This is a pure python parser for SHX Hershey font files that are an
2461AutoCad format which can encode single line fonts. This format is used for
2462many CNC and laser operations.")
2463 (license license:expat)))
2464
2465(define-public python-simplify-polyline
2466 (package
2467 (name "python-simplify-polyline")
2468 (version "0.1.0")
2469 (source
2470 (origin
2471 (method url-fetch)
2472 (uri (pypi-uri "simplify_polyline" version))
2473 (sha256
2474 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
2475 (build-system pyproject-build-system)
2476 (native-inputs
2477 (list python-pytest
2478 python-setuptools
2479 python-setuptools-scm
2480 python-wheel))
2481 (propagated-inputs
2482 (list python-numpy))
2483 (home-page "https://github.com/ShayHill/simplify_polyline")
2484 (synopsis "Simplify an open or closed polyline")
2485 (description
2486 "This package implements functionality to work with plyline.
2487Features:
2488@itemize
2489@item Visvalingham-Whyatt - removes the smallest triangles formed by
2490three consecutive points in a polyline or polygon
2491@item Douglas-Peucker - gives a better representation of the convex hull
2492@end itemize")
2493 (license license:expat)))
2494
2495(define-public python-siphash24
2496 (package
2497 (name "python-siphash24")
2498 (version "1.8")
2499 (source
2500 (origin
2501 (method git-fetch)
2502 (uri (git-reference
2503 (url "https://github.com/dnicolodi/python-siphash24/")
2504 (commit (string-append "v" version))))
2505 (file-name (git-file-name name version))
2506 (sha256
2507 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
2508 (build-system pyproject-build-system)
2509 (arguments
2510 (list
2511 #:test-backend #~'custom
2512 #:test-flags #~(list "test.py")
2513 #:phases
2514 #~(modify-phases %standard-phases
2515 (add-after 'unpack 'patch-pyproject
2516 (lambda _
2517 (substitute* "pyproject.toml"
2518 ;; meson-python: error: Field `project.license` has an invalid
2519 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
2520 ;; LGPL-2.1-or-later`)
2521 (("^license = .*")
2522 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
2523 (native-inputs
2524 (list pkg-config
2525 python-meson
2526 python-pytest))
2527 (inputs
2528 (list c-siphash))
2529 (home-page "https://github.com/dnicolodi/python-siphash24/")
2530 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
2531 (description
2532 "This package provides a C-based implementation of
2533@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
2534compatible with the hash functions provided by the hashlib standard library
2535module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
2536 ;; They are in LICENSES directory:
2537 (license (list license:asl2.0
2538 license:lgpl2.1+))))
2539
2540(define-public python-snakesay
2541 (package
2542 (name "python-snakesay")
2543 (version "0.10.4")
2544 (source
2545 (origin
2546 (method git-fetch)
2547 (uri (git-reference
2548 (url "https://github.com/pythonanywhere/snakesay")
2549 (commit (string-append "v" version))))
2550 (file-name (git-file-name name version))
2551 (sha256
2552 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
2553 (build-system pyproject-build-system)
2554 (arguments
2555 ;; XXX: We don't have python-uv-build yet.
2556 (list #:build-backend "setuptools.build_meta"))
2557 (native-inputs (list python-pytest python-setuptools))
2558 (home-page "https://github.com/pythonanywhere/snakesay")
2559 (synopsis "Like @command{cowsay} but with Python flavor")
2560 (description
2561 "This package provides a simple ASCII art pictures generator of a
2562Snake with a message.")
2563 (license license:expat)))
2564
2565(define-public python-jaconv
2566 (package
2567 (name "python-jaconv")
2568 ;; Last release is not tagged.
2569 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
2570 (revision . "0")))
2571 (version (git-version "0.4.0"
2572 (assoc-ref properties 'revision)
2573 (assoc-ref properties 'commit)))
2574 (source
2575 (origin
2576 (method git-fetch)
2577 (uri (git-reference
2578 (url "https://github.com/ikegami-yukino/jaconv")
2579 (commit (assoc-ref properties 'commit))))
2580 (file-name (git-file-name name version))
2581 (sha256
2582 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
2583 (build-system pyproject-build-system)
2584 (native-inputs (list python-setuptools python-pynose))
2585 (home-page "https://github.com/ikegami-yukino/jaconv")
2586 (synopsis
2587 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
2588Hankaku, Zenkaku")
2589 (description
2590 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
2591Hankaku (half-width character) and Zenkaku (full-width character)")
2592 (license license:expat)))
2593
2594(define-public python-janus
2595 (package
2596 (name "python-janus")
2597 (version "1.0.0")
2598 (source
2599 (origin
2600 (method url-fetch)
2601 (uri (pypi-uri "janus" version))
2602 (sha256
2603 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
2604 (build-system pyproject-build-system)
2605 (native-inputs
2606 (list python-pytest python-pytest-cov python-pytest-asyncio
2607 python-setuptools python-wheel))
2608 (propagated-inputs (list python-typing-extensions))
2609 (home-page "https://github.com/aio-libs/janus/")
2610 (synopsis
2611 "Sync-async queue to interoperate between asyncio tasks and classic threads")
2612 (description
2613 "Mixed sync-async queue, supposed to be used for communicating between
2614classic synchronous (threaded) code and asynchronous (in terms of
2615@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
2616@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
2617library has two faces: synchronous and asynchronous interface. Synchronous is
2618fully compatible with
2619@url{https://docs.python.org/3/library/queue.html,standard queue},
2620asynchronous one follows
2621@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
2622design}.")
2623 (license license:asl2.0)))
2624
2625(define-public python-concurrent-log-handler
2626 (package
2627 (name "python-concurrent-log-handler")
2628 (version "0.9.25")
2629 ;; No tests in the PyPI tarball.
2630 (source
2631 (origin
2632 (method git-fetch)
2633 (uri (git-reference
2634 (url "https://github.com/Preston-Landers/concurrent-log-handler")
2635 (commit version)))
2636 (file-name (git-file-name name version))
2637 (sha256
2638 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
2639 (build-system pyproject-build-system)
2640 (arguments
2641 (list
2642 ;; XXX: Tests are broken, no new version fixing them yet.
2643 #:tests? #f))
2644 (native-inputs
2645 (list python-hatchling))
2646 (propagated-inputs
2647 (list python-portalocker))
2648 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
2649 (synopsis
2650 "Additional log handler for Python's standard @code{logging} package")
2651 (description
2652 "This package provides an additional log handler for Python's standard
2653@code{logging} package (PEP 282). This handler will write log events to a log
2654file which is rotated when the log file reaches a certain size. Multiple
2655processes can safely write to the same log file concurrently and rotated logs
2656can be gzipped if desired. An optional threaded queue logging handler is
2657provided to perform logging in the background.")
2658 (license license:asl2.0)))
2659
2660(define-public python-lazy
2661 (package
2662 (name "python-lazy")
2663 (version "1.6")
2664 (source
2665 (origin
2666 (method url-fetch)
2667 (uri (pypi-uri "lazy" version))
2668 (sha256
2669 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
2670 (build-system pyproject-build-system)
2671 (native-inputs (list python-pytest python-setuptools python-wheel))
2672 (home-page "https://github.com/stefanholek/lazy")
2673 (synopsis "Lazy attributes for Python objects")
2674 (description "This package provides a decorator to create lazy
2675attributes.")
2676 (license license:bsd-2)))
2677
2678(define-public python-logfury
2679 (package
2680 (name "python-logfury")
2681 (version "1.0.1")
2682 (source
2683 (origin
2684 (method url-fetch)
2685 (uri (pypi-uri "logfury" version))
2686 (sha256
2687 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
2688 (build-system pyproject-build-system)
2689 (native-inputs
2690 (list python-pytest
2691 python-setuptools
2692 python-setuptools-scm
2693 python-testfixtures
2694 python-wheel))
2695 (home-page "https://github.com/reef-technologies/logfury/")
2696 (synopsis "Logging of method calls for python libraries")
2697 (description
2698 "Logfury is a tool for python library maintainers. It allows for
2699responsible, low-boilerplate logging of method calls.")
2700 (license license:bsd-3)))
2701
2702(define-public python-logzero
2703 (package
2704 (name "python-logzero")
2705 (version "1.7.0")
2706 (source
2707 (origin
2708 (method git-fetch)
2709 (uri (git-reference
2710 (url "https://github.com/metachris/logzero")
2711 (commit (string-append "v" version))))
2712 (file-name (git-file-name name version))
2713 (sha256
2714 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
2715 (build-system pyproject-build-system)
2716 (native-inputs (list python-pytest python-setuptools))
2717 (home-page "https://github.com/metachris/logzero")
2718 (synopsis "Robust and effective logging for Python")
2719 (description
2720 "@code{logzero} provides a fully configured Python logger object for
2721easy logging and rotating to a console or a file.")
2722 (license license:expat)))
2723
2724(define-public python-logbook
2725 (package
2726 (name "python-logbook")
2727 (version "1.8.2")
2728 (source
2729 (origin
2730 (method url-fetch)
2731 (uri (pypi-uri "logbook" version))
2732 (sha256
2733 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
2734 (build-system pyproject-build-system)
2735 (native-inputs
2736 (list python-brotli
2737 python-cython
2738 python-pytest
2739 python-setuptools
2740 python-wheel))
2741 (home-page "https://github.com/getlogbook/logbook")
2742 (synopsis "Logbook is a logging replacement for Python")
2743 (description
2744 "Logbook is a logging system for Python that replaces the standard
2745library’s logging module. It was designed with both complex and simple
2746applications in mind and the idea to make logging fun.")
2747 (license license:bsd-3)))
2748
2749(define-public python-databind-core
2750 (package
2751 (name "python-databind-core")
2752 (version "4.4.2")
2753 (source
2754 (origin
2755 (method url-fetch)
2756 (uri (pypi-uri "databind.core" version))
2757 (sha256
2758 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
2759 (snippet
2760 #~(begin (use-modules (guix build utils))
2761 ;; The problem with python-typing-extensions >= 4.7 is only
2762 ;; with python-3.7.
2763 (substitute* "pyproject.toml"
2764 ((",<4.7.*") "\"\n"))))))
2765 (build-system pyproject-build-system)
2766 (arguments
2767 (list
2768 #:phases
2769 #~(modify-phases %standard-phases
2770 (add-after 'install 'fix-name
2771 (lambda* (#:key inputs outputs #:allow-other-keys)
2772 (let* ((sitedir (site-packages inputs outputs))
2773 (dist-info
2774 (string-append sitedir "/databind_core-" #$version ".dist-info")))
2775 (substitute* (string-append dist-info "/METADATA")
2776 (("Name: databind-core")
2777 "Name: databind.core"))
2778 (substitute* (string-append dist-info "/RECORD")
2779 (("databind_core") "databind.core"))
2780 (rename-file dist-info
2781 (string-append sitedir
2782 "/databind.core-"
2783 #$version ".dist-info"))))))))
2784 (propagated-inputs
2785 (list python-deprecated
2786 python-nr-date
2787 python-nr-stream
2788 python-typeapi
2789 python-typing-extensions))
2790 (native-inputs
2791 (list python-poetry-core python-pytest))
2792 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
2793 (synopsis
2794 "Library for de-/serializing Python dataclasses")
2795 (description
2796 "Databind is a library inspired by jackson-databind to de-/serialize
2797Python dataclasses.")
2798 (license license:expat)))
2799
2800(define-public python-databind-json
2801 (package
2802 (name "python-databind-json")
2803 (version "4.4.2")
2804 (source
2805 (origin
2806 (method url-fetch)
2807 (uri (pypi-uri "databind.json" version))
2808 (sha256
2809 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
2810 (snippet
2811 #~(begin (use-modules (guix build utils))
2812 ;; The problem with python-typing-extensions >= 4.7 is only
2813 ;; with python-3.7.
2814 (substitute* "pyproject.toml"
2815 ((",<4.7.*") "\"\n"))))))
2816 (build-system pyproject-build-system)
2817 (arguments
2818 (list
2819 #:phases
2820 #~(modify-phases %standard-phases
2821 (add-after 'install 'fix-name
2822 (lambda* (#:key inputs outputs #:allow-other-keys)
2823 (let* ((sitedir (site-packages inputs outputs))
2824 (dist-info
2825 (string-append sitedir "/databind_json-" #$version ".dist-info")))
2826 (substitute* (string-append dist-info "/METADATA")
2827 (("Name: databind-json")
2828 "Name: databind.json"))
2829 (substitute* (string-append dist-info "/RECORD")
2830 (("databind_json") "databind.json"))
2831 (rename-file dist-info
2832 (string-append sitedir
2833 "/databind.json-"
2834 #$version ".dist-info"))))))))
2835 (propagated-inputs
2836 (list python-databind-core python-nr-date
2837 python-typeapi python-typing-extensions))
2838 (native-inputs (list python-poetry-core python-pytest))
2839 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
2840 (synopsis
2841 "De-/serialize Python dataclasses to or from JSON payloads")
2842 (description
2843 "The @code{databind.json} package implements the de-/serialization to or
2844from JSON payloads using the @code{databind.core} framework.")
2845 (license license:expat)))
2846
2847(define-public python-docspec
2848 (package
2849 (name "python-docspec")
2850 (version "2.2.1")
2851 (source
2852 (origin
2853 (method url-fetch)
2854 (uri (pypi-uri "docspec" version))
2855 (sha256
2856 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
2857 (build-system pyproject-build-system)
2858 (arguments (list #:tests? #false)) ;there are none
2859 (propagated-inputs
2860 (list python-databind-core
2861 python-databind-json
2862 python-deprecated))
2863 (native-inputs
2864 (list python-poetry-core))
2865 (home-page "https://github.com/NiklasRosenstein/python-docspec")
2866 (synopsis "Represent API documentation of programming languages")
2867 (description
2868 "Docspec is a JSON object specification for representing API
2869documentation of programming languages.")
2870 (license license:expat)))
2871
2872(define-public python-docspec-python
2873 (package
2874 (name "python-docspec-python")
2875 (version "2.2.1")
2876 (source
2877 (origin
2878 (method url-fetch)
2879 (uri (pypi-uri "docspec_python" version))
2880 (sha256
2881 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
2882 (build-system pyproject-build-system)
2883 (arguments
2884 (list #:tests? #false)) ;there are none
2885 (propagated-inputs (list python-docspec python-nr-util))
2886 (native-inputs (list python-poetry-core))
2887 (home-page "https://github.com/NiklasRosenstein/docspec/")
2888 (synopsis "Produce docspec data from Python source code")
2889 (description
2890 "This package provides a parser based on @code{lib2to3} producing
2891@code{docspec} data from Python source code.")
2892 (license license:expat)))
2893
2894(define-public python-fqdn
2895 (package
2896 (name "python-fqdn")
2897 (version "1.5.1")
2898 (source
2899 (origin
2900 (method url-fetch)
2901 (uri (pypi-uri "fqdn" version))
2902 (sha256
2903 (base32 "17yqckhymnamszhg06751c83rg3fnr5iy33a135bazvngrkx6phh"))))
2904 (build-system pyproject-build-system)
2905 (arguments (list #:tests? #false)) ;there are none
2906 (propagated-inputs (list python-cached-property))
2907 (native-inputs (list python-setuptools python-wheel))
2908 (home-page "https://github.com/ypcrts/fqdn")
2909 (synopsis "Validate domain names against RFC 1123")
2910 (description
2911 "This package validates fully-qualified domain names against RFC 1123, so
2912that they are acceptable to modern bowsers")
2913 (license license:mpl2.0)))
2914
2915(define-public python-fire
2916 (package
2917 (name "python-fire")
2918 (version "0.7.0")
2919 (source
2920 (origin
2921 (method url-fetch)
2922 (uri (pypi-uri "fire" version))
2923 (sha256
2924 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
2925 (build-system pyproject-build-system)
2926 (propagated-inputs (list python-termcolor))
2927 (native-inputs (list python-pytest python-setuptools python-wheel))
2928 (synopsis "Library for automatically generating command line interfaces")
2929 (description
2930 "Fire is a library for automatically generating command line interfaces
2931from absolutely any Python object. The following are the advantages:
2932@itemize
2933@item A simple way to create a CLI in Python.
2934@item A helpful tool for developing and debugging Python code.
2935@item Helps with exploring existing code or turning other people's code into a
2936command line interface.
2937@item Makes transitioning between Bash and Python easier.
2938@item Makes using a Python REPL easier by setting up the REPL with the modules
2939and variables you'll need already imported and created.
2940@end itemize")
2941 (home-page "https://github.com/google/python-fire")
2942 (license license:asl2.0)))
2943
2944(define-public python-fit-nbinom
2945 (package
2946 (name "python-fit-nbinom")
2947 (version "1.1")
2948 (source (origin
2949 (method url-fetch)
2950 (uri (pypi-uri "fit_nbinom" version))
2951 (sha256
2952 (base32
2953 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
2954 (build-system pyproject-build-system)
2955 (arguments
2956 (list
2957 #:tests? #false ;there are none
2958 #:phases
2959 '(modify-phases %standard-phases
2960 (add-after 'unpack 'remove-invalid-syntax
2961 (lambda _
2962 (substitute* "setup.py"
2963 ((".\\*\"") "\"")))))))
2964 (propagated-inputs (list python-numpy python-scipy))
2965 (native-inputs (list python-setuptools python-wheel))
2966 (home-page "https://github.com/joachimwolff/fit_nbinom")
2967 (synopsis "Negative binomial maximum likelihood estimator")
2968 (description "This package provides an implementation in Python using
2969scipy and numpy of negative binomial maximum likelihood estimation.")
2970 (license license:gpl3+)))
2971
2972(define-public python-docrep
2973 (package
2974 (name "python-docrep")
2975 (version "0.3.2")
2976 (source (origin
2977 (method url-fetch)
2978 (uri (pypi-uri "docrep" version))
2979 (sha256
2980 (base32
2981 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
2982 (build-system pyproject-build-system)
2983 (propagated-inputs (list python-six))
2984 (native-inputs (list python-pytest python-pytest-runner
2985 python-setuptools python-wheel))
2986 (home-page "https://github.com/Chilipp/docrep")
2987 (synopsis "Python package for docstring repetition")
2988 (description "Docrep is the documentation repetition module. This module
2989targets developers that develop complex and nested Python APIs and helps them
2990to create a well-documented piece of software.")
2991 (license license:asl2.0)))
2992
2993(define-public python-dotmap
2994 (package
2995 (name "python-dotmap")
2996 (version "1.3.30")
2997 (source
2998 (origin
2999 (method url-fetch)
3000 (uri (pypi-uri "dotmap" version))
3001 (sha256
3002 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
3003 (build-system pyproject-build-system)
3004 (arguments (list #:test-backend #~'unittest))
3005 (native-inputs (list python-setuptools))
3006 (home-page "https://github.com/drgrib/dotmap")
3007 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
3008 (description
3009 "DotMap is a dot-access dictionary subclass that has dynamic
3010hierarchy creation, can be initialized with keys, can be initialized from a
3011dictionary, can be convert to a dictionary, and is ordered by insertion.")
3012 (license license:expat)))
3013
3014(define-public python-dotty-dict
3015 (package
3016 (name "python-dotty-dict")
3017 (version "1.3.1")
3018 (source
3019 (origin
3020 (method git-fetch)
3021 (uri (git-reference
3022 (url "https://github.com/pawelzny/dotty_dict")
3023 (commit (string-append "v" version))))
3024 (sha256
3025 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
3026 (build-system pyproject-build-system)
3027 (native-inputs
3028 (list python-poetry-core
3029 python-pytest
3030 python-setuptools))
3031 (home-page "https://github.com/pawelzny/dotty_dict")
3032 (synopsis "Python library for accessing dictionaries using a dot syntax")
3033 (description "This package provides a library that wraps the traditional
3034Python dictionaries and provides a syntax to access nested dictionaries values
3035using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
3036 (license license:expat)))
3037
3038(define-public python-affine
3039 (package
3040 (name "python-affine")
3041 (version "2.4.0")
3042 (source (origin
3043 (method url-fetch)
3044 (uri (pypi-uri "affine" version))
3045 (sha256
3046 (base32
3047 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
3048 (build-system pyproject-build-system)
3049 (propagated-inputs (list python-flake8
3050 python-pytest python-pytest-cov))
3051 (native-inputs (list python-flit-core))
3052 (home-page "https://github.com/rasterio/affine")
3053 (synopsis "Matrices describing affine transformation of the plane")
3054 (description "This is a package for matrices describing the affine
3055transformation of the plane.")
3056 (license license:bsd-3)))
3057
3058(define-public python-argopt
3059 (package
3060 (name "python-argopt")
3061 (version "0.9.1")
3062 (source
3063 (origin
3064 (method url-fetch)
3065 (uri (pypi-uri "argopt" version))
3066 (sha256
3067 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
3068 (build-system pyproject-build-system)
3069 (native-inputs
3070 (list python-pytest
3071 python-pytest-timeout
3072 python-setuptools
3073 python-setuptools-scm
3074 python-wheel))
3075 (home-page "https://github.com/casperdcl/argopt")
3076 (synopsis "Generate a command-line interface from a docstring")
3077 (description
3078 "This package provides tools to define a command line interface
3079from a docstring rather than the other way around.")
3080 (license license:mpl2.0)))
3081
3082(define-public python-array-api-compat
3083 (package
3084 (name "python-array-api-compat")
3085 (version "1.12.0")
3086 (source
3087 (origin
3088 (method url-fetch)
3089 (uri (pypi-uri "array_api_compat" version))
3090 (sha256
3091 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
3092 (build-system pyproject-build-system)
3093 ;; Tests would require all supported array libraries, including pytorch
3094 (arguments (list #:tests? #false))
3095 (native-inputs
3096 (list python-setuptools))
3097 (home-page "https://data-apis.org/array-api-compat/")
3098 (synopsis "Array API compatibility wrapper for NumPy et al")
3099 (description
3100 "This package provides a wrapper around @code{NumPy} and other array
3101libraries to make them compatible with the Array API standard")
3102 (license license:expat)))
3103
3104(define-public python-array-api-strict
3105 (package
3106 (name "python-array-api-strict")
3107 (version "2.4.1")
3108 (source
3109 (origin
3110 (method url-fetch)
3111 (uri (pypi-uri "array_api_strict" version))
3112 (sha256
3113 (base32 "0k1v3h54y1yny8mhgwjk6p51zf87farfk1xn9842g5lcrfhxqxvc"))))
3114 (build-system pyproject-build-system)
3115 (arguments
3116 (list
3117 ;; tests: 584 passed, 1 skipped, 2 deselected
3118 #:test-flags
3119 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
3120 #~(list "-k" (string-append "not test_disabled_extensions"
3121 " and not test_environment_variables"))))
3122 (native-inputs
3123 (list python-pytest
3124 python-setuptools
3125 python-setuptools-scm))
3126 (propagated-inputs
3127 (list python-numpy))
3128 (home-page "https://data-apis.org/array-api-strict/")
3129 (synopsis "Strict implementation of the Python array API")
3130 (description
3131 "@code{array_api_strict} is a strict, minimal implementation of the
3132@url{https://data-apis.org/array-api/latest/, Python array API}.
3133
3134The purpose of array-api-strict is to provide an implementation of the array
3135API for consuming libraries to test against so they can be completely sure
3136their usage of the array API is portable.")
3137 (license license:bsd-3)))
3138
3139(define-public python-cachetools
3140 (package
3141 (name "python-cachetools")
3142 (version "6.1.0")
3143 (source
3144 (origin
3145 (method url-fetch)
3146 (uri (pypi-uri "cachetools" version))
3147 (sha256
3148 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
3149 (build-system pyproject-build-system)
3150 (native-inputs
3151 (list python-pytest
3152 python-setuptools
3153 python-wheel))
3154 (home-page "https://github.com/tkem/cachetools/")
3155 (synopsis "Extensible memoizing collections and decorators")
3156 (description "This module provides various memoizing collections and
3157decorators, including variants of the Python standard library's
3158@code{lru_cache} function decorator.")
3159 (license license:expat)))
3160
3161(define-public python-cachetools-5
3162 (package
3163 (inherit python-cachetools)
3164 (version "5.5.2")
3165 (source
3166 (origin
3167 (method url-fetch)
3168 (uri (pypi-uri "cachetools" version))
3169 (sha256
3170 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
3171
3172(define-public python-colorclass
3173 (package
3174 (name "python-colorclass")
3175 (version "2.2.2")
3176 (source
3177 (origin
3178 (method git-fetch)
3179 (uri (git-reference
3180 (url "https://github.com/matthewdeanmartin/colorclass")
3181 (commit (string-append "v" version))))
3182 (file-name (git-file-name name version))
3183 (sha256
3184 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
3185 (build-system pyproject-build-system)
3186 (arguments
3187 (list
3188 #:test-flags
3189 #~(list "-k" "not test_piped") ; Unclear why this test fails.
3190 #:phases
3191 #~(modify-phases %standard-phases
3192 (add-after 'unpack 'use-poetry-core
3193 (lambda _
3194 ;; Patch to use the core poetry API.
3195 (substitute* "pyproject.toml"
3196 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
3197 (native-inputs (list python-poetry-core python-pytest))
3198 (home-page "https://github.com/matthewdeanmartin/colorclass")
3199 (synopsis "Colorful console applications with Python")
3200 (description
3201 "This package provides an ANSI color text library for Python. It
3202provides automatic coloring for dark or light terminals.")
3203 (license license:expat)))
3204
3205(define-public python-colorcet
3206 (package
3207 (name "python-colorcet")
3208 (version "3.1.1a1")
3209 (source
3210 (origin
3211 (method url-fetch)
3212 (uri (pypi-uri "colorcet" version))
3213 (sha256
3214 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
3215 (build-system pyproject-build-system)
3216 (native-inputs (list python-nbval
3217 python-packaging
3218 python-pytest
3219 python-pytest-mpl
3220 python-setuptools
3221 python-setuptools-scm))
3222 (home-page "https://colorcet.holoviz.org/")
3223 (synopsis "Collection of perceptually uniform colormaps")
3224 (description "Colorcet is a collection of perceptually accurate 256-color
3225colormaps for use with Python plotting programs like Bokeh, Matplotlib,
3226HoloViews, and Datashader.")
3227 (license license:cc-by4.0)))
3228
3229(define-public python-colored
3230 (package
3231 (name "python-colored")
3232 (version "2.3.0")
3233 (source (origin
3234 (method git-fetch)
3235 (uri (git-reference
3236 (url "https://gitlab.com/dslackw/colored")
3237 (commit version)))
3238 (file-name (git-file-name name version))
3239 (sha256
3240 (base32
3241 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
3242 (build-system pyproject-build-system)
3243 (arguments
3244 (list
3245 #:phases
3246 #~(modify-phases %standard-phases
3247 (add-before 'check 'pre-check
3248 (lambda _
3249 ;; Tests expect ANSI escape codes for colors.
3250 (setenv "FORCE_COLOR" "1"))))))
3251 (native-inputs (list python-flit-core python-pytest))
3252 (home-page "https://gitlab.com/dslackw/colored")
3253 (synopsis "Simple library for color and formatting to terminal")
3254 (description "This is a very simple Python library for color and
3255formatting in the terminal. It comes with a collection of color codes and
3256names for 256 color terminal setups.")
3257 (license license:expat)))
3258
3259(define-public python-colored-traceback
3260 ;; No tags in upstream repository.
3261 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
3262 (revision "0"))
3263 (package
3264 (name "python-colored-traceback")
3265 (version (git-version "0.4.2" revision commit))
3266 (source
3267 (origin
3268 (method git-fetch)
3269 (uri (git-reference
3270 (url "https://github.com/staticshock/colored-traceback.py")
3271 (commit commit)))
3272 (file-name (git-file-name name version))
3273 (sha256
3274 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
3275 (build-system pyproject-build-system)
3276 (arguments
3277 ;; Tests are incompatible with current python version.
3278 (list #:tests? #f))
3279 (propagated-inputs (list python-colorama python-pygments))
3280 (native-inputs (list python-setuptools python-wheel))
3281 (home-page "https://github.com/staticshock/colored-traceback.py")
3282 (synopsis "Automatically color uncaught exception tracebacks")
3283 (description "This package provides python utilities to automatically
3284color uncaught exception tracebacks.")
3285 (license license:isc))))
3286
3287(define-public python-colorful
3288 (package
3289 (name "python-colorful")
3290 (version "0.5.8")
3291 (source
3292 (origin
3293 (method git-fetch)
3294 (uri (git-reference
3295 (url "https://github.com/timofurrer/colorful")
3296 (commit (string-append "v" version))))
3297 (file-name (git-file-name name version))
3298 (sha256
3299 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
3300 (build-system pyproject-build-system)
3301 (native-inputs
3302 (list python-pytest
3303 python-setuptools))
3304 (propagated-inputs
3305 (list python-colorama))
3306 (home-page "http://github.com/timofurrer/colorful")
3307 (synopsis "Terminal string styling")
3308 (description "Colorful provides an array of text styles, that can be used
3309as functions or string constants to form colored terminal output.")
3310 (license license:expat)))
3311
3312(define-public python-colorthief
3313 (package
3314 (name "python-colorthief")
3315 (version "0.2.1")
3316 (source
3317 (origin
3318 (method url-fetch)
3319 (uri (pypi-uri "colorthief" version))
3320 (sha256
3321 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
3322 (build-system pyproject-build-system)
3323 (arguments
3324 (list #:tests? #f)) ;no tests in PyPI or Git
3325 (native-inputs (list python-setuptools))
3326 (propagated-inputs (list python-pillow))
3327 (home-page "https://github.com/fengsp/color-thief-py")
3328 (synopsis "Grab the color palette of an image")
3329 (description
3330 "This package provides methods to determine the dominant color
3331of an image, as well as constructing a representative color palette.")
3332 (license license:bsd-3)))
3333
3334(define-public python-construct-classes
3335 (package
3336 (name "python-construct-classes")
3337 (version "0.1.2")
3338 (source
3339 (origin
3340 (method git-fetch)
3341 (uri (git-reference
3342 (url "https://github.com/matejcik/construct-classes")
3343 (commit (string-append "v" version))))
3344 (file-name (git-file-name name version))
3345 (sha256
3346 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
3347 (build-system pyproject-build-system)
3348 (propagated-inputs
3349 (list python-construct))
3350 (native-inputs
3351 (list python-poetry-core
3352 python-pytest))
3353 (home-page "https://github.com/matejcik/construct-classes")
3354 (synopsis "Parse binary structs into dataclasses")
3355 (description "This package provides a parser to parse binary structs
3356into dataclasses.")
3357 (license license:expat)))
3358
3359(define-public python-contourpy
3360 (package
3361 (name "python-contourpy")
3362 (version "1.3.3")
3363 (source
3364 (origin
3365 (method url-fetch)
3366 (uri (pypi-uri "contourpy" version))
3367 (sha256
3368 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
3369 (build-system pyproject-build-system)
3370 (arguments
3371 (list
3372 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
3373 #:test-flags
3374 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
3375 #~(list "-m" "not image"
3376 ;; Tests that pass but avoided for load reasons.
3377 "-k" "not test_filled_random_big and not test_lines_random_big")))
3378 (native-inputs
3379 (list pybind11-2
3380 python-meson
3381 python-pytest
3382 python-wurlitzer))
3383 (propagated-inputs
3384 (list python-numpy))
3385 (home-page "https://contourpy.readthedocs.io/")
3386 (synopsis
3387 "Python library for calculating contours of 2D quadrilateral grids")
3388 (description
3389 "ContourPy is a Python library for calculating contours of 2D
3390quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
3391 (license license:bsd-3)))
3392
3393(define-public python-lunr
3394 (package
3395 (name "python-lunr")
3396 (version "0.8.0")
3397 (source
3398 (origin
3399 (method url-fetch)
3400 (uri
3401 (pypi-uri "lunr" version))
3402 (sha256
3403 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
3404 (build-system pyproject-build-system)
3405 (arguments
3406 (list
3407 #:test-flags
3408 '(list "-k" "not TestLanguageSupport"
3409 "--ignore-glob=tests/acceptance_tests/*")))
3410 (native-inputs
3411 (list python-hatch-fancy-pypi-readme
3412 python-hatchling
3413 python-pytest
3414 python-pytest-timeout))
3415 (propagated-inputs
3416 (list python-nltk))
3417 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
3418 (synopsis "Full-text search library")
3419 (description "This package provides python library for full-text search.
3420It indexes documents and provides a search interface for retrieving documents
3421that best match text queries.")
3422 (license license:expat)))
3423
3424(define-public python-mdit-py-plugins
3425 (package
3426 (name "python-mdit-py-plugins")
3427 (version "0.4.2")
3428 (source (origin
3429 (method git-fetch) ;for tests
3430 (uri (git-reference
3431 (url "https://github.com/executablebooks/mdit-py-plugins")
3432 (commit (string-append "v" version))))
3433 (file-name (git-file-name name version))
3434 (sha256
3435 (base32
3436 "0lyv8k3sdm9i9am47z6zx96l9bbd9g8xp06yf2alafkmp0q873b9"))))
3437 (build-system pyproject-build-system)
3438 (propagated-inputs
3439 (list python-markdown-it-py
3440 python-attrs))
3441 (native-inputs
3442 (list python-flit-core
3443 python-pytest
3444 python-pytest-regressions))
3445 (home-page "https://github.com/executablebooks/mdit-py-plugins")
3446 (synopsis "Collection of plugins for markdown-it-py")
3447 (description "This package contains a collection of plugins for
3448@code{markdown-it-py} like:
3449@enumerate
3450@item amsmath,
3451@item attrs,
3452@item container,
3453@item definition list,
3454@item dollarmath,
3455@item field list,
3456@item footnote,
3457@item textmath, and
3458@item wordcount.
3459@end enumerate")
3460 (license license:expat)))
3461
3462(define-public python-mdurl
3463 (package
3464 (name "python-mdurl")
3465 (version "0.1.2")
3466 (source
3467 (origin
3468 (method git-fetch) ; no tests data in PyPi package
3469 (uri (git-reference
3470 (url "https://github.com/executablebooks/mdurl")
3471 (commit version)))
3472 (file-name (git-file-name name version))
3473 (sha256
3474 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
3475 (build-system pyproject-build-system)
3476 (native-inputs (list python-flit python-pytest))
3477 (home-page "https://github.com/executablebooks/mdurl")
3478 (synopsis "Markdown URL utilities")
3479 (description
3480 "This package implements a Python port of the JavaScript @code{mdurl}.")
3481 (license license:expat)))
3482
3483(define-public python-mkdocs
3484 (package
3485 (name "python-mkdocs")
3486 (version "1.6.1")
3487 (source
3488 (origin
3489 (method git-fetch)
3490 (uri (git-reference
3491 (url "https://github.com/mkdocs/mkdocs")
3492 (commit version)))
3493 (file-name (git-file-name name version))
3494 (sha256
3495 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
3496 (build-system pyproject-build-system)
3497 (arguments
3498 (list
3499 ;; tests: 724 passed
3500 #:test-backend #~'unittest
3501 #:test-flags
3502 #~(list "discover" "-p" "*tests.py" "mkdocs" "--top-level-directory" ".")))
3503 (native-inputs
3504 (list python-hatchling
3505 python-setuptools))
3506 (propagated-inputs
3507 (list python-click
3508 python-ghp-import
3509 python-jinja2
3510 python-markdown
3511 python-markupsafe
3512 python-mergedeep
3513 python-mkdocs-get-deps
3514 python-packaging
3515 python-pathspec
3516 python-pyyaml
3517 python-pyyaml-env-tag
3518 python-watchdog
3519 ;; [optional]
3520 python-babel))
3521 (home-page "https://www.mkdocs.org")
3522 (synopsis "Project documentation with Markdown")
3523 (description
3524 "MkDocs is a static site generator geared towards building project
3525documentation. Documentation source files are written in Markdown, and
3526configured with a single YAML configuration file.")
3527 (license license:bsd-3)))
3528
3529(define-public python-mkdocs-get-deps
3530 (package
3531 (name "python-mkdocs-get-deps")
3532 (version "0.2.0")
3533 (source
3534 (origin
3535 (method git-fetch)
3536 (uri (git-reference
3537 (url "https://github.com/mkdocs/get-deps")
3538 (commit (string-append "v" version))))
3539 (file-name (git-file-name name version))
3540 (sha256
3541 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
3542 (build-system pyproject-build-system)
3543 (native-inputs
3544 (list python-pytest
3545 python-hatchling))
3546 (propagated-inputs
3547 (list python-mergedeep
3548 python-platformdirs
3549 python-pyyaml))
3550 (home-page "https://github.com/mkdocs/get-deps")
3551 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
3552 (description
3553 "This package provides an @code{MkDocs} extension that lists all dependencies
3554according to a mkdocs.yml file. This command guesses the Python dependencies
3555that a MkDocs site requires in order to build. It simply prints the PyPI
3556packages that need to be installed.")
3557 (license license:expat)))
3558
3559(define-public python-mkdocs-markdownextradata-plugin
3560 (package
3561 (name "python-mkdocs-markdownextradata-plugin")
3562 (version "0.2.5")
3563 (source
3564 (origin
3565 (method git-fetch)
3566 (uri (git-reference
3567 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
3568 (commit version)))
3569 (file-name (git-file-name name version))
3570 (sha256
3571 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
3572 (build-system pyproject-build-system)
3573 (native-inputs (list python-pytest python-setuptools))
3574 (propagated-inputs (list python-mkdocs python-pyyaml))
3575 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
3576 (synopsis "Inject extra variables into the MkDocs markdown template")
3577 (description
3578 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
3579variables into the markdown template.")
3580 (license license:expat)))
3581
3582(define-public python-docstring-to-markdown
3583 (package
3584 (name "python-docstring-to-markdown")
3585 (version "0.15")
3586 (source
3587 (origin
3588 (method url-fetch)
3589 (uri (pypi-uri "docstring-to-markdown" version))
3590 (sha256
3591 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
3592 (build-system pyproject-build-system)
3593 (arguments
3594 (list
3595 #:phases
3596 #~(modify-phases %standard-phases
3597 (add-after 'unpack 'reduce-test-coverage-since-failing
3598 (lambda _
3599 (substitute* "setup.cfg"
3600 (("(^.*cov.*$|^.*flake8.*$)") "")))))))
3601 (native-inputs
3602 (list python-pytest
3603 python-setuptools))
3604 (home-page "https://github.com/python-lsp/docstring-to-markdown")
3605 (synopsis "On the fly conversion of Python docstrings to markdown")
3606 (description
3607 "This module can convert Python docstrings to Markdown. It can recognise
3608reStructuredText inside docstrings and convert multiple of its features to
3609Markdown. It also includes initial support for Google-formatted docstrings.")
3610 (license license:lgpl2.1+)))
3611
3612(define-public python-mysql-connector-python
3613 (package
3614 (name "python-mysql-connector-python")
3615 (version "8.0.33")
3616 ;; The archive on PyPi does not contain a build system
3617 (source (origin
3618 (method url-fetch)
3619 (uri (string-append "https://cdn.mysql.com/Downloads/"
3620 "Connector-Python/mysql-connector-python-"
3621 version "-src.tar.gz"))
3622 (sha256
3623 (base32
3624 "00j9xgd43yzx5yiijnlmpaqpa58m5lscjglsgzg48dibhr69br0l"))))
3625 (build-system python-build-system)
3626 (arguments
3627 (list
3628 ;; tests: 1371 passed
3629 #:configure-flags
3630 #~(list (string-append "--with-mysql-capi="
3631 #$(this-package-input "mysql"))
3632 (string-append "--with-protobuf-include-dir="
3633 #$(this-package-input "protobuf")
3634 "/include/google/protobuf")
3635 (string-append "--with-protobuf-lib-dir="
3636 #$(this-package-input "protobuf")
3637 "/lib")
3638 (string-append "--with-protoc="
3639 #$(this-package-input "protobuf")
3640 "/bin/protoc"))
3641 #:phases
3642 #~(modify-phases %standard-phases
3643 (add-after 'unpack 'compatibility
3644 (lambda _
3645 (substitute* "src/mysql_capi.c"
3646 (("res = mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
3647 "res = 0;")
3648 (("mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
3649 "")
3650 (("mysql_options\\(&self->session, MYSQL_OPT_TLS_CIPHERSUITES.*")
3651 "")
3652 ;; The C API does not have mysql_bind_param, so we produce an
3653 ;; error here.
3654 (("status = mysql_bind_param.*") "status = 1;"))
3655 ;; See https://github.com/protocolbuffers/protobuf/issues/9943
3656 (substitute* "src/mysqlxpb/mysqlxpb.cc"
3657 (("google::protobuf::string") "std::string"))))
3658 (replace 'check
3659 (lambda* (#:key tests? #:allow-other-keys)
3660 (when tests?
3661 ;; Some of these tests might be failing due to the build
3662 ;; container's restrictions, others are due to the version
3663 ;; mismatch.
3664 (substitute* "tests/cext/test_cext_api.py"
3665 (("def test_change_user") "def _do_not_test_change_user")
3666 (("def test_get_character_set_info")
3667 "def _do_not_test_get_character_set_info"))
3668 (substitute* "tests/test_bugs.py"
3669 (("def test_change_user") "def _do_not_test_change_user")
3670 (("def test_lost_connection") "def _do_not_test_lost_connection")
3671 (("def test_kill_query") "def _do_not_test_kill_query")
3672 ;; These all fail because of expired certificates.
3673 (("def test_cext_verify_server_certificate")
3674 "def _do_not_test_cext_verify_server_certificate")
3675 (("def test_pure_verify_server_certificate")
3676 "def _do_not_test_pure_verify_server_certificate")
3677 (("def test_verify_server_name_cext_cnx")
3678 "def _do_not_test_verify_server_name_cext_cnx")
3679 (("def test_verify_server_name_pure_cnx")
3680 "def _do_not_test_verify_server_name_pure_cnx"))
3681 (substitute* "tests/test_connection.py"
3682 (("def test_allow_local_infile_in_path")
3683 "def _do_not_test_allow_local_infile_in_path")
3684 ;; This fails because of expired certificates.
3685 (("def test_connect_with_unix_socket")
3686 "def _do_not_test_connect_with_unix_socket"))
3687 (substitute* "tests/test_mysqlx_connection.py"
3688 ;; This fails because of expired certificates.
3689 (("def test_ssl_connection")
3690 "def _do_not_test_ssl_connection")
3691 ;; ValueError: Invalid IPv6 URL
3692 (("def test_connection_uri")
3693 "def _do_not_test_connection_uri"))
3694 (substitute* "tests/test_constants.py"
3695 (("def test_deprecated")
3696 "def _do_not_test_deprecated"))
3697 (mkdir-p "/tmp/datadir")
3698 (invoke "python3" "unittests.py"
3699 "--verbosity=3"
3700 (string-append "--with-mysql=" #$(this-package-input "mysql"))
3701 "--keep"
3702 "--mysql-topdir=/tmp/datadir"
3703 "--unix-socket=/tmp/datadir")))))))
3704 (propagated-inputs (list python-protobuf))
3705 (inputs (list mysql protobuf-3.20 openssl-1.1 zlib))
3706 (home-page "https://dev.mysql.com/doc/connector-python/en/index.html")
3707 (synopsis "MySQL driver written in Python")
3708 (description "MySQL Connector/Python enables Python programs to access
3709MySQL databases, using an API that is compliant with the Python Database API
3710Specification v2.0 (PEP 249).")
3711 (license license:gpl2)))
3712
3713(define-public python-pdoc
3714 (package
3715 (name "python-pdoc")
3716 (version "13.0.1")
3717 (source (origin
3718 (method git-fetch)
3719 (uri (git-reference
3720 (url "https://github.com/mitmproxy/pdoc")
3721 (commit (string-append "v" version))))
3722 (file-name (git-file-name name version))
3723 (sha256
3724 (base32
3725 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
3726 (build-system pyproject-build-system)
3727 (native-inputs (list python-pytest python-jinja2 python-pygments
3728 python-setuptools python-wheel))
3729 (arguments
3730 (list
3731 ;; Some tests fail, presumably because of slight version mismatches of
3732 ;; the dependencies.
3733 #:test-flags
3734 '(list "-k" (string-append "not test_var_with_raising_repr and "
3735 "not test_smoke[mock] and "
3736 "not test_snapshots[html"))))
3737 (home-page "https://pdoc.dev/")
3738 (synopsis "API documentation for Python projects")
3739 (description "pdoc auto-generates API documentation that follows your
3740project's Python module hierarchy. It requires no configuration, has
3741first-class support for type annotations, cross-links between identifiers,
3742comes with an integrated live-reloading web server, uses customizable HTML
3743templates, understands numpydoc and Google-style docstrings.")
3744 (license license:unlicense)))
3745
3746(define-public python-py4j
3747 (package
3748 (name "python-py4j")
3749 (version "0.10.9.7")
3750 (source (origin
3751 (method url-fetch)
3752 (uri (pypi-uri "py4j" version))
3753 (sha256
3754 (base32
3755 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
3756 (build-system pyproject-build-system)
3757 (arguments (list #:tests? #f)) ; Requires a running JVM?
3758 (native-inputs (list python-setuptools))
3759 (home-page "https://www.py4j.org/")
3760 (synopsis "Dynamically access arbitrary Java objects from Python")
3761 (description
3762 "This package enables Python programs to dynamically access arbitrary
3763Java objects.")
3764 (license license:bsd-3)))
3765
3766(define-public python-pymdown-extensions
3767 (package
3768 (name "python-pymdown-extensions")
3769 (version "10.16.1")
3770 (source
3771 (origin
3772 (method git-fetch)
3773 (uri (git-reference
3774 (url "https://github.com/facelessuser/pymdown-extensions")
3775 (commit version)))
3776 (file-name (git-file-name name version))
3777 (sha256
3778 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
3779 (build-system pyproject-build-system)
3780 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
3781 (arguments
3782 (list #:tests? #f))
3783 (native-inputs (list python-hatchling python-pytest python-pyyaml))
3784 (propagated-inputs (list python-markdown))
3785 (home-page "https://github.com/facelessuser/pymdown-extensions")
3786 (synopsis "Extension pack for Python Markdown")
3787 (description
3788 "PyMdown Extensions is a collection of extensions for Python Markdown.
3789All extensions are found under the module namespace of pymdownx.")
3790 (license license:expat)))
3791
3792(define-public python-plotext
3793 (package
3794 (name "python-plotext")
3795 (version "5.2.8")
3796 (source (origin
3797 (method url-fetch)
3798 (uri (pypi-uri "plotext" version))
3799 (sha256
3800 (base32
3801 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
3802 (build-system pyproject-build-system)
3803 (arguments (list #:tests? #false)) ;there are none
3804 (native-inputs (list python-setuptools python-wheel))
3805 (home-page "https://github.com/piccolomo/plotext")
3806 (synopsis "Plots in the terminal")
3807 (description "Plotext lets you plot directly to the terminal.")
3808 (license license:expat)))
3809
3810(define-public python-plotille
3811 (package
3812 (name "python-plotille")
3813 (version "5.0.0")
3814 (source
3815 (origin
3816 (method git-fetch)
3817 (uri (git-reference
3818 (url "https://github.com/tammoippen/plotille")
3819 (commit (string-append "v" version))))
3820 (file-name (git-file-name name version))
3821 (sha256
3822 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
3823 (modules '((guix build utils)))
3824 (snippet
3825 #~(begin
3826 ;; Without deleting ./imgs setuptools complains as follows: error:
3827 ;; Multiple top-level packages discovered in a flat-layout:
3828 ;; ['imgs', 'plotille'].
3829 (delete-file-recursively "./imgs")))))
3830 (build-system pyproject-build-system)
3831 (native-inputs
3832 (list python-pytest
3833 python-mock
3834 python-pendulum
3835 python-pytest-cov
3836 python-pytest-mock
3837 python-setuptools
3838 python-wheel))
3839 (home-page "https://github.com/tammoippen/plotille")
3840 (synopsis "Plot in the terminal using braille dots")
3841 (description
3842 "Plotille provides a figure class and graphing functions to create plots,
3843scatter plots, histograms and heatmaps in the terminal using braille dots.")
3844 (license license:expat)))
3845
3846(define-public python-poetry-dynamic-versioning
3847 (package
3848 (name "python-poetry-dynamic-versioning")
3849 (version "1.9.1")
3850 (source
3851 (origin
3852 (method url-fetch)
3853 (uri (pypi-uri "poetry_dynamic_versioning" version))
3854 (sha256
3855 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
3856 (build-system pyproject-build-system)
3857 (arguments
3858 (list
3859 #:test-flags
3860 #~(list "--ignore=tests/test_integration.py"
3861 "-k" (string-join
3862 ;; Tests searching for VCS back end.
3863 (list "not test__get_version__defaults"
3864 "test__enable_in_doc__project_with_dynamic"
3865 "test__enable_in_doc__project_with_version"
3866 "test__get_version__format_jinja"
3867 "test__get_version__format_jinja_imports_with_module_and_item"
3868 "test__get_version__format_jinja_imports_with_module_only"
3869 "test__get_version__format_jinja_with_enforced_style")
3870 " and not "))))
3871 (native-inputs
3872 (list python-poetry-core
3873 python-pytest))
3874 (propagated-inputs
3875 (list python-dunamai
3876 python-jinja2
3877 python-tomlkit))
3878 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
3879 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
3880 (description
3881 "This package provides a build backend that patches Poetry Core to enable
3882the versioning system in PEP 517 build frontends.")
3883 (license license:expat)))
3884
3885(define-public python-poetry-plugin-export
3886 (package
3887 (name "python-poetry-plugin-export")
3888 (version "1.8.0")
3889 (source
3890 (origin
3891 (method url-fetch)
3892 (uri (pypi-uri "poetry_plugin_export" version))
3893 (sha256
3894 (base32 "0qgw6w4xaw7cz9ykw376c5hcg9v2k30lnmna6pc9b4ymhn51d9hz"))))
3895 (build-system pyproject-build-system)
3896 (arguments
3897 (list
3898 #:tests? #f)) ;tests cycle with poetry
3899 (native-inputs
3900 (list python-poetry-core))
3901 (propagated-inputs
3902 (list python-pendulum))
3903 (home-page "https://python-poetry.org/")
3904 (synopsis "Poetry plugin to export the dependencies to various formats")
3905 (description
3906 "Poetry plugin to export the dependencies to various formats.")
3907 (license license:expat)))
3908
3909(define-public python-portpicker
3910 (package
3911 (name "python-portpicker")
3912 (version "1.6.0")
3913 (source
3914 (origin
3915 (method url-fetch)
3916 (uri (pypi-uri "portpicker" version))
3917 (sha256
3918 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
3919 (build-system pyproject-build-system)
3920 (arguments
3921 (list
3922 #:test-flags
3923 ;; This fails because portserver ends up in bin, not site-packages
3924 '(list "--ignore=src/tests/portserver_test.py")))
3925 (propagated-inputs (list python-psutil))
3926 (native-inputs (list python-pytest python-setuptools python-wheel
3927 net-tools))
3928 (home-page "https://github.com/google/python_portpicker")
3929 (synopsis "Choose unique available network ports")
3930 (description
3931 "This package provides a library to choose unique available network
3932ports.")
3933 (license license:asl2.0)))
3934
3935(define-public python-md-ulb-pwrap
3936 (package
3937 (name "python-md-ulb-pwrap")
3938 (version "0.1.3")
3939 (source
3940 (origin
3941 (method git-fetch)
3942 (uri (git-reference
3943 (url "https://github.com/mondeja/md-ulb-pwrap")
3944 (commit (string-append "v" version))))
3945 (file-name (git-file-name name version))
3946 (sha256
3947 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
3948 (build-system pyproject-build-system)
3949 (arguments
3950 (list
3951 #:imported-modules `(,@%cargo-build-system-modules
3952 ,@%pyproject-build-system-modules)
3953 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
3954 (guix build pyproject-build-system)
3955 (guix build utils))
3956 #:test-backend #~'custom
3957 #:test-flags #~(list "test.py")
3958 #:phases
3959 #~(modify-phases %standard-phases
3960 (add-after 'unpack 'prepare-cargo-build-system
3961 (lambda args
3962 (for-each
3963 (lambda (phase)
3964 (format #t "Running cargo phase: ~a~%" phase)
3965 (apply (assoc-ref cargo:%standard-phases phase)
3966 #:cargo-target #$(cargo-triplet)
3967 args))
3968 '(unpack-rust-crates
3969 configure
3970 check-for-pregenerated-files
3971 patch-cargo-checksums))))
3972 (add-after 'prepare-cargo-build-system 'chdir
3973 (lambda _
3974 (chdir "python"))))))
3975 (native-inputs
3976 (append
3977 (list maturin
3978 python-pytest
3979 python-unicode-linebreak
3980 rust
3981 `(,rust "cargo"))
3982 (or (and=> (%current-target-system)
3983 (compose list make-rust-sysroot))
3984 '())))
3985 (inputs (cargo-inputs 'md_ulb_pwrap))
3986 (home-page "https://github.com/mondeja/md-ulb-pwrap")
3987 (synopsis "Markdown paragraph wrapper")
3988 (description
3989 "This package provides a Markdown paragraph wrapper using Unicode Line
3990Breaking Algorithm written in Rust with Python bindings.")
3991 (license license:expat)))
3992
3993(define-public python-mdx-gh-links
3994 (package
3995 (name "python-mdx-gh-links")
3996 (version "0.4")
3997 (source
3998 (origin
3999 (method url-fetch)
4000 (uri (pypi-uri "mdx_gh_links" version))
4001 (sha256
4002 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
4003 (build-system pyproject-build-system)
4004 (arguments (list #:tests? #f)) ;tests connect github
4005 (native-inputs (list python-setuptools))
4006 (propagated-inputs (list python-markdown))
4007 (home-page "https://github.com/Python-Markdown/github-links/")
4008 (synopsis "Python-Markdown extension adding support for shorthand links")
4009 (description "This package is an extension to Python-Markdown which adds
4010support for shorthand links to GitHub users, repositories, issues and
4011commits.")
4012 (license license:bsd-3)))
4013
4014(define-public python-mkdocs-material
4015 (package
4016 (name "python-mkdocs-material")
4017 (version "7.1.3")
4018 (source
4019 (origin
4020 (method url-fetch)
4021 (uri
4022 (pypi-uri "mkdocs-material" version))
4023 (sha256
4024 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))
4025 (modules '((guix build utils)))
4026 (snippet
4027 ;; TODO There are still bundled assets and minified JS.
4028 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
4029 (build-system pyproject-build-system)
4030 (arguments
4031 (list
4032 #:tests? #f ; No tests.
4033 #:phases
4034 #~(let ((symlink-js
4035 (lambda (inputs)
4036 (for-each
4037 (lambda (lang)
4038 (let* ((filename (string-append "lunr." lang ".min.js"))
4039 (file (string-append "share/javascript/" filename)))
4040 (symlink (search-input-file inputs file) filename)))
4041 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
4042 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
4043 "vi")))))
4044 (modify-phases %standard-phases
4045 ;; Requirement mkdocs-material-extensions
4046 ;; in-turn requires mkdocs-material. This causes
4047 ;; circular dependency, so we remove this requirement.
4048 (add-after 'unpack 'patch-requirements
4049 (lambda _
4050 (substitute* "requirements.txt"
4051 (("mkdocs-material-extensions.*$")
4052 ""))))
4053 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
4054 (lambda* (#:key inputs #:allow-other-keys)
4055 (mkdir-p "material/assets/javascripts/min/")
4056 (with-directory-excursion "material/assets/javascripts/min/"
4057 (symlink-js inputs))))
4058 (add-after 'wrap 'replace-javascript-assets
4059 (lambda* (#:key inputs outputs #:allow-other-keys)
4060 (let* ((site (site-packages inputs outputs))
4061 (js-assets (string-append site "/material/"
4062 "assets/javascripts")))
4063 (with-directory-excursion js-assets
4064 (delete-file-recursively "min")
4065 (mkdir-p "min")
4066 (with-directory-excursion "min"
4067 (symlink-js inputs))))))))))
4068 (native-inputs (list python-setuptools))
4069 (inputs (list js-lunr-ar
4070 js-lunr-da
4071 js-lunr-de
4072 js-lunr-es
4073 js-lunr-fi
4074 js-lunr-fr
4075 js-lunr-hu
4076 js-lunr-it
4077 js-lunr-ja
4078 js-lunr-nl
4079 js-lunr-no
4080 js-lunr-pt
4081 js-lunr-ro
4082 js-lunr-ru
4083 js-lunr-sv
4084 js-lunr-tr
4085 js-lunr-vi
4086 js-lunr-multi
4087 js-lunr-stemmer-support))
4088 (propagated-inputs
4089 (list python-markdown python-mkdocs python-pygments
4090 python-pymdown-extensions))
4091 (home-page "https://squidfunk.github.io/mkdocs-material/")
4092 (synopsis "Material Design theme for MkDocs")
4093 (description "This package provides a theme plugin for the static site
4094generator MkDocs.")
4095 (license license:expat)))
4096
4097(define-public python-nanobind
4098 (package
4099 (name "python-nanobind")
4100 (version "2.10.2")
4101 (source
4102 (origin
4103 (method url-fetch)
4104 (uri (pypi-uri "nanobind" version))
4105 (sha256
4106 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
4107 (build-system pyproject-build-system)
4108 (arguments
4109 (list
4110 ;; tests: 466 passed, 27 skipped
4111 #:phases
4112 #~(modify-phases %standard-phases
4113 (add-before 'build 'configure-cmake
4114 (lambda _
4115 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
4116 (add-after 'configure-cmake 'build-c++
4117 (lambda _
4118 (invoke "cmake" "--build" "build" "-j" "2")))
4119 (add-before 'check 'pre-check
4120 (lambda _ (chdir "build"))))))
4121 (native-inputs
4122 (list cmake-minimal
4123 python-numpy
4124 python-pathspec
4125 python-pytest
4126 python-scikit-build-core
4127 python-scipy))
4128 (inputs
4129 (list eigen))
4130 (home-page "https://github.com/wjakob/nanobind/")
4131 (synopsis "Tiny and efficient C++/Python bindings")
4132 (description "Nanobind is a small binding library that exposes C++ types
4133in Python and vice versa. It is reminiscent of @code{Boost.Python} and
4134@code{pybind11} and uses near-identical syntax. In contrast to these existing
4135tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
4136of time, produce smaller binaries, and have better runtime performance.")
4137 (license license:bsd-3)))
4138
4139(define-public python-nr-date
4140 (package
4141 (name "python-nr-date")
4142 (version "2.1.0")
4143 (source
4144 (origin
4145 (method url-fetch)
4146 (uri (pypi-uri "nr_date" version))
4147 (sha256
4148 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
4149 (build-system pyproject-build-system)
4150 (arguments (list #:tests? #false)) ;there are none
4151 (native-inputs (list python-poetry-core))
4152 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
4153 (synopsis "Fast, regex-based date parsing library in plain Python")
4154 (description "This package provides a fast, regex-based date parsing
4155library in pure Python.")
4156 (license license:expat)))
4157
4158(define-public python-nr-stream
4159 (package
4160 (name "python-nr-stream")
4161 (version "1.1.5")
4162 (source
4163 (origin
4164 (method url-fetch)
4165 (uri (pypi-uri "nr_stream" version))
4166 (sha256
4167 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
4168 (build-system pyproject-build-system)
4169 (arguments (list #:tests? #false)) ;there are none
4170 (native-inputs (list python-poetry-core))
4171 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
4172 (synopsis "Stream and Optional classes for Python")
4173 (description "This package provides a @code{Stream} and @code{Optional}
4174class.")
4175 (license license:expat)))
4176
4177(define-public python-nr-util
4178 (package
4179 (name "python-nr-util")
4180 (version "0.8.12")
4181 (source
4182 (origin
4183 (method url-fetch)
4184 (uri (pypi-uri "nr.util" version))
4185 (sha256
4186 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
4187 (build-system pyproject-build-system)
4188 (arguments
4189 (list
4190 #:tests? #false ;there are none
4191 #:phases
4192 #~(modify-phases %standard-phases
4193 (add-after 'unpack 'patch-build-system
4194 (lambda _
4195 (substitute* "pyproject.toml"
4196 (("^config =.*") "config = []\n"))))
4197 (add-after 'install 'fix-name
4198 (lambda* (#:key inputs outputs #:allow-other-keys)
4199 (let* ((sitedir (site-packages inputs outputs))
4200 (dist-info
4201 (string-append sitedir "/nr_util-" #$version ".dist-info")))
4202 (substitute* (string-append dist-info "/METADATA")
4203 (("Name: nr-util")
4204 "Name: nr.util"))
4205 (substitute* (string-append dist-info "/RECORD")
4206 (("nr_util") "nr.util"))
4207 (rename-file dist-info
4208 (string-append sitedir
4209 "/nr.util-"
4210 #$version ".dist-info"))))))))
4211 (propagated-inputs (list python-deprecated python-typing-extensions))
4212 (native-inputs (list python-poetry-core))
4213 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
4214 (synopsis "General purpose Python utility library")
4215 (description "This package provides a general purpose Python utility
4216library.")
4217 (license license:expat)))
4218
4219(define-public python-slicerator
4220 (package
4221 (name "python-slicerator")
4222 (version "1.1.0")
4223 (source
4224 (origin
4225 (method url-fetch)
4226 (uri (pypi-uri "slicerator" version))
4227 (sha256
4228 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
4229 (build-system pyproject-build-system)
4230 (native-inputs
4231 (list python-numpy
4232 python-pytest
4233 python-setuptools))
4234 (home-page "https://github.com/soft-matter/slicerator")
4235 (synopsis "Lazy-loading, fancy-sliceable iterable")
4236 (description
4237 "This package provides a lazy-loading, fancy-sliceable iterable. Think
4238of it like a generator that is \"reusable\" and has a length.")
4239 (license license:bsd-3)))
4240
4241(define-public python-pytelegrambotapi
4242 (package
4243 (name "python-pytelegrambotapi")
4244 (version "4.22.0")
4245 (source
4246 (origin
4247 (method git-fetch)
4248 (uri (git-reference
4249 (url "https://github.com/eternnoir/pyTelegramBotAPI")
4250 (commit version)))
4251 (file-name (git-file-name name version))
4252 (sha256
4253 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
4254 (build-system pyproject-build-system)
4255 (arguments
4256 (list
4257 #:phases
4258 #~(modify-phases %standard-phases
4259 (replace 'check
4260 (lambda* (#:key tests? #:allow-other-keys)
4261 (when tests?
4262 (with-directory-excursion "tests"
4263 (invoke "py.test"))))))))
4264 (propagated-inputs
4265 (list python-requests))
4266 (native-inputs
4267 (list python-hatchling python-pytest))
4268 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
4269 (synopsis "Python Telegram bot api")
4270 (description "This package provides a simple, but extensible Python
4271implementation for the Telegram Bot API.")
4272 (license license:gpl2)))
4273
4274(define-public python-pytoolconfig
4275 (package
4276 (name "python-pytoolconfig")
4277 (version "1.3.1")
4278 (source
4279 (origin
4280 (method url-fetch)
4281 (uri (pypi-uri "pytoolconfig" version))
4282 (sha256
4283 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
4284 (build-system pyproject-build-system)
4285 (arguments
4286 (list
4287 #:test-flags
4288 ;; Requires Sphinx.
4289 #~(list "--ignore=tests/test_documentation.py")))
4290 (native-inputs
4291 (list python-pdm-backend
4292 python-pytest))
4293 (propagated-inputs
4294 (list python-tomli
4295 python-packaging
4296 python-platformdirs))
4297 (home-page "https://pypi.org/project/pytoolconfig/")
4298 (synopsis "Python tool configuration")
4299 (description "The goal of this project is to manage configuration for
4300Python tools, such as rope and add support for a @file{pyproject.toml}
4301configuration file.")
4302 (license license:lgpl3+)))
4303
4304(define-public python-pytooling
4305 (package
4306 (name "python-pytooling")
4307 (version "8.12.0")
4308 (source
4309 (origin
4310 (method git-fetch)
4311 (uri (git-reference
4312 (url "https://github.com/pyTooling/pyTooling/")
4313 (commit (string-append "v" version))))
4314 (file-name (git-file-name name version))
4315 (sha256
4316 (base32 "03zfm12n0zxnr51sybs7dy83q152p2jylahl1307icarpn8553c2"))))
4317 (build-system pyproject-build-system)
4318 (arguments
4319 (list
4320 ;; Tests do not support linux-i686 system: Exception: Unknown
4321 ;; architecture 'linux-i686' for a native Linux.
4322 #:tests? (not (or (%current-target-system)
4323 (target-x86-32?)))
4324 #:test-flags
4325 #~(list
4326 "tests/unit"
4327 ;; These tests try to access the network.
4328 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
4329 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
4330 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
4331 #:phases
4332 #~(modify-phases %standard-phases
4333 (add-after 'unpack 'patch-git-bin-for-tests
4334 (lambda* (#:key inputs #:allow-other-keys)
4335 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
4336 "tests/unit/CLIAbstraction/Program.py")
4337 (("/usr/bin")
4338 (dirname (search-input-file inputs "/bin/git")))))))))
4339 (native-inputs
4340 (list git-minimal/pinned
4341 python-aiohttp
4342 python-colorama
4343 python-pytest
4344 python-requests
4345 python-ruamel.yaml
4346 python-setuptools))
4347 (home-page "https://pytooling.github.io/pyTooling/")
4348 (synopsis "Miscellaneous Python tools")
4349 (description
4350 "pyTooling is a collection of (abstract) data models, lacking classes,
4351decorators, a new performance boosting meta-class, and enhanced exceptions.
4352It also provides lots of helper functions---e.g., to ease the handling of
4353package descriptions or to unify multiple existing APIs into a single API.")
4354 (license license:asl2.0)))
4355
4356(define-public python-colorlog
4357 (package
4358 (name "python-colorlog")
4359 (version "6.9.0")
4360 (source
4361 (origin
4362 (method url-fetch)
4363 (uri (pypi-uri "colorlog" version))
4364 (sha256
4365 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
4366 (build-system pyproject-build-system)
4367 (native-inputs
4368 (list python-pytest
4369 python-setuptools))
4370 (home-page "https://github.com/borntyping/python-colorlog")
4371 (synopsis "Log formatting with colors for python")
4372 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
4373with Python's logging module that outputs records using terminal colors.")
4374 (license license:expat)))
4375
4376(define-public python-pyprind
4377 (package
4378 (name "python-pyprind")
4379 (version "2.11.3")
4380 (source
4381 (origin
4382 (method url-fetch)
4383 (uri (pypi-uri "PyPrind" version))
4384 (sha256
4385 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
4386 (build-system pyproject-build-system)
4387 (native-inputs (list python-pytest python-setuptools))
4388 (propagated-inputs (list python-psutil))
4389 (home-page "https://github.com/rasbt/pyprind")
4390 (synopsis "Python Progress Bar and Percent Indicator Utility")
4391 (description
4392 "The PyPrind (Python Progress Indicator) module provides a progress bar
4393and a percentage indicator object that let you track the progress of a loop
4394structure or other iterative computation.")
4395 (license license:bsd-3)))
4396
4397(define-public python-gh-md-to-html
4398 (package
4399 (name "python-gh-md-to-html")
4400 (version "1.21.2")
4401 (source
4402 (origin
4403 (method url-fetch)
4404 (uri (pypi-uri "gh_md_to_html" version))
4405 (sha256
4406 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
4407 (build-system pyproject-build-system)
4408 (arguments
4409 (list
4410 #:tests? #false ;there are none
4411 #:phases
4412 #~(modify-phases %standard-phases
4413 (add-after 'unpack 'relax-shellescape-requirement
4414 (lambda _
4415 (substitute* "src/__init__.py"
4416 (("import shellescape")
4417 "import shlex")
4418 (("shellescape\\.quote")
4419 "shlex.quote"))
4420 (substitute* "setup.py"
4421 (("\"shellescape\",")
4422 "")))))))
4423 (propagated-inputs
4424 (list python-beautifulsoup4
4425 python-emoji-for-gh-md-to-html
4426 python-pillow
4427 python-requests
4428 python-webcolors))
4429 (native-inputs (list python-setuptools))
4430 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
4431 (synopsis "Github-flavored Markdown")
4432 (description
4433 "This package provides a feature-rich Github-flavored Markdown to HTML
4434Python library and command line interface.")
4435 (license license:expat)))
4436
4437(define-public python-gfloat
4438 (package
4439 (name "python-gfloat")
4440 (version "0.5.2")
4441 (source
4442 (origin
4443 (method url-fetch)
4444 (uri (pypi-uri "gfloat" version))
4445 (sha256
4446 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
4447 (build-system pyproject-build-system)
4448 (arguments
4449 (list
4450 #:test-flags
4451 #~(list
4452 "--ignore=test/test_array_api.py" ;requires array_api_strict
4453 "--ignore=test/test_jax.py" ;requires python-jax
4454 "--ignore=test/test_microxcaling.py" ;requires torchao
4455 ;; Jupyter.
4456 "--ignore-glob=docs/source/*.ipynb")))
4457 (propagated-inputs
4458 (list python-array-api-compat python-more-itertools python-numpy))
4459 (native-inputs (list python-nbval
4460 python-ml-dtypes
4461 python-pytest
4462 python-pytorch
4463 python-setuptools
4464 openssl))
4465 (home-page "https://github.com/graphcore-research/gfloat")
4466 (synopsis "Generic floating point handling in Python")
4467 (description
4468 "This package provides an implementation of generic floating point encode
4469and decode logic in Python. It handles various current and proposed floating
4470point types:
4471
4472@itemize
4473@item IEEE 754: Binary16, Binary32
4474@item OCP Float8: E5M2, E4M3
4475@item IEEE WG P3109
4476@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
4477@end itemize")
4478 (license license:expat)))
4479
4480(define-public python-glymur
4481 (package
4482 (name "python-glymur")
4483 (version "0.14.3")
4484 (source
4485 (origin
4486 (method git-fetch) ; no tests data in PyPi package
4487 (uri (git-reference
4488 (url "https://github.com/quintusdias/glymur")
4489 (commit (string-append "v" version))))
4490 (file-name (git-file-name name version))
4491 (sha256
4492 (base32 "0266gj8a2p8jkbgb34lgk8dwin7ib2g38vdh04b2p6yhqx8w3xg8"))))
4493 (build-system pyproject-build-system)
4494 (arguments
4495 (list
4496 #:test-flags
4497 #~(list "--numprocesses" (number->string (parallel-job-count))
4498 ;; Failing test due to inability of ctypes.util.find_library()
4499 ;; to determine library path, which is patched above.
4500 "--ignore=tests/test_config.py")
4501 #:phases
4502 #~(modify-phases %standard-phases
4503 (add-after 'unpack 'patch-library-locations
4504 (lambda* (#:key inputs #:allow-other-keys)
4505 ;; XXX: It's a workaround for Python inability to find the
4506 ;; .so libraries with ctypes.util.find_library()
4507 (substitute* '("glymur/config.py")
4508 (("path = find_library\\(libname\\)")
4509 (string-append
4510 "if libname == \"openjp2\":\n"
4511 " path = \""
4512 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
4513 " elif libname == \"tiff\":\n"
4514 " path = \""
4515 (search-input-file inputs "/lib/libtiff.so") "\"\n"
4516 " elif libname == \"c\":\n"
4517 " path = \""
4518 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
4519 (native-inputs
4520 (list python-pytest
4521 python-pytest-xdist
4522 python-scikit-image
4523 python-setuptools))
4524 (inputs
4525 (list openjpeg ; glymur/lib/openjp2.py
4526 libtiff)) ; glymur/lib/tiff.py
4527 (propagated-inputs
4528 (list python-lxml
4529 python-numpy
4530 python-pillow ))
4531 (home-page "https://github.com/quintusdias/glymur")
4532 (synopsis "Python interface to OpenJPEG and LibTIFF")
4533 (description
4534 "This package provides Python interface to the OpenJPEG library which
4535allows one to read and write JPEG 2000 files")
4536 (license license:expat)))
4537
4538(define-public python-gphoto2
4539 (package
4540 (name "python-gphoto2")
4541 (version "2.6.1")
4542 (source
4543 (origin
4544 (method git-fetch) ; no tests in PyPI
4545 (uri (git-reference
4546 (url "https://github.com/jim-easterbrook/python-gphoto2")
4547 (commit (string-append "v" version))))
4548 (file-name (git-file-name name version))
4549 (sha256
4550 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
4551 (build-system pyproject-build-system)
4552 (native-inputs
4553 (list pkg-config python-pytest python-setuptools python-wheel))
4554 (inputs
4555 (list libgphoto2))
4556 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
4557 (synopsis "Python interface to libgphoto2")
4558 (description "@code{python-gphoto2} is a comprehensive Python interface
4559(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
4560automatically generate the interface code.")
4561 (license license:lgpl3+)))
4562
4563(define-public python-colour
4564 (package
4565 (name "python-colour")
4566 (version "0.1.5")
4567 (source
4568 (origin
4569 (method git-fetch)
4570 (uri (git-reference
4571 (url "https://github.com/vaab/colour")
4572 (commit version)))
4573 (file-name (git-file-name name version))
4574 (sha256
4575 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
4576 (patches (search-patches "python-colour-remove-d2to1.patch"))))
4577 (build-system pyproject-build-system)
4578 (arguments
4579 (list
4580 #:tests? #f ; No tests.
4581 #:phases
4582 #~(modify-phases %standard-phases
4583 (add-after 'unpack 'set-version
4584 (lambda _
4585 (substitute* "autogen.sh"
4586 (("if ! \"\\$git\".*")
4587 "if false ; then\n")
4588 (("depends git grep")
4589 "depends grep")
4590 (("version=\\$\\(\"\\$git\" describe --tags\\)")
4591 (format #f "version=~s" #$version))))))))
4592 (native-inputs (list python-setuptools))
4593 (home-page "https://github.com/vaab/colour")
4594 (synopsis "Convert and manipulate various color representations")
4595 (description
4596 "This package provides a pythonic way to manipulate color representations
4597(HSL, RVB,web, X11, ...).")
4598 (license license:expat)))
4599
4600(define-public python-rapidfuzz
4601 (package
4602 (name "python-rapidfuzz")
4603 (version "3.14.1")
4604 (source
4605 (origin
4606 (method git-fetch)
4607 (uri (git-reference
4608 (url "https://github.com/rapidfuzz/RapidFuzz")
4609 (commit (string-append "v" version))))
4610 (file-name (git-file-name name version))
4611 (sha256
4612 (base32 "1kqy9paxri1ih47mwmsxwz7a222sn2si5n8qd7gxhdf1wdrpdrm7"))))
4613 (build-system pyproject-build-system)
4614 (native-inputs
4615 (list cmake-minimal
4616 python-cython
4617 python-pytest
4618 python-scikit-build-core
4619 rapidfuzz-cpp
4620 taskflow))
4621 (home-page "https://github.com/rapidfuzz/RapidFuzz")
4622 (synopsis "Rapid fuzzy string matching")
4623 (description
4624 "RapidFuzz is a fast string matching library for Python and
4625C++, which is using the string similarity calculations from FuzzyWuzzy.")
4626 (license license:expat)))
4627
4628(define-public python-easygui
4629 (package
4630 (name "python-easygui")
4631 (version "0.98.1")
4632 (source
4633 (origin
4634 (method git-fetch)
4635 (uri (git-reference
4636 (url "https://github.com/robertlugg/easygui")
4637 (commit version)))
4638 (file-name (git-file-name name version))
4639 (sha256
4640 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
4641 (build-system pyproject-build-system)
4642 (arguments
4643 ;; XXX: There seem to be no tests upstream, although the package itself
4644 ;; seems to provide a lot of demo elements.
4645 (list #:tests? #f))
4646 (native-inputs (list python-pytest python-setuptools))
4647 (propagated-inputs (list `(,python "tk")))
4648 (home-page "https://github.com/robertlugg/easygui")
4649 (synopsis "GUI programming module for Python")
4650 (description
4651 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
4652different from other GUI generators in that EasyGUI is NOT event-driven.
4653Instead, all GUI interactions are invoked by simple function calls.")
4654 (license license:bsd-3)))
4655
4656(define-public python-echo
4657 (package
4658 (name "python-echo")
4659 (version "0.12.1")
4660 (source
4661 (origin
4662 (method url-fetch)
4663 (uri (pypi-uri "echo" version))
4664 (sha256
4665 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
4666 (build-system pyproject-build-system)
4667 (arguments
4668 (list
4669 #:phases
4670 #~(modify-phases %standard-phases
4671 (add-before 'check 'start-xorg-server
4672 (lambda _
4673 ;; The test suite requires a running X server.
4674 (system "Xvfb :99 -screen 0 1024x768x24 &")
4675 (setenv "DISPLAY" ":99.0"))))))
4676 (propagated-inputs
4677 (list python-numpy
4678 python-qtpy
4679 python-pyqt-6))
4680 (native-inputs
4681 (list python-pytest
4682 python-setuptools
4683 python-setuptools-scm
4684 xorg-server-for-tests))
4685 (home-page "https://github.com/glue-viz/echo")
4686 (synopsis "Callback Properties in Python")
4687 (description
4688 "Echo is a small library for attaching callback functions to property
4689state changes.")
4690 (license license:expat)))
4691
4692(define-public python-pymd4c
4693 (package
4694 (name "python-pymd4c")
4695 (version "1.3.0")
4696 (source
4697 (origin
4698 (method git-fetch)
4699 (uri (git-reference
4700 (url "https://github.com/dominickpastore/pymd4c")
4701 (commit (string-append "v" version))))
4702 (file-name (git-file-name name version))
4703 (sha256
4704 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
4705 (build-system pyproject-build-system)
4706 (arguments (list #:test-flags #~(list "test")))
4707 (inputs (list md4c))
4708 (native-inputs
4709 (list pkg-config python-pkgconfig python-pytest python-setuptools))
4710 (home-page "https://github.com/dominickpastore/pymd4c")
4711 (synopsis "Python bindings for MD4C")
4712 (description
4713 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
4714to CommonMark.")
4715 (license license:expat)))
4716
4717(define-public python-pymediainfo
4718 (package
4719 (name "python-pymediainfo")
4720 (version "4.1")
4721 (source
4722 (origin
4723 (method url-fetch)
4724 (uri (pypi-uri "pymediainfo" version))
4725 (sha256
4726 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
4727 (build-system pyproject-build-system)
4728 (arguments
4729 (list
4730 ;; The only failing test requires internet access.
4731 #:test-flags
4732 #~(list "-k" "not test_parse_url")
4733 #:phases
4734 #~(modify-phases %standard-phases
4735 (add-after 'unpack 'patch-libmediainfo
4736 (lambda* (#:key inputs #:allow-other-keys)
4737 (substitute* "pymediainfo/__init__.py"
4738 (("libmediainfo.so.0")
4739 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
4740 (native-inputs (list python-pytest python-setuptools))
4741 (inputs (list libmediainfo))
4742 (home-page "https://github.com/sbraz/pymediainfo")
4743 (synopsis "Python wrapper for the mediainfo library")
4744 (description
4745 "This package provides a Python wrapper for the mediainfo library to
4746access the technical and tag data for video and audio files.")
4747 (license license:expat)))
4748
4749(define-public python-psutil
4750 (package
4751 (name "python-psutil")
4752 (version "7.0.0")
4753 (source
4754 (origin
4755 (method url-fetch)
4756 (uri (pypi-uri "psutil" version))
4757 (sha256
4758 (base32 "0mn42p9pzh0wynhk9i18iyvp8h54hbcsyczajmjcpv4blgmw7sbv"))))
4759 (build-system pyproject-build-system)
4760 (arguments
4761 ;; FIXME: some tests do not return and time out. Some tests fail because
4762 ;; some processes survive kill().
4763 '(#:tests? #f))
4764 (native-inputs
4765 (list python-setuptools))
4766 (home-page "https://github.com/giampaolo/psutil")
4767 (synopsis "Library for retrieving information on running processes")
4768 (description
4769 "@code{psutil} (Python system and process utilities) is a library for
4770retrieving information on running processes and system utilization (CPU,
4771memory, disks, network) in Python. It is useful mainly for system monitoring,
4772profiling and limiting process resources and management of running processes.
4773It implements many functionalities offered by command line tools such as: ps,
4774top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
4775iotop, uptime, pidof, tty, taskset, pmap.")
4776 (license license:bsd-3)))
4777
4778(define-public python-scapy
4779 (package
4780 (name "python-scapy")
4781 (version "2.6.1")
4782 (source (origin
4783 (method url-fetch)
4784 (uri (pypi-uri "scapy" version))
4785 (sha256
4786 (base32
4787 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
4788 (arguments
4789 '(#:tests? #f)) ; There is a test directory, but apparently no
4790 ; automatic testing framework.
4791 ;; The package has more optional dependencies such as ipython and
4792 ;; matplotlib. If functionality is missing, these should be added.
4793 ;; See
4794 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
4795 (build-system pyproject-build-system)
4796 (native-inputs (list python-setuptools python-wheel))
4797 (home-page "https://scapy.net")
4798 (synopsis "Python network packet crafting library")
4799 (description
4800 "Scapy is a Python library and executable for interactively
4801manipulating network packets. It can forge or decode packets of a number
4802of protocols, send them on the wire, capture them, store or read them
4803using pcap files, match requests and replies, and so on.
4804It can handle tasks such as scanning, tracerouting, probing, unit tests,
4805attacks or network discovery.")
4806 (license license:gpl2)))
4807
4808(define-public python-icmplib
4809 (package
4810 (name "python-icmplib")
4811 (version "3.0.4")
4812 (source
4813 (origin
4814 (method git-fetch)
4815 (uri (git-reference
4816 (url "https://github.com/ValentinBELYN/icmplib")
4817 (commit (string-append "v" version))))
4818 (file-name (git-file-name name version))
4819 (sha256
4820 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
4821 (build-system pyproject-build-system)
4822 (arguments (list #:tests? #f)) ; No tests.
4823 (native-inputs (list python-setuptools))
4824 (home-page "https://github.com/ValentinBELYN/icmplib")
4825 (synopsis
4826 "Python implementation of the Internet Control Message Protocol (ICMP)")
4827 (description
4828 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
4829ICMP is typically used for diagnostic or control purposes - well known from
4830utilities such as ping(1).")
4831 (license license:lgpl3)))
4832
4833(define-public python-iron-core
4834 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
4835 (revision "0"))
4836 (package
4837 (name "python-iron-core")
4838 (version (git-version "1.2.1" revision commit))
4839 (source
4840 (origin
4841 (method git-fetch)
4842 (uri (git-reference
4843 (url "https://www.github.com/iron-io/iron_core_python")
4844 (commit commit)))
4845 (file-name (git-file-name name version))
4846 (sha256
4847 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
4848 (build-system pyproject-build-system)
4849 (arguments
4850 (list
4851 ;; XXX: Tests are run, but they seem too old/not updated.
4852 #:tests? #f
4853 #:test-backend #~'unittest))
4854 (propagated-inputs (list python-dateutil python-requests))
4855 (native-inputs (list python-setuptools))
4856 (home-page "https://www.github.com/iron-io/iron_core_python")
4857 (synopsis "Universal classes and methods for Iron.io API wrappers")
4858 (description
4859 "This package provides universal classes and methods for the Iron.io
4860API wrappers to build on.")
4861 (license license:bsd-2))))
4862
4863(define-public python-iron-mq
4864 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
4865 (revision "0"))
4866 (package
4867 (name "python-iron-mq")
4868 (version (git-version "0.9" revision commit))
4869 (source
4870 (origin
4871 (method git-fetch)
4872 (uri (git-reference
4873 (url "https://github.com/iron-io/iron_mq_python")
4874 (commit commit)))
4875 (file-name (git-file-name name version))
4876 (sha256
4877 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
4878 (build-system pyproject-build-system)
4879 (arguments
4880 (list
4881 ;; XXX: Tests are broken and require network access.
4882 #:tests? #f
4883 #:test-backend #~'unittest))
4884 (propagated-inputs (list python-iron-core))
4885 (native-inputs (list python-setuptools))
4886 (home-page "https://github.com/iron-io/iron_mq_python")
4887 (synopsis "Client library for IronMQ, a message queue in the cloud")
4888 (description
4889 "This package provides Python language bindings for IronMQ. IronMQ is an
4890elastic message queue for managing data and event flow within cloud
4891applications and between systems.")
4892 (license license:bsd-2))))
4893
4894(define-public python-rasterio
4895 (package
4896 (name "python-rasterio")
4897 (version "1.3.7")
4898 (source (origin
4899 (method url-fetch)
4900 (uri (pypi-uri "rasterio" version))
4901 (sha256
4902 (base32
4903 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
4904 (properties
4905 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
4906 (build-system pyproject-build-system)
4907 (arguments
4908 (list
4909 #:tests? #false ;test data not present
4910 #:phases
4911 '(modify-phases %standard-phases
4912 (add-before 'check 'build-extensions
4913 (lambda _
4914 ;; Cython extensions have to be built before running the tests.
4915 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
4916 (propagated-inputs (list python-affine
4917 python-attrs
4918 python-certifi
4919 python-click
4920 python-click-plugins
4921 python-cligj
4922 python-numpy
4923 python-setuptools ; For pkg_resources.
4924 python-snuggs))
4925 (native-inputs (list gdal
4926 python-boto3
4927 python-cython
4928 python-hypothesis
4929 python-packaging
4930 python-pytest
4931 python-pytest-cov
4932 python-shapely
4933 python-wheel))
4934 (home-page "https://github.com/rasterio/rasterio")
4935 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
4936 (description "This package implements fast and direct raster I/O for use
4937with Numpy and SciPy.")
4938 (license license:bsd-3)))
4939
4940(define-public python-rich-tables
4941 (package
4942 (name "python-rich-tables")
4943 (version "0.8.0")
4944 (source
4945 (origin
4946 (method git-fetch) ; no tests data in PyPi package
4947 (uri (git-reference
4948 (url "https://github.com/snejus/rich-tables")
4949 (commit version)))
4950 (file-name (git-file-name name version))
4951 (sha256
4952 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
4953 (build-system pyproject-build-system)
4954 (arguments
4955 (list
4956 #:test-flags
4957 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
4958 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
4959 (native-inputs
4960 (list python-freezegun
4961 python-poetry-core
4962 python-pytest
4963 python-pytest-cov))
4964 (propagated-inputs
4965 (list python-funcy
4966 python-humanize
4967 python-multimethod
4968 python-platformdirs
4969 python-rgbxy
4970 python-rich
4971 python-sqlparse))
4972 (home-page "https://github.com/snejus/rich-tables")
4973 (synopsis "Ready-made rich tables for various purposes")
4974 (description
4975 "This package implements rich tables for various purposes, it's JSON
4976human-prettifier based on the @code{rich} Python library.")
4977 (license license:expat)))
4978
4979(define-public python-rich-toolkit
4980 (package
4981 (name "python-rich-toolkit")
4982 (version "0.12.0")
4983 (source
4984 (origin
4985 (method url-fetch)
4986 (uri (pypi-uri "rich_toolkit" version))
4987 (sha256
4988 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
4989 (build-system pyproject-build-system)
4990 (propagated-inputs (list python-click python-rich python-typing-extensions))
4991 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
4992 (home-page "https://pypi.org/project/rich-toolkit/")
4993 (synopsis "Rich toolkit for building command-line applications")
4994 (description "This package provides the Rich toolkit for building
4995command-line applications.")
4996 (license license:expat)))
4997
4998(define-public python-shapely
4999 (package
5000 (name "python-shapely")
5001 (version "2.1.1")
5002 (source
5003 (origin
5004 (method url-fetch)
5005 (uri (pypi-uri "shapely" version))
5006 (sha256
5007 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
5008 (build-system pyproject-build-system)
5009 (arguments
5010 (list
5011 #:phases
5012 '(modify-phases %standard-phases
5013 (add-before 'check 'build-extensions
5014 (lambda _
5015 ;; Cython extensions have to be built before running the tests.
5016 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
5017 (native-inputs
5018 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
5019 (inputs
5020 (list geos))
5021 (propagated-inputs
5022 (list python-numpy))
5023 (home-page "https://github.com/shapely/shapely")
5024 (synopsis "Library for the manipulation and analysis of geometric objects")
5025 (description "Shapely is a Python package for manipulation and analysis of
5026planar geometric objects. It is based on the @code{GEOS} library.")
5027 (license license:bsd-3)))
5028
5029(define-public python-shortuuid
5030 (package
5031 (name "python-shortuuid")
5032 (version "1.0.13")
5033 (source
5034 (origin
5035 (method url-fetch)
5036 (uri (pypi-uri "shortuuid" version))
5037 (sha256
5038 (base32
5039 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
5040 (build-system pyproject-build-system)
5041 (native-inputs
5042 (list python-poetry-core python-pytest))
5043 (home-page "https://github.com/skorokithakis/shortuuid")
5044 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
5045 (description
5046 "@code{shortuuid} is a Python library for generating concise, unambiguous
5047and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
5048module and then similar looking characters are removed.")
5049 (license license:bsd-3)))
5050
5051(define-public python-logwrap
5052 (package
5053 (name "python-logwrap")
5054 (version "11.1.1")
5055 (source
5056 (origin
5057 (method git-fetch) ; no tests in PyPI release
5058 (uri (git-reference
5059 (url "https://github.com/python-useful-helpers/logwrap")
5060 (commit version)))
5061 (file-name (git-file-name name version))
5062 (sha256
5063 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
5064 (build-system pyproject-build-system)
5065 (native-inputs (list python-pytest
5066 python-setuptools
5067 python-setuptools-scm
5068 python-wheel))
5069 (home-page "https://github.com/python-useful-helpers/logwrap")
5070 (synopsis "Decorator for logging function arguments")
5071 (description "This package provides a decorator to log function arguments
5072and function call return values in a human-readable way.")
5073 (license license:asl2.0)))
5074
5075(define-public python-clyent
5076 (package
5077 (name "python-clyent")
5078 (version "1.2.2")
5079 (source
5080 (origin
5081 (method git-fetch)
5082 (uri (git-reference
5083 (url "https://github.com/Anaconda-Platform/clyent")
5084 (commit version)))
5085 (file-name (git-file-name name version))
5086 (sha256
5087 (base32 "0vi9nkd4hnvycwwpz9xip1drc5zn7bdwff1pz3azmyvh8v4hsias"))))
5088 (build-system pyproject-build-system)
5089 (arguments
5090 (list
5091 #:test-backend #~'unittest
5092 #:phases
5093 #~(modify-phases %standard-phases
5094 ;; Replace version manually because clyent uses
5095 ;; versioneer, which requires git metadata.
5096 (add-after 'unpack 'versioneer
5097 (lambda _
5098 (invoke "versioneer" "install")
5099 (substitute* "setup.py"
5100 (("version=versioneer.get_version\\(),")
5101 (string-append "version='" #$version "',"))))))))
5102 (native-inputs
5103 (list python-mock
5104 python-setuptools
5105 python-versioneer))
5106 (home-page "https://github.com/Anaconda-Platform/clyent")
5107 (synopsis "Command line client library")
5108 (description
5109 "Clyent is a Python command line utility library. It is used by
5110@code{binstar}, @code{binstar-build}, and @code{chalmers}.")
5111 (license license:bsd-3)))
5112
5113(define-public python-babel
5114 (package
5115 (name "python-babel")
5116 (version "2.16.0")
5117 (source
5118 (origin
5119 (method url-fetch)
5120 (uri (pypi-uri "babel" version))
5121 (sha256
5122 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
5123 (build-system pyproject-build-system)
5124 (native-inputs
5125 (list python-freezegun
5126 python-pytest
5127 python-setuptools
5128 tzdata-for-tests))
5129 (propagated-inputs
5130 (list python-pytz))
5131 (home-page "https://babel.pocoo.org/")
5132 (synopsis
5133 "Tools for internationalizing Python applications")
5134 (description
5135 "Babel is composed of two major parts:
5136- tools to build and work with gettext message catalogs
5137- a Python interface to the CLDR (Common Locale Data Repository), providing
5138access to various locale display names, localized number and date formatting,
5139etc.")
5140 (license license:bsd-3)))
5141
5142(define-public python-bidict
5143 (package
5144 (name "python-bidict")
5145 (version "0.23.1")
5146 (source
5147 (origin
5148 (method git-fetch) ; no tests in PyPI.
5149 (uri (git-reference
5150 (url "https://github.com/jab/bidict")
5151 (commit (string-append "v" version))))
5152 (file-name (git-file-name name version))
5153 (sha256
5154 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
5155 (build-system pyproject-build-system)
5156 (native-inputs
5157 (list python-pytest
5158 python-pytest-benchmark
5159 python-pytest-xdist
5160 python-setuptools
5161 python-sortedcollections
5162 python-wheel))
5163 (home-page "https://bidict.readthedocs.io")
5164 (synopsis "Bidirectional mapping library")
5165 (description "The @code{bidict} library provides several data structures
5166for working with bidirectional mappings in Python.")
5167 (license license:mpl2.0)))
5168
5169(define-public python-bip39
5170 (package
5171 (name "python-bip39")
5172 (version "0.0.2")
5173 (source
5174 (origin
5175 (method url-fetch)
5176 (uri (pypi-uri "bip39" version))
5177 (sha256
5178 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
5179 (build-system pyproject-build-system)
5180 (native-inputs (list python-pytest python-setuptools))
5181 (home-page "https://github.com/de-centralized-systems/python-bip39/")
5182 (synopsis "Self-contained and simple BIP39 implementation in Python")
5183 (description
5184 "This package provides a self-contained and simple BIP39
5185implementation written in Python. It includes a @code{bip39.py} executable.
5186
5187BIP39 is a standardized mapping between binary data (the @emph{entropy}),
5188and a list of words that are easier to remember for humans (the
5189@emph{mnemonic}).")
5190 (license license:expat)))
5191
5192(define-public python-bitarray
5193 (package
5194 (name "python-bitarray")
5195 (version "3.4.3")
5196 (source (origin
5197 (method url-fetch)
5198 (uri (pypi-uri "bitarray" version))
5199 (sha256
5200 (base32
5201 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
5202 (build-system pyproject-build-system)
5203 (arguments
5204 (list #:phases
5205 #~(modify-phases %standard-phases
5206 (replace 'check
5207 (lambda* (#:key tests? #:allow-other-keys)
5208 (when tests?
5209 ;; Step out of the source directory to avoid interference.
5210 (with-directory-excursion "/tmp"
5211 (invoke "python" "-c"
5212 "import bitarray; bitarray.test()"))))))))
5213 (native-inputs (list python-setuptools python-wheel))
5214 (home-page "https://github.com/ilanschnell/bitarray")
5215 (synopsis "Efficient arrays of booleans")
5216 (description "This package provides an object type which efficiently
5217represents an array of booleans. Bitarrays are sequence types and behave very
5218much like usual lists. Eight bits are represented by one byte in a contiguous
5219block of memory. The user can select between two representations:
5220little-endian and big-endian. All of the functionality is implemented in C.
5221Methods for accessing the machine representation are provided. This can be
5222useful when bit level access to binary files is required, such as portable
5223bitmap image files. Also, when dealing with compressed data which uses
5224variable bit length encoding, you may find this module useful.")
5225 (license license:psfl)))
5226
5227(define-public python-bitarray-2
5228 (package
5229 (inherit python-bitarray)
5230 (version "2.8.1")
5231 (source (origin
5232 (method url-fetch)
5233 (uri (pypi-uri "bitarray" version))
5234 (sha256
5235 (base32
5236 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
5237
5238(define-public python-boolean.py
5239 (package
5240 (name "python-boolean.py")
5241 (version "5.0")
5242 (source
5243 (origin
5244 (method url-fetch)
5245 (uri (pypi-uri "boolean_py" version))
5246 (sha256
5247 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
5248 (build-system pyproject-build-system)
5249 (native-inputs (list python-pytest python-setuptools python-wheel))
5250 (home-page "https://github.com/bastikr/boolean.py")
5251 (synopsis "Boolean algebra in one Python module")
5252 (description
5253 "This is a small Python library that implements boolean algebra.
5254It defines two base elements, @code{TRUE} and @code{FALSE}, and a
5255@code{Symbol} class that can take on one of these two values. Calculations
5256are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
5257compositions like @code{XOR} and @code{NAND} are emulated on top of them.
5258Expressions are constructed from parsed strings or directly in Python.")
5259 (license license:bsd-2)))
5260
5261(define-public python-h5netcdf
5262 (package
5263 (name "python-h5netcdf")
5264 (version "1.3.0")
5265 (source
5266 (origin
5267 (method url-fetch)
5268 (uri (pypi-uri "h5netcdf" version))
5269 (sha256
5270 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
5271 (build-system pyproject-build-system)
5272 (native-inputs
5273 (list python-netcdf4
5274 python-pytest
5275 python-setuptools
5276 python-setuptools-scm
5277 python-wheel))
5278 (propagated-inputs
5279 (list python-h5py python-packaging))
5280 (home-page "https://h5netcdf.org")
5281 (synopsis "Python interface for the netCDF4 file-format based on h5py")
5282 (description "This package provides a Python interface for the netCDF4
5283file-format that reads and writes local or remote HDF5 files directly via
5284@url{h5py, https://www.h5py.org/} or @url{h5pyd,
5285https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
5286library.")
5287 (license license:bsd-3)))
5288
5289(define-public python-h5py
5290 (package
5291 (name "python-h5py")
5292 (version "3.15.1")
5293 (source
5294 (origin
5295 (method url-fetch)
5296 (uri (pypi-uri "h5py" version))
5297 (sha256
5298 (base32 "0sbbw9100f2763czngbpg1jxisp5r5pkpa2swm6mcws4bka3wvn8"))))
5299 (build-system pyproject-build-system)
5300 (arguments
5301 (list
5302 ;; tests: 800 passed, 18 skipped, 4 deselected, 12 warnings
5303 #:test-flags
5304 ;; Tests requiring the build with MPI.
5305 #~(list "-k" (string-append "not test_mpio"
5306 " and not test_mpio_append"
5307 " and not test_mpi_atomic"
5308 " and not test_close_multiple_mpio_driver"))
5309 #:phases
5310 #~(modify-phases %standard-phases
5311 (add-after 'unpack 'fix-hdf5-paths
5312 (lambda _
5313 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))))
5314 (replace 'check
5315 (lambda* (#:key tests? test-flags #:allow-other-keys)
5316 (when tests?
5317 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
5318 (with-directory-excursion #$output
5319 (apply invoke "pytest" "-vv" test-flags))))))))
5320 (native-inputs
5321 (list pkg-config
5322 python-cython
5323 python-pkgconfig
5324 python-pytest
5325 python-setuptools))
5326 (inputs
5327 (list hdf5))
5328 (propagated-inputs
5329 (list python-numpy))
5330 (home-page "https://www.h5py.org/")
5331 (synopsis "Read and write HDF5 files from Python")
5332 (description
5333 "The h5py package provides both a high- and low-level interface to the
5334HDF5 library from Python. The low-level interface is intended to be a
5335complete wrapping of the HDF5 API, while the high-level component supports
5336access to HDF5 files, datasets and groups using established Python and NumPy
5337concepts.")
5338 (license license:bsd-3)))
5339
5340(define-public python-hdf5storage
5341 ;; XXX: Use the latest commit containing compatability with Pytest and Python
5342 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
5343 ;;
5344 ;; This package probably is sun setting, consider to remove when stops
5345 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
5346 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
5347 (revision "0"))
5348 (package
5349 (name "python-hdf5storage")
5350 (version (git-version "0.1.19" revision commit))
5351 (source
5352 (origin
5353 (method git-fetch)
5354 (uri (git-reference
5355 (url "https://github.com/frejanordsiek/hdf5storage")
5356 (commit commit)))
5357 (file-name (git-file-name name version))
5358 (sha256
5359 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
5360 (build-system pyproject-build-system)
5361 (native-inputs
5362 (list python-pytest
5363 python-setuptools))
5364 (propagated-inputs
5365 (list python-h5py
5366 python-numpy-1))
5367 (home-page "https://github.com/frejanordsiek/hdf5storage")
5368 (synopsis "Read and write Python data types from and to HDF5 files")
5369 (description
5370 "This Python package provides high-level utilities to read and write a
5371variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
5372formatted files. This package also provides support for MATLAB MAT v7.3
5373formatted files, which are HDF5 files with a different extension and some
5374extra metadata. Because HDF5 and MAT files might need to be read from
5375untrusted sources, pickling is avoided in this package.")
5376 (license license:bsd-2))))
5377
5378(define-public python-prctl
5379 (package
5380 (name "python-prctl")
5381 (version "1.8.1")
5382 (source (origin
5383 (method url-fetch)
5384 (uri (pypi-uri "python-prctl" version))
5385 (sha256
5386 (base32
5387 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
5388 (build-system pyproject-build-system)
5389 (arguments
5390 (list #:test-backend ''custom
5391 #:test-flags ''("test_prctl.py")
5392 #:phases
5393 #~(modify-phases %standard-phases
5394 (add-after 'unpack 'patch-tests
5395 (lambda _
5396 (substitute* "test_prctl.py"
5397 ;; actual suffix used in cpython build output dir name
5398 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
5399 ;; test_no_new_privs assumes existance of /bin/ping, but
5400 ;; can never run anyway due to it requiring setuid ping.
5401 ;; just short circuit it instead.
5402 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
5403 (inputs (list libcap))
5404 (native-inputs (list python-setuptools))
5405 (supported-systems (filter target-linux? %supported-systems))
5406 (home-page "https://pythonhosted.org/python-prctl")
5407 (synopsis "Linux capabilities library")
5408 (description "This package provides a Python library for controlling Linux
5409capabilities and attributes, similar to the prctl syscall.")
5410 (license license:gpl3+)))
5411
5412(define-public python-pyhimitsu
5413 (package
5414 (name "python-pyhimitsu")
5415 (version "0.0.9")
5416 (source (origin
5417 (method url-fetch)
5418 (uri (pypi-uri "py_himitsu" version))
5419 (sha256
5420 (base32
5421 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
5422 (build-system pyproject-build-system)
5423 (arguments
5424 (list
5425 #:phases
5426 #~(modify-phases %standard-phases
5427 (replace 'check
5428 (lambda _
5429 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
5430 (invoke "make" "check"))))))
5431 (native-inputs (list python-hatchling))
5432 (propagated-inputs (list python-pyxdg))
5433 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
5434 (synopsis "Himitsu client protocol implementation in Python")
5435 (description "This package provides a library for writing Himitsu client
5436programs in Python.")
5437 (license license:expat)))
5438
5439(define-public python-hjson
5440 ;; Using commit from master branch as the PyPI version does not contain
5441 ;; the hjson/tests/ directory.
5442 (let ((revision "0")
5443 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
5444 (package
5445 (name "python-hjson")
5446 (version (git-version "3.1.0" revision commit))
5447 (source (origin
5448 (method git-fetch)
5449 (uri (git-reference
5450 (url "https://github.com/hjson/hjson-py")
5451 (commit commit)))
5452 (file-name (git-file-name name version))
5453 (sha256
5454 (base32
5455 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))))
5456 (build-system pyproject-build-system)
5457 (native-inputs (list python-setuptools python-wheel))
5458 (home-page "https://github.com/hjson/hjson-py")
5459 (synopsis "Python package to parse HJSON documents")
5460 (description "This package provides a Python library and a command-line
5461interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
5462 (license license:expat))))
5463
5464(define-public python-hnswlib
5465 (package
5466 (name "python-hnswlib")
5467 (version "0.8.0")
5468 (source
5469 (origin
5470 (method git-fetch)
5471 (uri (git-reference
5472 (url "https://github.com/nmslib/hnswlib")
5473 (commit (string-append "v" version))))
5474 (file-name (git-file-name name version))
5475 (sha256
5476 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
5477 (build-system pyproject-build-system)
5478 (arguments
5479 (list
5480 #:phases
5481 #~(modify-phases %standard-phases
5482 (add-after 'unpack 'disable-native-optimization
5483 (lambda _
5484 (substitute* "setup.py"
5485 ((", '-march=native'")
5486 "")))))))
5487 (native-inputs
5488 (list pybind11-2
5489 python-pytest
5490 python-setuptools))
5491 (propagated-inputs
5492 (list python-numpy))
5493 (home-page "https://github.com/nmslib/hnswlib")
5494 (synopsis "Fast approximate nearest neighbor search")
5495 (description "Hnswlib is a header-only C++ implementation of fast
5496approximate nearest neighbor search with Python bindings.")
5497 (license license:asl2.0)))
5498
5499(define-public python-pylatexenc
5500 (package
5501 (name "python-pylatexenc")
5502 (version "2.10")
5503 (source
5504 (origin
5505 (method url-fetch)
5506 (uri (pypi-uri "pylatexenc" version))
5507 (sha256
5508 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
5509 (build-system pyproject-build-system)
5510 (native-inputs (list python-pytest python-setuptools python-wheel))
5511 (home-page "https://github.com/phfaist/pylatexenc")
5512 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
5513 (description
5514 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
5515Unicode-to-LaTeX conversion.")
5516 (license license:expat)))
5517
5518(define-public python-lsp-black
5519 (package
5520 (name "python-lsp-black")
5521 (version "2.0.0")
5522 (source
5523 (origin
5524 (method git-fetch)
5525 (uri (git-reference
5526 (url "https://github.com/python-lsp/python-lsp-black")
5527 (commit (string-append "v" version))))
5528 (file-name (git-file-name name version))
5529 (sha256
5530 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
5531 (build-system pyproject-build-system)
5532 (arguments
5533 ;; The python version is too old for these tests to pass properly.
5534 (list #:test-flags
5535 `'("-k" ,(string-append
5536 "not test_pylsp_format_document_syntax_error"
5537 " and not test_pylsp_format_range_syntax_error"
5538 " and not test_load_config_defaults"
5539 " and not test_load_config_with_skip_options"))))
5540 (propagated-inputs
5541 (list python-black python-lsp-server python-tomli))
5542 (native-inputs
5543 (list python-pytest python-setuptools python-wheel))
5544 (home-page "https://github.com/python-lsp/python-lsp-black")
5545 (synopsis "Black plugin for the Python LSP Server")
5546 (description "This package provides a plugin with support for the
5547@code{python-black} formatter for the Python LSP Server.")
5548 (license license:expat)))
5549
5550(define-public python-pylsp-mypy
5551 (package
5552 (name "python-pylsp-mypy")
5553 (version "0.6.9")
5554 (source
5555 (origin
5556 (method url-fetch)
5557 (uri (pypi-uri "pylsp_mypy" version))
5558 (sha256
5559 (base32 "1amvqzb5lhhw2011003mwm88chb8sz5aax1jrqc3jg0jpak992fj"))))
5560 (build-system pyproject-build-system)
5561 (native-inputs (list python-pytest python-setuptools python-wheel))
5562 (propagated-inputs (list python-mypy python-lsp-server))
5563 (home-page "https://github.com/python-lsp/pylsp-mypy")
5564 (synopsis "Mypy linter for the Python LSP Server")
5565 (description
5566 "Mypy linter integration for use with @code{python-lsp-server}.")
5567 (license license:expat)))
5568
5569(define-public python-sh
5570 (package
5571 (name "python-sh")
5572 (version "2.2.2")
5573 (source
5574 (origin
5575 (method url-fetch)
5576 (uri (pypi-uri "sh" version))
5577 (sha256
5578 (base32
5579 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
5580 (build-system pyproject-build-system)
5581 (arguments
5582 (list
5583 #:test-flags
5584 #~(list "-k" (string-join
5585 ;; These tests are shaky.
5586 (list "not test_bad_sig_raise_exception"
5587 "test_doesnt_execute_directories"
5588 "test_environment"
5589 "test_ok_code_ignores_bad_sig_exception"
5590 "test_unicode_path")
5591 " and not ")
5592 "tests")
5593 #:phases
5594 #~(modify-phases %standard-phases
5595 (add-before 'check 'pre-check
5596 (lambda _
5597 (setenv "HOME" "/tmp"))))))
5598 (native-inputs
5599 (list python-poetry-core python-pytest))
5600 (home-page "https://github.com/amoffat/sh")
5601 (synopsis "Python subprocess replacement")
5602 (description "This package provides a replacement for Python's
5603@code{subprocess} feature.")
5604 (license license:expat)))
5605
5606;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
5607;; that is updated.
5608(define-public python-sh-1
5609 (package
5610 (inherit python-sh)
5611 (version "1.14.2")
5612 (source
5613 (origin
5614 (method url-fetch)
5615 (uri (pypi-uri "sh" version))
5616 (sha256
5617 (base32
5618 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
5619 ;(build-system python-build-system)
5620 (arguments
5621 '(#:phases
5622 (modify-phases %standard-phases
5623 (replace 'check
5624 (lambda _
5625 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
5626 (setenv "HOME" "/tmp")
5627 (invoke "python" "sh.py" "test"))))))
5628 (native-inputs
5629 (list python-setuptools))))
5630
5631(define-public python-cftime
5632 (package
5633 (name "python-cftime")
5634 (version "1.6.5")
5635 (source
5636 (origin
5637 (method url-fetch)
5638 (uri (pypi-uri "cftime" version))
5639 (sha256
5640 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
5641 (build-system pyproject-build-system)
5642 (arguments
5643 (list #:phases
5644 #~(modify-phases %standard-phases
5645 (add-after 'unpack 'remove-unwanted-pytest-options
5646 (lambda _
5647 (substitute* "setup.cfg"
5648 (("doctest_optionflags.*")
5649 "")
5650 (("--cov.*")
5651 "")))))))
5652 (propagated-inputs
5653 (list python-numpy))
5654 (native-inputs
5655 (list python-cython
5656 python-pytest
5657 python-setuptools
5658 python-wheel))
5659 (home-page "https://unidata.github.io/cftime/")
5660 (synopsis "Library for time handling")
5661 (description
5662 "This package provides time-handling functionality that used to be part
5663of the netcdf4 package before.")
5664 (license license:expat)))
5665
5666(define-public python-netcdf4
5667 (package
5668 (name "python-netcdf4")
5669 (version "1.7.2")
5670 (source
5671 (origin
5672 (method git-fetch)
5673 (uri (git-reference
5674 (url "https://github.com/Unidata/netcdf4-python")
5675 (commit (string-append "v" version "rel"))))
5676 (file-name (git-file-name name version))
5677 (sha256
5678 (base32 "1bq0dkgq795z00j5z4xi1dqqw0chaj5j80hg5nci1piyr2ic41v9"))))
5679 (build-system pyproject-build-system)
5680 (arguments
5681 (list
5682 ;; tests: Ran 113 tests; skipped=7
5683 #:phases
5684 #~(modify-phases %standard-phases
5685 (add-before 'build 'set-configure-flags
5686 (lambda _
5687 (setenv "CFLAGS" (string-join
5688 (list "-g -O2"
5689 "-Wno-error=incompatible-pointer-types"
5690 "-Wno-error=implicit-function-declaration"
5691 "-Wno-error=int-conversion")
5692 " "))
5693 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
5694 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
5695 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
5696 (setenv "USE_NCCONFIG" "0")))
5697 (replace 'check
5698 (lambda* (#:key tests? #:allow-other-keys)
5699 (when tests?
5700 (with-directory-excursion "test"
5701 (setenv "NO_NET" "1")
5702 (setenv "NO_CDL" "1")
5703 (invoke "python" "run_all.py"))))))))
5704 (native-inputs
5705 (list python-cython
5706 python-packaging
5707 python-pytest
5708 python-setuptools
5709 python-setuptools-scm
5710 python-typing-extensions))
5711 (inputs
5712 (list netcdf
5713 hdf5
5714 zlib))
5715 (propagated-inputs
5716 (list python-certifi
5717 python-cftime
5718 python-numpy))
5719 (home-page "https://github.com/Unidata/netcdf4-python")
5720 (synopsis "Python/numpy interface to the netCDF library")
5721 (description "Netcdf4-python is a Python interface to the netCDF C
5722library. netCDF version 4 has many features not found in earlier
5723versions of the library and is implemented on top of HDF5. This module
5724can read and write files in both the new netCDF 4 and the old netCDF 3
5725format, and can create files that are readable by HDF5 clients. The
5726API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
5727to users of that module.")
5728 ;; The software is mainly ISC, but includes some files covered
5729 ;; by the Expat license.
5730 (license (list license:isc license:expat))))
5731
5732(define-public python-ncclient
5733 (package
5734 (name "python-ncclient")
5735 (version "0.6.19")
5736 (source
5737 (origin
5738 (method git-fetch) ;no tests in PyPI release
5739 (uri (git-reference
5740 (url "https://github.com/ncclient/ncclient")
5741 (commit (string-append "v" version))))
5742 (file-name (git-file-name name version))
5743 (sha256
5744 (base32
5745 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
5746 (build-system pyproject-build-system)
5747 (native-inputs
5748 (list python-pytest
5749 python-setuptools
5750 python-wheel))
5751 (propagated-inputs
5752 (list python-lxml
5753 python-paramiko))
5754 (home-page "https://github.com/ncclient/ncclient")
5755 (synopsis "Python library for NETCONF clients")
5756 (description "@code{ncclient} is a Python library that facilitates
5757client-side scripting and application development around the NETCONF
5758protocol.")
5759 (license license:asl2.0)))
5760
5761(define-public python-ncls
5762 (package
5763 (name "python-ncls")
5764 (version "0.0.68")
5765 (source (origin
5766 (method url-fetch)
5767 (uri (pypi-uri "ncls" version))
5768 (sha256
5769 (base32
5770 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
5771 (build-system pyproject-build-system)
5772 (arguments
5773 ;; Those tests fail with warnings (not errors) for the Numpy update.
5774 ;; Remove it at next python-team iteration.
5775 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
5776 "--ignore=examples/test_find_overlap_list.py")))
5777 (native-inputs (list python-cython
5778 python-pandas
5779 python-pytest
5780 python-setuptools
5781 python-wheel))
5782 (propagated-inputs (list python-numpy))
5783 (home-page "https://github.com/endrebak/ncls")
5784 (synopsis "Nested containment list data structure")
5785 (description
5786 "This package provides a wrapper for the nested containment list data
5787structure. It is a static interval-tree that is fast for both construction
5788and lookups.")
5789 (license license:bsd-3)))
5790
5791(define-public python-license-expression
5792 (package
5793 (name "python-license-expression")
5794 (version "30.1.0")
5795 (source
5796 (origin
5797 (method url-fetch)
5798 (uri (pypi-uri "license-expression" version))
5799 (sha256
5800 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
5801 (build-system pyproject-build-system)
5802 (native-inputs
5803 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
5804 (propagated-inputs
5805 (list python-boolean.py))
5806 (home-page "https://github.com/nexB/license-expression")
5807 (synopsis "Apply boolean logic to license expressions")
5808 (description
5809 "This Python module defines a tiny language to evaluate and compare
5810license expressions using boolean logic. Logical combinations of licenses can
5811be tested for equality, containment, and equivalence. They can be normalised
5812and simplified. It supports SPDX license expressions as well as other naming
5813conventions and aliases in the same expression.")
5814 (license license:gpl2+)))
5815
5816(define-public python-limits
5817 (package
5818 (name "python-limits")
5819 (version "5.5.0")
5820 (source
5821 (origin
5822 (method git-fetch)
5823 (uri (git-reference
5824 (url "https://github.com/alisaifee/limits")
5825 (commit version)))
5826 (file-name (git-file-name name version))
5827 (sha256
5828 (base32 "1ykld43q1pbvds4wsb18wagh852byzjpcjqg1xwa5cldigmkc2x0"))))
5829 (build-system pyproject-build-system)
5830 (arguments
5831 (list
5832 ;; XXX: Despite running only unit tests, pytest exits with an error code.
5833 #:tests? #f
5834 #:test-flags #~(list "-m" "unit")
5835 #:phases
5836 #~(modify-phases %standard-phases
5837 (add-after 'unpack 'ignore-K-pytest-option
5838 (lambda _
5839 (substitute* "pytest.ini"
5840 (("-K") "")))))))
5841 (propagated-inputs (list python-deprecated python-packaging))
5842 (native-inputs
5843 (list ; python-etcd3
5844 python-flaky
5845 python-pytest
5846 python-pytest-asyncio
5847 python-pytest-benchmark
5848 python-pytest-cov
5849 python-pytest-lazy-fixtures
5850 python-pytest-xdist
5851 ;; python-pymemcache
5852 ;; python-pymongo
5853 ;; python-redis
5854 python-setuptools
5855 ;; python-valkey
5856 ))
5857 (home-page "https://limits.readthedocs.io/")
5858 (synopsis "Rate limiting utilities")
5859 (description
5860 "This package provides a Python library to perform rate limiting with
5861commonly used storage backends.")
5862 (license license:expat)))
5863
5864(define-public python-fb-re2
5865 (package
5866 (name "python-fb-re2")
5867 (version "1.0.7")
5868 (source
5869 (origin
5870 (method git-fetch)
5871 (uri (git-reference
5872 (url "https://github.com/facebook/pyre2")
5873 (commit (string-append "v" version))))
5874 (file-name (git-file-name name version))
5875 (sha256
5876 (base32
5877 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
5878 (build-system pyproject-build-system)
5879 (native-inputs
5880 (list python-pytest python-setuptools))
5881 (inputs
5882 (list re2))
5883 (home-page "https://github.com/facebook/pyre2")
5884 (synopsis "Python wrapper for RE2")
5885 (description "This package provides a Python extension that wraps Google's
5886RE2 regular expression library. It implements many of the features of
5887Python's built-in @code{re} module with compatible interfaces.")
5888 (license license:bsd-3)))
5889
5890(define-public python-filelock
5891 ;; Try to update simultaneously with the bootstrap version in
5892 ;; (gnu packages python-build).
5893 (package
5894 (name "python-filelock")
5895 (version "3.16.1")
5896 (source
5897 (origin
5898 (method url-fetch)
5899 (uri (pypi-uri "filelock" version))
5900 (sha256
5901 (base32
5902 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
5903 (build-system pyproject-build-system)
5904 (arguments
5905 (list
5906 ;; Break cycle with virtualenv.
5907 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
5908 (native-inputs
5909 (list python-hatch-vcs
5910 python-hatchling
5911 python-pytest
5912 python-pytest-asyncio
5913 python-pytest-mock
5914 python-setuptools-scm))
5915 (home-page "https://github.com/tox-dev/py-filelock")
5916 (synopsis "Platform independent file lock")
5917 (description "@code{filelock} contains a single module implementing
5918a platform independent file lock in Python, which provides a simple way of
5919inter-process communication.")
5920 (license license:unlicense)))
5921
5922(define-public python-filelock-next
5923 (package
5924 (inherit python-filelock)
5925 (name "python-filelock")
5926 (version "3.20.0")
5927 (source
5928 (origin
5929 (method url-fetch)
5930 (uri (pypi-uri "filelock" version))
5931 (sha256
5932 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
5933 (native-inputs
5934 (list python-hatch-vcs
5935 python-hatchling
5936 python-pytest
5937 python-pytest-asyncio
5938 python-pytest-mock
5939 python-pytest-timeout))))
5940
5941(define-public python-seedir
5942 (package
5943 (name "python-seedir")
5944 (version "0.5.0")
5945 (source
5946 (origin
5947 (method url-fetch)
5948 (uri (pypi-uri "seedir" version))
5949 (sha256
5950 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
5951 (build-system pyproject-build-system)
5952 (propagated-inputs (list python-natsort))
5953 (native-inputs (list python-pytest python-setuptools python-wheel))
5954 (home-page "https://github.com/earnestt1234/seedir")
5955 (synopsis
5956 "Package for creating, editing, and reading folder tree diagrams.")
5957 (description
5958 "This is a package for creating, editing, and reading folder tree
5959diagrams.")
5960 (license license:expat)))
5961
5962(define-public python-semantic-version
5963 (package
5964 (name "python-semantic-version")
5965 (version "2.10.0")
5966 (source
5967 (origin
5968 (method url-fetch)
5969 (uri (pypi-uri "semantic_version" version))
5970 (sha256
5971 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
5972 (build-system pyproject-build-system)
5973 (arguments (list #:test-backend #~'nose2))
5974 (native-inputs
5975 (list python-nose2
5976 python-setuptools))
5977 (home-page "https://github.com/rbarrois/python-semanticversion")
5978 (synopsis "Semantic versioning module for Python")
5979 (description
5980 "The @code{semantic_version} class is a small library for handling
5981@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
5982
5983It can compare versions, generate a new version that represents a bump in one
5984of the version levels, and check whether any given string is a proper semantic
5985version identifier.")
5986 (license license:bsd-3)))
5987
5988(define-public python-serpent
5989 (package
5990 (name "python-serpent")
5991 (version "1.41")
5992 (source
5993 (origin
5994 (method git-fetch)
5995 (uri (git-reference
5996 (url "https://github.com/irmen/Serpent")
5997 (commit (string-append "serpent-" version))))
5998 (file-name (git-file-name name version))
5999 (sha256
6000 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
6001 (build-system pyproject-build-system)
6002 (arguments (list #:test-backend #~'unittest
6003 #:test-flags #~(list "discover" "-s" "tests")))
6004 (native-inputs
6005 (list python-attrs python-pytz python-setuptools))
6006 (home-page "https://github.com/irmen/Serpent")
6007 (synopsis "Serializer for literal Python expressions")
6008 (description
6009 "Serpent provides @code{ast.literal_eval()}-compatible object tree
6010serialization. It serializes an object tree into bytes (an utf-8 encoded
6011string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
6012to rebuild the original object tree.
6013
6014Because only safe literals are encoded, it is safe to send serpent data to
6015other machines, such as over the network.")
6016 (license license:expat)))
6017
6018(define-public python-setuptools-declarative-requirements
6019 (package
6020 (name "python-setuptools-declarative-requirements")
6021 (version "1.3.0")
6022 (source
6023 (origin
6024 (method url-fetch)
6025 (uri (pypi-uri "setuptools-declarative-requirements" version))
6026 (sha256
6027 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
6028 (build-system pyproject-build-system)
6029 (arguments
6030 (list #:tests? #f)) ;requir dated inputs
6031 (native-inputs
6032 (list python-setuptools-scm))
6033 (propagated-inputs
6034 (list python-setuptools))
6035 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
6036 (synopsis "File support for setuptools declarative setup.cfg")
6037 (description
6038 "This package provides file support for setuptools declarative
6039@code{setup.cfg}.")
6040 (license license:asl2.0)))
6041
6042(define-public python-humanfriendly
6043 (package
6044 (name "python-humanfriendly")
6045 (version "10.0")
6046 (source
6047 (origin
6048 (method git-fetch)
6049 (uri (git-reference
6050 (url "https://github.com/xolox/python-humanfriendly")
6051 (commit version)))
6052 (file-name (git-file-name name version))
6053 (sha256
6054 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
6055 (build-system pyproject-build-system)
6056 (arguments
6057 (list
6058 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
6059 #:tests? #f))
6060 (native-inputs (list python-setuptools))
6061 (home-page "https://humanfriendly.readthedocs.io")
6062 (synopsis "Human-friendly input and output in Python")
6063 (description
6064 "The functions and classes in @code{humanfriendly} can be used to make
6065text interfaces more user-friendly. It includes tools to parse and format
6066numbers, file sizes, and timespans, timers for long-running operations, menus
6067to allow the user to choose from a list of options, and terminal interaction
6068helpers.")
6069 (license license:expat)))
6070
6071;; XXX: The project might be abandoned and this package has no users in Guix,
6072;; consider to remove if it keeps failing.
6073;; See: <https://github.com/ethanfurman/aenum/issues/45>,
6074;; <https://github.com/ethanfurman/aenum/issues/44>,
6075;; <https://github.com/ethanfurman/aenum/issues/27>.
6076(define-public python-aenum
6077 (package
6078 (name "python-aenum")
6079 (version "3.1.15")
6080 (source
6081 (origin
6082 (method url-fetch)
6083 (uri (pypi-uri "aenum" version))
6084 (sha256
6085 (base32 "0ncmbdblqhqyb2mg73d5663vx3q2xb9q8hmj77zp1y64336pdgcc"))
6086 (modules '((guix build utils)))
6087 (snippet
6088 ;; Delete the Python 2 specific files which won't compile
6089 ;; in Python 3.
6090 '(for-each delete-file (find-files "." "_py2.py$")))))
6091 (build-system pyproject-build-system)
6092 (arguments
6093 (list
6094 #:test-flags
6095 ;; These tests are defined in "aenum/test_v3.py" and require a function
6096 ;; "test_pickle_dump_load" from "aenum/test.py" which is not imported
6097 ;; into the module's scope.
6098 #~(list "-k" (string-join
6099 (list "not test_pickle_enum_function_with_qualname"
6100 "test_class_nested_enum_and_pickle_protocol_four"
6101 "test_subclasses_with_getnewargs_ex")
6102 " and not "))
6103 #:phases
6104 #~(modify-phases %standard-phases
6105 (add-after 'unpack 'fix-tests
6106 (lambda _
6107 (substitute* "aenum/test_v3.py"
6108 ;; tempdir variable is not defined in the module.
6109 (("import tempfile.*")
6110 (format #f "import tempfile~%tempdir = tempfile.mkdtemp()~%"))))))))
6111 (native-inputs
6112 (list python-pytest
6113 python-setuptools
6114 python-wheel))
6115 (home-page "https://github.com/ethanfurman/aenum")
6116 (synopsis "Advanced enumerations, namedtuples and constants for Python")
6117 (description
6118 "The aenum library includes an @code{Enum} base class, a metaclass-based
6119@code{NamedTuple} implementation and a @code{NamedConstant} class.")
6120 (license license:bsd-3)))
6121
6122(define-public python-calver
6123 (package
6124 (name "python-calver")
6125 (version "2022.06.26")
6126 (source
6127 (origin
6128 (method git-fetch)
6129 (uri (git-reference
6130 (url "https://github.com/di/calver")
6131 (commit version)))
6132 (file-name (git-file-name name version))
6133 (sha256
6134 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
6135 (build-system pyproject-build-system)
6136 (native-inputs
6137 (list python-pretend
6138 python-pytest
6139 python-setuptools
6140 python-wheel))
6141 (home-page "https://github.com/di/calver")
6142 (synopsis "Setuptools extension for CalVer package versions")
6143 (description
6144 "The calver package is a setuptools extension for automatically defining
6145your Python package version as a calendar version.")
6146 (license license:asl2.0)))
6147
6148(define-public python-can
6149 (package
6150 (name "python-can")
6151 (version "4.6.1")
6152 (source
6153 (origin
6154 (method git-fetch)
6155 (uri (git-reference
6156 (url "https://github.com/hardbyte/python-can")
6157 (commit (string-append "v" version))))
6158 (file-name (git-file-name name version))
6159 (sha256
6160 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
6161 (build-system pyproject-build-system)
6162 (arguments
6163 (list
6164 #:test-flags
6165 #~(list
6166 ;; TODO: Check if it could be packed:
6167 ;; https://github.com/projectgus/python-canalystii
6168 ;;
6169 ;; Disable tests which require specific CAN drivers we have no
6170 ;; package for in Guix.
6171 "--ignore=test/test_interface_canalystii.py"
6172 ;; These tests fail with "OSError: [Errno 19] No such device".
6173 "-k" "not BasicTestUdpMulticastBusIPv")
6174 #:phases
6175 #~(modify-phases %standard-phases
6176 (add-after 'unpack 'relax-requirements
6177 (lambda _
6178 (substitute* "pyproject.toml"
6179 (("\"wrapt~=.*\"")
6180 "\"wrapt\"")))))))
6181 (propagated-inputs (list python-packaging python-wrapt))
6182 (native-inputs
6183 (list ;; python-canalystii ; Not packed yet
6184 python-future
6185 python-hypothesis
6186 python-mock
6187 python-parameterized
6188 python-pyserial
6189 python-pytest
6190 python-pytest-cov
6191 python-pytest-timeout
6192 python-setuptools
6193 python-setuptools-scm))
6194 (home-page "https://github.com/hardbyte/python-can")
6195 (synopsis "Controller Area Network (CAN) interface module for Python")
6196 (description
6197 "This package defines the @code{can} module, which provides controller
6198area network (CAN) support for Python developers; providing common
6199abstractions to different hardware devices, and a suite of utilities for
6200sending and receiving messages on a CAN bus.")
6201 (license license:lgpl3+)))
6202
6203(define-public python-canmatrix
6204 (package
6205 (name "python-canmatrix")
6206 (version "1.2")
6207 (source
6208 (origin
6209 (method git-fetch) ; no tests data in PyPi package
6210 (uri (git-reference
6211 (url "https://github.com/ebroecker/canmatrix")
6212 (commit version)))
6213 (file-name (git-file-name name version))
6214 (sha256
6215 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
6216 (build-system pyproject-build-system)
6217 (native-inputs
6218 (list python-pytest
6219 python-pytest-cov
6220 python-pytest-timeout
6221 python-setuptools
6222 python-wheel))
6223 (propagated-inputs
6224 (list python-attrs
6225 python-canopen
6226 python-click
6227 ;; python-ldfparser
6228 python-lxml
6229 python-openpyxl
6230 python-pyyaml
6231 python-xlrd
6232 python-xlwt))
6233 (home-page "https://github.com/ebroecker/canmatrix")
6234 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
6235 (description
6236 "This package implements a @acronym{CAN, Controller Area Network} matrix
6237object in Python which describes the CAN-communication and its needed objects
6238such as board units, frames, signals, and values. It also includes two
6239command-line tools (@command{canconvert} and @command{cancompare}) for
6240converting and comparing CAN databases.")
6241 (license license:bsd-2)))
6242
6243(define-public python-canopen
6244 (package
6245 (name "python-canopen")
6246 (version "2.4.1")
6247 (source
6248 (origin
6249 (method git-fetch)
6250 (uri (git-reference
6251 (url "https://github.com/canopen-python/canopen")
6252 (commit (string-append "v" version))))
6253 (file-name (git-file-name name version))
6254 (sha256
6255 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
6256 (build-system pyproject-build-system)
6257 (native-inputs (list python-pytest python-setuptools))
6258 (propagated-inputs (list python-can))
6259 (home-page "https://github.com/canopen-python/canopen")
6260 (synopsis "CANopen stack implementation")
6261 (description
6262 "This package provides a Python implementation of the
6263@uref{https://www.can-cia.org/canopen/,CANopen standard} for
6264@acronym{CANs, controller-area networks}. The aim of the project is to
6265support the most common parts of the CiA 301 standard in a simple
6266Pythonic interface. It is mainly targeted for testing and automation
6267tasks rather than a standard compliant master implementation.")
6268 (license license:expat)))
6269
6270(define-public python-diskcache
6271 (package
6272 (name "python-diskcache")
6273 (version "5.6.3")
6274 (source
6275 (origin
6276 (method git-fetch)
6277 (uri (git-reference
6278 (url "https://github.com/grantjenks/python-diskcache")
6279 (commit (string-append "v" version))))
6280 (file-name (git-file-name name version))
6281 (sha256
6282 (base32
6283 "0mird2yj3xbh71g325admxpif9h20w0xgp9hw6ss2bdbzxsykh6m"))))
6284 (build-system pyproject-build-system)
6285 (arguments
6286 (list
6287 #:test-flags
6288 #~(list
6289 ;; Ignore flaky tests.
6290 ;; AssertionError: assert None == 100
6291 "--deselect=tests/test_core.py::test_incr_update_keyerror")
6292 #:phases
6293 #~(modify-phases %standard-phases
6294 (add-before 'check 'fix-pytest-config
6295 (lambda _
6296 (substitute* "tox.ini"
6297 ;; no python-pytest-xdist
6298 ((".*-n auto.*")
6299 "")
6300 ;; no python-pytest-cov
6301 ((".*--cov.*")
6302 "")))))))
6303 (native-inputs
6304 (list python-django
6305 python-matplotlib
6306 python-pytest
6307 python-setuptools))
6308 (home-page "https://www.grantjenks.com/docs/diskcache/")
6309 (synopsis "Disk and file backed cache library")
6310 (description "DiskCache is a disk and file backed persistent cache.")
6311 (license license:asl2.0)))
6312
6313(define-public python-optparse-pretty
6314 (package
6315 (name "python-optparse-pretty")
6316 (version "0.1.1")
6317 (source
6318 (origin
6319 (method url-fetch)
6320 (uri (pypi-uri "optparse-pretty" version))
6321 (sha256
6322 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
6323 (build-system pyproject-build-system)
6324 (arguments (list #:tests? #false)) ;There are none
6325 (native-inputs (list python-setuptools python-wheel))
6326 (home-page "https://github.com/gvalkov/optparse-pretty")
6327 (synopsis "Compact help formatter for optparse")
6328 (description
6329 "This module provides two help formatters for optparse. They provide
6330terser and more customizable option formatting in comparison to the default
6331help formatter.")
6332 (license license:bsd-3)))
6333
6334(define-public python-orjson
6335 (package
6336 (name "python-orjson")
6337 (version "3.9.7")
6338 (source (origin
6339 (method url-fetch)
6340 (uri (pypi-uri "orjson" version))
6341 (sha256
6342 (base32
6343 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
6344 (build-system cargo-build-system)
6345 (arguments
6346 (list
6347 #:imported-modules `(,@%cargo-build-system-modules
6348 ,@%pyproject-build-system-modules)
6349 #:modules '((guix build cargo-build-system)
6350 ((guix build pyproject-build-system) #:prefix py:)
6351 (guix build utils))
6352 #:phases
6353 #~(modify-phases %standard-phases
6354 (add-after 'build 'build-python-module
6355 (assoc-ref py:%standard-phases 'build))
6356 (add-after 'build-python-module 'install-python-module
6357 (assoc-ref py:%standard-phases 'install)))
6358 #:install-source? #false))
6359 (inputs
6360 (cons maturin (cargo-inputs 'python-orjson)))
6361 (native-inputs
6362 (list python-wrapper))
6363 (home-page "https://github.com/ijl/orjson")
6364 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
6365 (description "Orjson is a fast, correct JSON library for Python. It
6366benchmarks as the fastest Python library for JSON and is more correct than the
6367standard @code{json} library or other third-party libraries. It serializes
6368dataclass, datetime, numpy, and UUID instances natively.")
6369 ;; Either of these licenses
6370 (license (list license:asl2.0 license:expat))))
6371
6372(define-public python-overrides
6373 (package
6374 (name "python-overrides")
6375 (version "7.7.0")
6376 (source
6377 (origin
6378 (method url-fetch)
6379 (uri (pypi-uri "overrides" version))
6380 (sha256
6381 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
6382 (build-system pyproject-build-system)
6383 (native-inputs (list python-pytest python-setuptools python-wheel))
6384 (home-page "https://github.com/mkorpela/overrides")
6385 (synopsis "Decorator to detect mismatch when overriding a method")
6386 (description
6387 "This package provides a decorator to automatically detect mismatch when
6388overriding a method.")
6389 (license license:asl2.0)))
6390
6391(define-public python-argparse-addons
6392 (package
6393 (name "python-argparse-addons")
6394 (version "0.12.0")
6395 (source
6396 (origin
6397 (method url-fetch)
6398 (uri (pypi-uri "argparse_addons" version))
6399 (sha256
6400 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
6401 (build-system pyproject-build-system)
6402 (native-inputs
6403 (list python-pytest python-setuptools))
6404 (home-page "https://github.com/eerimoq/argparse_addons")
6405 (synopsis "Extensions for Python's @code{argparse} library")
6406 (description "This Python library provides additional types and actions
6407for the standard @code{argparse} library.")
6408 (license license:expat)))
6409
6410(define-public python-bitstruct
6411 (package
6412 (name "python-bitstruct")
6413 (version "8.21.0")
6414 (source
6415 (origin
6416 (method url-fetch)
6417 (uri (pypi-uri "bitstruct" version))
6418 (sha256
6419 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
6420 (build-system pyproject-build-system)
6421 (native-inputs
6422 (list python-pytest
6423 python-setuptools
6424 python-wheel))
6425 (home-page "https://github.com/eerimoq/bitstruct")
6426 (synopsis "Python values to and C bit field structs converter")
6427 (description
6428 "This module performs conversions between Python values and C bit field
6429structs represented as Python byte strings. It is intended to have a similar
6430interface as the @code{struct} module from Python, but working on bits instead
6431of primitive data types like @code{char}, @code{int}, etc.")
6432 (license license:expat)))
6433
6434(define-public python-cantools
6435 (package
6436 (name "python-cantools")
6437 (version "40.5.0")
6438 (source
6439 (origin
6440 (method git-fetch)
6441 (uri (git-reference
6442 (url "https://github.com/eerimoq/cantools")
6443 (commit version)))
6444 (file-name (git-file-name name version))
6445 (sha256
6446 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
6447 (build-system pyproject-build-system)
6448 (native-inputs
6449 (list python-freezegun
6450 python-parameterized
6451 python-pytest
6452 python-setuptools
6453 python-setuptools-scm))
6454 (propagated-inputs
6455 (list python-argparse-addons
6456 python-bitstruct
6457 python-can
6458 python-crccheck
6459 python-diskcache
6460 python-matplotlib
6461 python-textparser))
6462 (home-page "https://github.com/eerimoq/cantools")
6463 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
6464 (description
6465 "This package includes Controller Area Network (CAN) related tools that
6466can be used to:
6467@itemize
6468@item parse DBC, KCD, SYM, ARXML 4 and CDD files
6469@item encode and decode CAN messages
6470@item multiplex simple and extended signals
6471@item diagnose DID encoding and decoding
6472@item dump the CAN decoder output
6473@item test CAN nodes
6474@item generate C source code
6475@item monitor the CAN bus
6476@end itemize")
6477 (license license:expat)))
6478
6479(define-public python-capturer
6480 (package
6481 (name "python-capturer")
6482 (version "3.0")
6483 (source
6484 (origin
6485 (method git-fetch)
6486 (uri (git-reference
6487 (url "https://github.com/xolox/python-capturer")
6488 (commit version)))
6489 (file-name (git-file-name name version))
6490 (sha256
6491 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
6492 (build-system pyproject-build-system)
6493 (native-inputs (list python-pytest python-setuptools))
6494 (propagated-inputs (list python-humanfriendly))
6495 (home-page "https://capturer.readthedocs.io")
6496 (synopsis "Capture stdout and stderr streams of the current process")
6497 (description
6498 "The capturer package makes it easy to capture the stdout and stderr
6499streams of the current process and subprocesses. Output can be relayed
6500to the terminal in real time but is also available to the Python program
6501for additional processing.")
6502 (license license:expat)))
6503
6504(define-public python-fastprogress
6505 (package
6506 (name "python-fastprogress")
6507 (version "1.0.3")
6508 (source (origin
6509 (method git-fetch)
6510 (uri (git-reference
6511 (url "https://github.com/fastai/fastprogress")
6512 (commit version)))
6513 (file-name (git-file-name name version))
6514 (sha256
6515 (base32
6516 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
6517 (build-system pyproject-build-system)
6518 (arguments
6519 (list #:tests? #f ;there are no tests
6520 #:phases #~(modify-phases %standard-phases
6521 ;; XXX: Fails with: "In procedure utime: No such file
6522 ;; or directory".
6523 (delete 'ensure-no-mtimes-pre-1980))))
6524 (native-inputs (list python-setuptools python-wheel))
6525 (home-page "https://github.com/fastai/fastprogress")
6526 (synopsis "Progress bar for Jupyter Notebook and console")
6527 (description
6528 "Fastprogress is a progress bar for Jupyter Notebook and console.")
6529 (license license:asl2.0)))
6530
6531(define-public python-coloredlogs
6532 (package
6533 (name "python-coloredlogs")
6534 (version "15.0.1")
6535 (source
6536 (origin
6537 (method git-fetch)
6538 (uri (git-reference
6539 (url "https://github.com/xolox/python-coloredlogs")
6540 (commit version)))
6541 (file-name (git-file-name name version))
6542 (sha256
6543 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
6544 (build-system pyproject-build-system)
6545 (arguments
6546 (list
6547 #:test-flags
6548 #~(list "-k"
6549 (string-join
6550 (list "not test_auto_install" ; Unclear why this fails.
6551 ;; XXX: Require a "script" executable.
6552 "test_cli_conversion"
6553 "test_empty_conversion"
6554 "test_output_interception")
6555 " and not "))))
6556 (native-inputs (list python-pytest python-setuptools python-verboselogs))
6557 (propagated-inputs (list python-capturer))
6558 (home-page "https://coloredlogs.readthedocs.io")
6559 (synopsis "Colored stream handler for Python's logging module")
6560 (description
6561 "The @code{coloredlogs} package enables colored terminal output for
6562Python's logging module. The @code{ColoredFormatter} class inherits from
6563@code{logging.Formatter} and uses ANSI escape sequences to render your logging
6564messages in color.")
6565 (license license:expat)))
6566
6567(define-public python-editorconfig
6568 (package
6569 (name "python-editorconfig")
6570 (version "0.17.1")
6571 (source
6572 (origin
6573 (method git-fetch)
6574 (uri (git-reference
6575 (url "https://github.com/editorconfig/editorconfig-core-py")
6576 (commit (string-append "v" version))
6577 (recursive? #t)))
6578 (file-name (git-file-name name version))
6579 (sha256
6580 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
6581 (build-system pyproject-build-system)
6582 (arguments
6583 (list
6584 #:phases
6585 #~(modify-phases %standard-phases
6586 (replace 'check
6587 (lambda _
6588 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6589 (invoke "cmake" ".")
6590 (invoke "ctest" "."))))))
6591 (native-inputs (list cmake python-setuptools python-wheel))
6592 (home-page "https://editorconfig.org/")
6593 (synopsis "EditorConfig bindings for python")
6594 (description "The EditorConfig project consists of a file format for
6595defining coding styles and a collection of text editor plugins that enable
6596editors to read the file format and adhere to defined styles. EditorConfig
6597files are easily readable and they work nicely with version control systems.")
6598 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
6599 (license (list license:bsd-2 license:psfl))))
6600
6601(define-public dosage
6602 (package
6603 (name "dosage")
6604 (version "3.2")
6605 (source
6606 (origin
6607 (method url-fetch)
6608 (uri (pypi-uri "dosage" version))
6609 (sha256
6610 (base32
6611 "0hi5rl17rj9gay7yw7ikrkyp5qhyw5bzp4ig1sj6ahzclsia8y1h"))))
6612 (build-system pyproject-build-system)
6613 (arguments
6614 ;; It requres additional modules for integration tests.
6615 (list #:test-flags #~(list "--ignore=tests/modules/")))
6616 (native-inputs
6617 (list python-pytest
6618 python-responses
6619 python-setuptools
6620 python-setuptools-scm))
6621 (inputs
6622 (list python-imagesize
6623 python-importlib-resources
6624 python-lxml
6625 python-platformdirs
6626 python-requests
6627 python-rich))
6628 (home-page "https://github.com/webcomics/dosage")
6629 (synopsis "Comic strip downloader and archiver")
6630 (description
6631 "Dosage is designed to keep a local copy of specific webcomics and other
6632picture-based content such as Picture of the Day sites. With the
6633@command{dosage} command-line script you can get the latest strip of a
6634webcomic, catch-up to the last strip downloaded, or download a strip for a
6635particular date or index, if possible.")
6636 (license license:expat)))
6637
6638(define-public python-etcd3
6639 (package
6640 (name "python-etcd3")
6641 (version "0.12.0")
6642 (source
6643 (origin
6644 (method git-fetch)
6645 (uri (git-reference
6646 (url "https://github.com/kragniz/python-etcd3")
6647 (commit (string-append "v" version))))
6648 (file-name (git-file-name name version))
6649 (sha256
6650 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
6651 (build-system pyproject-build-system)
6652 (arguments
6653 (list
6654 ;; XXX: Tests require the etcd package.
6655 #:tests? #f
6656 #:test-backend #~'custom
6657 #:test-flags ; Taken from tox.ini.
6658 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
6659 (propagated-inputs (list python-grpcio python-protobuf python-tenacity))
6660 (native-inputs (list python-mock python-pifpaf python-pytest python-setuptools))
6661 (home-page "https://github.com/kragniz/python-etcd3")
6662 (synopsis "Python client for the etcd3 API")
6663 (description
6664 "This package provide a Python client for the @code{etcd3} API.")
6665 (license license:asl2.0)))
6666
6667(define-public python-et-xmlfile
6668 (package
6669 (name "python-et-xmlfile")
6670 (version "2.0.0")
6671 (source
6672 (origin
6673 ;; Use a checkout because the PyPI archive does not contain tests.
6674 (method hg-fetch)
6675 (uri (hg-reference
6676 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
6677 (changeset version)))
6678 (file-name (string-append name "-" version "-checkout"))
6679 (sha256
6680 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
6681 (build-system pyproject-build-system)
6682 (native-inputs
6683 (list python-pytest
6684 python-lxml
6685 python-setuptools))
6686 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
6687 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
6688 (description "This Python library is based upon the @code{xmlfile} module
6689from @code{lxml}. It aims to provide a low memory, compatible implementation
6690of @code{xmlfile}.")
6691 (license license:expat)))
6692
6693(define-public python-omero-py
6694 (let ((omero-blitz-version "5.8.2"))
6695 (package
6696 (name "python-omero-py")
6697 (version "5.20.0")
6698 (source
6699 (origin
6700 (method git-fetch)
6701 (uri (git-reference
6702 (url "https://github.com/ome/omero-py")
6703 (commit (string-append "v" version))))
6704 (file-name (git-file-name name version))
6705 (sha256
6706 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
6707 (build-system pyproject-build-system)
6708 (arguments
6709 (list
6710 ;; #:tests? #f
6711 #:test-flags
6712 #~(list
6713 "-m" "not broken" "-rf" "test" "-s"
6714 ;; XXX: Failing collection because of Numpy compatibility.
6715 "--ignore=test/unit/tablestest/test_hdfstorage.py"
6716 "--ignore=test/unit/tablestest/test_servants.py"
6717 ;; TestImport tries to download Java things; TestSessions
6718 ;; and TestBuildQuery require networking.
6719 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
6720 #:modules '((guix build pyproject-build-system)
6721 (guix build utils)
6722 (ice-9 match)
6723 (srfi srfi-1)
6724 (srfi srfi-26))
6725 #:phases
6726 #~(modify-phases %standard-phases
6727 (add-after 'unpack 'find-artifacts
6728 (lambda* (#:key inputs #:allow-other-keys)
6729 (let ((zip-file
6730 (match inputs
6731 (((labels . files) ...)
6732 (find (cut string-suffix?
6733 (string-append "omero-blitz-"
6734 #$omero-blitz-version
6735 "-python.zip")
6736 <>)
6737 files)))))
6738 (setenv "ZIP_FILE"
6739 (or zip-file (error "failed to find artifact file"))))))
6740 ;; Some tests need this, such as TestTempFileManager
6741 (add-after 'build 'set-HOME
6742 (lambda _ (setenv "HOME" "/tmp")))
6743 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
6744 ;; module to load.
6745 (delete 'sanity-check)
6746 ;; The argument parser is picky and interprets the "-real" part as
6747 ;; the first argument.
6748 (add-after 'wrap 'rename-executable
6749 (lambda _
6750 (with-directory-excursion (string-append #$output "/bin")
6751 (rename-file ".omero-real" ".omero")
6752 (substitute* "omero"
6753 (("bin/.omero-real") "bin/.omero"))))))))
6754 (propagated-inputs
6755 (list python-appdirs
6756 python-future
6757 python-numpy
6758 python-pillow
6759 python-pyyaml
6760 python-requests
6761 python-tables
6762 python-zeroc-ice-3.6))
6763 (native-inputs
6764 (list python-portalocker
6765 python-pytest
6766 python-pytest-mock
6767 python-pytest-rerunfailures
6768 python-pytest-xdist
6769 python-setuptools
6770 python-wheel
6771 unzip
6772 (origin
6773 (method url-fetch)
6774 (uri (format #f "\
6775https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
6776openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
6777 omero-blitz-version
6778 omero-blitz-version))
6779 (sha256
6780 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
6781 (home-page "https://github.com/ome/omero-py")
6782 (synopsis "Python bindings to the OMERO.blitz server")
6783 (description "This package provides Python bindings to the OMERO.blitz
6784server.")
6785 (license license:gpl2))))
6786
6787(define-public python-openpyxl
6788 (package
6789 (name "python-openpyxl")
6790 (version "3.1.5")
6791 (source
6792 (origin
6793 ;; We use the upstream repository, as the tests are not included in the
6794 ;; PyPI releases.
6795 (method hg-fetch)
6796 (uri (hg-reference
6797 (url "https://foss.heptapod.net/openpyxl/openpyxl")
6798 (changeset version)))
6799 (file-name (string-append name "-" version "-checkout"))
6800 (sha256
6801 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
6802 (build-system pyproject-build-system)
6803 (arguments
6804 (list
6805 ;; XXX: The workbook writer doesn't respect SOURCE_DATE_EPOCH
6806 ;; https://foss.heptapod.net/openpyxl/openpyxl/-/issues/2268
6807 ;; It makes a few tests fail.
6808 #:test-flags
6809 #~(list "--ignore=openpyxl/worksheet/tests/test_read_only.py"
6810 "-k" (string-join
6811 (list "not test_unsupport_drawing"
6812 "test_broken_sheet_ref"
6813 "test_no_default_style"
6814 "test_ctor"
6815 "test_force_dimension"
6816 "test_get_max_cell"
6817 "test_read_hyperlinks_read_only"
6818 "test_read_with_missing_cells"
6819 "test_read_empty_rows")
6820 " and not "))))
6821 (native-inputs
6822 (list python-lxml-4.9
6823 python-pillow
6824 python-pytest
6825 python-setuptools))
6826 (propagated-inputs
6827 (list python-et-xmlfile))
6828 (home-page "https://openpyxl.readthedocs.io")
6829 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
6830 (description
6831 "This Python library allows reading and writing to the Excel XLSX, XLSM,
6832XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
6833standard.")
6834 (license license:expat)))
6835
6836(define-public python-sinfo
6837 (package
6838 (name "python-sinfo")
6839 (version "0.3.4")
6840 (source (origin
6841 (method url-fetch)
6842 (uri (pypi-uri "sinfo" version))
6843 (sha256
6844 (base32
6845 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
6846 (build-system pyproject-build-system)
6847 (arguments
6848 (list #:tests? #f)) ; no tests in PyPI or Git
6849 (native-inputs
6850 (list python-setuptools))
6851 (propagated-inputs
6852 (list python-stdlib-list))
6853 (home-page "https://gitlab.com/joelostblom/session_info")
6854 (synopsis "Output module version information loaded in a Python session")
6855 (description "This package outputs version information for modules loaded
6856in the current session, Python, and the OS.")
6857 (license license:bsd-3)))
6858
6859(define-public python-schedule
6860 (package
6861 (name "python-schedule")
6862 (version "1.2.2")
6863 (source
6864 (origin
6865 (method url-fetch)
6866 (uri (pypi-uri "schedule" version))
6867 (sha256
6868 (base32
6869 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
6870 (build-system pyproject-build-system)
6871 (native-inputs
6872 (list python-pytest python-setuptools python-wheel))
6873 (home-page "https://github.com/dbader/schedule")
6874 (synopsis "Schedule periodic function calls in Python")
6875 (description
6876 "Schedule is an in-process scheduler for periodic jobs that uses the
6877builder pattern for configuration. Schedule lets you run Python functions (or
6878any other callable) periodically at pre-determined intervals using a simple,
6879human-friendly syntax.")
6880 (license license:expat)))
6881
6882;; XXX: This project is unmaintained since 2020, see:
6883;; <https://github.com/scour-project/scour/issues/321>.
6884;;
6885;; The only user is Inkscape, see:
6886;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
6887(define-public python-scour
6888 (package
6889 (name "python-scour")
6890 (version "0.38.2")
6891 (source
6892 (origin
6893 (method git-fetch)
6894 (uri
6895 (git-reference
6896 (url "https://gitlab.com/inkscape/extras/scour")
6897 (commit
6898 (string-append "v" version))))
6899 (file-name (git-file-name name version))
6900 (sha256
6901 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
6902 (build-system pyproject-build-system)
6903 (arguments
6904 (list #:test-backend #~'custom
6905 #:test-flags #~(list "test_scour.py")))
6906 (native-inputs
6907 (list python-setuptools))
6908 (propagated-inputs
6909 (list python-six))
6910 (home-page "https://gitlab.com/inkscape/extras/scour")
6911 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
6912 (description
6913 "The goal of Scour is to output a file that renders identically at a
6914fraction of the size by removing a lot of redundant information created by
6915most SVG editors. Optimization options are typically lossless but can be
6916tweaked for more aggressive cleaning.")
6917 (license license:asl2.0)))
6918
6919(define-public python-mechanize
6920 (package
6921 (name "python-mechanize")
6922 (version "0.4.10")
6923 (source
6924 (origin
6925 (method url-fetch)
6926 (uri (pypi-uri "mechanize" version))
6927 (sha256
6928 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
6929 (build-system pyproject-build-system)
6930 (arguments
6931 ;; XXX: Unclear why tests are failing.
6932 (list #:tests? #f
6933 #:phases
6934 #~(modify-phases %standard-phases
6935 (add-before 'check 'configure-tests
6936 (lambda _
6937 (setenv "GUIX_PYTHONPATH"
6938 (string-append (getcwd) "/test-tools:"
6939 (getenv "GUIX_PYTHONPATH"))))))))
6940 (native-inputs
6941 (list python-html5-parser
6942 python-html5lib
6943 python-lxml
6944 python-service-identity
6945 python-setuptools
6946 python-six
6947 python-twisted
6948 python-wheel))
6949 (propagated-inputs
6950 (list python-html5lib))
6951 (home-page "https://github.com/python-mechanize/mechanize")
6952 (synopsis
6953 "Stateful programmatic web browsing in Python")
6954 (description
6955 "Mechanize implements stateful programmatic web browsing in Python,
6956after Andy Lester’s Perl module WWW::Mechanize.")
6957 (license license:bsd-3)))
6958
6959(define-public python-mediapy
6960 (package
6961 (name "python-mediapy")
6962 (version "1.2.2")
6963 (source
6964 (origin
6965 (method git-fetch)
6966 (uri (git-reference
6967 (url "https://github.com/google/mediapy")
6968 (commit (string-append "v" version))))
6969 (file-name (git-file-name name version))
6970 (sha256
6971 (base32 "08dj0h7xkpaj552pzjln1chshxsfxbwhv29p2npsmscy907s322l"))))
6972 (build-system pyproject-build-system)
6973 (arguments
6974 (list
6975 #:phases
6976 '(modify-phases %standard-phases
6977 (add-after 'unpack 'fix-references
6978 (lambda _
6979 (substitute* "mediapy_test.py"
6980 (("'/bin/bash")
6981 (string-append "'" (which "bash")))))))))
6982 (inputs (list ffmpeg-5))
6983 (propagated-inputs (list python-absl-py
6984 python-ipython
6985 python-matplotlib
6986 python-numpy
6987 python-pillow))
6988 (native-inputs
6989 (list python-flit-core
6990 python-pytest
6991 python-pytest-xdist))
6992 (home-page "https://github.com/google/mediapy")
6993 (synopsis "Read/write/show images and videos in an IPython notebook")
6994 (description "This Python library makes it easy to display images and
6995videos in a notebook.")
6996 (license license:asl2.0)))
6997
6998(define-public python-simpleaudio
6999 (package
7000 (name "python-simpleaudio")
7001 (version "1.0.4")
7002 (source
7003 (origin
7004 (method git-fetch)
7005 (uri (git-reference
7006 (url "https://github.com/hamiltron/py-simple-audio")
7007 (commit version)))
7008 (file-name (git-file-name name version))
7009 (sha256
7010 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
7011 (build-system pyproject-build-system)
7012 (arguments
7013 (list
7014 #:test-backend #~'unittest
7015 #:phases
7016 #~(modify-phases %standard-phases
7017 (add-before 'check 'fix-test-run
7018 (lambda _
7019 (delete-file-recursively "simpleaudio"))))))
7020 (native-inputs (list python-setuptools))
7021 (inputs (list alsa-lib))
7022 (home-page "https://github.com/hamiltron/py-simple-audio")
7023 (synopsis "Simple, asynchronous audio playback for Python 3")
7024 (description
7025 "The @code{simplaudio} package provides cross-platform, dependency-free
7026audio playback capability for Python 3 on OSX, Windows, and Linux.")
7027 (license license:expat))) ; MIT license
7028
7029(define-public python-jsonalias
7030 (package
7031 (name "python-jsonalias")
7032 (version "0.1.2")
7033 (source (origin
7034 (method url-fetch)
7035 (uri (pypi-uri "jsonalias" version))
7036 (sha256
7037 (base32
7038 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
7039 (build-system pyproject-build-system)
7040 (arguments
7041 (list #:tests? #f)) ; no tests in PyPI or Git
7042 (native-inputs
7043 (list python-poetry-core))
7044 (home-page "https://github.com/kevinheavey/jsonalias/")
7045 (synopsis "JSON type alias for Python")
7046 (description
7047 "This package provides a microlibrary that defines a JSON type alias for
7048Python.")
7049 (license license:expat)))
7050
7051(define-public python-jsonargparse
7052 (package
7053 (name "python-jsonargparse")
7054 (version "4.37.0")
7055 (source (origin
7056 (method url-fetch)
7057 (uri (pypi-uri "jsonargparse" version))
7058 (sha256
7059 (base32
7060 "1b9w9j27phj5j00pmhp11lzf53yc4dnwknhxacv2bfyiiaq0af2s"))))
7061 (build-system pyproject-build-system)
7062 (arguments
7063 (list #:test-flags
7064 '(list "-k" "not test_env_prefix")))
7065 (propagated-inputs
7066 (list python-pyyaml))
7067 (native-inputs
7068 (list python-attrs
7069 python-pypa-build
7070 python-pydantic
7071 python-pytest
7072 python-pytest-subtests
7073 python-responses
7074 python-setuptools
7075 python-wheel))
7076 (home-page "https://github.com/omni-us/jsonargparse/")
7077 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
7078 (description
7079 "This package lets you implement minimal boilerplate CLIs derived from
7080type hints and parse from command line, config files and environment
7081variables.")
7082 (license license:expat)))
7083
7084(define-public python-pymarshal
7085 (package
7086 (name "python-pymarshal")
7087 (version "2.2.3")
7088 (source (origin
7089 (method url-fetch)
7090 (uri (pypi-uri "pymarshal" version))
7091 (sha256
7092 (base32
7093 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
7094 (build-system pyproject-build-system)
7095 (arguments
7096 ;; Test fails with this error:
7097 ;; "CovReportWarning: Failed to generate report: No data to report."
7098 (list #:tests? #f))
7099 (native-inputs
7100 (list python-pytest python-pytest-cov python-setuptools python-wheel))
7101 (propagated-inputs (list python-bson python-pyyaml))
7102 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
7103 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
7104 (description "PyMarshal replicates the feature of (un)marshalling structs
7105in Golang.")
7106 (license license:bsd-2)))
7107
7108(define-public python-simplejson
7109 (package
7110 (name "python-simplejson")
7111 (version "3.20.1")
7112 (source
7113 (origin
7114 (method url-fetch)
7115 (uri (pypi-uri "simplejson" version))
7116 (sha256
7117 (base32
7118 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
7119 (build-system pyproject-build-system)
7120 (native-inputs
7121 (list python-pytest python-setuptools))
7122 (home-page "https://simplejson.readthedocs.io/en/latest")
7123 (synopsis
7124 "Json library for Python")
7125 (description
7126 "JSON (JavaScript Object Notation) is a subset of JavaScript
7127syntax (ECMA-262 3rd edition) used as a lightweight data interchange
7128format.
7129
7130Simplejson exposes an API familiar to users of the standard library marshal
7131and pickle modules. It is the externally maintained version of the json
7132library contained in Python 2.6, but maintains compatibility with Python 2.5
7133and (currently) has significant performance advantages, even without using
7134the optional C extension for speedups. Simplejson is also supported on
7135Python 3.3+.")
7136 (license license:x11)))
7137
7138(define-public python-simple-rlp
7139 (package
7140 (name "python-simple-rlp")
7141 (version "0.1.3")
7142 (source
7143 (origin
7144 (method git-fetch)
7145 (uri (git-reference
7146 (url "https://github.com/SamuelHaidu/simple-rlp")
7147 ;; Upstream doesn't tag the git repo.
7148 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
7149 (file-name (git-file-name name version))
7150 (sha256
7151 (base32
7152 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
7153 (build-system pyproject-build-system)
7154 (native-inputs
7155 (list
7156 python-pytest
7157 python-setuptools))
7158 (home-page "https://github.com/SamuelHaidu/simple-rlp")
7159 (synopsis
7160 "Python implementation of RLP (Recursive Length Prefix) encoding")
7161 (description
7162 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
7163Prefix) - Encode and decode data structures.")
7164 (license license:expat)))
7165
7166(define-public python-pyicu
7167 (package
7168 (name "python-pyicu")
7169 (version "2.15.2")
7170 (source
7171 (origin
7172 (method url-fetch)
7173 (uri (pypi-uri "pyicu" version))
7174 (sha256
7175 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
7176 (build-system pyproject-build-system)
7177 (native-inputs
7178 (list pkg-config
7179 python-pytest
7180 python-setuptools
7181 python-six))
7182 (inputs
7183 (list icu4c))
7184 (home-page "https://gitlab.pyicu.org/main/pyicu")
7185 (synopsis "Python extension wrapping the ICU C++ API")
7186 (description
7187 "PyICU is a python extension wrapping the ICU C++ API.")
7188 (license license:x11)))
7189
7190(define-public python-dogtail
7191 (package
7192 (name "python-dogtail")
7193 (version "0.9.11")
7194 (source
7195 (origin
7196 (method url-fetch)
7197 (uri (string-append
7198 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
7199 version ".tar.gz"))
7200 (sha256
7201 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
7202 (build-system pyproject-build-system)
7203 (arguments
7204 (list
7205 #:tests? #f ;TODO Launching dbus for the tests fails
7206 #:phases
7207 #~(modify-phases %standard-phases
7208 (replace 'check
7209 (lambda* (#:key tests? #:allow-other-keys)
7210 (when tests?
7211 (system "Xvfb :1 &")
7212 (setenv "DISPLAY" ":1")
7213 (invoke "dbus-run-session" "--"
7214 "nosetests" "-v" "tests/")))))))
7215 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
7216 (native-inputs
7217 (list python-pynose
7218 gtk+
7219 xorg-server-for-tests
7220 dbus
7221 gsettings-desktop-schemas
7222 gobject-introspection
7223 python-setuptools))
7224 (home-page "https://gitlab.com/dogtail/dogtail/")
7225 (synopsis "GUI test tool and automation framework written in Python")
7226 (description
7227 "Dogtail is a GUI test tool and automation framework written in Python.
7228It uses Accessibility (a11y) technologies to communicate with desktop
7229applications. dogtail scripts are written in Python and executed like any
7230other Python program.")
7231 (license license:gpl2+)))
7232
7233(define-public python-doxyqml
7234 (package
7235 (name "python-doxyqml")
7236 (version "0.5.3")
7237 (source (origin
7238 (method url-fetch)
7239 (uri (pypi-uri "doxyqml" version))
7240 (sha256
7241 (base32
7242 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
7243 (build-system pyproject-build-system)
7244 (arguments
7245 (list #:test-backend #~'custom
7246 #:test-flags #~(list "tests/functional/tests.py")))
7247 (native-inputs
7248 (list python-setuptools))
7249 (home-page "https://agateau.com/projects/doxyqml")
7250 (synopsis "Doxygen input filter for QML files")
7251 (description
7252 "This package provides a Doxygen input filter for QML files.")
7253 (license license:bsd-3)))
7254
7255(define-public python-doxypypy
7256 (package
7257 (name "python-doxypypy")
7258 (version "0.8.8.7")
7259 (source (origin
7260 (method url-fetch)
7261 (uri (pypi-uri "doxypypy" version))
7262 (sha256
7263 (base32
7264 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
7265 (build-system pyproject-build-system)
7266 (arguments
7267 (list
7268 #:test-flags
7269 #~(list "-k" (string-join
7270 ;; Test files are not in UTF-8 format and attmet to
7271 ;; substitute shebang fails, while tests fail with error:
7272 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
7273 ;; File w[387 chars]g.')" !=
7274 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
7275 ;; chars]g.')"
7276 (list "not test_utf16be_bom"
7277 "test_utf16le_bom"
7278 "test_utf32be_bom"
7279 "test_utf32le_bom"
7280 "test_utf8_bom")
7281 " and not "))
7282 #:phases
7283 #~(modify-phases %standard-phases
7284 ;; compile-bytecode phases fails with error: SyntaxError: source
7285 ;; code string cannot contain null bytes.
7286 (add-after 'unpack 'fix-setup.py
7287 (lambda _
7288 (substitute* "setup.py"
7289 (("packages=.*") "packages=['doxypypy'],\n")))))))
7290 (native-inputs
7291 (list python-pytest
7292 python-setuptools
7293 python-wheel))
7294 (propagated-inputs
7295 (list python-chardet))
7296 (home-page "https://github.com/Feneric/doxypypy")
7297 (synopsis "Doxygen filter for Python")
7298 (description
7299 "This package provides a Doxygen filter for Python.")
7300 (license license:gpl2+)))
7301
7302(define-public python-empy
7303 (package
7304 (name "python-empy")
7305 (version "3.3.4")
7306 (source
7307 (origin
7308 (method url-fetch)
7309 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
7310 version ".tar.gz"))
7311 (sha256
7312 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
7313 (build-system pyproject-build-system)
7314 (arguments
7315 (list
7316 #:phases
7317 #~(modify-phases %standard-phases
7318 (replace 'check
7319 (lambda* (#:key tests? #:allow-other-keys)
7320 (when tests?
7321 (invoke "./test.sh")))))))
7322 (native-inputs (list python-setuptools))
7323 (home-page "http://www.alcyone.com/software/empy/")
7324 (synopsis "Templating system for Python")
7325 (description
7326 "EmPy is a system for embedding Python expressions and statements in
7327template text; it takes an EmPy source file, processes it, and produces
7328output. This is accomplished via expansions, which are special signals to the
7329EmPy system and are set off by a special prefix (by default the at sign, @@).
7330EmPy can expand arbitrary Python expressions and statements in this way, as
7331well as a variety of special forms. Textual data not explicitly delimited in
7332this way is sent unaffected to the output, allowing Python to be used in
7333effect as a markup language. Also supported are callbacks via hooks,
7334recording and playback via diversions, and dynamic, chainable filters. The
7335system is highly configurable via command line options and embedded
7336commands.")
7337 (license license:lgpl2.1+)))
7338
7339(define-public python-palettable
7340 (package
7341 (name "python-palettable")
7342 (version "3.3.3")
7343 (source (origin
7344 (method url-fetch)
7345 (uri (pypi-uri "palettable" version))
7346 (sha256
7347 (base32
7348 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
7349 (build-system pyproject-build-system)
7350 (native-inputs (list python-pytest python-setuptools python-wheel))
7351 (home-page "https://jiffyclub.github.io/palettable/")
7352 (synopsis "Color palettes for Python")
7353 (description "Palettable (formerly brewer2mpl) is a library of color
7354palettes for Python. It’s written in pure Python with no dependencies, but it
7355can supply color maps for matplotlib. You can use Palettable to customize
7356matplotlib plots or supply colors for a web application.")
7357 (license license:expat)))
7358
7359(define-public python-parse-type
7360 (package
7361 (name "python-parse-type")
7362 (version "0.6.6")
7363 (source
7364 (origin
7365 (method url-fetch)
7366 (uri (pypi-uri "parse_type" version))
7367 (sha256
7368 (base32
7369 "1cmzjw8gryc08lp9znaxrngl6csdifd3610fd46pffa82223ffji"))))
7370 (build-system pyproject-build-system)
7371 ;; tests: 332 passed, 2 skipped
7372 (native-inputs
7373 (list python-pytest
7374 python-pytest-html
7375 python-setuptools
7376 python-setuptools-scm))
7377 (propagated-inputs
7378 (list python-six ;hard dependency
7379 python-parse))
7380 (home-page "https://github.com/jenisys/parse_type")
7381 (synopsis "Extended parse module")
7382 (description "Parse_type extends the python parse module.")
7383 (license license:bsd-3)))
7384
7385(define-public python-parse
7386 (package
7387 (name "python-parse")
7388 (version "1.20.2")
7389 (source
7390 (origin
7391 (method git-fetch)
7392 (uri (git-reference
7393 (url "https://github.com/r1chardj0n3s/parse")
7394 (commit version)))
7395 (file-name (git-file-name name version))
7396 (sha256
7397 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
7398 (build-system pyproject-build-system)
7399 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7400 (home-page "https://github.com/r1chardj0n3s/parse")
7401 (synopsis "Parse strings")
7402 (description
7403 "Parse strings using a specification based on the Python @code{format()}
7404syntax.")
7405 (license license:x11)))
7406
7407(define-public python-parsley
7408 (package
7409 (name "python-parsley")
7410 (version "1.3")
7411 (source (origin
7412 ;; The source distributed on PyPI is outdated.
7413 (method git-fetch)
7414 (uri (git-reference
7415 (url "https://github.com/pyga/parsley")
7416 (commit version)))
7417 (file-name (git-file-name name version))
7418 (sha256
7419 (base32
7420 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))))
7421 (build-system pyproject-build-system)
7422 (arguments
7423 (list
7424 #:test-flags #~(list "ometa/test" "terml/test")))
7425 (native-inputs
7426 (list python-pytest
7427 python-twisted
7428 python-setuptools
7429 python-wheel))
7430 (home-page "https://launchpad.net/parsley")
7431 (synopsis "Parsing and pattern matching Python library")
7432 (description
7433 "Parsley is a parsing library using PEG algorithm, so each expression in
7434the grammar rules works like a Python expression. In particular, alternatives
7435are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
7436Parsley is an implementation of OMeta, an object-oriented pattern-matching
7437language.")
7438 (license license:expat)))
7439
7440(define-public python-petl
7441 (package
7442 (name "python-petl")
7443 (version "1.7.16")
7444 (source
7445 (origin
7446 (method url-fetch)
7447 (uri (pypi-uri "petl" version))
7448 (sha256
7449 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
7450 (build-system pyproject-build-system)
7451 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
7452 python-pytest))
7453 (home-page "https://github.com/petl-developers/petl")
7454 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
7455processing pipelines.")
7456 (description
7457 "This package provides a library for extracting, transforming and loading
7458tables of data. It can read from and write to databases or files in multiple
7459formats, including:
7460@itemize @bullet
7461@item python objects
7462@item delimited files
7463@item pickle files
7464@item text/XML/JSON/HTML files
7465@item python I/O streams
7466@item Excel XLS/XLSX files
7467@item HDF5 files
7468@end itemize")
7469 (license license:expat)))
7470
7471(define-public python-polib
7472 (package
7473 (name "python-polib")
7474 (version "1.2.0")
7475 (source
7476 (origin
7477 (method git-fetch)
7478 (uri (git-reference
7479 (url "https://github.com/izimobil/polib/")
7480 (commit version)))
7481 (file-name (git-file-name name version))
7482 (sha256
7483 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
7484 (build-system pyproject-build-system)
7485 (arguments
7486 (list #:test-backend #~'custom
7487 #:test-flags #~(list "tests/tests.py")))
7488 (native-inputs (list python-setuptools))
7489 (home-page "https://github.com/izimobil/polib/")
7490 (synopsis "Manipulate, create and modify gettext files")
7491 (description
7492 "Polib can manipulate any gettext format (po, pot and mo) files. It can
7493be used to create po files from scratch or to modify existing ones.")
7494 (license license:expat)))
7495
7496(define-public python-polling2
7497 (package
7498 (name "python-polling2")
7499 (version "0.5.0")
7500 (source
7501 (origin
7502 (method git-fetch)
7503 (uri (git-reference
7504 (url "https://github.com/ddmee/polling2")
7505 (commit (string-append "v" version))))
7506 (file-name (git-file-name name version))
7507 (sha256
7508 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
7509 (build-system pyproject-build-system)
7510 (arguments
7511 ;; XXX: Additional , in string comparison.
7512 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
7513 (native-inputs (list python-mock python-pytest python-setuptools))
7514 (home-page "https://github.com/ddmee/polling2")
7515 (synopsis "Polling utility with many configurable options")
7516 (description "Polling2 is a utility used to wait for a function to return
7517a certain expected condition.")
7518 (license license:expat)))
7519
7520(define-public python-daft
7521 (package
7522 (name "python-daft")
7523 (version "0.1.2")
7524 (source (origin
7525 (method url-fetch)
7526 (uri (pypi-uri "daft" version))
7527 (sha256
7528 (base32
7529 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
7530 (build-system pyproject-build-system)
7531 (arguments
7532 (list
7533 #:test-flags
7534 '(list "-k"
7535 (string-append
7536 ;; The following tests compare matplotlib output with
7537 ;; previously generated images. They fail due to minor
7538 ;; differences in where matplotlib places labels.
7539 "not test_bca[png]"
7540 " and not test_classic[png]"
7541 " and not test_deconvolution[png]"
7542 " and not test_exoplanets[png]"
7543 " and not test_fixed[png]"
7544 " and not test_gaia[png]"
7545 " and not test_galex[png]"
7546 " and not test_huey_p_newton[png]"
7547 " and not test_logo[png]"
7548 " and not test_no_circles[png]"
7549 " and not test_no_gray[png]"
7550 " and not test_recursive[png]"
7551 " and not test_thick_lines[png]"
7552 " and not test_weaklensing[png]"
7553 " and not test_wordy[png]"))))
7554 (native-inputs
7555 (list python-pytest
7556 python-setuptools
7557 python-wheel))
7558 (propagated-inputs (list python-matplotlib python-numpy))
7559 (home-page "https://docs.daft-pgm.org/")
7560 (synopsis "PGM rendering library")
7561 (description "Daft is a Python package that uses matplotlib to
7562render pixel-perfect probabilistic graphical models for publication in
7563a journal or on the internet. With a short Python script and an
7564intuitive model-building syntax you can design directed (Bayesian
7565Networks, directed acyclic graphs) and undirected (Markov random fields)
7566models and save them in any formats that matplotlib supports (including
7567PDF, PNG, EPS and SVG).")
7568 (license license:expat)))
7569
7570(define-public python-portalocker
7571 (package
7572 (name "python-portalocker")
7573 (version "2.7.0")
7574 (source (origin
7575 (method url-fetch)
7576 (uri (pypi-uri "portalocker" version))
7577 (sha256
7578 (base32
7579 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
7580 (build-system pyproject-build-system)
7581 (native-inputs (list python-pytest
7582 python-pytest-cov
7583 python-pytest-mypy
7584 python-pytest-timeout
7585 python-redis
7586 python-setuptools
7587 python-wheel))
7588 (home-page "https://github.com/WoLpH/portalocker")
7589 (synopsis "Python library for file locking")
7590 (description "Portalocker is a library to provide an easy API to file
7591locking..")
7592 (license license:bsd-3)))
7593
7594(define-public python-poyo
7595 (package
7596 (name "python-poyo")
7597 (version "0.5.0")
7598 (source
7599 (origin
7600 (method url-fetch)
7601 (uri (pypi-uri "poyo" version))
7602 (sha256
7603 (base32
7604 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
7605 (build-system pyproject-build-system)
7606 (native-inputs
7607 (list python-pytest python-setuptools))
7608 (home-page "https://github.com/hackebrot/poyo")
7609 (synopsis "Lightweight YAML Parser for Python")
7610 (description
7611 "This package provides a lightweight YAML Parser for Python. It supports
7612only a chosen subset of the YAML format that is required to parse cookiecutter
7613user configuration files. It does not have support for serializing into YAML
7614and is not compatible with JSON.")
7615 (license license:expat)))
7616
7617(define-public python-expandvars
7618 (package
7619 (name "python-expandvars")
7620 (version "1.1.2")
7621 (source
7622 (origin
7623 (method url-fetch)
7624 (uri (pypi-uri "expandvars" version))
7625 (sha256
7626 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
7627 (build-system pyproject-build-system)
7628 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
7629 (native-inputs
7630 (list python-hatchling python-pytest))
7631 (home-page "https://pypi.org/project/expandvars/")
7632 (synopsis "Expand system variables Unix style")
7633 (description "This module is inspired by GNU bash's variable expansion
7634features. It can be used as an alternative to Python's
7635@code{os.path.expandvars} function. A good use case is reading config files
7636with the flexibility of reading values from environment variables using
7637advanced features like returning a default value if some variable is not
7638defined.")
7639 (license license:expat)))
7640
7641(define-public python-extension-helpers
7642 (package
7643 (name "python-extension-helpers")
7644 (version "1.4.0")
7645 (source
7646 (origin
7647 (method git-fetch) ; no tests in the PyPI tarball
7648 (uri (git-reference
7649 (url "https://github.com/astropy/extension-helpers")
7650 (commit (string-append "v" version))))
7651 (file-name (git-file-name name version))
7652 (sha256
7653 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
7654 (build-system pyproject-build-system)
7655 (arguments
7656 (list
7657 #:test-flags
7658 #~(list "--pyargs" "extension_helpers"
7659 "-k" (string-join
7660 ;; XXX: Tests try to check various compilation options and
7661 ;; fail with some incomparability or trying to download
7662 ;; missing modules.
7663 (list "not test_only_pyproject"
7664 "test_no_setup_py"
7665 "test_limited_api")
7666 " and not "))))
7667 (native-inputs
7668 (list python-pytest
7669 python-setuptools-scm))
7670 (propagated-inputs
7671 (list python-setuptools))
7672 (home-page "https://extension-helpers.readthedocs.io")
7673 (synopsis "Astropy ecosystem utilities for building and installing packages")
7674 (description
7675 "The extension-helpers package includes convenience helpers to assist
7676with building Python packages with compiled C/Cython extensions. It is
7677developed by the Astropy project but is intended to be general and usable by
7678any Python package.")
7679 (license license:bsd-3)))
7680
7681(define-public python-milc
7682 (package
7683 (name "python-milc")
7684 (version "1.9.1")
7685 (source
7686 (origin
7687 (method git-fetch) ;no tests in PyPI archive
7688 (uri (git-reference
7689 (url "https://github.com/clueboard/milc")
7690 (commit version)))
7691 (file-name (git-file-name name version))
7692 (sha256
7693 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
7694 (build-system pyproject-build-system)
7695 (native-inputs
7696 (list python-pytest
7697 python-semver
7698 python-setuptools))
7699 (propagated-inputs
7700 (list python-argcomplete
7701 python-colorama
7702 python-halo
7703 python-platformdirs
7704 python-spinners
7705 python-types-colorama))
7706 (home-page "https://github.com/clueboard/milc")
7707 (synopsis "Python library for command line interface programs")
7708 (description "MILC is a Python library for developing command line
7709interface programs. This library provides features to parse arguments,
7710automatic tab-completion, color support, logging to @code{std}, etc.")
7711 (license license:expat)))
7712
7713(define-public python-extract-dtb
7714 (package
7715 (name "python-extract-dtb")
7716 (version "1.2.3")
7717 (source
7718 (origin
7719 (method git-fetch)
7720 (uri (git-reference
7721 (url "https://github.com/PabloCastellano/extract-dtb/")
7722 (commit version)))
7723 (file-name (git-file-name name version))
7724 (sha256
7725 (base32
7726 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
7727 (build-system pyproject-build-system)
7728 (arguments
7729 (list #:tests? #f)) ;no tests
7730 (native-inputs
7731 (list python-setuptools))
7732 (home-page "https://github.com/PabloCastellano/extract-dtb/")
7733 (synopsis "Extract device tree blobs (DTB) from kernel images")
7734 (description
7735 "This package provides a tool to split a kernel image with appended
7736@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
7737 (license license:gpl3+)))
7738
7739(define-public python-mimeparse
7740 (package
7741 (name "python-mimeparse")
7742 (version "2.0.0")
7743 (source
7744 (origin
7745 (method url-fetch)
7746 (uri (pypi-uri "python_mimeparse" version))
7747 (sha256
7748 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
7749 (build-system pyproject-build-system)
7750 (native-inputs
7751 (list python-pytest
7752 python-setuptools))
7753 (home-page "https://github.com/falconry/python-mimeparse")
7754 (synopsis "Python library for parsing MIME types")
7755 (description
7756 "Mimeparse provides basic functions for parsing MIME type names and
7757matching them against a list of media-ranges.")
7758 (license license:expat)))
7759
7760(define-public python-miniboa
7761 (package
7762 (name "python-miniboa")
7763 (version "1.0.9")
7764 (source
7765 (origin
7766 (method git-fetch) ;no tests in PyPI archive
7767 (uri (git-reference
7768 (url "https://github.com/shmup/miniboa")
7769 (commit (string-append "v" version))))
7770 (file-name (git-file-name name version))
7771 (sha256
7772 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
7773 (build-system pyproject-build-system)
7774 (native-inputs
7775 (list python-pytest
7776 python-setuptools
7777 python-wheel))
7778 (home-page "https://github.com/shmup/miniboa")
7779 (synopsis "Simple, single-threaded Telnet server")
7780 (description
7781 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
7782server.")
7783 (license license:asl2.0)))
7784
7785(define-public python-mir-eval
7786 (package
7787 (name "python-mir-eval")
7788 (version "0.8.2")
7789 (source (origin
7790 (method git-fetch)
7791 (uri (git-reference
7792 (url "https://github.com/mir-evaluation/mir_eval")
7793 (commit version)))
7794 (file-name (git-file-name name version))
7795 (sha256
7796 (base32
7797 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
7798 (build-system pyproject-build-system)
7799 (arguments
7800 (list
7801 #:phases
7802 #~(modify-phases %standard-phases
7803 (add-before 'check 'cd-tests
7804 (lambda _
7805 ;; Move to 'tests' directory because tests read data files from
7806 ;; a relative path.
7807 (chdir "tests"))))))
7808 (propagated-inputs (list python-decorator python-numpy python-scipy))
7809 (native-inputs (list python-matplotlib
7810 python-pytest
7811 python-pytest-cov ; used by default
7812 python-pytest-mpl
7813 python-setuptools
7814 python-wheel))
7815 (home-page "https://github.com/mir-evaluation/mir_eval")
7816 (synopsis "Common metrics for common audio/music processing tasks")
7817 (description "This is a Python library for computing common heuristic
7818accuracy scores for various music/audio information retrieval/signal
7819processing tasks.")
7820 (license license:expat)))
7821
7822(define-public python-mizani
7823 (package
7824 (name "python-mizani")
7825 (version "0.13.1")
7826 (source (origin
7827 (method git-fetch)
7828 (uri (git-reference
7829 (url "https://github.com/has2k1/mizani")
7830 (commit (string-append "v" version))))
7831 (file-name (git-file-name name version))
7832 (sha256
7833 (base32
7834 "0ij0fk4w0jyyj44ij3i2j1nfa0d7dk783w9r25cpwjkpn690xqfx"))))
7835 (build-system pyproject-build-system)
7836 (propagated-inputs
7837 (list python-matplotlib python-numpy python-pandas python-scipy))
7838 (native-inputs
7839 (list python-setuptools python-setuptools-scm
7840 python-pytest python-pytest-cov python-wheel tzdata))
7841 (home-page "https://github.com/has2k1/mizani")
7842 (synopsis "Create data visualizations in Python")
7843 (description
7844 "Mizani is a Python package for creating data visualizations. It
7845provides functions and tools to help with the creation of visually appealing
7846and informative visualizations, including scales, transformations and color
7847palettes.")
7848 (license license:bsd-3)))
7849
7850(define-public python-miniupnpc
7851 (package
7852 (name "python-miniupnpc")
7853 (version "2.3.3")
7854 (source
7855 (origin
7856 (method git-fetch)
7857 (uri
7858 (git-reference
7859 ;; The project tags miniupnpd_ as well but with a different version,
7860 ;; where updater may select a wrong version.
7861 (url "https://github.com/miniupnp/miniupnp")
7862 (commit
7863 (string-append
7864 "miniupnpc_" (string-replace-substring version "." "_")))))
7865 (file-name
7866 (git-file-name name version))
7867 (sha256
7868 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
7869 (build-system pyproject-build-system)
7870 (arguments
7871 (list
7872 #:phases
7873 #~(modify-phases %standard-phases
7874 (add-after 'unpack 'subdir
7875 (lambda* (#:key inputs #:allow-other-keys)
7876 (chdir "miniupnpc")
7877 (setenv "CC" #$(cc-for-target))
7878 (substitute* "Makefile"
7879 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
7880 (add-before 'subdir 'remove-kernel-version
7881 ;; Avoid embedding the running kernel version for reproducible builds
7882 (lambda _
7883 (substitute*
7884 "miniupnpc/updateminiupnpcstrings.sh"
7885 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
7886 (replace 'check
7887 (lambda* (#:key tests? #:allow-other-keys)
7888 (when tests?
7889 (invoke "make" "check")))))))
7890 (native-inputs
7891 (list python-setuptools
7892 python-wheel))
7893 (inputs (list python)) ;we are building a Python extension
7894 (synopsis "UPnP client for Python")
7895 (description "Miniupnpc is a client library for Python programs to set up
7896port forwards using @acronym{UPnP, Universal Plug and Play}.")
7897 (home-page "http://miniupnp.free.fr")
7898 (license license:bsd-3)))
7899
7900;; NOTE: As taken from upstram: "this library is in maintenance mode and
7901;; should not be used in new code."
7902(define-public python-py
7903 (package
7904 (name "python-py")
7905 (version "1.11.0")
7906 (source
7907 (origin
7908 (method url-fetch)
7909 (uri (pypi-uri "py" version))
7910 (sha256
7911 (base32
7912 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
7913 (build-system pyproject-build-system)
7914 (arguments
7915 '(#:tests? #f)) ;cycle with python-pytest
7916 (native-inputs
7917 (list python-setuptools
7918 python-setuptools-scm
7919 python-wheel))
7920 (home-page "https://github.com/pytest-dev/py")
7921 (synopsis "Python library for parsing, I/O, introspection, and logging")
7922 (description
7923 "Py is a Python library for file name parsing, .ini file parsing, I/O,
7924code introspection, and logging.")
7925 (license license:expat)))
7926
7927(define-public python-pyrsistent
7928 (package
7929 (name "python-pyrsistent")
7930 (version "0.20.0")
7931 (home-page "https://github.com/tobgu/pyrsistent")
7932 (source (origin
7933 (method url-fetch)
7934 (uri (pypi-uri "pyrsistent" version))
7935 (sha256
7936 (base32
7937 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
7938 (build-system pyproject-build-system)
7939 (native-inputs
7940 (list python-pytest python-setuptools python-wheel))
7941 (synopsis "Persistent data structures for Python")
7942 (description
7943 "Pyrsistent is a number of persistent collections (by some referred to as
7944functional data structures). Persistent in the sense that they are immutable.
7945
7946All methods on a data structure that would normally mutate it instead return a
7947new copy of the structure containing the requested updates. The original
7948structure is left untouched.")
7949 (license license:expat)))
7950
7951(define-public python-exif-read
7952 (package
7953 (name "python-exif-read")
7954 (version "3.3.2")
7955 (source
7956 (origin
7957 (method git-fetch) ;PyPI doesn't contain the test images
7958 (uri (git-reference
7959 (url "https://github.com/ianare/exif-py")
7960 (commit version)))
7961 (file-name (git-file-name name version))
7962 (sha256
7963 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
7964 (build-system pyproject-build-system)
7965 (native-inputs (list python-pytest python-setuptools python-wheel))
7966 (home-page "https://github.com/ianare/exif-py")
7967 (synopsis "Python library to extract EXIF data from image files")
7968 (description
7969 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
7970files.")
7971 (license license:bsd-3)))
7972
7973(define-public python-pyld
7974 (package
7975 (name "python-pyld")
7976 (version "2.0.4")
7977 (source
7978 (origin
7979 (method git-fetch)
7980 (uri (git-reference
7981 (url "https://github.com/digitalbazaar/pyld")
7982 ;; Not all tags have the 'v' prefix.
7983 (commit (string-append "v" version))))
7984 (file-name (git-file-name name version))
7985 (sha256
7986 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
7987 (build-system pyproject-build-system)
7988 (arguments
7989 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
7990 (list #:tests? #f))
7991 (native-inputs
7992 (list python-lxml
7993 python-setuptools))
7994 (propagated-inputs
7995 (list python-aiohttp
7996 python-cachetools
7997 python-frozendict
7998 python-requests))
7999 (home-page "https://github.com/digitalbazaar/pyld")
8000 (synopsis "Python implementation of the JSON-LD specification")
8001 (description "PyLD is an implementation of the JSON-LD specification.")
8002 (license license:bsd-3)))
8003
8004(define-public python-cli-helpers
8005 (package
8006 (name "python-cli-helpers")
8007 (version "2.7.0")
8008 (source
8009 (origin
8010 (method url-fetch)
8011 (uri (pypi-uri "cli_helpers" version))
8012 (sha256
8013 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
8014 (build-system pyproject-build-system)
8015 (native-inputs
8016 (list python-pytest
8017 python-setuptools))
8018 (propagated-inputs
8019 (list python-configobj
8020 python-tabulate))
8021 (home-page "https://github.com/dbcli/cli_helpers")
8022 (synopsis "Helpers for building command-line apps")
8023 (description
8024 "CLI Helpers is a Python package that makes it easy to perform common
8025tasks when building command-line apps. It's a helper library for command-line
8026interfaces.")
8027 (license license:bsd-3)))
8028
8029(define-public python-click
8030 (package
8031 (name "python-click")
8032 (version "8.1.8")
8033 (source
8034 (origin
8035 (method git-fetch)
8036 (uri (git-reference
8037 (url "https://github.com/pallets/click")
8038 (commit version)))
8039 (file-name (git-file-name name version))
8040 (sha256
8041 (base32 "1wqkkim5gmhdrc62c79s5gbzz2x60l1bf9aacpakfv6rr1zjl054"))))
8042 (build-system pyproject-build-system)
8043 (native-inputs
8044 (list less
8045 python-flit-core
8046 python-pytest))
8047 (home-page "https://palletsprojects.com/p/click/")
8048 (synopsis "Command line library for Python")
8049 (description
8050 "Click is a Python package for creating command line interfaces in a
8051composable way with as little code as necessary. Its name stands for
8052\"Command Line Interface Creation Kit\". It's highly configurable but comes
8053with sensible defaults out of the box.")
8054 (license license:bsd-3)))
8055
8056(define-public python-click-7
8057 (package (inherit python-click)
8058 (name "python-click")
8059 (version "7.1.2")
8060 (source
8061 (origin
8062 (method url-fetch)
8063 (uri (pypi-uri "click" version))
8064 (sha256
8065 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
8066 (arguments (list #:tests? #f)) ;no tests in PyPI
8067 (native-inputs
8068 (list python-setuptools))))
8069
8070(define-public python-clickgen
8071 (package
8072 (name "python-clickgen")
8073 (version "2.2.5")
8074 (source (origin
8075 (method git-fetch)
8076 (uri (git-reference
8077 (url "https://github.com/ful1e5/clickgen")
8078 (commit (string-append "v" version))))
8079 (file-name (git-file-name name version))
8080 (sha256
8081 (base32
8082 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
8083 (build-system pyproject-build-system)
8084 (arguments
8085 (list
8086 #:test-flags
8087 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
8088 '(list "-k" "not test_clickgen_raises")))
8089 (native-inputs
8090 (list python-pytest
8091 python-setuptools))
8092 (propagated-inputs
8093 (list python-attrs
8094 python-numpy
8095 python-pillow
8096 python-pyyaml
8097 python-toml))
8098 (home-page "https://github.com/ful1e5/clickgen")
8099 (synopsis "The hassle-free cursor building toolbox")
8100 (description
8101 "Clickgen is an API for building X11 and Windows cursors from .png files.
8102clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
8103 (license license:expat)))
8104
8105(define-public python-clickhouse-connect
8106 (package
8107 (name "python-clickhouse-connect")
8108 (version "0.6.1")
8109 (source (origin
8110 (method git-fetch)
8111 (uri (git-reference
8112 (url "https://github.com/ClickHouse/clickhouse-connect")
8113 (commit (string-append "v" version))))
8114 (file-name (git-file-name name version))
8115 (sha256
8116 (base32
8117 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
8118 (build-system pyproject-build-system)
8119 (arguments
8120 (list
8121 #:test-flags
8122 ;; All these tests require docker-compose
8123 '(list "--ignore-glob=tests/integration_tests/*")
8124 #:phases
8125 '(modify-phases %standard-phases
8126 (add-after 'unpack 'patch-pyproject
8127 (lambda _
8128 ;; Our version of pytest is confused by this field.
8129 (substitute* "pyproject.toml"
8130 (("^env_files.*") ""))))
8131 (add-before 'check 'build-extensions
8132 (lambda _
8133 ;; Cython extensions have to be built before running the tests.
8134 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
8135 (propagated-inputs
8136 (list python-arrow
8137 python-certifi
8138 python-lz4
8139 python-numpy
8140 python-orjson
8141 python-pandas
8142 python-pytz
8143 python-setuptools ; For pkg_resources.
8144 python-sqlalchemy
8145 python-urllib3
8146 python-zstandard))
8147 (native-inputs
8148 (list python-cython
8149 python-pytest
8150 python-wheel))
8151 (home-page "https://github.com/ClickHouse/clickhouse-connect")
8152 (synopsis
8153 "ClickHouse database core driver for Python, Pandas, and Superset")
8154 (description
8155 "This package provides a high performance core database driver for
8156connecting ClickHouse to Python, Pandas, and Superset.")
8157 (license license:asl2.0)))
8158
8159(define-public python-cligj
8160 (package
8161 (name "python-cligj")
8162 (version "0.7.2")
8163 (source
8164 (origin
8165 (method url-fetch)
8166 (uri (pypi-uri "cligj" version))
8167 (sha256
8168 (base32
8169 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
8170 (build-system pyproject-build-system)
8171 (native-inputs
8172 (list python-pytest
8173 python-setuptools))
8174 (propagated-inputs
8175 (list python-click))
8176 (home-page "https://github.com/mapbox/cligj")
8177 (synopsis "Click params for command line interfaces to GeoJSON")
8178 (description
8179 "cligj is for Python developers who create command line interfaces
8180for geospatial data. cligj allows you to quickly build consistent,
8181well-tested and interoperable CLIs for handling GeoJSON.")
8182 (license license:bsd-3)))
8183
8184(define-public python-cloup
8185 (package
8186 (name "python-cloup")
8187 (version "3.0.8")
8188 (source (origin
8189 (method url-fetch)
8190 (uri (pypi-uri "cloup" version))
8191 (sha256
8192 (base32
8193 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
8194 (build-system pyproject-build-system)
8195 (propagated-inputs (list python-click))
8196 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
8197 (home-page "https://github.com/janLuke/cloup")
8198 (synopsis "Extension library for python-click")
8199 (description
8200 "Cloup enriches Click with several features that make it more expressive
8201and configurable such as option groups, constraints, subcommand aliases,
8202subcommands sections and a themeable HelpFormatter.")
8203 (license license:bsd-3)))
8204
8205(define-public python-jsondiff
8206 (package
8207 (name "python-jsondiff")
8208 (version "2.2.1")
8209 (source
8210 (origin
8211 (method url-fetch)
8212 (uri (pypi-uri "jsondiff" version))
8213 (sha256
8214 (base32
8215 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
8216 (build-system pyproject-build-system)
8217 (arguments
8218 (list
8219 #:phases
8220 #~(modify-phases %standard-phases
8221 (add-before 'build 'set-version
8222 (lambda _
8223 (substitute* "pyproject.toml"
8224 (("^version_file.*") "")
8225 (("dynamic = \\[\"version\"\\]")
8226 (string-append "version = \"" #$version "\""))))))))
8227 (propagated-inputs (list python-pyyaml))
8228 (native-inputs
8229 (list python-hypothesis
8230 python-pytest
8231 python-setuptools
8232 python-setuptools-scm
8233 python-wheel))
8234 (home-page "https://github.com/fzumstein/jsondiff")
8235 (synopsis "Compare JSON and JSON-like structures in Python")
8236 (description "@code{jsondiff} is a Python library which lets you compare,
8237diff, and patch JSON and JSON-like structures in Python.")
8238 (license license:expat)))
8239
8240(define-public python-ddlparse
8241 (package
8242 (name "python-ddlparse")
8243 (version "1.10.0")
8244 (source
8245 (origin
8246 (method url-fetch)
8247 (uri (pypi-uri "ddlparse" version))
8248 (sha256
8249 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
8250 (build-system pyproject-build-system)
8251 (native-inputs
8252 (list python-pytest
8253 python-pytest-cov
8254 python-setuptools))
8255 (propagated-inputs (list python-pyparsing))
8256 (home-page "https://github.com/shinichi-takii/ddlparse")
8257 (synopsis "Parses and converts DDL to BigQuery JSON schema")
8258 (description "This package provides @code{ddlparse}, a Python library to parse
8259and convert DDL to BigQuery JSON schema.")
8260 (license license:bsd-3)))
8261
8262(define-public python-jsonschema
8263 (package
8264 (name "python-jsonschema")
8265 (version "4.23.0")
8266 (source
8267 (origin
8268 (method url-fetch)
8269 (uri (pypi-uri "jsonschema" version))
8270 (sha256
8271 (base32 "1i3b4sckkc3v8vckqa11xbrj695qzrzsfzrkclra6lb3ybz9f56p"))))
8272 (build-system pyproject-build-system)
8273 (arguments
8274 (list
8275 #:phases
8276 #~(modify-phases %standard-phases
8277 (add-before 'check 'pre-check
8278 (lambda _
8279 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
8280 (native-inputs
8281 (list python-hatchling
8282 python-hatch-fancy-pypi-readme
8283 python-hatch-vcs
8284 ;; For <tests/test_cli.py::TestCLIIntegration::test_license>.
8285 python-pip
8286 python-pytest))
8287 (propagated-inputs
8288 (list python-attrs
8289 python-fqdn
8290 python-idna
8291 python-importlib-resources
8292 python-isoduration
8293 python-jsonpointer
8294 python-jsonschema-specifications
8295 python-rfc3339-validator
8296 python-rfc3986-validator
8297 python-referencing-bootstrap
8298 python-rpds-py
8299 python-uri-template
8300 python-webcolors))
8301 (home-page "https://github.com/Julian/jsonschema")
8302 (synopsis "Implementation of JSON Schema for Python")
8303 (description
8304 "Jsonschema is an implementation of JSON Schema for Python.")
8305 (license license:expat)))
8306
8307;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
8308;; version.
8309(define-public python-jsonschema-3
8310 (package
8311 (inherit python-jsonschema)
8312 (version "3.2.0")
8313 (source (origin
8314 (method url-fetch)
8315 (uri (pypi-uri "jsonschema" version))
8316 (sha256
8317 (base32
8318 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
8319 (arguments
8320 (substitute-keyword-arguments (package-arguments python-jsonschema)
8321 ((#:tests? _ #t) #f)))
8322 (propagated-inputs
8323 (list python-attrs
8324 python-pyrsistent
8325 python-typing-extensions))
8326 (native-inputs
8327 (list python-setuptools-scm python-twisted
8328 python-setuptools python-wheel))))
8329
8330(define-public python-jsonschema-path
8331 (package
8332 (name "python-jsonschema-path")
8333 (version "0.3.2")
8334 (source
8335 (origin
8336 (method url-fetch)
8337 (uri (pypi-uri "jsonschema_path" version))
8338 (sha256
8339 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
8340 (build-system pyproject-build-system)
8341 (arguments
8342 (list
8343 #:tests? #false ;there are none
8344 #:phases
8345 '(modify-phases %standard-phases
8346 (add-after 'unpack 'relax-requirements
8347 (lambda _
8348 (substitute* "pyproject.toml"
8349 (("referencing = \">=0.28.0,<0.32.0\"")
8350 "referencing = \">=0.28.0\"")))))))
8351 (propagated-inputs (list python-pathable python-pyyaml python-referencing
8352 python-requests))
8353 (native-inputs (list python-poetry-core))
8354 (home-page "https://github.com/p1c2u/jsonschema-path")
8355 (synopsis "JSONSchema Spec with object-oriented paths")
8356 (description "This package implements object-oriented JSONSchema. It lets
8357you traverse a schema like paths and access a schema on demand with separate
8358dereferencing accessor layer.")
8359 (license license:asl2.0)))
8360
8361(define-public python-jsonschema-objects
8362 (package
8363 (name "python-jsonschema-objects")
8364 (version "0.5.7")
8365 (source
8366 (origin
8367 (method git-fetch)
8368 (uri (git-reference
8369 (url "https://github.com/cwacek/python-jsonschema-objects/")
8370 (commit version)))
8371 (file-name (git-file-name name version))
8372 (sha256
8373 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
8374 (build-system pyproject-build-system)
8375 (native-inputs
8376 (list python-pytest
8377 python-pytest-mock
8378 python-setuptools))
8379 (propagated-inputs
8380 (list python-inflection
8381 python-jsonschema
8382 python-markdown))
8383 (home-page "http://python-jsonschema-objects.readthedocs.org/")
8384 (synopsis "Automatic Python binding generation from JSON schemas")
8385 (description
8386 "This package provides an automatic class-based binding to JSON
8387Schemas for use in python.")
8388 (license license:expat)))
8389
8390(define-public python-jsonschema-specifications
8391 (package
8392 (name "python-jsonschema-specifications")
8393 (version "2024.10.1")
8394 (source
8395 (origin
8396 (method url-fetch)
8397 (uri (pypi-uri "jsonschema_specifications" version))
8398 (sha256
8399 (base32 "0wp2g90jsaa48g1v0n6m43ywhh9cj1ig19q25lay334m74vbhf0g"))))
8400 (build-system pyproject-build-system)
8401 (native-inputs
8402 (list python-hatch-vcs
8403 python-hatchling
8404 python-pytest))
8405 (propagated-inputs
8406 (list python-importlib-resources
8407 python-referencing-bootstrap))
8408 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
8409 (synopsis
8410 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
8411 (description
8412 "This package provides JSON support files from the JSON Schema
8413Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
8414from Python as a referencing-based Schema Registry.")
8415 (license license:expat)))
8416
8417(define-public python-schema
8418 (package
8419 (name "python-schema")
8420 (version "0.7.7")
8421 (source
8422 (origin
8423 (method url-fetch)
8424 (uri (pypi-uri "schema" version))
8425 (sha256
8426 (base32
8427 "01qq1amzbjm1kvjrnnhpjs8v761kwp6qihs74pf1k2lmsamm79bx"))))
8428 (build-system pyproject-build-system)
8429 (native-inputs
8430 (list python-pytest
8431 python-setuptools
8432 python-wheel))
8433 (home-page "https://github.com/keleshev/schema")
8434 (synopsis "Simple data validation library")
8435 (description
8436 "@code{python-schema} is a library for validating Python data
8437structures, such as those obtained from config-files, forms, external
8438services or command-line parsing, converted from JSON/YAML (or
8439something else) to Python data-types.")
8440 (license license:psfl)))
8441
8442(define-public python-kitchen
8443 (package
8444 (name "python-kitchen")
8445 (version "1.2.6")
8446 (source
8447 (origin
8448 (method git-fetch)
8449 (uri (git-reference
8450 (url "https://github.com/fedora-infra/kitchen")
8451 (commit version)))
8452 (file-name (git-file-name name version))
8453 (sha256
8454 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
8455 (build-system pyproject-build-system)
8456 (arguments
8457 (list
8458 #:test-flags
8459 #~(list "kitchen3"
8460 ;; XXX: Unclear why these tests fail.
8461 "-e" "test_invalid_fallback_no_raise"
8462 "-e" "test_internal_generate_combining_table"
8463 "-e" "test_lgettext"
8464 "-e" "test_lngettext"
8465 "-e" "test_easy_gettext_setup_non_unicode")
8466 #:phases
8467 #~(modify-phases %standard-phases
8468 (add-before 'check 'delete-broken-test-files
8469 (lambda _
8470 (delete-file "kitchen3/tests/test__all__.py")
8471 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
8472 (native-inputs (list python-pynose python-setuptools))
8473 (home-page "https://github.com/fedora-infra/kitchen")
8474 (synopsis "Python API for snippets")
8475 (description
8476 "@code{kitchen} module provides a python API for all sorts of little
8477useful snippets of code that everybody ends up writing for their projects but
8478never seem big enough to build an independent release. Use kitchen and stop
8479cutting and pasting that code over and over.")
8480 (license (list license:lgpl2.1+
8481 ;; subprocess.py, test_subprocess.py,
8482 ;; kitchen/pycompat25/defaultdict.py:
8483 license:psfl))))
8484
8485(define-public python-roman
8486 (package
8487 (name "python-roman")
8488 (version "5.2")
8489 (source
8490 (origin
8491 (method git-fetch)
8492 (uri (git-reference
8493 (url "https://github.com/zopefoundation/roman")
8494 (commit version)))
8495 (file-name (git-file-name name version))
8496 (sha256
8497 (base32
8498 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
8499 (build-system pyproject-build-system)
8500 (arguments
8501 (list
8502 #:test-backend #~'unittest))
8503 (native-inputs (list python-setuptools))
8504 (home-page "https://github.com/zopefoundation/roman")
8505 (synopsis "Integer to Roman numerals converter")
8506 (description
8507 "This package provides a small helper library to convert Arabic Numbers
8508to Roman Numerals.")
8509 (license license:zpl2.1)))
8510
8511(define-public python-rollbar
8512 (package
8513 (name "python-rollbar")
8514 (version "1.3.0")
8515 (source (origin
8516 (method url-fetch)
8517 (uri (pypi-uri "rollbar" version))
8518 (sha256
8519 (base32
8520 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
8521 (build-system pyproject-build-system)
8522 (native-inputs (list python-httpx
8523 python-pytest
8524 python-setuptools
8525 python-webob
8526 python-wheel))
8527 (inputs (list python-requests))
8528 (home-page "https://github.com/rollbar/pyrollbar")
8529 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
8530 (description
8531 "Python SDK for reporting exceptions, errors, and log messages
8532to @url{https://rollbar.com/, Rollbar}.
8533
8534Capabilities include:
8535
8536@itemize @bullet
8537@item Sending messages and exceptions with arbitrary context
8538@item Getting back aggregates
8539@item Debugging production issues
8540@end itemize")
8541 (license license:expat)))
8542
8543(define-public python-pyjwt
8544 (package
8545 (name "python-pyjwt")
8546 (version "2.10.1")
8547 (source
8548 (origin
8549 (method url-fetch)
8550 (uri (pypi-uri "pyjwt" version))
8551 (sha256
8552 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
8553 (build-system pyproject-build-system)
8554 (arguments
8555 (list
8556 ;; tests: 286 passed, 4 skipped, 1 deselected
8557 ;;
8558 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
8559 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
8560 ;; resolution>"
8561 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
8562 (native-inputs
8563 (list python-pytest
8564 python-setuptools))
8565 (propagated-inputs
8566 (if (supported-package? python-cryptography)
8567 (list python-cryptography)
8568 '()))
8569 (home-page "https://github.com/progrium/pyjwt")
8570 (synopsis "JSON Web Token implementation in Python")
8571 (description
8572 "PyJWT is a JSON Web Token implementation written in Python.")
8573 (license license:expat)))
8574
8575(define-public python-pymsgbox
8576 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
8577 (revision "1"))
8578 (package
8579 (name "python-pymsgbox")
8580 (version (git-version "1.0.6" revision commit))
8581 (source
8582 (origin
8583 (method git-fetch)
8584 (uri (git-reference
8585 (url "https://github.com/asweigart/PyMsgBox")
8586 (commit commit)))
8587 (file-name (git-file-name name version))
8588 (sha256
8589 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
8590 (build-system pyproject-build-system)
8591 (arguments
8592 ;; Circular dependency to run tests:
8593 ;; Tests need pyautogui, which depends on pymsgbox.
8594 '(#:tests? #f))
8595 (native-inputs (list python-setuptools python-wheel))
8596 (home-page "https://github.com/asweigart/PyMsgBox")
8597 (synopsis "Python module for JavaScript-like message boxes")
8598 (description
8599 "PyMsgBox is a simple, cross-platform, pure Python module for
8600JavaScript-like message boxes. Types of dialog boxes include:
8601@enumerate
8602@item alert
8603@item confirm
8604@item prompt
8605@item password
8606@end enumerate
8607")
8608 (license license:bsd-3))))
8609
8610(define-public python-pympler
8611 (package
8612 (name "python-pympler")
8613 (version "1.1")
8614 (source
8615 (origin
8616 (method url-fetch)
8617 (uri (pypi-uri "pympler" version))
8618 (sha256
8619 (base32 "090403k1wvqyddjwbla4843dylysrkd8yw7i62222b4rp1y8dahy"))))
8620 (build-system pyproject-build-system)
8621 (arguments
8622 (list
8623 ;; One test fails with error: 'function (test.muppy.test_summary.func)'
8624 ;; != 'function (muppy.test_summary.func)'.
8625 ;; See <https://github.com/pympler/pympler/issues/134>.
8626 #:test-flags #~(list "-k" "not test_repr_function")))
8627 (native-inputs
8628 (list python-pytest
8629 python-setuptools
8630 python-wheel))
8631 (home-page "https://pythonhosted.org/Pympler/")
8632 (synopsis "Measure, monitor and analyze memory behavior")
8633 (description
8634 "Pympler is a development tool to measure, monitor and analyze
8635the memory behavior of Python objects in a running Python application.
8636
8637By pympling a Python application, detailed insight in the size and the
8638lifetime of Python objects can be obtained. Undesirable or unexpected
8639runtime behavior like memory bloat and other @samp{pymples} can easily
8640be identified.
8641
8642A web profiling frontend exposes process statistics, garbage
8643visualisation and class tracker statistics.")
8644 (license license:asl2.0)))
8645
8646(define-public python-itsdangerous
8647 (package
8648 (name "python-itsdangerous")
8649 (version "2.2.0")
8650 (source
8651 (origin
8652 (method url-fetch)
8653 (uri (pypi-uri "itsdangerous" version))
8654 (sha256
8655 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
8656 (build-system pyproject-build-system)
8657 (native-inputs
8658 (list python-flit-core
8659 python-freezegun
8660 python-pytest))
8661 (home-page "https://palletsprojects.com/p/itsdangerous/")
8662 (synopsis "Python library for passing data to/from untrusted environments")
8663 (description
8664 "Itsdangerous provides various helpers to pass trusted data to untrusted
8665environments and back.")
8666 (license license:bsd-3)))
8667
8668;; WARNING: This package is a dependency of mesa.
8669(define-public python-pyyaml
8670 (package
8671 (name "python-pyyaml")
8672 (version "6.0.2")
8673 (source
8674 (origin
8675 (method url-fetch)
8676 (uri (pypi-uri "PyYAML" version))
8677 (sha256
8678 (base32 "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m"))))
8679 (build-system pyproject-build-system)
8680 (native-inputs
8681 (list python-cython
8682 python-pytest
8683 python-setuptools
8684 python-wheel))
8685 (inputs
8686 (list libyaml))
8687 (home-page "https://pyyaml.org")
8688 (synopsis "YAML parser and emitter for Python")
8689 (description
8690 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
8691complete YAML 1.1 parser, Unicode support, pickle support, capable extension
8692API, and sensible error messages. PyYAML supports standard YAML tags and
8693provides Python-specific tags that represent an arbitrary Python object.")
8694 (license license:expat)))
8695
8696(define-public python-crossenv
8697 (package
8698 (name "python-crossenv")
8699 (version "1.6.1")
8700 (source
8701 (origin
8702 (method git-fetch)
8703 (uri (git-reference
8704 (url "https://github.com/benfogle/crossenv")
8705 (commit (string-append "v" version))))
8706 (file-name (git-file-name name version))
8707 (sha256
8708 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
8709 (build-system pyproject-build-system)
8710 (arguments
8711 (list
8712 ;; XXX: Running test require setting environment variables for
8713 ;; architectures.
8714 #:tests? #f))
8715 (native-inputs (list python-hatchling))
8716 (home-page "https://github.com/benfogle/crossenv")
8717 (synopsis "Cross-compiling virtualenv for Python")
8718 (description
8719 "This package is a tool for cross-compiling extension modules. It
8720creates a special virtual environment such that @command{pip} or
8721@file{setup.py} will cross compile packages for you, usually with no further
8722work on your part.")
8723 (license license:expat)))
8724
8725(define-public python-linkify-it-py
8726 (package
8727 (name "python-linkify-it-py")
8728 (version "2.0.0")
8729 (source (origin
8730 (method git-fetch) ;for tests
8731 (uri (git-reference
8732 (url "https://github.com/tsutsu3/linkify-it-py")
8733 (commit (string-append "v" version))))
8734 (file-name (git-file-name name version))
8735 (sha256
8736 (base32
8737 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
8738 (build-system pyproject-build-system)
8739 (propagated-inputs (list python-uc-micro-py))
8740 (native-inputs (list python-pytest python-setuptools python-wheel))
8741 (home-page "https://github.com/tsutsu3/linkify-it-py")
8742 (synopsis "Links recognition library with full Unicode support")
8743 (description "This is Python port of
8744@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
8745recognition library with full Unicode support. It has features like:
8746@itemize
8747@item Full unicode support, with @i{astral} characters
8748@item International domains support
8749@item Allows rules extension and custom normalizers.
8750@end itemize")
8751 (license license:expat)))
8752
8753(define-public python-makefun
8754 (package
8755 (name "python-makefun")
8756 (version "1.15.1")
8757 (source (origin
8758 (method url-fetch)
8759 (uri (pypi-uri "makefun" version))
8760 (sha256
8761 (base32
8762 "19a8dga8rnmjn5gy1cy1wdi28swbkdkypwbqikbxil6ynqcg3c20"))))
8763 (build-system pyproject-build-system)
8764 (native-inputs
8765 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
8766 (home-page "https://github.com/smarie/python-makefun")
8767 (synopsis "Library to dynamically create python functions")
8768 (description "@code{makefun} helps create functions dynamically with a
8769given signature. It was largely inspired by @code{python-decorator} and
8770@code{functools}.")
8771 (license license:bsd-3)))
8772
8773(define-public python-markdown-it-py
8774 (package
8775 (name "python-markdown-it-py")
8776 (version "3.0.0")
8777 (source (origin
8778 (method url-fetch)
8779 (uri (pypi-uri "markdown-it-py" version))
8780 (sha256
8781 (base32
8782 "1swgvyiavak0nmfb31lq5zck5chwhmyf6qb6qwpcav86zaa0mxp3"))))
8783 (build-system pyproject-build-system)
8784 (arguments (list #:tests? #f)) ;pypi source does not contains tests
8785 (native-inputs (list python-flit-core))
8786 (propagated-inputs
8787 (list python-commonmark
8788 python-linkify-it-py
8789 python-markdown
8790 python-mdurl
8791 python-mistletoe
8792 python-mistune
8793 python-panflute
8794 python-psutil
8795 python-pyyaml))
8796 (home-page "https://github.com/executablebooks/markdown-it-py")
8797 (synopsis "Python port of markdown-it")
8798 (description
8799 "This is a Python port of @code{markdown-it}, and some of its associated
8800plugins. The driving design philosophy of the port has been to change as
8801little of the fundamental code structure (file names, function name, etc) as
8802possible.")
8803 (license license:expat)))
8804
8805(define-public python-markupsafe
8806 (package
8807 (name "python-markupsafe")
8808 (version "3.0.3")
8809 (source
8810 (origin
8811 (method url-fetch)
8812 (uri (pypi-uri "markupsafe" version))
8813 (sha256
8814 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
8815 (build-system pyproject-build-system)
8816 ;; tests: 79 passed, 1 skipped
8817 (native-inputs
8818 (list python-pytest
8819 python-setuptools))
8820 (home-page "https://markupsafe.palletsprojects.com")
8821 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
8822 (description
8823 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
8824for Python.")
8825 (license license:bsd-3)))
8826
8827(define-public python-jinja2
8828 (package
8829 (name "python-jinja2")
8830 (version "3.1.2")
8831 (source
8832 (origin
8833 (method url-fetch)
8834 (uri (pypi-uri "Jinja2" version))
8835 (sha256
8836 (base32 "0lp86yadzf8dph67f6g3yxmvnhrzzi863z58jmsrx2j059q1ld9i"))))
8837 (build-system pyproject-build-system)
8838 (native-inputs (list python-pytest python-setuptools python-wheel))
8839 (propagated-inputs (list python-markupsafe))
8840 (home-page "https://jinja.palletsprojects.com/")
8841 (synopsis "Python template engine")
8842 (description
8843 "Jinja2 is a small but fast and easy to use stand-alone template engine
8844written in pure Python.")
8845 (license license:bsd-3)))
8846
8847(define-public python-jinja2-fragments
8848 (package
8849 (name "python-jinja2-fragments")
8850 (version "1.11.0")
8851 (source
8852 (origin
8853 (method git-fetch)
8854 (uri (git-reference
8855 (url "https://github.com/sponsfreixes/jinja2-fragments")
8856 (commit version)))
8857 (file-name (git-file-name name version))
8858 (sha256
8859 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
8860 (patches
8861 ;; Remove test setup code related to `litestar` and `sanic`
8862 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
8863 (build-system pyproject-build-system)
8864 (arguments
8865 (list
8866 #:test-flags
8867 #~(list "--ignore=tests/test_litestar.py"
8868 "--ignore=tests/test_sanic.py")))
8869 (native-inputs
8870 (list python-fastapi
8871 python-flask
8872 python-pytest
8873 python-pytest-asyncio
8874 python-quart
8875 python-setuptools))
8876 (propagated-inputs
8877 (list python-jinja2))
8878 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
8879 (synopsis "Jinja2 extension for template fragments")
8880 (description
8881 "Render Jinja2 template block as HTML page fragments on Python web
8882frameworks.")
8883 (license license:expat)))
8884
8885(define-public python-pypugjs
8886 (package
8887 (name "python-pypugjs")
8888 (version "5.12.0")
8889 (source
8890 (origin
8891 (method git-fetch)
8892 (uri (git-reference
8893 (url "https://github.com/kakulukia/pypugjs")
8894 (commit (string-append "v" version))))
8895 (file-name (git-file-name name version))
8896 (sha256
8897 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
8898 (build-system pyproject-build-system)
8899 (native-inputs (list python-django
8900 python-jinja2
8901 python-flask
8902 python-mako
8903 python-poetry-core
8904 python-pytest
8905 python-tornado))
8906 (propagated-inputs (list python-charset-normalizer python-six))
8907 (home-page "https://github.com/kakulukia/pypugjs")
8908 (synopsis "Convert Pug source files into different template languages")
8909 (description
8910 "PyPugJS is a high-performance port of PugJS for Python, that converts
8911any @file{.pug} source into different template languages: Django, Jinja2,
8912Mako, and Tornado.")
8913 (license license:expat))) ;; MIT
8914
8915(define-public python-pystache
8916 (package
8917 (name "python-pystache")
8918 (version "0.6.8")
8919 (source (origin
8920 (method url-fetch)
8921 (uri (pypi-uri "pystache" version))
8922 (sha256
8923 (base32
8924 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
8925 (build-system pyproject-build-system)
8926 (native-inputs (list python-pytest python-setuptools python-wheel))
8927 (home-page "http://defunkt.io/pystache/")
8928 (synopsis "Python logic-less template engine")
8929 (description
8930 "Pystache is a Python implementation of the framework agnostic,
8931logic-free templating system Mustache.")
8932 (license license:expat)))
8933
8934(define-public python-pystack
8935 (package
8936 (name "python-pystack")
8937 (version "1.5.1")
8938 (source
8939 (origin
8940 (method git-fetch)
8941 (uri (git-reference
8942 (url "https://github.com/bloomberg/pystack")
8943 (commit (string-append "v" version))))
8944 (file-name (git-file-name name version))
8945 (sha256
8946 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
8947 (build-system pyproject-build-system)
8948 (arguments
8949 (list
8950 ;; Integration tests need ptrace and gcore (gdb).
8951 #:test-flags #~(list "tests/unit")))
8952 (native-inputs
8953 (list python-cython
8954 python-pkgconfig
8955 python-pytest
8956 python-setuptools))
8957 (inputs
8958 (list elfutils))
8959 (home-page "https://github.com/bloomberg/pystack")
8960 (synopsis "Python stack trace analyzer for core dumps and live processes")
8961 (description
8962 "PyStack analyzes stack frames of running Python processes or Python core
8963dumps. It can inspect what a process is doing or what it was doing when it
8964crashed, without modifying any memory or executing code in the target process.")
8965 (license license:asl2.0)))
8966
8967(define-public python-pystitcher
8968 (package
8969 (name "python-pystitcher")
8970 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
8971 (revision . "0")
8972 (upstream-version . "1.0.5")))
8973 (version (git-version (assoc-ref properties 'upstream-version)
8974 (assoc-ref properties 'revision)
8975 (assoc-ref properties 'commit)))
8976 (source
8977 (origin
8978 (method git-fetch)
8979 (uri (git-reference
8980 (url "https://github.com/captn3m0/pystitcher")
8981 (commit (assoc-ref properties 'commit))))
8982 (file-name (git-file-name name version))
8983 (sha256
8984 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
8985 (build-system pyproject-build-system)
8986 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
8987 (inputs (list python-html5lib
8988 python-markdown
8989 python-pypdf
8990 python-validators))
8991 (home-page "https://github.com/captn3m0/pystitcher")
8992 (synopsis "Declaratively stitch together a PDF file from multiple sources")
8993 (description
8994 "This package stitches your PDF files together, generating customizable
8995bookmarks using a declarative input in the form of a markdown file.")
8996 (license license:expat)))
8997
8998(define-public python-joblib
8999 (package
9000 (name "python-joblib")
9001 (version "1.5.2")
9002 (source
9003 (origin
9004 (method url-fetch)
9005 (uri (pypi-uri "joblib" version))
9006 (sha256
9007 (base32 "0mbvch9pzadf0vrm666381ic0ryy5zsv5abxak506bsb0lwmraiz"))))
9008 (build-system pyproject-build-system)
9009 (arguments
9010 (list
9011 #:test-flags
9012 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9013 ;; Disabled to avoid having to depend on ipython/jupyter.
9014 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
9015 (native-inputs
9016 (list python-pytest
9017 python-pytest-asyncio
9018 python-pytest-xdist
9019 python-setuptools
9020 python-wheel))
9021 (home-page "https://joblib.readthedocs.io/")
9022 (synopsis "Using Python functions as pipeline jobs")
9023 (description
9024 "Joblib is a set of tools to provide lightweight pipelining in Python.
9025In particular, joblib offers: transparent disk-caching of the output values
9026and lazy re-evaluation (memoize pattern), easy simple parallel computing
9027logging and tracing of the execution.")
9028 (license license:bsd-3)))
9029
9030(define-public python-daemon
9031 (package
9032 (name "python-daemon")
9033 (version "3.1.2")
9034 (source
9035 (origin
9036 (method git-fetch)
9037 (uri (git-reference
9038 (url "https://pagure.io/python-daemon")
9039 (commit (string-append "release/" version))))
9040 (file-name (git-file-name name version))
9041 (sha256
9042 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
9043 (patches
9044 (search-patches "python-daemon-relax-lockfile.patch"))))
9045 (build-system pyproject-build-system)
9046 (arguments
9047 (list
9048 #:phases
9049 #~(modify-phases %standard-phases
9050 (add-after 'unpack 'discard-dynamic-metadata
9051 (lambda _
9052 (substitute* "pyproject.toml"
9053 (("^dynamic = " all)
9054 (format #f "version = ~s~%~a" #$version all))
9055 (("\"(description|readme|version|maintainers)\",")
9056 ""))
9057 (for-each delete-file
9058 '("setup.py"
9059 "test/test_util_metadata.py"
9060 "test/test_setup.py")))))))
9061 (propagated-inputs (list python-filelock))
9062 (native-inputs (list python-testscenarios python-setuptools))
9063 (home-page "https://pagure.io/python-daemon/")
9064 (synopsis "Python library for making a Unix daemon process")
9065 (description
9066 "Python-daemon is a library that assists a Python program to turn itself
9067into a well-behaved Unix daemon process, as specified in PEP 3143.
9068
9069This library provides a @code{DaemonContext} class that manages the following
9070important tasks for becoming a daemon process:
9071@enumerate
9072@item Detach the process into its own process group.
9073@item Set process environment appropriate for running inside a chroot.
9074@item Renounce suid and sgid privileges.
9075@item Close all open file descriptors.
9076@item Change the working directory, uid, gid, and umask.
9077@item Set appropriate signal handlers.
9078@item Open new file descriptors for stdin, stdout, and stderr.
9079@item Manage a specified PID lock file.
9080@item Register cleanup functions for at-exit processing.
9081@end enumerate")
9082 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
9083 (license (list license:asl2.0 license:gpl3+))))
9084
9085(define-public python-annotated-types
9086 (package
9087 (name "python-annotated-types")
9088 (version "0.7.0")
9089 (source
9090 (origin
9091 (method url-fetch)
9092 (uri (pypi-uri "annotated_types" version))
9093 (sha256
9094 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
9095 (build-system pyproject-build-system)
9096 (native-inputs
9097 (list python-hatchling
9098 python-pytest))
9099 (propagated-inputs (list python-typing-extensions))
9100 (home-page "https://github.com/annotated-types/annotated-types")
9101 (synopsis "Reusable constraint types to use with typing.Annotated")
9102 (description "This package provides metadata objects which can be used to
9103represent common constraints such as upper and lower bounds on scalar values and
9104collection sizes, a Predicate marker for runtime checks, and descriptions of how
9105we intend these metadata to be interpreted. In some cases, we also note
9106alternative representations which do not require this package.")
9107 (license license:expat)))
9108
9109(define-public python-anytree
9110 (package
9111 (name "python-anytree")
9112 (version "2.13.0")
9113 (source
9114 (origin
9115 (method git-fetch) ; no tests data in PyPi package
9116 (uri (git-reference
9117 (url "https://github.com/c0fec0de/anytree")
9118 (commit version)))
9119 (file-name (git-file-name name version))
9120 (sha256
9121 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
9122 (build-system pyproject-build-system)
9123 (arguments
9124 (list
9125 #:phases
9126 #~(modify-phases %standard-phases
9127 (add-before 'check 'pre-check
9128 (lambda _
9129 ;; Tests need to write to that direcroty.
9130 (mkdir-p "tests/dotexport/"))))))
9131 (native-inputs
9132 (list graphviz ;for 'dot'
9133 python-pdm-backend
9134 python-pytest
9135 python-pytest-cov
9136 python-pyyaml
9137 python-test2ref))
9138 (home-page "https://github.com/c0fec0de/anytree")
9139 (synopsis "Lightweight tree data library")
9140 (description
9141 "@code{anytree} is a simple, lightweight, and extensible tree data
9142structure for Python.")
9143 (license license:asl2.0)))
9144
9145(define-public kalamine
9146 (package
9147 (name "kalamine")
9148 (version "0.38")
9149 (source
9150 (origin
9151 (method url-fetch)
9152 (uri (pypi-uri "kalamine" version))
9153 (sha256
9154 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
9155 (build-system pyproject-build-system)
9156 (arguments
9157 (list
9158 #:phases
9159 #~(modify-phases %standard-phases
9160 (add-before 'check 'make-test-layouts
9161 (lambda _
9162 (apply invoke
9163 (cons* "python" "-m" "kalamine.cli" "build"
9164 (find-files "layouts" "\\.toml")))
9165 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
9166 (propagated-inputs
9167 (list python-click
9168 python-livereload
9169 python-lxml
9170 python-progress
9171 python-pyyaml
9172 python-tomli))
9173 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
9174 ;; packaged.
9175 (native-inputs
9176 (list python-hatchling python-pytest))
9177 (home-page "https://github.com/OneDeadKey/kalamine")
9178 (synopsis "Keyboard layout maker")
9179 (description
9180 "Kalamine provides a CLI to create advanced keyboard layout from a
9181textual portable description. It also supports layout emulation via web
9182browser.")
9183 (license license:expat)))
9184
9185(define-public python-dm-tree
9186 (package
9187 (name "python-dm-tree")
9188 (version "0.1.9")
9189 (source
9190 (origin
9191 (method url-fetch)
9192 (uri (pypi-uri "dm_tree" version))
9193 (sha256
9194 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
9195 (build-system pyproject-build-system)
9196 (arguments
9197 (list #:tests? #f
9198 #:phases
9199 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
9200 ;; and USE_SYSTEM_PYBIND11=true.
9201 #~(modify-phases %standard-phases
9202 (add-before 'build 'build-shared-lib
9203 (lambda _
9204 (let* ((pybind11 #$(this-package-input "pybind11"))
9205 (python #$(this-package-input "python"))
9206 (version (python-version python))
9207 (abseil-cpp #$(this-package-input "abseil-cpp")))
9208 ;; Delete default cmake build.
9209 (substitute* "setup.py"
9210 (("ext_modules.*") "")
9211 (("cmdclass.*") ""))
9212 ;; Actual build phase.
9213 (mkdir-p "build/temp/tree/")
9214 (invoke
9215 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
9216 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
9217 "-fno-semantic-interposition" "-fPIC"
9218 "-I" (string-append pybind11
9219 "/lib/python" version
9220 "/site-packages/pybind11/include")
9221 "-I" (string-append python "/include/python"
9222 version)
9223 "-I" (string-append abseil-cpp "/include")
9224 "-c" "tree/tree.cc"
9225 "-o" "build/temp/tree/tree.o"
9226 "-fvisibility=hidden" "-g0")
9227 (mkdir-p "build/lib/tree")
9228 (invoke
9229 "g++" "-pthread" "-shared"
9230 (string-append "-Wl," "-rpath=" python "/lib")
9231 "-fno-semantic-interposition"
9232 "build/temp/tree/tree.o"
9233 "-L" (string-append python "/lib")
9234 (string-append abseil-cpp "/lib/libabsl_int128.a")
9235 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
9236 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
9237 (string-append abseil-cpp "/lib/libabsl_strings.a")
9238 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
9239 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
9240 "-o" "build/lib/tree/_tree.so")))))))
9241 ;; We link the static abseil libraries here to avoid problems in
9242 ;; downstream libraries using potentially different variants of
9243 ;; abseil-cpp. This is also what's done in the upstream CMake build.
9244 (native-inputs
9245 (list python-setuptools))
9246 (inputs
9247 (list pybind11-2
9248 static-abseil-cpp
9249 python))
9250 (propagated-inputs
9251 (list python-absl-py
9252 python-attrs
9253 python-numpy
9254 python-wrapt))
9255 (home-page "https://github.com/deepmind/tree")
9256 (synopsis "Work with nested data structures in Python")
9257 (description "Tree is a python library for working with nested data
9258structures. In a way, @code{tree} generalizes the builtin @code{map} function
9259which only supports flat sequences, and allows you to apply a function to each
9260leaf preserving the overall structure.")
9261 (license license:asl2.0)))
9262
9263(define-public python-pyment
9264 (package
9265 (name "python-pyment")
9266 (version "0.3.4")
9267 (source
9268 (origin
9269 (method git-fetch)
9270 (uri
9271 (git-reference
9272 (url "https://github.com/dadadel/pyment")
9273 (commit (string-append "v" version))))
9274 (file-name (git-file-name name version))
9275 (sha256
9276 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
9277 (build-system pyproject-build-system)
9278 (native-inputs (list python-pytest python-setuptools))
9279 (home-page "https://github.com/dadadel/pyment/")
9280 (synopsis "Convert Python docstrings automatically")
9281 (description "Pyment is a command line tool and library that can be
9282used to convert between several docstring styles.")
9283 (license license:gpl3+)))
9284
9285(define-public python-docstring-parser
9286 (package
9287 (name "python-docstring-parser")
9288 (version "0.15")
9289 (source (origin
9290 (method url-fetch)
9291 (uri (pypi-uri "docstring_parser" version))
9292 (sha256
9293 (base32
9294 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
9295 (build-system pyproject-build-system)
9296 (native-inputs (list python-poetry-core python-pytest))
9297 (home-page "https://github.com/rr-/docstring_parser")
9298 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
9299 (description "This package lets you parse Python docstrings in reST,
9300Google and Numpydoc format.")
9301 (license license:expat)))
9302
9303(define-public python-docutils
9304 (package
9305 (name "python-docutils")
9306 (version "0.21.2")
9307 (source
9308 (origin
9309 (method url-fetch)
9310 (uri (pypi-uri "docutils" version))
9311 (sha256
9312 (base32 "0vwqzbmzdvwx23myx4cg8s8mdkrqnfxpa9yi7jm2s66z5rrihsrs"))))
9313 (build-system pyproject-build-system)
9314 (arguments
9315 (list
9316 #:test-backend #~'custom
9317 #:test-flags #~(list "test/alltests.py")
9318 #:phases
9319 (if (target-hurd?)
9320 #~(modify-phases %standard-phases
9321 (add-before 'check 'fix-errno
9322 (lambda _
9323 ;; Some tests check for an exact error message
9324 ;; Expecting ENOENT == 2.
9325 (substitute* (find-files "test" "\\.py$")
9326 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
9327 #~%standard-phases)))
9328 (native-inputs
9329 (list python-flit-core))
9330 (home-page "https://docutils.sourceforge.net/")
9331 (synopsis "Python Documentation Utilities")
9332 (description
9333 "Docutils is a modular system for processing documentation into useful
9334formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
9335easy to use markup language, for input.
9336
9337This package provides tools for converting @file{.rst} files to other formats
9338via commands such as @command{rst2man}, as well as supporting Python code.")
9339 ;; Most of the source code is public domain, but some source files are
9340 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
9341 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
9342
9343(define-public python-docutils-0.19
9344 (hidden-package
9345 (package
9346 (inherit python-docutils)
9347 (version "0.19")
9348 (source (origin
9349 (method url-fetch)
9350 (uri (pypi-uri "docutils" version))
9351 (sha256
9352 (base32
9353 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
9354 (native-inputs
9355 (list python-setuptools python-wheel)))))
9356
9357(define-public python-docx
9358 (package
9359 (name "python-docx")
9360 (version "1.2.0")
9361 (source (origin
9362 (method url-fetch)
9363 (uri (pypi-uri "python_docx" version))
9364 (sha256
9365 (base32
9366 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
9367 (build-system pyproject-build-system)
9368 (native-inputs
9369 (list behave
9370 python-pyparsing
9371 python-pytest
9372 python-setuptools
9373 python-wheel))
9374 (propagated-inputs
9375 (list python-lxml python-typing-extensions))
9376 (home-page "https://github.com/python-openxml/python-docx/")
9377 (synopsis "Python library to create and modify Microsoft Word documents")
9378 (description "This Python library can be used to create and update
9379Microsoft Word (.docx) documents.")
9380 (license license:expat)))
9381
9382(define-public python-repoze-lru
9383 (package
9384 (name "python-repoze-lru")
9385 (version "0.7")
9386 (source
9387 (origin
9388 (method url-fetch)
9389 (uri (pypi-uri "repoze.lru" version))
9390 (sha256
9391 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
9392 (build-system pyproject-build-system)
9393 (arguments
9394 (list
9395 #:test-backend #~'unittest
9396 #:test-flags #~(list "discover" "repoze")))
9397 (native-inputs
9398 (list python-setuptools))
9399 (home-page "https://www.repoze.org")
9400 (synopsis "Tiny LRU cache implementation and decorator")
9401 (description
9402 "This package provides a tiny LRU cache implementation and decorator.")
9403 (license license:bsd-4)))
9404
9405(define-public python-reretry
9406 (package
9407 (name "python-reretry")
9408 (version "0.11.8")
9409 (source
9410 (origin
9411 (method git-fetch)
9412 (uri (git-reference
9413 (url "https://github.com/leshchenko1979/reretry")
9414 (commit version)))
9415 (file-name (git-file-name name version))
9416 (sha256
9417 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
9418 (build-system pyproject-build-system)
9419 (native-inputs
9420 (list python-pytest python-pytest-asyncio python-setuptools))
9421 (home-page "https://github.com/leshchenko1979/reretry")
9422 (synopsis "Functional decorator for retrying on exceptions")
9423 (description
9424 "This package is a fork from the retry package, but with some of added
9425community-sourced features. It provides an easy to use, but functional
9426decorator for retrying on exceptions.")
9427 (license license:asl2.0)))
9428
9429(define-public python-restructuredtext-lint
9430 (package
9431 (name "python-restructuredtext-lint")
9432 (version "1.4.0")
9433 (source
9434 (origin
9435 (method git-fetch)
9436 (uri (git-reference
9437 (url "https://github.com/twolfson/restructuredtext-lint")
9438 (commit version)))
9439 (file-name (git-file-name name version))
9440 (sha256
9441 (base32 "19ncbmnq2rnkqxhc9wf0q9whji34iyfv1pz6z61vnv4qhhdrn33v"))))
9442 (build-system pyproject-build-system)
9443 (arguments (list #:test-backend #~'unittest))
9444 (propagated-inputs (list python-docutils))
9445 (native-inputs (list python-setuptools))
9446 (home-page "https://github.com/twolfson/restructuredtext-lint")
9447 (synopsis "Linter")
9448 (description
9449 "This package provides a linter for the reStructuredText format.")
9450 (license license:unlicense)))
9451
9452(define-public python-click-repl
9453 (package
9454 (name "python-click-repl")
9455 (version "0.3.0")
9456 (source
9457 (origin
9458 (method git-fetch) ; no tests in PyPI release
9459 (uri (git-reference
9460 (url "https://github.com/click-contrib/click-repl")
9461 (commit version)))
9462 (file-name (git-file-name name version))
9463 (sha256
9464 (base32 "08asy80wdplbrfff7q7qb9k3kkaw5jxqvy9jnkfvsqy3831zf964"))))
9465 (build-system pyproject-build-system)
9466 (native-inputs (list python-pytest
9467 python-pytest-cov ; used by default
9468 python-setuptools
9469 python-wheel))
9470 (propagated-inputs
9471 (list python-click python-prompt-toolkit))
9472 (home-page "https://github.com/click-contrib/click-repl")
9473 (synopsis "REPL plugin for Click")
9474 (description "This package provides a REPL plugin for Click.")
9475 (license license:expat)))
9476
9477(define-public python-pygdbmi
9478 (package
9479 (name "python-pygdbmi")
9480 (version "0.11.0.0")
9481 (source
9482 (origin
9483 (method url-fetch)
9484 (uri (pypi-uri "pygdbmi" version))
9485 (sha256
9486 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
9487 (build-system pyproject-build-system)
9488 (arguments (list #:tests? #f)) ;no tests in PyPI archive
9489 (native-inputs (list python-setuptools python-wheel))
9490 (home-page "https://github.com/cs01/pygdbmi")
9491 (synopsis "Parse gdb machine interface output with Python")
9492 (description "This package provides a parse gdb machine interface output
9493with Python.")
9494 (license license:expat)))
9495
9496(define-public python-pygtrie
9497 (package
9498 (name "python-pygtrie")
9499 (version "2.5.0")
9500 (source
9501 (origin
9502 (method git-fetch)
9503 (uri (git-reference
9504 (url "https://github.com/mina86/pygtrie")
9505 (commit (string-append "v" version))))
9506 (file-name (git-file-name name version))
9507 (sha256
9508 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
9509 (build-system pyproject-build-system)
9510 (arguments
9511 (list
9512 #:test-backend #~'unittest
9513 #:phases
9514 #~(modify-phases %standard-phases
9515 (add-after 'unpack 'set-version
9516 (lambda _
9517 (delete-file "version.py")
9518 (substitute* "setup.py"
9519 (("import version")
9520 "")
9521 (("version\\.get_version\\(\\)")
9522 (format #f "~s" #$version))))))))
9523 (native-inputs (list python-setuptools))
9524 (home-page "https://github.com/mina86/pygtrie")
9525 (synopsis "Pure Python trie data structure implementation")
9526 (description
9527 "This package provides a pure Python trie data structure implementation.")
9528 (license license:asl2.0)))
9529
9530(define-public python-bump2version
9531 (package
9532 (name "python-bump2version")
9533 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
9534 (revision . "1")))
9535 (version (git-version "1.0.1"
9536 (assoc-ref properties 'revision)
9537 (assoc-ref properties 'commit)))
9538 (source
9539 (origin
9540 (method git-fetch)
9541 (uri (git-reference
9542 (url "https://github.com/c4urself/bump2version")
9543 (commit (assoc-ref properties 'commit))))
9544 (file-name (git-file-name name version))
9545 (sha256
9546 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
9547 (build-system pyproject-build-system)
9548 (arguments
9549 ;; XXX: Single flaky failing test.
9550 (list #:test-flags #~(list "-k" "not test_usage_string")))
9551 (native-inputs (list python-pytest python-setuptools python-testfixtures))
9552 (home-page "https://github.com/c4urself/bump2version")
9553 (synopsis "Version-bump your software with a single command!")
9554 (description
9555 "This package provides a small command line tool to simplify releasing
9556software by updating all version strings in your source code by the correct
9557increment. It also creates commits and tags.")
9558 (license license:expat)))
9559
9560(define-public python-deprecated
9561 (package
9562 (name "python-deprecated")
9563 (version "1.3.1")
9564 (source
9565 (origin
9566 (method git-fetch)
9567 (uri (git-reference
9568 (url "https://github.com/tantale/deprecated")
9569 (commit (string-append "v" version))))
9570 (file-name (git-file-name name version))
9571 (sha256
9572 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
9573 (build-system pyproject-build-system)
9574 (native-inputs
9575 (list python-pytest
9576 python-setuptools))
9577 (propagated-inputs
9578 (list python-wrapt))
9579 (home-page "https://github.com/tantale/deprecated")
9580 (synopsis "Python decorator to deprecate classes, functions or methods")
9581 (description
9582 "The @code{deprecated} decorator provides a convenient way to deprecate
9583to deprecate classes, functions or methods.")
9584 (license license:expat)))
9585
9586(define-public python-pygithub
9587 (package
9588 (name "python-pygithub")
9589 (version "2.8.1")
9590 (source
9591 (origin
9592 (method git-fetch)
9593 (uri (git-reference
9594 (url "https://github.com/PyGithub/PyGithub")
9595 (commit (string-append "v" version))))
9596 (file-name (git-file-name name version))
9597 (sha256
9598 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
9599 (build-system pyproject-build-system)
9600 (propagated-inputs
9601 (list python-pyjwt
9602 python-pynacl
9603 python-requests
9604 python-typing-extensions
9605 python-urllib3))
9606 (native-inputs
9607 (list python-responses
9608 python-pytest
9609 python-setuptools
9610 python-setuptools-scm))
9611 (home-page "https://pygithub.readthedocs.io/en/latest/")
9612 (synopsis "Python library for the GitHub API")
9613 (description "This library allows managing GitHub resources such as
9614repositories, user profiles, and organizations in your Python applications,
9615using version 3 of the GitHub application programming interface (API).")
9616 (license license:lgpl3+)))
9617
9618(define-public python-rellu
9619 (package
9620 (name "python-rellu")
9621 (version "0.7")
9622 (source
9623 (origin
9624 (method git-fetch)
9625 (uri (git-reference
9626 (url "https://github.com/robotframework/rellu")
9627 (commit (string-append "v" version))))
9628 (file-name (git-file-name name version))
9629 (sha256
9630 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
9631 (build-system pyproject-build-system)
9632 (native-inputs (list python-pytest python-setuptools))
9633 (propagated-inputs (list python-invoke python-pygithub))
9634 (home-page "https://github.com/robotframework/rellu")
9635 (synopsis "Utilities to create PyPI releases")
9636 (description
9637 "This collection of utilities contains tooling and templates to assist in
9638creating releases on GitHub and publishing them on PyPI. It is designed to be
9639used by Robot Framework and tools and libraries in its ecosystem, but can
9640naturally be used also by other projects.")
9641 (license license:asl2.0)))
9642
9643(define-public python-robotframework
9644 (package
9645 (name "python-robotframework")
9646 (version "7.3.2")
9647 (source
9648 (origin
9649 (method git-fetch) ; no tests in the PyPI archive
9650 (uri (git-reference
9651 (url "https://github.com/robotframework/robotframework")
9652 (commit (string-append "v" version))))
9653 (file-name (git-file-name name version))
9654 (sha256
9655 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
9656 (outputs '("out" "doc"))
9657 (build-system pyproject-build-system)
9658 (arguments
9659 (list
9660 #:modules '((guix build pyproject-build-system)
9661 (guix build utils)
9662 (ice-9 ftw)
9663 (ice-9 match)
9664 (srfi srfi-26))
9665 #:phases
9666 #~(modify-phases %standard-phases
9667 (add-before 'build 'build-and-install-doc
9668 (lambda* (#:key outputs #:allow-other-keys)
9669 (let ((doc (string-append #$output:doc
9670 "/share/doc/robotframework")))
9671 (invoke "invoke" "library-docs" "all")
9672 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
9673 (mkdir-p doc)
9674 (with-directory-excursion "dist"
9675 (define user-guide-dir
9676 (match (scandir "." (cut string-prefix?
9677 "robotframework-userguide-" <>))
9678 ((dir) dir)
9679 (_ (error "could not find the user guide directory"))))
9680 (copy-recursively user-guide-dir doc)))))
9681 (replace 'check
9682 (lambda* (#:key tests? #:allow-other-keys)
9683 (when tests?
9684 ;; TODO: Some acceptance faile and took near 30min to
9685 ;; complete: 6765 tests, 6745 passed, 20 failed; findout how
9686 ;; to skip failing ones.
9687 (format #t "Running unit tests...~%")
9688 (invoke "utest/run.py")))))))
9689 (native-inputs
9690 (list python-docutils
9691 python-invoke
9692 python-jsonschema
9693 python-pygments
9694 python-rellu
9695 python-typing-extensions
9696 python-setuptools
9697 `(,python "tk") ;used when building the HTML doc
9698 python-wheel))
9699 (home-page "https://robotframework.org")
9700 (synopsis "Generic automation framework")
9701 (description "Robot Framework is a generic automation framework for
9702acceptance testing, acceptance test driven development (ATDD), and robotic
9703process automation (RPA).")
9704 (license license:asl2.0)))
9705
9706(define-public python-robotframework-datadriver
9707 (package
9708 (name "python-robotframework-datadriver")
9709 (version "1.11.2")
9710 (source
9711 (origin
9712 (method git-fetch) ; no tests in PyPI release
9713 (uri (git-reference
9714 (url "https://github.com/Snooz82/robotframework-datadriver")
9715 (commit version)))
9716 (file-name (git-file-name name version))
9717 (sha256
9718 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
9719 (build-system pyproject-build-system)
9720 (arguments
9721 (list
9722 #:phases
9723 #~(modify-phases %standard-phases
9724 (add-before 'check 'skip-problematic-tests
9725 (lambda _
9726 (for-each delete-file-recursively
9727 (list
9728 ;; The test file 'tab-csv-file-name.tsv' contains
9729 ;; special characters for which there is no locale
9730 ;; in the build environment, causing one test to
9731 ;; fail.
9732 "atest/TestCases/csv_reader_config"
9733 ;; Error in file on line 6: Non-existing setting
9734 ;; 'Test Tags'.
9735 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
9736 (replace 'check
9737 (lambda* (#:key tests? #:allow-other-keys)
9738 (when tests?
9739 (with-directory-excursion "atest"
9740 (invoke "sh" "run_atest.sh"))))))))
9741 (native-inputs
9742 (list python-docutils
9743 python-robotframework-stacktrace
9744 python-setuptools
9745 python-xlrd))
9746 (propagated-inputs
9747 (list python-openpyxl
9748 python-pandas
9749 python-pygments
9750 python-robotframework))
9751 (home-page "https://github.com/Snooz82/robotframework-datadriver")
9752 (synopsis "Data-driven test extension for Robot Framework")
9753 (description "DataDriver is a data-driven extension for Robot Framework.
9754DataDriver uses the Listener Interface of Robot Framework to create new test
9755cases based on a data file that contains the test data. DataDriver supports
9756data files in the CSV, XLS or XLSX formats.")
9757 (license license:asl2.0)))
9758
9759(define-public python-robotframework-pabot
9760 (package
9761 (name "python-robotframework-pabot")
9762 (version "4.2.0")
9763 (source
9764 (origin
9765 ;; There are no tests in the PyPI archive.
9766 (method git-fetch)
9767 (uri (git-reference
9768 (url "https://github.com/mkorpela/pabot")
9769 (commit version)))
9770 (file-name (git-file-name name version))
9771 (sha256
9772 (base32
9773 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
9774 (build-system pyproject-build-system)
9775 (arguments
9776 (list
9777 #:test-flags
9778 #~(list "-k" (string-join
9779 ;; XXX: Maybe it's a bad idea to skip these tests which
9780 ;; failing assertions highlight incomparability issues.
9781 ;;
9782 ;; 93 passed, 23 deselected, 11 warnings
9783 (list "not test_argumentfile_outputs"
9784 "test_dependency_ok"
9785 "test_longnames_in_tests"
9786 "test_multiple_dependencies_ok"
9787 "test_orders"
9788 "test_pabotprerunmodifier"
9789 "test_pabotprerunmodifier_with_prerunmodifier"
9790 "test_pabotprerunmodifier_with_testlevelsplit"
9791 "test_pabotprerunmodifier_with_testlevelsplit_and_"
9792 "test_parallel_execution"
9793 "test_parallel_execution_with_testlevelsplit"
9794 "test_pre_run_with_new_name"
9795 "test_pre_run_with_new_tag"
9796 "test_run_dir_2_then_dir_3"
9797 "test_run_dir_3_then_dir_2"
9798 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
9799 "test_sleep_test_cases_and_group"
9800 "test_stdout_should_display_passed_test"
9801 "test_stdout_should_display_passed_test"
9802 "test_stdout_should_display_passed_test_and_not_"
9803 "test_testlevelsplit_output_task_order"
9804 "test_too_big_testname"
9805 "test_two_orders")
9806 " and not "))
9807 #:phases
9808 #~(modify-phases %standard-phases
9809 (add-after 'unpack 'relax-requirements
9810 (lambda _
9811 (substitute* "setup.cfg"
9812 ;; natsort>=8.2.0
9813 ((">=8.2.0") "")))))))
9814 (native-inputs
9815 (list python-pytest
9816 python-setuptools
9817 python-wheel))
9818 (propagated-inputs
9819 (list python-natsort
9820 python-robotframework
9821 python-robotframework-stacktrace))
9822 (home-page "https://pabot.org")
9823 (synopsis "Parallel test runner for Robot Framework")
9824 (description "Pabot is a parallel executor for Robot Framework tests.")
9825 (license license:asl2.0)))
9826
9827(define-public python-robotframework-stacktrace
9828 (package
9829 (name "python-robotframework-stacktrace")
9830 (version "0.4.1")
9831 (source
9832 (origin
9833 (method git-fetch)
9834 (uri (git-reference
9835 (url "https://github.com/MarketSquare/robotframework-stacktrace")
9836 (commit version)))
9837 (file-name (git-file-name name version))
9838 (sha256
9839 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
9840 (build-system pyproject-build-system)
9841 (arguments
9842 ;; XXX: The test suite fails (see:
9843 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
9844 (list
9845 #:tests? #f
9846 #:phases
9847 #~(modify-phases %standard-phases
9848 (add-after 'unpack 'set-version
9849 (lambda _
9850 (substitute* "setup.py"
9851 (("VERSION =.*")
9852 (string-append "VERSION = '" #$version "'"))))))))
9853 (native-inputs (list python-setuptools))
9854 (propagated-inputs (list python-robotframework))
9855 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
9856 (synopsis "Robot Framework listener to print a stack trace on error")
9857 (description "StackTrace is a Robot Framework listener that prints a stack
9858trace directly to the terminal to ease debugging.")
9859 (license license:asl2.0)))
9860
9861(define-public python-robotframework-sshlibrary
9862 (package
9863 (name "python-robotframework-sshlibrary")
9864 (version "3.8.0")
9865 ;; There are no tests in the PyPI archive.
9866 (source
9867 (origin
9868 (method git-fetch)
9869 (uri (git-reference
9870 (url "https://github.com/robotframework/SSHLibrary")
9871 (commit (string-append "v" version))))
9872 (file-name (git-file-name name version))
9873 (sha256
9874 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
9875 (patches (search-patches
9876 "python-robotframework-sshlibrary-rf5-compat.patch"))))
9877 (build-system pyproject-build-system)
9878 (arguments
9879 (list
9880 #:phases
9881 #~(modify-phases %standard-phases
9882 (add-before 'build 'build-and-install-doc
9883 (lambda _
9884 (let ((doc (string-append #$output:doc
9885 "/share/doc/robotframework-sshlibrary")))
9886 (invoke "chmod" "-R" "+w" "docs")
9887 (invoke "invoke" "kw-docs" "project-docs")
9888 (mkdir-p doc)
9889 (for-each delete-file
9890 (find-files "docs" "\\.rst"))
9891 (copy-recursively "docs" doc))))
9892 (replace 'check
9893 (lambda* (#:key tests? #:allow-other-keys)
9894 (when tests?
9895 ;; Some tests require an SSH server; we remove them.
9896 (delete-file "utest/test_client_api.py")
9897 (delete-file "utest/test_scp.py")
9898 (invoke "python" "utest/run.py")))))))
9899 (propagated-inputs
9900 (list python-robotframework python-paramiko python-scp))
9901 (native-inputs
9902 (list openssh
9903 which
9904 ;; To generate the documentation
9905 python-docutils
9906 python-invoke
9907 python-pygments
9908 python-rellu
9909 python-setuptools))
9910 (outputs '("out" "doc"))
9911 (home-page "https://github.com/robotframework/SSHLibrary")
9912 (synopsis "Robot Framework library for SSH and SFTP")
9913 (description
9914 "SSHLibrary is a Robot Framework library providing support for SSH and
9915SFTP. It has the following main usages:
9916@itemize @bullet
9917@item Executing commands on the remote machine, either blocking or non-blocking.
9918@item Writing and reading in an interactive shell.
9919@item Transferring files and directories over SFTP.
9920@item Ensuring that files and directories exist on the remote machine.
9921@end itemize")
9922 (license license:asl2.0)))
9923
9924(define-public python-robotframework-pythonlibcore
9925 (package
9926 (name "python-robotframework-pythonlibcore")
9927 (version "4.4.1")
9928 (source
9929 (origin
9930 (method git-fetch) ;no tests in pypi archive
9931 (uri (git-reference
9932 (url "https://github.com/robotframework/PythonLibCore")
9933 (commit (string-append "v" version))))
9934 (file-name (git-file-name name version))
9935 (sha256
9936 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
9937 (build-system pyproject-build-system)
9938 (arguments
9939 (list
9940 #:test-backend #~'custom
9941 #:test-flags #~(list "utest/run.py")))
9942 (native-inputs
9943 (list python-approvaltests
9944 python-pytest
9945 python-pytest-cov
9946 python-pytest-mockito
9947 python-robotframework
9948 python-setuptools))
9949 (home-page "https://github.com/robotframework/PythonLibCore")
9950 (synopsis "Robot Framework Python library tools")
9951 (description
9952 "PythonLibCore provides tools for creating larger test libraries for
9953Robot Framework using Python. The Robot Framework hybrid and dynamic library
9954APIs give more flexibility for library than the static library API, but they
9955also set requirements for libraries which need to be implemented in the
9956library side. PythonLibCore eases the problem by providing a simpler
9957interface and by handling all the requirements towards the Robot Framework
9958library APIs.")
9959 (license license:asl2.0)))
9960
9961(define-public python-robotframework-seleniumlibrary
9962 (package
9963 (name "python-robotframework-seleniumlibrary")
9964 (version "6.8.0")
9965 (source
9966 (origin
9967 (method git-fetch)
9968 (uri (git-reference
9969 (url "https://github.com/robotframework/SeleniumLibrary")
9970 (commit (string-append "v" version))))
9971 (file-name (git-file-name name version))
9972 (sha256
9973 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
9974 (build-system pyproject-build-system)
9975 (arguments
9976 (list
9977 #:test-flags
9978 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
9979 "-k" (string-join
9980 (list "not test_create_firefox_with_options"
9981 "test_create_headless_firefox_with_options"
9982 "test_create_driver_firefox")
9983 " and not "))))
9984 (native-inputs
9985 (list python-approvaltests
9986 python-pytest
9987 python-pytest-mockito
9988 python-setuptools))
9989 (propagated-inputs
9990 (list python-click
9991 python-robotframework
9992 python-robotframework-pythonlibcore
9993 python-selenium))
9994 (home-page "https://github.com/robotframework/SeleniumLibrary")
9995 (synopsis "Web testing library for Robot Framework")
9996 (description "SeleniumLibrary is a web testing library for Robot Framework
9997that utilizes the Selenium tool internally.")
9998 (license license:asl2.0)))
9999
10000(define-public python-robotframework-seleniumscreenshots
10001 (package
10002 (name "python-robotframework-seleniumscreenshots")
10003 (version "0.9.5")
10004 (source
10005 (origin
10006 (method git-fetch)
10007 (uri (git-reference
10008 (url
10009 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10010 (commit version)))
10011 (file-name (git-file-name name version))
10012 (sha256
10013 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
10014 (build-system pyproject-build-system)
10015 (arguments
10016 ;; XXX: The tests require a relatively complicated setup configured in
10017 ;; their CI with Nix (!).
10018 `(#:tests? #f))
10019 (native-inputs (list python-setuptools))
10020 (propagated-inputs
10021 (list python-robotframework python-robotframework-seleniumlibrary))
10022 (home-page
10023 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10024 (synopsis
10025 "Robot Framework library for annotating and cropping screenshots")
10026 (description
10027 "The SeleniumScreenshots library for Robot Framework provides keywords
10028for annotating and cropping screenshots taken with SeleniumLibrary. It is
10029useful for scripting automatically updated screenshots for documentation or
10030for visual regression testing purposes.")
10031 (license license:bsd-3)))
10032
10033(define-public python-rstr
10034 (package
10035 (name "python-rstr")
10036 (version "3.2.2")
10037 (source
10038 (origin
10039 (method git-fetch)
10040 (uri (git-reference
10041 (url "https://github.com/leapfrogonline/rstr")
10042 (commit version)))
10043 (file-name (git-file-name name version))
10044 (sha256
10045 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
10046 (build-system pyproject-build-system)
10047 (native-inputs (list python-pytest
10048 python-setuptools
10049 python-setuptools-scm
10050 python-wheel))
10051 (home-page "https://github.com/leapfrogonline/rstr")
10052 (synopsis "Generate random strings in Python")
10053 (description "This package provides a python module for generating
10054random strings of various types. It could be useful for fuzz testing,
10055generating dummy data, or other applications. It has no dependencies
10056outside the standard library.")
10057 (license license:bsd-3)))
10058
10059(define-public python-scp
10060 (package
10061 (name "python-scp")
10062 (version "0.15.0")
10063 (source
10064 (origin
10065 (method git-fetch)
10066 (uri (git-reference
10067 (url "https://github.com/jbardin/scp.py")
10068 (commit (string-append "v" version))))
10069 (file-name (git-file-name name version))
10070 (sha256
10071 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
10072 (build-system pyproject-build-system)
10073 (arguments (list #:tests? #f)) ;tests require an SSH server
10074 (native-inputs (list python-setuptools))
10075 (propagated-inputs (list python-paramiko))
10076 (home-page "https://github.com/jbardin/scp.py")
10077 (synopsis "SCP protocol module for Python and Paramiko")
10078 (description
10079 "The scp module extends the Paramiko library to send and receive files
10080via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
10081 (license license:gpl2+)))
10082
10083(define-public python-rst-linker
10084 (package
10085 (name "python-rst-linker")
10086 (version "2.6.0")
10087 (source
10088 (origin
10089 (method git-fetch)
10090 (uri (git-reference
10091 (url "https://github.com/jaraco/rst.linker")
10092 (commit (string-append "v" version))))
10093 (file-name (git-file-name name version))
10094 (sha256
10095 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
10096 (build-system pyproject-build-system)
10097 (propagated-inputs (list python-jaraco-context))
10098 (native-inputs
10099 (list python-path
10100 python-jaraco-vcs
10101 python-pytest
10102 python-pytest-subprocess
10103 python-setuptools-scm
10104 python-setuptools))
10105 (home-page "https://github.com/jaraco/rst.linker")
10106 (synopsis "Sphinx plugin to add links and timestamps")
10107 (description
10108 "rst.linker automatically replaces text by a reStructuredText external
10109reference or timestamps. It's primary purpose is to augment the changelog,
10110but it can be used for other documents, too.")
10111 (license license:expat)))
10112
10113(define-public python-feedgenerator
10114 (package
10115 (name "python-feedgenerator")
10116 (version "2.1.0")
10117 (source
10118 (origin
10119 (method url-fetch)
10120 (uri (pypi-uri "feedgenerator" version))
10121 (sha256
10122 (base32
10123 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
10124 (build-system pyproject-build-system)
10125 (native-inputs
10126 (list python-pytest python-pytest-cov python-setuptools python-wheel))
10127 (propagated-inputs
10128 (list python-pytz))
10129 (home-page "https://github.com/getpelican/feedgenerator")
10130 (synopsis
10131 "Standalone version of Django's Atom/RSS feed generator")
10132 (description
10133 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
10134which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
10135 (license license:bsd-3)))
10136
10137(define-public python-lsp-jsonrpc
10138 (package
10139 (name "python-lsp-jsonrpc")
10140 (version "1.1.2")
10141 (source
10142 (origin
10143 (method url-fetch)
10144 (uri (pypi-uri "python-lsp-jsonrpc" version))
10145 (sha256
10146 (base32
10147 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
10148 (build-system pyproject-build-system)
10149 (native-inputs
10150 (list python-pyflakes
10151 python-pytest
10152 python-pytest-cov
10153 python-setuptools
10154 python-setuptools-scm
10155 python-wheel))
10156 (propagated-inputs
10157 (list python-ujson))
10158 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
10159 (synopsis "JSON RPC 2.0 server library")
10160 (description
10161 "This package provides a JSON RPC 2.0 server library for Python.")
10162 (license license:expat)))
10163
10164(define-public python-pydantic
10165 (package
10166 (name "python-pydantic")
10167 (version "2.12.5")
10168 (source
10169 (origin
10170 (method git-fetch)
10171 (uri (git-reference
10172 (url "https://github.com/samuelcolvin/pydantic")
10173 (commit (string-append "v" version))))
10174 (file-name (git-file-name name version))
10175 (sha256
10176 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
10177 (build-system pyproject-build-system)
10178 (arguments
10179 (list
10180 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
10181 #:test-flags
10182 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
10183 (native-inputs
10184 (list tzdata-for-tests
10185 python-dirty-equals
10186 python-faker
10187 python-hatch-fancy-pypi-readme
10188 python-hatchling
10189 python-jsonschema
10190 python-pytest
10191 python-pytest-benchmark
10192 python-pytest-examples
10193 python-pytest-mock
10194 python-pytest-run-parallel))
10195 (propagated-inputs
10196 (list python-annotated-types
10197 python-pydantic-core ;it's hard == requirement, keep it in sync
10198 python-typing-extensions
10199 python-typing-inspection))
10200 (home-page "https://github.com/samuelcolvin/pydantic")
10201 (synopsis "Python data validation and settings management")
10202 (description
10203 "Pydantic enforces type hints at runtime, and provides user friendly
10204errors when data is invalid.")
10205 (license license:expat)))
10206
10207(define-public python-pydantic-1
10208 (package
10209 (inherit python-pydantic)
10210 (name "python-pydantic")
10211 (version "1.10.19")
10212 (source
10213 (origin
10214 (method git-fetch)
10215 (uri (git-reference
10216 (url "https://github.com/samuelcolvin/pydantic")
10217 (commit (string-append "v" version))))
10218 (file-name (git-file-name name version))
10219 (sha256
10220 (base32 "0swcpfq1y0h5dcj82idls8k5la4xh4c0vz47y7jci2qass8gjffc"))))
10221 (build-system pyproject-build-system)
10222 (arguments
10223 (list
10224 #:test-flags
10225 ;; One test fails with not equal assertion.
10226 #~(list "--deselect=tests/test_validators.py::test_assert_raises_validation_error")))
10227 (native-inputs
10228 (list python-pytest
10229 python-pytest-mock
10230 python-setuptools))
10231 (propagated-inputs
10232 (list python-typing-extensions))))
10233
10234;; It may be removed after 2026-01-05.
10235(define-deprecated/public-alias python-pydantic-2 python-pydantic)
10236
10237(define-public python-pydantic-core
10238 (package
10239 (name "python-pydantic-core")
10240 (version "2.41.5")
10241 (source
10242 (origin
10243 (method url-fetch)
10244 (uri (pypi-uri "pydantic_core" version))
10245 (sha256
10246 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
10247 (build-system pyproject-build-system)
10248 (arguments
10249 (list
10250 #:imported-modules `(,@%cargo-build-system-modules
10251 ,@%pyproject-build-system-modules)
10252 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
10253 (guix build pyproject-build-system)
10254 (guix build utils))
10255 ;; tests: 5318 passed, 123 skipped, 10 xfailed
10256 #:test-flags
10257 #~(list "--ignore=tests/benchmarks"
10258 ;; XXX: It cycles, bootstrap variant needs to be introduced:
10259 ;; python-pydantic-core -> python-pydantic ->
10260 ;; python-inline-snapshot -> python-pydantic-core
10261 "--ignore=tests/test_docstrings.py"
10262 "--ignore=tests/test_hypothesis.py"
10263 "--ignore=tests/validators/test_allow_partial.py"
10264 "--ignore=tests/validators/test_frozenset.py"
10265 "--ignore=tests/validators/test_list.py"
10266 "--ignore=tests/validators/test_set.py")
10267 #:phases
10268 #~(modify-phases %standard-phases
10269 (add-after 'unpack 'prepare-cargo-build-system
10270 (lambda args
10271 (for-each (lambda (phase)
10272 (format #t "Running cargo phase: ~a~%" phase)
10273 (apply (assoc-ref cargo:%standard-phases phase)
10274 #:cargo-target #$(cargo-triplet)
10275 args))
10276 '(unpack-rust-crates
10277 configure
10278 check-for-pregenerated-files
10279 patch-cargo-checksums))))
10280 (add-after 'unpack 'patch-pyproject
10281 (lambda _
10282 ;; maturin failed to parce pyproject.toml.
10283 (substitute* "pyproject.toml"
10284 (("^license-files = .*") "")))))))
10285 (native-inputs
10286 (append
10287 (list maturin
10288 python-dirty-equals
10289 python-pytest
10290 python-pytest-benchmark ;TODO: disable in pyproject.toml
10291 python-pytest-mock
10292 python-pytest-timeout
10293 python-typing-inspection
10294 python-tzdata
10295 rust
10296 `(,rust "cargo"))
10297 (or (and=> (%current-target-system)
10298 (compose list make-rust-sysroot))
10299 '())))
10300 (inputs
10301 (cargo-inputs 'python-pydantic-core))
10302 (propagated-inputs
10303 (list python-typing-extensions))
10304 (home-page "https://github.com/pydantic/pydantic-core")
10305 (synopsis "Core validation logic for pydantic")
10306 (description "This package provides the core functionality for pydantic
10307validation and serialization.")
10308 (license license:expat)))
10309
10310(define-public python-pydantic-cli
10311 (package
10312 (name "python-pydantic-cli")
10313 (version "9.1.0")
10314 (source
10315 (origin
10316 (method git-fetch) ;for tests
10317 (uri (git-reference
10318 (url "https://github.com/mpkocher/pydantic-cli")
10319 (commit (string-append "v" version))))
10320 (file-name (git-file-name name version))
10321 (sha256
10322 (base32
10323 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
10324 (build-system pyproject-build-system)
10325 (propagated-inputs
10326 (list python-pydantic))
10327 (native-inputs
10328 (list python-hatchling python-pytest))
10329 (home-page "https://github.com/mpkocher/pydantic-cli")
10330 (synopsis "Turn Pydantic defined data models into CLI tools")
10331 (description
10332 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
10333Interfaces} via data models provided in the JSON format.")
10334 (license license:expat)))
10335
10336(define-public python-pydantic-extra-types
10337 (package
10338 (name "python-pydantic-extra-types")
10339 (version "2.10.6")
10340 (source
10341 (origin
10342 (method git-fetch)
10343 (uri (git-reference
10344 (url "https://github.com/pydantic/pydantic-extra-types")
10345 (commit (string-append "v" version))))
10346 (file-name (git-file-name name version))
10347 (sha256
10348 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
10349 (build-system pyproject-build-system)
10350 (arguments
10351 (list
10352 ;; tests: 13079 passed, 1 deselected
10353 #:test-flags
10354 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
10355 #~(list "--ignore=tests/test_s3.py"
10356 "--deselect=tests/test_coordinate.py::test_json_schema"
10357 ;; XXX: The most of the tests fail, pendulum is optional package
10358 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
10359 ;; requires Rust.
10360 "--ignore=tests/test_pendulum_dt.py"
10361 "--ignore=tests/test_json_schema.py")
10362 #:phases
10363 #~(modify-phases %standard-phases
10364 (add-before 'check 'pre-check
10365 (lambda* (#:key inputs #:allow-other-keys)
10366 (setenv "TZ" "UTC")
10367 (setenv "TZDIR" (search-input-directory inputs
10368 "share/zoneinfo")))))))
10369 (native-inputs
10370 (list python-pytest
10371 python-hatchling
10372 tzdata-for-tests))
10373 (propagated-inputs
10374 (list python-pydantic
10375 python-typing-extensions
10376 ;; [optional]
10377 python-cron-converter
10378 ;; python-pendulum
10379 python-phonenumbers
10380 python-pycountry
10381 python-pymongo
10382 python-pytz
10383 python-semver
10384 python-tzdata
10385 python-ulid))
10386 (home-page "https://github.com/pydantic/pydantic-extra-types")
10387 (synopsis "Extra Pydantic types")
10388 (description "This package provides sxtra types for Pydantic.")
10389 (license license:expat)))
10390
10391(define-public python-pydantic-settings
10392 (package
10393 (name "python-pydantic-settings")
10394 (version "2.12.0")
10395 (source
10396 (origin
10397 (method url-fetch)
10398 (uri (pypi-uri "pydantic_settings" version))
10399 (sha256
10400 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
10401 (build-system pyproject-build-system)
10402 (arguments
10403 (list
10404 ;; tests: 399 passed, 27 skipped
10405 #:test-flags
10406 ;; XXX: Ignore tests requiring python-ruff.
10407 #~(list "--ignore=tests/test_docs.py")
10408 #:phases
10409 #~(modify-phases %standard-phases
10410 (add-before 'check 'set-home
10411 (lambda _
10412 ;; FileNotFoundError: [Errno 2] No such file or directory:
10413 ;; '/homeless-shelter/
10414 (setenv "HOME" "/tmp"))))))
10415 (native-inputs
10416 (list python-hatchling
10417 python-pytest
10418 python-pytest-examples
10419 python-pytest-mock))
10420 (propagated-inputs
10421 (list python-dotenv
10422 python-pydantic
10423 python-typing-inspection
10424 ;; [optional]
10425 python-pyyaml
10426 python-tomli))
10427 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
10428 (synopsis "Settings management using Pydantic")
10429 (description
10430 "Pydantic Settings provides optional Pydantic features for loading a
10431settings or config class from environment variables or secrets files.")
10432 (license license:expat)))
10433
10434(define-public python-pydoc-markdown
10435 (package
10436 (name "python-pydoc-markdown")
10437 (version "4.8.2")
10438 (source
10439 (origin
10440 (method url-fetch)
10441 (uri (pypi-uri "pydoc_markdown" version))
10442 (sha256
10443 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
10444 (build-system pyproject-build-system)
10445 (arguments
10446 (list
10447 #:tests? #false ;there are none
10448 #:phases
10449 '(modify-phases %standard-phases
10450 ;; This is probably not a good idea, but it wants a rather old
10451 ;; version of docstring-parser.
10452 (add-after 'unpack 'relax-requirements
10453 (lambda _
10454 (substitute* "pyproject.toml"
10455 (("docstring-parser = .*")
10456 "docstring-parser = \"^0\"\n")))))))
10457 (propagated-inputs (list python-click
10458 python-databind-core
10459 python-databind-json
10460 python-docspec
10461 python-docspec-python
10462 python-docstring-parser
10463 python-jinja2
10464 python-nr-util
10465 python-pyyaml
10466 python-requests
10467 python-tomli
10468 python-tomli-w
10469 python-watchdog
10470 python-yapf))
10471 (native-inputs (list python-poetry-core))
10472 (home-page "https://pypi.org/project/pydoc-markdown/")
10473 (synopsis "Create Python API documentation in Markdown format")
10474 (description "Pydoc-Markdown is a tool to create Python API documentation
10475in Markdown format. Instead of executing your Python code like so many other
10476documentation tools, it parses it using docspec instead.")
10477 (license license:expat)))
10478
10479;; XXX: The project is deprecated upstream, still in use by some packages,
10480;; consider to remove when nothing depends on it.
10481(define-public python-pydocstyle
10482 (package
10483 (name "python-pydocstyle")
10484 (version "6.3.0")
10485 (source
10486 (origin
10487 (method git-fetch) ;no tests in PyPI archive
10488 (uri (git-reference
10489 (url "https://github.com/PyCQA/pydocstyle")
10490 (commit version)))
10491 (file-name (git-file-name name version))
10492 (sha256
10493 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
10494 (patches (search-patches
10495 "python-pydocstyle-add-support-for-pep701.patch"))))
10496 (build-system pyproject-build-system)
10497 (arguments
10498 (list
10499 ;; It tries to install with pip.
10500 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
10501 #:phases
10502 #~(modify-phases %standard-phases
10503 (add-after 'unpack 'set-version
10504 (lambda _
10505 (substitute* "pyproject.toml"
10506 (("0.0.0-dev") #$version)))))))
10507 (native-inputs
10508 (list python-poetry-core
10509 python-pytest
10510 python-tomli))
10511 (propagated-inputs
10512 (list python-six
10513 python-snowballstemmer))
10514 (home-page "https://github.com/PyCQA/pydocstyle/")
10515 (synopsis "Python docstring style checker")
10516 (description
10517 "This package provides a style checker for the Python Language
10518Server (PLS).")
10519 (license license:expat)))
10520
10521(define-public python-lsp-server
10522 (package
10523 (name "python-lsp-server")
10524 (version "1.13.0")
10525 (source
10526 (origin
10527 (method url-fetch)
10528 (uri (pypi-uri "python_lsp_server" version))
10529 (sha256
10530 (base32
10531 "0s8dipxkdshg27a7a2nnkgg3kmksvbkfa7g39n310k6g7sv2d3rp"))))
10532 (build-system pyproject-build-system)
10533 (arguments
10534 (list
10535 #:test-flags
10536 '(list "-c" "/dev/null" ;avoid coverage
10537 "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
10538 "-k"
10539 (string-append
10540 "not test_concurrent_ws_requests " ; flaky
10541 "and not test_pyqt_completion " ; avoid pyqt5
10542 "and not test_pandas_completion")) ; avoid pandas
10543 #:phases
10544 '(modify-phases %standard-phases
10545 (add-before 'check 'set-HOME
10546 (lambda _ (setenv "HOME" "/tmp"))))))
10547 (propagated-inputs
10548 (list python-black
10549 python-docstring-to-markdown
10550 python-jedi
10551 python-lsp-jsonrpc
10552 python-pluggy
10553 python-pydocstyle
10554 python-ujson
10555 python-whatthepatch
10556 python-yapf))
10557 (native-inputs
10558 (list python-flake8
10559 python-flaky
10560 python-matplotlib
10561 python-pylint
10562 python-pytest
10563 python-rope
10564 python-setuptools
10565 python-setuptools-scm
10566 python-websockets
10567 python-wheel))
10568 (home-page "https://github.com/python-lsp/python-lsp-server")
10569 (synopsis "Python implementation of the Language Server Protocol")
10570 (description
10571 "The Python Language Server @command{pylsp} is an implementation of the
10572Python 3 language specification for the Language Server Protocol (LSP).
10573This tool is used in text editing environments to provide a complete
10574and integrated feature-set for programming Python effectively.")
10575 (license license:expat)))
10576
10577(define-public python-black
10578 (package
10579 (name "python-black")
10580 (version "25.1.0")
10581 (source
10582 (origin
10583 (method url-fetch)
10584 (uri (pypi-uri "black" version))
10585 (sha256
10586 (base32
10587 "0ri6xhcrm39c7q5si4wvx1fkq98mvbl4larmj4rxfai2s5f6sj9k"))))
10588 (build-system pyproject-build-system)
10589 (arguments
10590 (list
10591 #:test-flags
10592 ;; On the build farm we run out of resources if we let the build system
10593 ;; autodetect the number of parallel processes.
10594 '(list "--numprocesses" (number->string (min (parallel-job-count) 8)))
10595 #:phases
10596 '(modify-phases %standard-phases
10597 (add-after 'patch-source-shebangs 'use-absolute-file-names
10598 (lambda* (#:key inputs #:allow-other-keys)
10599 (substitute* (find-files "tests" "\\.py$")
10600 (("#!/usr/bin/env python3")
10601 (string-append
10602 "#!" (search-input-file inputs "/bin/python3")))))))))
10603 (propagated-inputs
10604 (list python-aiohttp
10605 python-click
10606 python-mypy-extensions
10607 python-packaging
10608 python-pathspec
10609 python-platformdirs))
10610 (native-inputs
10611 (list python-pytest-8
10612 python-pytest-xdist
10613 python-hatch-fancy-pypi-readme
10614 python-hatch-vcs
10615 python-hatchling))
10616 (home-page "https://github.com/psf/black")
10617 (synopsis "The uncompromising code formatter")
10618 (description "Black is the uncompromising Python code formatter.")
10619 (license license:expat)))
10620
10621(define-public python-black-macchiato
10622 (package
10623 (name "python-black-macchiato")
10624 (version "1.3.0")
10625 (source
10626 (origin
10627 (method git-fetch)
10628 (uri (git-reference
10629 (url "https://github.com/wbolster/black-macchiato")
10630 (commit version)))
10631 (file-name (git-file-name name version))
10632 (sha256
10633 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
10634 (build-system pyproject-build-system)
10635 (arguments
10636 (list
10637 #:phases
10638 #~(modify-phases %standard-phases
10639 (add-after 'unpack 'ignore-failing-tests
10640 (lambda _
10641 (substitute* "test_macchiato.py"
10642 (("\\(.*\\n'\\)," all)
10643 (string-append "# " all))))))))
10644 (native-inputs (list python-pytest python-setuptools))
10645 (propagated-inputs (list python-black))
10646 (home-page "https://github.com/wbolster/black-macchiato")
10647 (synopsis "Partial @code{python-black} formatting")
10648 (description
10649 "This package is built on top the @code{python-black} code formatter to
10650enable formatting of partial files.")
10651 (license license:bsd-3)))
10652
10653(define-public python-blinker
10654 (package
10655 (name "python-blinker")
10656 (version "1.9.0")
10657 (source
10658 (origin
10659 (method url-fetch)
10660 (uri (pypi-uri "blinker" version))
10661 (sha256
10662 (base32
10663 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
10664 (build-system pyproject-build-system)
10665 (native-inputs
10666 (list python-flit-core
10667 python-pytest
10668 python-pytest-asyncio))
10669 (home-page "https://pythonhosted.org/blinker/")
10670 (synopsis "Fast, simple object-to-object and broadcast signaling")
10671 (description
10672 "Blinker provides a fast dispatching system that allows any number of
10673interested parties to subscribe to events, or \"signals\".")
10674 (license license:expat)))
10675
10676(define-public pelican
10677 (package
10678 (name "pelican")
10679 (version "4.11.0")
10680 (source
10681 (origin
10682 (method url-fetch)
10683 (uri (pypi-uri "pelican" version))
10684 (sha256
10685 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
10686 (build-system pyproject-build-system)
10687 (arguments
10688 (list
10689 #:test-flags #~(list "-k" (string-append
10690 ;; These tests failed with AssertionError.
10691 "not test_typogrify_ignore_filters"
10692 " and not test_typogrify_ignore_tags"
10693 " and not test_error_on_warning"))))
10694 (native-inputs
10695 (list python-anyio
10696 python-beautifulsoup4
10697 python-lxml
10698 python-pdm-backend
10699 python-pytest
10700 python-smartypants
10701 python-typogrify))
10702 (inputs
10703 (list python-blinker
10704 python-dateutil
10705 ;; Ignoring `guix lint` warning as python-docutils is used to support
10706 ;; reStructuredText processing at runtime.
10707 python-docutils
10708 python-feedgenerator
10709 python-jinja2
10710 python-ordered-set
10711 python-pygments
10712 python-rich
10713 python-tzdata
10714 python-unidecode
10715 python-watchfiles))
10716 (home-page "https://blog.getpelican.com/")
10717 (synopsis "Python-based static site publishing system")
10718 (description
10719 "Pelican is a tool to generate a static blog from reStructuredText,
10720Markdown input files, and more. Pelican uses Jinja2 for templating
10721and is very extensible.")
10722 (license license:agpl3+)))
10723
10724(define-public python-cykhash
10725 (package
10726 (name "python-cykhash")
10727 (version "2.0.1")
10728 (source
10729 (origin
10730 (method url-fetch)
10731 (uri (pypi-uri "cykhash" version))
10732 (sha256
10733 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
10734 (build-system pyproject-build-system)
10735 (arguments
10736 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
10737 (native-inputs
10738 (list python-cython
10739 python-setuptools))
10740 (home-page "https://github.com/realead/cykhash")
10741 (synopsis "Khash-sets and maps")
10742 (description
10743 "This package is a Cython wrapper for khash-sets/maps. It brings
10744functionality of
10745@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
10746Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
10747world is lacking the concept of a (hash-)set. This shortcoming is fixed and
10748efficient (memory- and speedwise compared to pandas) @code{unique} and
10749@code{isin} are implemented. Python-set/dict have a big memory-footprint.
10750For some datatypes the overhead can be reduced by using khash by factor 4-8.")
10751 (license license:expat)))
10752
10753(define-public python-cython
10754 ;; TODO: Move to python-build.
10755 (package
10756 (name "python-cython")
10757 (version "3.1.7")
10758 (source
10759 (origin
10760 (method url-fetch)
10761 (uri (pypi-uri "cython" version))
10762 (sha256
10763 (base32 "0gaslzb3virk4v6yh5a7dp6ka1lm267v994g8r25lck1702vjy3g"))))
10764 (build-system pyproject-build-system)
10765 (arguments
10766 (list
10767 #:test-backend #~'custom
10768 #:test-flags
10769 #~(list "runtests.py"
10770 "-vv"
10771 "-j" (number->string (parallel-job-count))
10772 "-x" (string-join
10773 (list "annotate_html"
10774 "Debugger"
10775 ;; It introduces cycle.
10776 "numpy_test"
10777 ;; It fails with AssertionError: Failed doctest test
10778 ;; for complex_numbers_cpp.double_abs.
10779 "complex_numbers_cpp"
10780 ;; This test fails when running on 24 cores.
10781 "cpp_stl_conversion"
10782 #$@(if (target-32bit?)
10783 ;; XXX: On 32-bit architectures, running the
10784 ;; parallel tests fails on many-core systems.
10785 ;; See: <https://github.com/cython/cython/issues/2807>.
10786 '("run.parallel"
10787 ;; Test cpp_stl_any.cast_test fails.
10788 ;; See: <https://github.com/cython/cython/issues/5928>.
10789 "cpp_stl_any")
10790 '())
10791 #$@(if (system-hurd?)
10792 '("test_class_ref"
10793 "test_compiler_directives"
10794 "test_lang_version")
10795 '()))
10796 "|"))
10797 #:phases
10798 #~(modify-phases %standard-phases
10799 (add-before 'check 'pre-check
10800 (lambda* (#:key tests? test-flags #:allow-other-keys)
10801 ;; Disable compiler optimizations to greatly reduce the running
10802 ;; time of the test suite.
10803 (setenv "CFLAGS" "-O0")
10804 ;; Some tests require access to "$HOME/.cython".
10805 (setenv "HOME" "/tmp"))))))
10806 (native-inputs
10807 (list libxcrypt
10808 python-setuptools
10809 python-wheel))
10810 ;; we need the full python package and not just the python-wrapper
10811 ;; because we need libpython3.3m.so
10812 (inputs
10813 (list python))
10814 (home-page "https://cython.org/")
10815 (synopsis "C extensions for Python")
10816 (description "Cython is an optimising static compiler for both the Python
10817programming language and the extended Cython programming language. It makes
10818writing C extensions for Python as easy as Python itself.")
10819 (license license:asl2.0)))
10820
10821(define-public python-cython-0
10822 (package
10823 (inherit python-cython)
10824 ;; It's the latest version of 0.29. See
10825 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
10826 (version "0.29.37")
10827 (source
10828 (origin
10829 (method url-fetch)
10830 (uri (pypi-uri "Cython" version))
10831 (sha256
10832 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
10833 (arguments
10834 (list
10835 #:test-backend #~'custom
10836 #:test-flags
10837 #~(list "runtests.py"
10838 "-vv"
10839 "-j" (number->string (parallel-job-count))
10840 ;; XXX: On 32-bit architectures, running the parallel tests
10841 ;; fails on many-core systems, see
10842 ;; <https://github.com/cython/cython/issues/2807>.
10843 #$@(if (target-32bit?)
10844 #~("-x" "run.parallel")
10845 #~())
10846 #$@(if (system-hurd?)
10847 #~("-x" "test_class_ref"
10848 "-x" "test_compiler_directives"
10849 "-x" "test_lang_version")
10850 #~())
10851 ;; This test fails when running on 24 cores.
10852 "-x" "cpp_stl_conversion")
10853 #:phases
10854 #~(modify-phases %standard-phases
10855 (add-before 'check 'pre-check
10856 ;; some tests require access to "$HOME/.cython"
10857 (lambda _
10858 (setenv "HOME" "/tmp")
10859 ;; Disable compiler optimizations to greatly reduce the running
10860 ;; time of the test suite.
10861 (setenv "CFLAGS" "-O0"))))))))
10862
10863(define-public python-cython-next
10864 (package
10865 (inherit python-cython)
10866 (version "3.2.2")
10867 (source
10868 (origin
10869 (method url-fetch)
10870 (uri (pypi-uri "cython" version))
10871 (sha256
10872 (base32 "0d0n0yyicr7icd4f5kn1wwbjqyad6j4m640xlqlk3ixchgad7bf3"))))))
10873
10874;; NOTE: when upgrading numpy please make sure that python-numba,
10875;; python-pandas and python-scipy still build, as these three packages are
10876;; often used together.
10877(define-public python-numpy
10878 (package
10879 (name "python-numpy")
10880 (version "2.3.1")
10881 (source
10882 (origin
10883 (method url-fetch)
10884 (uri (string-append
10885 "https://github.com/numpy/numpy/releases/download/v"
10886 version "/numpy-" version ".tar.gz"))
10887 (sha256
10888 (base32 "0aqx8hsw54wfp7iv0h0ljlpsygvmrmi3rjic6rsa6v92lhhaxj8y"))))
10889 (build-system pyproject-build-system)
10890 (arguments
10891 (list
10892 ;; tests: 47513 passed, 1740 skipped, 33 xfailed, 5 xpassed, 341 warnings
10893 #:modules '((guix build utils)
10894 (guix build pyproject-build-system)
10895 (ice-9 format))
10896 #:test-flags
10897 #~(list "-m" "not slow"
10898 "--numprocesses" (number->string (min 8 (parallel-job-count)))
10899 ;; See: <https://github.com/numpy/numpy/issues/27531>,
10900 ;; <https://github.com/numpy/numpy/issues/17685>,
10901 ;; <https://github.com/numpy/numpy/issues/17635>.
10902 "-k" "not test_api_importable")
10903 #:phases
10904 #~(modify-phases %standard-phases
10905 (add-after 'unpack 'fix-executable-paths
10906 (lambda _
10907 (substitute* "numpy/distutils/exec_command.py"
10908 (("'/bin/sh'")
10909 (format #f "~s" (which "bash"))))
10910 (substitute* "numpy/meson.build"
10911 ;; Relay on python from the PATH instead of full reference
10912 ;; stored in built wheel.
10913 (("'py.full_path\\(\\)'") "'python'"))))
10914 ;; This isn't architecture specific.
10915 ;; TODO: Remove this conditional and apply for all builds.
10916 #$@(if (target-ppc64le?)
10917 #~((add-after 'unpack 'patch-bin-true
10918 (lambda* (#:key inputs #:allow-other-keys)
10919 (substitute* "numpy/_core/tests/test_cpu_features.py"
10920 (("/bin/true")
10921 (search-input-file inputs "bin/true"))))))
10922 #~())
10923 (add-before 'build 'parallelize-build
10924 (lambda _
10925 (setenv "OMP_NUM_THREAD"
10926 (number->string (parallel-job-count)))
10927 (setenv "NPY_NUM_BUILD_JOBS"
10928 (number->string (parallel-job-count)))))
10929 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
10930 ;; when the gfortran header is used. Remove gfortran from
10931 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
10932 ;; <https://issues.guix.gnu.org/73439#45>.
10933 (add-after 'set-paths 'hide-gfortran
10934 (lambda* (#:key inputs #:allow-other-keys)
10935 (let ((gfortran (assoc-ref inputs "gfortran")))
10936 (setenv "CPLUS_INCLUDE_PATH"
10937 (string-join
10938 (delete (string-append gfortran "/include/c++")
10939 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
10940 ":")))))
10941 (add-before 'build 'configure-blas
10942 (lambda* (#:key inputs #:allow-other-keys)
10943 (call-with-output-file "site.cfg"
10944 (lambda (port)
10945 (format port
10946 "[openblas]
10947libraries = openblas
10948library_dirs = ~a/lib
10949include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
10950 (replace 'check
10951 (lambda* (#:key tests? test-flags #:allow-other-keys)
10952 (when tests?
10953 (with-directory-excursion #$output
10954 (apply invoke "pytest" test-flags)))))
10955 ;; The executables provided by this package ('f2py' and 'numpy-config')
10956 ;; only depend on Python. By customizing the wrap phase we can ensure
10957 ;; that we don't add all Python packages listed in native-inputs to
10958 ;; the closure. This significantly reduces the overall closure size.
10959 ;;
10960 ;; See also <https://bugs.gnu.org/25235>.
10961 (replace 'wrap
10962 (lambda* (#:key inputs outputs #:allow-other-keys)
10963 (for-each
10964 (lambda (program)
10965 (wrap-program program
10966 `("GUIX_PYTHONPATH" ":" suffix
10967 ,(list (site-packages inputs outputs)))))
10968 (find-files (in-vicinity #$output "/bin"))))))))
10969 (native-inputs
10970 (list gfortran
10971 python-hypothesis
10972 python-meson
10973 python-pytest
10974 python-pytest-xdist
10975 python-setuptools
10976 python-typing-extensions))
10977 (home-page "https://numpy.org")
10978 (synopsis "Fundamental package for scientific computing with Python")
10979 (description "NumPy is the fundamental package for scientific computing
10980with Python. It contains among other things: a powerful N-dimensional array
10981object, sophisticated (broadcasting) functions, tools for integrating C/C++
10982and Fortran code, useful linear algebra, Fourier transform, and random number
10983capabilities.")
10984 (properties
10985 '((upstream-name . "numpy")))
10986 (license license:bsd-3)))
10987
10988(define-public python-numpy-1
10989 (package
10990 (inherit python-numpy)
10991 (name "python-numpy")
10992 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
10993 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
10994 ;; in upstream Meson.
10995 ;;
10996 ;; See:
10997 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
10998 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
10999 ;; - file <doc/source/building/understanding_meson.rst>
11000 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
11001 (source
11002 (origin
11003 (method url-fetch)
11004 (uri (string-append
11005 "https://github.com/numpy/numpy/releases/download/v"
11006 version "/numpy-" version ".tar.gz"))
11007 (sha256
11008 (base32
11009 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
11010 (patches (search-patches "python-numpy-gcc-14.patch"))))
11011 (arguments
11012 (list
11013 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
11014 #:modules '((guix build utils)
11015 (guix build pyproject-build-system)
11016 (ice-9 format))
11017 #:phases
11018 #~(modify-phases %standard-phases
11019 (add-after 'unpack 'delete-test-files
11020 (lambda _
11021 ;; These tests depend on older setuptools, see:
11022 ;; <https://github.com/numpy/numpy/issues/27531>.
11023 ;;
11024 ;; E ModuleNotFoundError: No module named
11025 ;; 'distutils.msvccompiler'
11026 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
11027 (delete-file "numpy/distutils/tests/test_system_info.py")))
11028 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11029 ;; when the gfortran header is used. Remove gfortran from
11030 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11031 ;; <https://issues.guix.gnu.org/73439#45>.
11032 (add-after 'set-paths 'hide-gfortran
11033 (lambda* (#:key inputs #:allow-other-keys)
11034 (let ((gfortran (assoc-ref inputs "gfortran")))
11035 (setenv "CPLUS_INCLUDE_PATH"
11036 (string-join
11037 (delete (string-append gfortran "/include/c++")
11038 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11039 ":")))))
11040 (add-before 'build 'relax-gcc-14-strictness
11041 (lambda _
11042 (setenv "CFLAGS"
11043 "-g -O2 -Wno-error=implicit-function-declaration")))
11044 (add-before 'build 'parallelize-build
11045 (lambda _
11046 (setenv "NPY_NUM_BUILD_JOBS"
11047 (number->string (parallel-job-count)))))
11048 (add-before 'build 'configure-blas
11049 (lambda* (#:key inputs #:allow-other-keys)
11050 (call-with-output-file "site.cfg"
11051 (lambda (port)
11052 (format port
11053 "\
11054[openblas]
11055libraries = openblas
11056library_dirs = ~a/lib
11057include_dirs = ~:*~a/include~%"
11058 (dirname (dirname
11059 (search-input-file
11060 inputs "include/openblas_config.h"))))))))
11061 (add-before 'build 'fix-executable-paths
11062 (lambda* (#:key inputs #:allow-other-keys)
11063 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
11064 ;; instead of /bin/sh.
11065 (substitute* "numpy/distutils/exec_command.py"
11066 (("'/bin/sh'")
11067 (format #f "~s" (search-input-file inputs "bin/bash"))))
11068 ;; Don't try to call '/bin/true' specifically.
11069 (substitute* "numpy/core/tests/test_cpu_features.py"
11070 (("/bin/true") (search-input-file inputs "bin/true")))))
11071 (replace 'check
11072 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
11073 (when tests?
11074 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
11075 "-j" (number->string (parallel-job-count))
11076 ;; Contrary to scipy, the runtests.py script of numpy
11077 ;; does *not* automatically provide -n when -j is used
11078 ;; (see: https://github.com/numpy/numpy/issues/21359).
11079 "--" "-n" (number->string (parallel-job-count))
11080 ;; Disable Pytest Warnings, they are resolved in the
11081 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
11082 ;; applied to fixtures have no effect,
11083 ;; DeprecationWarning.
11084 "-p" "no:warnings"
11085 "-k" (string-append
11086 ;; These tests may fail on 32-bit systems (see:
11087 ;; https://github.com/numpy/numpy/issues/18387).
11088 "not test_float_remainder_overflow "
11089 "and not test_pareto "
11090 ;; The 'test_rint_big_int' test fails on older
11091 ;; x86_64 CPUs such as the Core 2 Duo (see:
11092 ;; https://github.com/numpy/numpy/issues/22170).
11093 "and not test_rint_big_int "
11094 ;; They fail to detect compiler.
11095 "and not test_compile1 "
11096 "and not test_compile2 "
11097 ;; Due to disabled warnings
11098 "and not test_getattr_warning "
11099 "and not test_integer_signs "
11100 "and not test_implicit_cast_float_to_int_fails "
11101 "and not test_integer_signs "
11102 ;; The huge_array test is too large for 32-bit (see:
11103 ;; https://bugs.gentoo.org/843599 and
11104 ;; https://bugs.gentoo.org/846548).
11105 ;; TestKind.test_all is a Fortran type failure
11106 ;; that may be toolchain or environment related.
11107 #$@(if (or (target-x86?) (target-arm32?))
11108 `(" and not test_identityless_reduction_huge_array"
11109 " and not (TestKind and test_all)")
11110 '())
11111 ;; This test fails with a Fortran failure (16
11112 ;; expected but got -1), due to the fact that it
11113 ;; requires a 64-bit system.
11114 #$@(if (or (target-x86-32?) (target-arm32?))
11115 `(" and not test_int")
11116 '())
11117 ;; These tests fail when building from aarch64-linux.
11118 #$@(if (target-arm32?)
11119 `(" and not test_features"
11120 " and not test_unary_spurious_fpexception")
11121 '())
11122 ;; These tests seem to fail on machines without
11123 ;; an FPU is still under investigation upstream.
11124 ;; https://github.com/numpy/numpy/issues/20635
11125 #$@(if (target-riscv64?)
11126 `(" and not test_fp_noncontiguous")
11127 '())
11128 ;; They also fail with gcc-14
11129 " and not test_float"
11130 " and not test_fpclass"
11131
11132 ;; These tests fail with gcc-14
11133 " and not test_context_locality"
11134 " and not test_cosh"
11135 " and not test_default_policy_singleton"
11136 " and not test_exp_exceptions"
11137 " and not test_half_fpe"
11138 " and not test_owner_is_base"
11139 " and not test_policy_propagation"
11140 " and not test_set_policy"
11141 " and not test_sinh"
11142 " and not test_square_values"
11143 " and not test_sum"
11144 " and not test_switch_owner"
11145 " and not test_thread_locality"
11146
11147 ;; These tests depend on older setuptools, see:
11148 ;; <https://github.com/numpy/numpy/issues/27531>.
11149 " and not test_api_importable"
11150 " and not test_all_modules_are_expected_2")))))
11151 ;; See comment for custom python-numpy wrap phase above.
11152 (replace 'wrap
11153 (lambda* (#:key inputs outputs #:allow-other-keys)
11154 (for-each
11155 (lambda (program)
11156 (wrap-program program
11157 `("GUIX_PYTHONPATH" ":" suffix
11158 ,(list (site-packages inputs outputs)))))
11159 (find-files (in-vicinity #$output "/bin"))))))))
11160 (native-inputs
11161 (list python-hypothesis
11162 python-meson
11163 python-pytest
11164 python-pytest-xdist
11165 python-setuptools
11166 python-typing-extensions
11167 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
11168 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
11169 ;; <https://github.com/numpy/numpy/issues/24318>.
11170 gcc ;fevn.h c[++] include must precede fortran's
11171 gfortran))
11172 (inputs (list bash openblas))))
11173
11174(define-deprecated/public-alias python-numpy-2 python-numpy)
11175
11176(define-public python-numpysane
11177 (package
11178 (name "python-numpysane")
11179 (version "0.42")
11180 (source
11181 (origin
11182 (method git-fetch)
11183 (uri (git-reference
11184 (url "https://github.com/dkogan/numpysane.git")
11185 (commit (string-append "v" version))))
11186 (file-name (git-file-name name version))
11187 (sha256
11188 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
11189 (build-system pyproject-build-system)
11190 (arguments
11191 (list
11192 #:phases
11193 #~(modify-phases %standard-phases
11194 (add-after 'unpack 'patch
11195 (lambda* (#:key inputs outputs #:allow-other-keys)
11196 (let* ((numpy (assoc-ref inputs "python-numpy"))
11197 (site (site-packages inputs `(("out" . ,numpy)))))
11198 (substitute* "Makefile.common.header"
11199 ;; numpy 2.0 has this--but we don't use numpy 2.0.
11200 (("pkg-config --cflags-only-I numpy")
11201 (format #f "echo -I~a/numpy/core/include" site))))))
11202 (replace 'check
11203 (lambda _
11204 (setenv "CC"
11205 #$(cc-for-target))
11206 (invoke "make" "check"))))))
11207 (propagated-inputs (list python-numpy-1))
11208 (native-inputs (list perl pkg-config python-setuptools))
11209 (home-page "https://github.com/dkogan/numpysane")
11210 (synopsis "More-reasonable core functionality for numpy")
11211 (description
11212 "This package provides more-reasonable core functionality for numpy.
11213
11214A lot of numpysane functionality is inspired by PDL (Perl Data Language).
11215
11216numpysane has:
11217@itemize
11218@item easier broadcasting
11219@item nicer array manipulation
11220@item array concatenation
11221@item manipulation of dimensions
11222@item broadcast-aware inner product
11223@item broadcast-aware outer product
11224@item broadcast-aware 2-norm
11225@item broadcast-aware matrix multiplication
11226@end itemize
11227")
11228 (license license:lgpl2.0+)))
11229
11230(define-public python-numpy-documentation
11231 (package
11232 (inherit python-numpy)
11233 (name "python-numpy-documentation")
11234 (arguments
11235 (list
11236 #:tests? #f ;we're only generating the documentation
11237 #:phases
11238 #~(modify-phases %standard-phases
11239 (add-after 'unpack 'avoid-external-deps
11240 (lambda _
11241 ;; XXX: Avoid search-button to avoid sphinx error
11242 ;; TemplateNotFound('search-button.html')
11243 (substitute* "doc/source/conf.py"
11244 (("\"search-button\",") ""))
11245 ;; XXX: Avoid theme-switcher to avoid sphinx error
11246 ;; TemplateNotFound('theme-switcher.html')
11247 (substitute* "doc/source/conf.py"
11248 (("\"theme-switcher\",") ""))
11249 ;; XXX: Avoid version-switcher because it depends on the value
11250 ;; of external https://numpy.org/doc/_static/versions.json
11251 (substitute* "doc/source/conf.py"
11252 (("\"version-switcher\",") ""))))
11253 (add-before 'build 'add-gnu-freefont-to-texmf
11254 (lambda _
11255 ;; XXX: The Sphinx-generated tex output specifies the GNU
11256 ;; FreeFont font to be searched via its extension, which uses
11257 ;; kpathsea instead of fontconfig and fail (see:
11258 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
11259 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
11260 ;; GUIX_TEXMF.
11261 (mkdir-p "texmf-dist/fonts/opentype/public")
11262 (symlink (string-append
11263 #$(this-package-native-input "font-gnu-freefont")
11264 "/share/fonts/opentype")
11265 (string-append
11266 (getcwd) "/"
11267 "texmf-dist/fonts/opentype/public/gnu-freefont"))
11268 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
11269 (getcwd) "/texmf-dist"))))
11270 (replace 'build
11271 (lambda _
11272 (chdir "doc")
11273 (let ((sphinxopts (string-append
11274 "SPHINXOPTS=-j"
11275 (number->string (parallel-job-count)))))
11276 ;; Do not treat warnings as errors.
11277 (substitute* "Makefile"
11278 ((" -WT ") " -T "))
11279 (setenv "HOME" "/tmp")
11280 ;; Build the PDF documentation.
11281 (invoke "make" "latex-build" sphinxopts)
11282 ;; FIXME: PDF build fails
11283 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
11284 ;; Build the HTML documentation
11285 (invoke "make" "html" sphinxopts)
11286 ;; Build the Info documentation. The issues worked around
11287 ;; below can be tracked at
11288 ;; https://github.com/numpy/numpy/issues/12278.
11289 (substitute* "source/conf.py"
11290 ;; The root document should be "index", not "contents".
11291 (("\"contents\"") "'index'")
11292 ;; Disable Sphinx extensions that produce broken Texinfo.
11293 ((".*'numpydoc'.*") "")
11294 ((".*'sphinx.ext.autodoc'.*") "")
11295 ((".*'sphinx.ext.autosummary'.*") ""))
11296 (invoke "make" "info" sphinxopts))))
11297 (replace 'install
11298 (lambda _
11299 (let* ((data (string-append #$output "/share"))
11300 (doc (string-append data "/doc/numpy"))
11301 (html (string-append doc "/html"))
11302 (info (string-append data "/info")))
11303 ;; Install the HTML documentation.
11304 (mkdir-p html)
11305 (copy-recursively "build/html" html)
11306 ;; Install the PDF reference and user manuals.
11307 ;; FIXME:
11308 ;; (install-file "build/latex/numpy-ref.pdf" doc)
11309 ;; (install-file "build/latex/numpy-user.pdf" doc)
11310 ;; Install the info manual.
11311 (install-file "build/texinfo/numpy.info" info)
11312 (symlink (string-append html "/_images")
11313 (string-append info "/numpy-figures"))))))))
11314 (native-inputs
11315 (list font-gnu-freefont
11316 perl
11317 python-breathe
11318 python-ipython
11319 python-jupyterlite-sphinx
11320 python-matplotlib
11321 python-numpy
11322 python-numpydoc
11323 python-pandas
11324 python-pydata-sphinx-theme
11325 python-scipy ;used by matplotlib
11326 python-sphinx
11327 python-sphinx-copybutton
11328 python-sphinx-design
11329 texinfo
11330 (texlive-local-tree
11331 (list texlive-cbfonts
11332 texlive-cm-super
11333 texlive-cmap
11334 texlive-expdlist
11335 texlive-fandol
11336 texlive-greek-fontenc
11337 texlive-latexmk
11338 texlive-polyglossia
11339 texlive-xetex
11340 texlive-xindy))))
11341 (inputs '())
11342 (propagated-inputs '())
11343 (synopsis "Documentation for the @code{python-numpy} package")
11344 (description "This package provides the complete NumPy documentation in
11345the Texinfo, and HTML formats.")))
11346
11347(define-public python-numpy-stl
11348 (package
11349 (name "python-numpy-stl")
11350 (version "3.2.0")
11351 (source
11352 (origin
11353 (method url-fetch)
11354 (uri (pypi-uri "numpy_stl" version))
11355 (sha256
11356 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
11357 (build-system pyproject-build-system)
11358 (native-inputs
11359 (list python-cython
11360 python-pytest
11361 python-setuptools
11362 python-wheel))
11363 (propagated-inputs
11364 (list python-numpy
11365 python-utils))
11366 (home-page "https://github.com/WoLpH/numpy-stl/")
11367 (synopsis "Read, write and modify binary/ASCII STL files library")
11368 (description
11369 "Library to make reading, writing and modifying both binary and ascii STL
11370files, file format native to the stereolithography CAD software created by 3D
11371Systems, easy.")
11372 (license license:bsd-3)))
11373
11374(define-public python-npx
11375 (package
11376 (name "python-npx")
11377 (version "0.1.6")
11378 (source
11379 (origin
11380 (method git-fetch) ; no source archive in PyPI
11381 (uri (git-reference
11382 (url "https://github.com/sigma-py/npx")
11383 (commit (string-append "v" version))))
11384 (file-name (git-file-name name version))
11385 (sha256
11386 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
11387 (build-system pyproject-build-system)
11388 (native-inputs
11389 (list python-networkx
11390 python-pytest
11391 python-setuptools
11392 python-wheel))
11393 (propagated-inputs
11394 (list python-numpy))
11395 (home-page "https://github.com/nschloe/npx")
11396 (synopsis "Extensions for NumPy")
11397 (description "NumPy is a large library used everywhere in scientific
11398computing. That's why breaking backwards-compatibility comes at a
11399significant cost and is almost always avoided, even if the API of some
11400methods is arguably lacking. This package provides drop-in wrappers
11401\"fixing\" those.")
11402 (license license:bsd-3)))
11403
11404(define-public python-munch
11405 (package
11406 (name "python-munch")
11407 (version "4.0.0")
11408 (source
11409 (origin
11410 (method url-fetch)
11411 (uri (pypi-uri "munch" version))
11412 (sha256
11413 (base32
11414 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
11415 (build-system pyproject-build-system)
11416 (native-inputs
11417 (list python-astroid
11418 python-pytest
11419 python-setuptools
11420 python-wheel))
11421 (home-page "https://github.com/Infinidat/munch")
11422 (synopsis "Dot-accessible dictionary")
11423 (description "Munch is a dot-accessible dictionary similar to JavaScript
11424objects.")
11425 (license license:expat)))
11426
11427(define-public python-colormath2
11428 (package
11429 (name "python-colormath2")
11430 (version "3.0.3")
11431 (source
11432 (origin
11433 (method git-fetch)
11434 (uri (git-reference
11435 (url "https://github.com/bkmgit/python-colormath2")
11436 (commit version)))
11437 (file-name (git-file-name name version))
11438 (sha256
11439 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
11440 (build-system pyproject-build-system)
11441 (propagated-inputs (list python-networkx python-numpy))
11442 (native-inputs (list python-nose2 python-setuptools))
11443 (home-page "https://github.com/bkmgit/python-colormath2")
11444 (synopsis "Color math and conversion library")
11445 (description
11446 "This is a Python library for color math and conversions.")
11447 (license license:bsd-3)))
11448
11449(define-public python-spectra
11450 (package
11451 (name "python-spectra")
11452 (version "0.1.0")
11453 (source
11454 (origin
11455 (method url-fetch)
11456 (uri (pypi-uri "spectra" version))
11457 (sha256
11458 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
11459 (build-system pyproject-build-system)
11460 (propagated-inputs
11461 (list python-colormath2))
11462 (native-inputs
11463 (list python-pytest python-setuptools python-wheel))
11464 (home-page "https://github.com/jsvine/spectra")
11465 (synopsis "Color scales and color conversion")
11466 (description
11467 "This package provides a Python library intended to make color math,
11468color scales, and color space conversion easy. It has support for:
11469
11470@enumerate
11471@item Color scales
11472@item Color ranges
11473@item Color blending
11474@item Brightening/darkening colors
11475@item Saturating/desaturating colors
11476@item Conversion to/from multiple color spaces.
11477@end enumerate\n")
11478 (license license:expat)))
11479
11480(define-public python-pyspnego
11481 (package
11482 (name "python-pyspnego")
11483 (version "0.8.0")
11484 (source (origin
11485 (method url-fetch)
11486 (uri (pypi-uri "pyspnego" version))
11487 (sha256
11488 (base32
11489 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
11490 (build-system pyproject-build-system)
11491 (native-inputs
11492 (list python-pytest python-pytest-mock python-setuptools python-wheel))
11493 (propagated-inputs
11494 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
11495 (home-page "https://github.com/jborean93/pyspnego")
11496 (synopsis "Python SPNEGO library")
11497 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
11498Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
11499parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
11500readable format.")
11501 (license license:expat)))
11502
11503(define-public python-pygit2
11504 (package
11505 (name "python-pygit2")
11506 (version "1.18.2")
11507 (source
11508 (origin
11509 (method url-fetch)
11510 (uri (pypi-uri "pygit2" version))
11511 (sha256
11512 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
11513 (build-system pyproject-build-system)
11514 (propagated-inputs (list python-cffi libgit2))
11515 (native-inputs (list python-pytest python-setuptools python-wheel))
11516 (home-page "https://github.com/libgit2/pygit2")
11517 (synopsis "Python bindings for libgit2")
11518 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
11519 ;; GPL2.0 only, with linking exception.
11520 (license license:gpl2)))
11521
11522(define-public python-patiencediff
11523 (package
11524 (name "python-patiencediff")
11525 (version "0.2.15")
11526 (source
11527 (origin
11528 (method url-fetch)
11529 (uri (pypi-uri "patiencediff" version))
11530 (sha256
11531 (base32
11532 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
11533 (build-system pyproject-build-system)
11534 (arguments
11535 (list
11536 #:phases #~(modify-phases %standard-phases
11537 ;; Fails because bin/patiencediff expects two files to diff
11538 (delete 'sanity-check))))
11539 (native-inputs (list python-pytest python-setuptools python-wheel))
11540 (home-page "https://www.breezy-vcs.org/")
11541 (synopsis "Python implementation of the patiencediff algorithm")
11542 (description
11543 "This package contains a Python implementation of the @code{patiencediff}
11544algorithm. Patiencediff provides a good balance of performance, nice output for
11545humans, and implementation simplicity.")
11546 (license license:gpl2+)))
11547
11548(define-public python-merge3
11549 (package
11550 (name "python-merge3")
11551 (version "0.0.16")
11552 (source
11553 (origin
11554 (method git-fetch)
11555 (uri (git-reference
11556 (url "https://github.com/breezy-team/merge3")
11557 (commit (string-append "v" version))))
11558 (file-name (git-file-name name version))
11559 (sha256
11560 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
11561 (build-system pyproject-build-system)
11562 (arguments (list #:test-backend #~'unittest))
11563 (native-inputs (list python-setuptools))
11564 (home-page "https://github.com/breezy-team/merge3")
11565 (synopsis "Python implementation of 3-way merge")
11566 (description "This Python library implements 3-way merge for text.")
11567 (license license:gpl2+)))
11568
11569(define-public python-fancycompleter
11570 (package
11571 (name "python-fancycompleter")
11572 (version "0.9.1")
11573 (source
11574 (origin
11575 (method git-fetch)
11576 (uri (git-reference
11577 (url "https://github.com/pdbpp/fancycompleter")
11578 (commit version)))
11579 (file-name (git-file-name name version))
11580 (sha256
11581 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
11582 (build-system pyproject-build-system)
11583 (arguments
11584 (list
11585 #:phases
11586 #~(modify-phases %standard-phases
11587 (add-after 'unpack 'fix-setup.py
11588 (lambda _
11589 (substitute* "setup.py"
11590 ((".*setupmeta.*")
11591 "")
11592 (("versioning=.*")
11593 (string-append "version='" #$version "',"))
11594 ((".*pyrepl.*") ; broken on Python 3
11595 "")))))))
11596 (native-inputs (list python-pytest python-setuptools))
11597 (home-page "https://github.com/pdbpp/fancycompleter")
11598 (synopsis "TAB completion library for Python")
11599 (description
11600 "@code{fancycompleter} is a module that adds TAB completion to the
11601interactive prompt. It is an extension of the @code{rlcompleter} module from
11602the standard Python library.")
11603 (license license:bsd-3)))
11604
11605(define-public python-ipdb
11606 (package
11607 (name "python-ipdb")
11608 (version "0.13.13")
11609 (source
11610 (origin
11611 (method git-fetch)
11612 (uri (git-reference
11613 (url "https://github.com/gotcha/ipdb")
11614 (commit version)))
11615 (file-name (git-file-name name version))
11616 (sha256
11617 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
11618 (build-system pyproject-build-system)
11619 (arguments (list #:test-backend #~'unittest))
11620 (native-inputs (list python-setuptools))
11621 (propagated-inputs (list python-ipython python-toml python-decorator))
11622 (home-page "https://github.com/gotcha/ipdb")
11623 (synopsis "IPython-enhanced Python debugger (pdb)")
11624 (description
11625 "@code{ipdb} exports functions to access the IPython debugger, which
11626features tab completion, syntax highlighting, better tracebacks and better
11627introspection than Python's standard @command{pdb} debugger, with which it
11628shares the same interface.")
11629 (license license:bsd-3)))
11630
11631(define-public python-ipfsspec
11632 (package
11633 (name "python-ipfsspec")
11634 (version "0.4.0")
11635 (source
11636 (origin
11637 (method url-fetch)
11638 (uri (pypi-uri "ipfsspec" version))
11639 (sha256
11640 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
11641 (build-system pyproject-build-system)
11642 (arguments
11643 (list
11644 #:test-flags
11645 '(list "-m not local_gw"
11646 ;; Require local gateway
11647 "--ignore=test/test_gateway.py"
11648 ;; Require internet
11649 "--ignore=test/test_async.py"
11650 "--ignore=test/test_ipfs.py")))
11651 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
11652 (native-inputs
11653 (list python-pytest
11654 python-pytest-asyncio
11655 python-setuptools
11656 python-wheel))
11657 (home-page "https://github.com/fsspec/ipfsspec")
11658 (synopsis "Read-only implementation of fsspec for IPFS")
11659 (description "This package provides a read-only implementation of
11660@code{fsspec} for IPFS.")
11661 (license license:expat)))
11662
11663(define-public python-pdftotext
11664 (package
11665 (name "python-pdftotext")
11666 (version "3.0.0")
11667 (source
11668 (origin
11669 (method url-fetch)
11670 (uri (pypi-uri "pdftotext" version))
11671 (sha256
11672 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
11673 (build-system pyproject-build-system)
11674 (native-inputs (list python-pytest python-setuptools python-wheel))
11675 (inputs (list poppler))
11676 (home-page "https://github.com/jalan/pdftotext")
11677 (synopsis "Simple PDF text extraction")
11678 (description "Pdftotext is a Python library of PDF text extraction.")
11679 (license license:expat)))
11680
11681(define-public python-pluginbase
11682 (package
11683 (name "python-pluginbase")
11684 (version "1.0.1")
11685 (source
11686 (origin
11687 (method git-fetch)
11688 (uri (git-reference
11689 (url "https://github.com/mitsuhiko/pluginbase")
11690 (commit (string-append "v" version))))
11691 (file-name (git-file-name name version))
11692 (sha256
11693 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
11694 (build-system pyproject-build-system)
11695 (arguments
11696 (list
11697 #:phases
11698 #~(modify-phases %standard-phases
11699 (replace 'check
11700 (lambda* (#:key tests? #:allow-other-keys)
11701 (when tests?
11702 (invoke "make" "test")))))))
11703 (native-inputs (list python-pytest python-setuptools))
11704 (home-page "https://github.com/mitsuhiko/pluginbase")
11705 (synopsis "Simple but flexible plugin system for Python")
11706 (description
11707 "PluginBase is a library useful in the development of flexible plugin
11708systems in Python.")
11709 (license license:bsd-3)))
11710
11711(define-public python-node-semver
11712 (package
11713 (name "python-node-semver")
11714 (version "0.8.1")
11715 (source
11716 (origin
11717 (method git-fetch)
11718 (uri (git-reference
11719 (url "https://github.com/podhmo/python-node-semver")
11720 (commit version)))
11721 (file-name (git-file-name name version))
11722 (sha256
11723 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
11724 (build-system pyproject-build-system)
11725 (native-inputs (list python-pytest python-setuptools))
11726 (home-page "https://github.com/podhmo/python-node-semver")
11727 (synopsis "Python port of node-semver")
11728 (description
11729 "This module provides a Python version of node-semver, a semantic version
11730parser for Node.js.")
11731 (license license:expat)))
11732
11733(define-public python-norns
11734 (package
11735 (name "python-norns")
11736 (version "0.1.6")
11737 (source
11738 (origin
11739 (method git-fetch)
11740 (uri (git-reference
11741 (url "https://github.com/simonvh/norns")
11742 (commit version)))
11743 (file-name (git-file-name name version))
11744 (sha256
11745 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
11746 (patches
11747 (search-patches "python-norns-nose.patch"))))
11748 (build-system pyproject-build-system)
11749 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
11750 (native-inputs (list python-setuptools))
11751 (home-page "https://github.com/simonvh/norns")
11752 (synopsis "Simple YAML-based config module")
11753 (description "This package provides a simple YAML-based config module.")
11754 (license license:expat)))
11755
11756(define-public python-patch-ng
11757 (package
11758 (name "python-patch-ng")
11759 (version "1.18.1")
11760 (source
11761 (origin
11762 (method git-fetch)
11763 (uri (git-reference
11764 (url "https://github.com/conan-io/python-patch-ng")
11765 (commit version)))
11766 (file-name (git-file-name name version))
11767 (sha256
11768 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
11769 (build-system pyproject-build-system)
11770 (arguments
11771 (list
11772 #:test-backend #~'custom
11773 #:test-flags #~(list "tests/run_tests.py" "-v")))
11774 (native-inputs (list python-pytest python-setuptools))
11775 (home-page "https://github.com/conan-io/python-patch-ng")
11776 (synopsis "Python library to parse and apply unified diffs")
11777 (description
11778 "Patch NG (New Generation) is a command and Python library to parse and
11779apply unified diffs. It has features such as:
11780@itemize
11781@item automatic correction of common patch formatting corruption
11782@item patch format detection (SVN, Hg, Git)
11783@item nice diffstat histogram.
11784@end itemize")
11785 (license license:expat)))
11786
11787(define-public python-numpydoc
11788 (package
11789 (name "python-numpydoc")
11790 (version "1.10.0")
11791 (source
11792 (origin
11793 (method url-fetch)
11794 (uri (pypi-uri "numpydoc" version))
11795 (sha256
11796 (base32
11797 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
11798 (build-system pyproject-build-system)
11799 (arguments
11800 (list
11801 #:test-flags
11802 '(list "numpydoc/tests"
11803 "-k" (string-append
11804 ;; TODO: unclear why these fail.
11805 "not test_MyClass and not test_my_function "
11806 ;; This test compares installed vs source absolute file
11807 ;; names.
11808 "and not test_source_file_name_with_properties"))))
11809 (propagated-inputs (list python-sphinx python-tomli))
11810 (native-inputs
11811 (list python-matplotlib
11812 python-pytest
11813 python-pytest-cov
11814 python-setuptools
11815 python-wheel))
11816 (home-page "https://pypi.org/project/numpydoc/")
11817 (synopsis "Numpy's Sphinx extensions")
11818 (description "Sphinx extension to support docstrings in Numpy format.")
11819 (license license:bsd-2)))
11820
11821(define-public python-numexpr
11822 (package
11823 (name "python-numexpr")
11824 (version "2.14.1")
11825 (source
11826 (origin
11827 (method url-fetch)
11828 (uri (pypi-uri "numexpr" version))
11829 (sha256
11830 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
11831 (build-system pyproject-build-system)
11832 (arguments
11833 (list
11834 ;; tests: 6039 passed, 8 warnings
11835 #:phases
11836 #~(modify-phases %standard-phases
11837 (replace 'check
11838 (lambda* (#:key tests? test-flags #:allow-other-keys)
11839 (when tests?
11840 (with-directory-excursion #$output
11841 (apply invoke "pytest" "-vv" test-flags))))))))
11842 (native-inputs
11843 (list python-pytest
11844 python-setuptools))
11845 (propagated-inputs
11846 (list python-numpy))
11847 (home-page "https://github.com/pydata/numexpr")
11848 (synopsis "Fast numerical expression evaluator for NumPy")
11849 (description
11850 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
11851expressions that operate on arrays are accelerated and use less memory than
11852doing the same calculation in Python. In addition, its multi-threaded
11853capabilities can make use of all your cores, which may accelerate
11854computations, most specially if they are not memory-bounded (e.g. those using
11855transcendental functions).")
11856 (license license:expat)))
11857
11858(define-public python-cycler
11859 (package
11860 (name "python-cycler")
11861 (version "0.12.1")
11862 (source
11863 (origin
11864 (method git-fetch) ;no tests in PyPI archive
11865 (uri (git-reference
11866 (url "https://github.com/matplotlib/cycler")
11867 (commit (string-append "v" version))))
11868 (file-name (git-file-name name version))
11869 (sha256
11870 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
11871 (build-system pyproject-build-system)
11872 (native-inputs
11873 (list python-pytest
11874 python-setuptools))
11875 (home-page "https://matplotlib.org/cycler/")
11876 (synopsis "Composable keyword argument iterator")
11877 (description
11878 "When using @code{matplotlib} and plotting more than one line, it is
11879common to want to be able to want to be able to cycle over one or more artist
11880styles; but the plotting logic can quickly become involved.
11881To address this and enable easy cycling over arbitrary @code{kwargs}, the
11882@code{Cycler} class was developed.")
11883 (license license:bsd-3)))
11884
11885(define-public python-colorspacious
11886 (package
11887 (name "python-colorspacious")
11888 (version "1.1.2")
11889 (source
11890 (origin
11891 (method git-fetch)
11892 (uri (git-reference
11893 (url "https://github.com/njsmith/colorspacious")
11894 (commit (string-append "v" version))))
11895 (file-name (git-file-name name version))
11896 (sha256
11897 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
11898 (build-system pyproject-build-system)
11899 (arguments (list #:tests? #f)) ; No tests.
11900 (propagated-inputs (list python-numpy))
11901 (native-inputs (list python-pytest python-setuptools))
11902 (home-page "https://github.com/njsmith/colorspacious")
11903 (synopsis "Python library for colorspace conversions")
11904 (description
11905 "@code{colorspacious} is a Python library that lets you convert between
11906colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
11907 (license license:expat)))
11908
11909(define-public python-propcache
11910 (package
11911 (name "python-propcache")
11912 (version "0.2.1")
11913 (source
11914 (origin
11915 (method url-fetch)
11916 (uri (pypi-uri "propcache" version))
11917 (sha256
11918 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
11919 (build-system pyproject-build-system)
11920 (arguments
11921 (list
11922 #:test-flags '(list "--ignore=tests/test_benchmarks.py")
11923 #:phases
11924 '(modify-phases %standard-phases
11925 (add-after 'unpack 'patch-build-system
11926 (lambda _
11927 ;; XXX: I don't know how to tell it to build the extensions in
11928 ;; place.
11929 (substitute* "packaging/pep517_backend/_backend.py"
11930 (("build_inplace=False") "build_inplace=True")))))))
11931 (native-inputs
11932 (list python-covdefaults
11933 python-cython
11934 python-expandvars
11935 python-pytest
11936 python-pytest-cov
11937 python-pytest-xdist
11938 python-setuptools
11939 python-tomli
11940 python-wheel))
11941 (home-page "https://github.com/aio-libs/propcache")
11942 (synopsis "Accelerated property cache")
11943 (description "The module provides a fast implementation of cached
11944properties for Python 3.9+.")
11945 (license license:asl2.0)))
11946
11947(define-public python-proto-matcher
11948 (package
11949 (name "python-proto-matcher")
11950 (version "0.0.3")
11951 (source
11952 (origin
11953 (method git-fetch)
11954 (uri (git-reference
11955 (url "https://github.com/dayfine/proto-matcher")
11956 (commit version)))
11957 (file-name (git-file-name name version))
11958 (sha256
11959 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
11960 (build-system pyproject-build-system)
11961 (native-inputs (list python-pytest python-setuptools))
11962 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
11963 (propagated-inputs (list python-protobuf python-pyhamcrest))
11964 (home-page "https://github.com/dayfine/proto-matcher")
11965 (synopsis "PyHamcrest test matchers for protocol buffers")
11966 (description
11967 "This package provides the following PyHamcrest test matchers, that
11968enable matching a protocol buffer message:
11969@table @code
11970@item equals_proto
11971Test the argument equals the given protobuf message.
11972@item approximately
11973Test the argument equals the given protobuf message, while comparing any float
11974field using approximation.
11975@item ignoring_field_paths
11976Test the argument equals the given protobuf message, while ignoring those
11977fields specified in the field paths.
11978@item ignoring_repeated_field_ordering
11979Test the argument equals the given protobuf message, ignoring the ordering of
11980any repeated field.
11981@item partially
11982Test the argument partially equals the given protobuf message, i.e. if a field
11983is in the argument but not in the expected message, it's ignored in the
11984comparison.
11985@end table")
11986 (license license:asl2.0)))
11987
11988(define-public python-matplotlib
11989 (package
11990 (name "python-matplotlib")
11991 (version "3.10.8")
11992 (source
11993 (origin
11994 (method git-fetch)
11995 (uri (git-reference
11996 (url "https://github.com/matplotlib/matplotlib")
11997 (commit (string-append "v" version))))
11998 (file-name (git-file-name name version))
11999 (sha256
12000 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
12001 (build-system pyproject-build-system)
12002 (arguments
12003 (list
12004 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
12005 #:configure-flags
12006 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
12007 "-Dsystem-freetype=true"
12008 "-Dsystem-qhull=true"))
12009 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
12010 #:test-flags
12011 #~(list "-m" "not network"
12012 "-n" (number->string (parallel-job-count))
12013 ;; Run the installed tests, which is what we want since not
12014 ;; everything gets built in the source directory.
12015 "--pyargs" "matplotlib"
12016 "-k"
12017 (string-join
12018 (list
12019 ;; XXX: Disable all image comparison tests because we're using
12020 ;; a newer version of FreeType than matplotlib expects. This
12021 ;; leads to minor differences throughout the tests.
12022 "not image_comparison"
12023 "check_figures_equal"
12024 "png" ;disables many problematic image tests
12025 "test_figure_legend_outside"
12026 "test_ft2font_get_kerning"
12027 "test_normal_axes"
12028 "test_get_tightbbox_polar"
12029 ;; The invisible line ordering test fails due to a too short
12030 ;; timeout (see:
12031 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
12032 "test_invisible_Line_rendering"
12033 ;; The determinism check test is not deterministic (see:
12034 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
12035 "test_determinism_check")
12036 " and not "))
12037 #:phases
12038 #~(modify-phases %standard-phases
12039 (add-after 'unpack 'patch-commands
12040 (lambda _
12041 (substitute* "lib/matplotlib/tests/test_animation.py"
12042 (("/bin/sh") (which "sh")))))
12043 (add-after 'unpack 'patch-dlopen
12044 (lambda* (#:key inputs #:allow-other-keys)
12045 (substitute* "src/_c_internal_utils.cpp"
12046 (("libX11.so.6")
12047 (search-input-file inputs "lib/libX11.so.6")))))
12048 (add-before 'build 'configure-environment
12049 (lambda* (#:key inputs #:allow-other-keys)
12050 ;; Fix rounding errors when using the x87 FPU.
12051 (when (string-prefix? "i686" #$(%current-system))
12052 (setenv "CFLAGS" "-ffloat-store"))))
12053 (add-before 'check 'chdir
12054 (lambda _
12055 ;; Step out of the source directory to avoid interference.
12056 (chdir "/tmp"))))))
12057 (propagated-inputs
12058 (list python-contourpy
12059 python-cycler
12060 python-dateutil
12061 python-fonttools-minimal
12062 python-importlib-resources
12063 python-kiwisolver
12064 python-numpy
12065 python-packaging
12066 python-pillow
12067 python-pyparsing
12068 `(,python "tk")))
12069 (inputs
12070 (list cairo
12071 freetype
12072 glib
12073 libpng
12074 qhull
12075 tcl
12076 tk))
12077 (native-inputs
12078 (list pkg-config
12079 python-meson
12080 pybind11-2
12081 python-pytest
12082 python-pytest-timeout
12083 python-pytest-xdist
12084 python-setuptools
12085 python-setuptools-scm))
12086 (home-page "https://matplotlib.org/")
12087 (synopsis "2D plotting library for Python")
12088 (description
12089 "Matplotlib is a Python 2D plotting library which produces publication
12090quality figures in a variety of hardcopy formats and interactive environments
12091across platforms. Matplotlib can be used in Python scripts, the python and
12092ipython shell, web application servers, and six graphical user interface
12093toolkits.")
12094 (license license:psfl)))
12095
12096(define-public python-matplotlib-documentation
12097 (package
12098 (inherit python-matplotlib)
12099 (name "python-matplotlib-documentation")
12100 (arguments
12101 (list
12102 #:tests? #f ;we're only generating documentation
12103 #:phases
12104 #~(modify-phases %standard-phases
12105 (add-after 'unpack 'avoid-external-deps
12106 (lambda _
12107 ;; XXX: Avoid theme-switcher to avoid sphinx error
12108 ;; TemplateNotFound('theme-switcher.html')
12109 ;; XXX: Avoid version-switcher because it depends on an
12110 ;; external file, and we pack only one version anyway.
12111 (substitute* "doc/conf.py"
12112 (("\
12113\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
12114 "\"navbar_end\": ["))))
12115 (replace 'build
12116 (lambda _
12117 (setenv "HOME" "/tmp")
12118 (chdir "doc")
12119 (invoke "make" "html" "info"
12120 ;; Don't abort on warnings; build in parallel.
12121 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
12122 (replace 'install
12123 (lambda _
12124 (let* ((data (string-append #$output "/share"))
12125 (doc (string-append data "/doc/matplotlib"))
12126 (info (string-append data "/info"))
12127 (html (string-append doc "/html")))
12128 (mkdir-p html)
12129 (copy-recursively "build/html" html)
12130 (install-file "build/texinfo/matplotlib.info" info)
12131 ;; The "matplotlib-figures" directory contains are a subset of
12132 ;; the images produced for the html target; simply create a
12133 ;; symlink to it, saving about 11 MiB.
12134 (symlink (string-append html "/_images")
12135 (string-append info "/matplotlib-figures"))))))))
12136 ;; Move all propagated inputs to inputs. *-documentation packages are
12137 ;; expected to be installed as standalone leaf packages, and not as
12138 ;; libraries with propagated inputs.
12139 (propagated-inputs '())
12140 (inputs (append
12141 (package-inputs python-matplotlib)
12142 (package-propagated-inputs python-matplotlib)))
12143 (native-inputs
12144 (list ffmpeg ;for matplotlib animation support
12145 graphviz
12146 inkscape/pinned
12147 python-colorspacious
12148 python-ipython
12149 python-ipykernel
12150 python-ipywidgets
12151 python-matplotlib
12152 python-mpl-sphinx-theme
12153 python-numpydoc
12154 python-pyyaml
12155 python-scipy
12156 ;; XXX: investigate how to build using a newer version of sphinx.
12157 python-sphinx-6
12158 python-sphinx-copybutton
12159 python-sphinx-design
12160 python-sphinx-gallery
12161 python-sphinx-tags
12162 python-sphinxcontrib-svg2pdfconverter
12163 python-sphinxcontrib-video
12164 texinfo
12165 texlive-dvipng-bin
12166 (texlive-local-tree
12167 (list texlive-amsfonts
12168 texlive-amsmath
12169 texlive-babel
12170 texlive-cm-super
12171 texlive-etoolbox
12172 texlive-expdlist
12173 texlive-fontspec
12174 texlive-times
12175 texlive-type1cm
12176 texlive-underscore
12177 texlive-unicode-math))))
12178 (synopsis "Documentation for the @code{python-matplotlib} package")))
12179
12180(define-public python-matplotlib-inline
12181 (package
12182 (name "python-matplotlib-inline")
12183 (version "0.1.7")
12184 (source
12185 (origin
12186 (method url-fetch)
12187 (uri (pypi-uri "matplotlib_inline" version))
12188 (sha256
12189 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
12190 (build-system pyproject-build-system)
12191 (arguments
12192 (list
12193 ;; Tests disabled because of a circular dependency with IPython.
12194 #:tests? #f
12195 #:phases
12196 #~(modify-phases %standard-phases
12197 ;; Disabled because of a circular dependency with IPython.
12198 (delete 'sanity-check))))
12199 (native-inputs
12200 (list python-setuptools))
12201 (propagated-inputs
12202 (list python-matplotlib
12203 python-traitlets))
12204 (home-page "https://github.com/ipython/matplotlib-inline")
12205 (synopsis "Inline Matplotlib backend for Jupyter")
12206 (description
12207 "This package provides a Matplotlib inline back-end for IPython and
12208Jupyter.")
12209 (license license:bsd-3)))
12210
12211(define-public python-matplotlib-venn
12212 (package
12213 (name "python-matplotlib-venn")
12214 (version "1.1.2")
12215 (source
12216 (origin
12217 (method url-fetch)
12218 (uri (pypi-uri "matplotlib-venn" version))
12219 (sha256
12220 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
12221 (build-system pyproject-build-system)
12222 (native-inputs (list python-pytest
12223 python-setuptools
12224 python-shapely
12225 python-wheel))
12226 (propagated-inputs
12227 (list python-matplotlib python-numpy python-scipy))
12228 (home-page "https://github.com/konstantint/matplotlib-venn")
12229 (synopsis "Plot area-proportional Venn diagrams")
12230 (description
12231 "This package provides tools for plotting area-proportional two- and
12232three-way Venn diagrams in @code{matplotlib}.")
12233 (license license:expat)))
12234
12235(define-public python-matplotx
12236 (package
12237 (name "python-matplotx")
12238 (version "0.3.10")
12239 (source
12240 (origin
12241 (method git-fetch)
12242 (uri (git-reference
12243 (url "https://github.com/nschloe/matplotx")
12244 (commit (string-append "v" version))))
12245 (file-name (git-file-name name version))
12246 (sha256
12247 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
12248 (build-system pyproject-build-system)
12249 (arguments
12250 (list
12251 #:test-flags
12252 ;; This test fails with ValueError: not enough values to unpack.
12253 #~(list "--deselect" "tests/test_spy.py::test_cli"
12254 ;; XXX: unknown failure
12255 "--deselect" "tests/test_spy.py::test_png")))
12256 (propagated-inputs
12257 (list python-matplotlib
12258 python-numpy
12259 ;; optional dependencies
12260 python-networkx
12261 python-pypng
12262 python-scipy))
12263 (native-inputs (list python-imageio
12264 python-meshzoo
12265 python-pytest
12266 python-scikit-fem
12267 python-setuptools
12268 python-wheel))
12269 (home-page "https://github.com/nschloe/matplotx")
12270 (synopsis "Minimal matplotlib styles")
12271 (description
12272 "This package includes some extensions for Matplotlib to create
12273clean plots with a minimalistic style.")
12274 (license license:expat)))
12275
12276(define-public python-cplot
12277 (package
12278 (name "python-cplot")
12279 (version "0.9.3")
12280 (source
12281 (origin
12282 (method git-fetch) ;for tests
12283 (uri (git-reference
12284 (url "https://github.com/nschloe/cplot")
12285 (commit (string-append "v" version))))
12286 (file-name (git-file-name name version))
12287 (sha256
12288 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
12289 (build-system pyproject-build-system)
12290 (native-inputs
12291 (list python-pytest
12292 python-setuptools
12293 python-wheel))
12294 (propagated-inputs
12295 (list python-matplotlib
12296 python-matplotx
12297 python-npx
12298 python-numpy))
12299 (home-page "https://github.com/nschloe/cplot")
12300 (synopsis "Plot complex-valued functions")
12301 (description "@code{cplot} is a Python library for plotting
12302complex-valued functions.")
12303 (license license:gpl3+)))
12304
12305(define-public python-cppheaderparser
12306 (package
12307 (name "python-cppheaderparser")
12308 (version "2.7.4")
12309 (source
12310 (origin
12311 (method url-fetch)
12312 (uri (pypi-uri "CppHeaderParser" version))
12313 (sha256
12314 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
12315 (build-system pyproject-build-system)
12316 (arguments
12317 (list
12318 #:tests? #f)) ; no tests
12319 (propagated-inputs (list python-ply))
12320 (native-inputs (list python-setuptools python-wheel))
12321 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
12322 (synopsis
12323 "Parse C++ header files and generate a data structure representing the class")
12324 (description
12325 "CppHeaderParser is a pure python module that will parse C++ header files
12326and generate a data structure representing the class.")
12327 (license license:bsd-3)))
12328
12329(define-public python-cppy
12330 (package
12331 (name "python-cppy")
12332 (version "1.3.1")
12333 (source
12334 (origin
12335 (method url-fetch)
12336 (uri (pypi-uri "cppy" version))
12337 (sha256
12338 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
12339 (build-system pyproject-build-system)
12340 (native-inputs
12341 (list python-pytest
12342 python-setuptools
12343 python-setuptools-scm
12344 python-wheel))
12345 (home-page "https://github.com/nucleic/cppy")
12346 (synopsis "C++ header library for Python extension modules")
12347 (description "This package is a small C++ header library which makes it
12348easier to write Python extension modules. The primary feature is a
12349@code{PyObject} smart pointer which automatically handles reference counting
12350and provides convenience methods for performing common object operations.")
12351 (license license:bsd-3)))
12352
12353(define-public python-perfplot
12354 (package
12355 (name "python-perfplot")
12356 (version "0.10.2")
12357 (source (origin
12358 (method url-fetch)
12359 (uri (pypi-uri "perfplot" version))
12360 (sha256
12361 (base32
12362 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
12363 (build-system pyproject-build-system)
12364 (propagated-inputs (list python-matplotlib
12365 python-matplotx
12366 python-numpy-1
12367 python-rich))
12368 (native-inputs (list python-flit-core
12369 python-pytest))
12370 (home-page "https://github.com/nschloe/perfplot")
12371 (synopsis "Performance plots for Python code snippets")
12372 (description "@code{perfplot} extends Python's timeit by testing
12373snippets with input parameters (e.g., the size of an array) and plotting
12374the results.")
12375 (license license:gpl3+)))
12376
12377(define-public python-persist-queue
12378 (package
12379 (name "python-persist-queue")
12380 (version "1.1.0")
12381 (source
12382 (origin
12383 (method git-fetch)
12384 (uri (git-reference
12385 (url "https://github.com/peter-wangxu/persist-queue")
12386 (commit (string-append "v" version))))
12387 (file-name (git-file-name name version))
12388 (sha256
12389 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
12390 (build-system pyproject-build-system)
12391 (native-inputs
12392 (list python-pytest
12393 python-pytest-asyncio
12394 python-setuptools))
12395 (propagated-inputs
12396 (list python-aiofiles
12397 python-aiosqlite
12398 python-cbor2
12399 python-dbutils
12400 python-msgpack))
12401 (home-page "https://github.com/peter-wangxu/persist-queue")
12402 (synopsis "Thread-safe disk based persistent queue in Python")
12403 (description
12404 "This package provides a thread-safe disk (file and sqlite) based
12405persistent queue in Python.")
12406 (license license:bsd-3)))
12407
12408(define-public python-socksipy-branch
12409 (package
12410 (name "python-socksipy-branch")
12411 (version "1.01")
12412 (source
12413 (origin
12414 (method url-fetch)
12415 (uri (pypi-uri "SocksiPy-branch" version))
12416 (sha256
12417 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
12418 (build-system pyproject-build-system)
12419 (arguments (list #:tests? #f)) ; There are no tests
12420 (native-inputs (list python-setuptools))
12421 (home-page "https://code.google.com/archive/p/socksipy-branch/")
12422 (synopsis "Python SOCKS module")
12423 (description
12424 "SocksiPy - A Python SOCKS client module. It provides a socket-like
12425interface that supports connections to any TCP service through the use of a
12426SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
12427this is a branch created by Mario Vilas to address some open issues,as the
12428original project seems to have been abandoned circa 2007.")
12429 (license license:bsd-3)))
12430
12431(define-public python-socksipychain
12432 (package
12433 (name "python-socksipychain")
12434 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
12435 (revision . "0")))
12436 (version (git-version "2.1.3"
12437 (assoc-ref properties 'revision)
12438 (assoc-ref properties 'commit)))
12439 (source
12440 (origin
12441 (method git-fetch)
12442 (uri (git-reference
12443 (url "https://github.com/pagekite/PySocksipyChain")
12444 (commit (assoc-ref properties 'commit))))
12445 (file-name (git-file-name name version))
12446 (sha256
12447 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
12448 (build-system pyproject-build-system)
12449 (arguments (list #:tests? #f)) ; Tests try to access the network.
12450 (native-inputs (list python-setuptools))
12451 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
12452 (synopsis "Python SOCKS module with chained proxies support")
12453 (description
12454 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
12455adds support for arbitrary chaining of proxy servers and various modes of
12456TLS/SSL encryption. It was developed for use in PageKite, and also includes
12457a simple netcat replacement with chaining support.")
12458 (license license:bsd-3)))
12459
12460(define-public python-pycodestyle
12461 (package
12462 (name "python-pycodestyle")
12463 (version "2.12.1")
12464 (source
12465 (origin
12466 (method url-fetch)
12467 (uri (pypi-uri "pycodestyle" version))
12468 (sha256
12469 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
12470 (build-system pyproject-build-system)
12471 (arguments
12472 (list
12473 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
12474 #:phases
12475 #~(modify-phases %standard-phases
12476 ;; Taken from Tox config
12477 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
12478 (replace 'check
12479 (lambda* (#:key tests? test-flags #:allow-other-keys)
12480 (when tests?
12481 (apply invoke "python" "-v" test-flags)))))))
12482 (native-inputs
12483 (list python-setuptools
12484 python-wheel))
12485 (home-page "https://pycodestyle.readthedocs.io/")
12486 (synopsis "Python style guide checker")
12487 (description "@code{pycodestyle} (formerly pep8) is a tool to check
12488Python code against some of the style conventions in
12489@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
12490 (license license:expat)))
12491
12492(define-public python-pycollada
12493 (package
12494 (name "python-pycollada")
12495 (version "0.9.2")
12496 (source
12497 (origin
12498 (method git-fetch)
12499 (uri (git-reference
12500 (url "https://github.com/pycollada/pycollada")
12501 (commit (string-append "v" version))))
12502 (file-name (git-file-name name version))
12503 (sha256
12504 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
12505 (build-system pyproject-build-system)
12506 (native-inputs
12507 (list python-pytest
12508 python-setuptools))
12509 (propagated-inputs
12510 (list python-numpy
12511 python-dateutil))
12512 (home-page "https://pycollada.readthedocs.io")
12513 (synopsis "Reading and writing collada documents library")
12514 (description
12515 "This package implements a functionality for creating, editing and
12516loading @url{https://www.khronos.org/collada/,COLLADA},which is a
12517COLLAborative Design Activity for establishing an interchange file format for
12518interactive 3D applications.
12519
12520The library allows you to load a COLLADA file and interact with it as a python
12521object. In addition, it supports creating a collada python object from
12522scratch, as well as in-place editing.")
12523 (license license:bsd-3)))
12524
12525(define-public python-pyct
12526 (package
12527 (name "python-pyct")
12528 (version "0.5.0")
12529 (source
12530 (origin
12531 (method url-fetch)
12532 (uri (pypi-uri "pyct" version))
12533 (sha256
12534 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
12535 (build-system pyproject-build-system)
12536 (arguments
12537 (list
12538 #:test-flags
12539 ;; These tests want to download example data from the internet.
12540 '(list "-k" (string-append
12541 "not test_examples_with_use_test_data"
12542 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
12543 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
12544 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
12545 (propagated-inputs (list python-param python-pyyaml))
12546 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
12547 (home-page "https://github.com/holoviz-dev/pyct")
12548 (synopsis "Common packaging tasks")
12549 (description
12550 "This Python package provides utilities to run common packaging tasks,
12551e.g. copy examples, fetch data, etc.")
12552 (license license:bsd-3)))
12553
12554(define-public python-multidict
12555 (package
12556 (name "python-multidict")
12557 (version "6.7.0")
12558 (source
12559 (origin
12560 (method git-fetch)
12561 (uri (git-reference
12562 (url "https://github.com/aio-libs/multidict/")
12563 (commit (string-append "v" version))))
12564 (file-name (git-file-name name version))
12565 (sha256
12566 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
12567 (build-system pyproject-build-system)
12568 (arguments
12569 (list
12570 ;; tests: 1395 passed
12571 #:test-flags
12572 #~(list "--ignore-glob=tests/test_*_benchmarks.py")
12573 #:phases
12574 #~(modify-phases %standard-phases
12575 (add-after 'unpack 'fix-pytest-config
12576 (lambda _
12577 (substitute* "pytest.ini"
12578 (("-p pytest_cov") "")
12579 (("--cov.*") "")))))))
12580 (native-inputs
12581 (list python-objgraph
12582 python-psutil
12583 python-pytest
12584 python-setuptools))
12585 (home-page "https://github.com/aio-libs/multidict/")
12586 (synopsis "Multidict implementation")
12587 (description
12588 "Multidict is dict-like collection of key-value pairs where key might be
12589occurred more than once in the container.")
12590 (license license:asl2.0)))
12591
12592(define-public python-orderedmultidict
12593 (package
12594 (name "python-orderedmultidict")
12595 (version "1.0.1")
12596 (source
12597 (origin
12598 (method url-fetch)
12599 (uri (pypi-uri "orderedmultidict" version))
12600 (sha256
12601 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
12602 (build-system pyproject-build-system)
12603 (propagated-inputs
12604 (list python-six))
12605 (native-inputs
12606 (list python-pytest
12607 python-setuptools))
12608 (home-page "https://github.com/gruns/orderedmultidict")
12609 (synopsis "Python Ordered Multivalue Dictionary - omdict")
12610 (description "This package contains a library for ordered multivalue
12611dictionaries. A multivalue dictionary is a dictionary that can store
12612multiple values for the same key. An ordered multivalue dictionary is a
12613multivalue dictionary that retains the order of insertions and deletions.")
12614 (license license:unlicense)))
12615
12616(define-public python-autopage
12617 (package
12618 (name "python-autopage")
12619 (version "0.5.1")
12620 (source (origin
12621 (method url-fetch)
12622 (uri (pypi-uri "autopage" version))
12623 (sha256
12624 (base32
12625 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
12626 (build-system pyproject-build-system)
12627 (arguments
12628 (list
12629 #:phases
12630 #~(modify-phases %standard-phases
12631 (add-before 'check 'disable-e2e-tests
12632 (lambda _
12633 ;; These tests rely on KeyboardInterrupts which do not
12634 ;; work in the build container.
12635 (delete-file "autopage/tests/test_end_to_end.py"))))))
12636 (native-inputs
12637 (list python-pypa-build
12638 python-setuptools
12639 python-wheel
12640 ;; For tests.
12641 python-fixtures
12642 python-pytest
12643 python-testtools))
12644 (home-page "https://github.com/zaneb/autopage")
12645 (synopsis "Automatic paging for console output")
12646 (description
12647 "Autopage is a Python library to automatically display terminal output
12648from a program in a @dfn{pager} such as @command{less}.")
12649 (license license:asl2.0)))
12650
12651(define-public python-dirty-equals
12652 (package
12653 (name "python-dirty-equals")
12654 (version "0.8.0")
12655 (source
12656 (origin
12657 (method git-fetch)
12658 (uri (git-reference
12659 (url "https://github.com/samuelcolvin/dirty-equals")
12660 (commit (string-append "v" version))))
12661 (file-name (git-file-name name version))
12662 (sha256
12663 (base32 "1jp9jbfs90m8jkpcvi798zxxx49a94rzn8gki9fraqhbqxkv76qd"))))
12664 (build-system pyproject-build-system)
12665 (arguments
12666 (list
12667 #:test-flags
12668 ;; This test requires pytest-examples, which in turn requires
12669 ;; python-ruff, which is difficult to package because it is written in
12670 ;; Rust (TODO: Enable when Ruff is in Guix!).
12671 #~(list "--ignore=tests/test_docs.py"
12672 ;; Optional typing check with Pydantic.
12673 "--ignore=tests/test_other.py"
12674 ;; TODO: Some timezones are missing in PyTZ, remove constrain
12675 ;; when updated.
12676 "-k" (string-append "not test_is_datetime_zoneinfo"
12677 " and not test_is_now_tz"
12678 " and not test_tz"))))
12679 (native-inputs
12680 (list python-hatchling
12681 ;; python-pydantic ; introduces cycle, optinoal
12682 python-pytest))
12683 (propagated-inputs
12684 (list python-pytz))
12685 (home-page "https://dirty-equals.helpmanual.io/")
12686 (synopsis "Do dirty (but useful) things with equals")
12687 (description
12688 "@code{dirty-equals} is a Python library that (mis)uses the
12689@code{__eq__} method to make code (generally unit tests) more declarative
12690and therefore easier to read and write.")
12691 (license license:expat)))
12692
12693(define-public python-distutils-extra
12694 (package
12695 (name "python-distutils-extra")
12696 (version "2.38")
12697 (source
12698 (origin
12699 (method url-fetch)
12700 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
12701 version "/+download/python-distutils-extra-"
12702 version ".tar.gz"))
12703 (sha256
12704 (base32
12705 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
12706 (build-system pyproject-build-system)
12707 (arguments
12708 (list #:tests? #f)) ;tests are outdated and broken
12709 (native-inputs (list python-setuptools python-wheel))
12710 (home-page "https://launchpad.net/python-distutils-extra/")
12711 (synopsis "Enhancements to Python's distutils")
12712 (description
12713 "The python-distutils-extra module enables you to easily integrate
12714gettext support, themed icons, and scrollkeeper-based documentation into
12715Python's distutils.")
12716 (license license:gpl2)))
12717
12718(define-public python-olefile
12719 (package
12720 (name "python-olefile")
12721 (version "0.47")
12722 (source
12723 (origin
12724 (method git-fetch)
12725 (uri (git-reference
12726 (url "https://github.com/decalage2/olefile")
12727 (commit (string-append "v" version))))
12728 (file-name (git-file-name name version))
12729 (sha256
12730 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
12731 (build-system pyproject-build-system)
12732 (native-inputs
12733 (list python-pytest
12734 python-setuptools))
12735 (home-page "https://www.decalage.info/python/olefileio")
12736 (synopsis "Read and write Microsoft OLE2 files")
12737 (description
12738 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
12739Storage or Compound Document, Microsoft Office). It is an improved version of
12740the OleFileIO module from PIL, the Python Image Library.")
12741 (license license:bsd-3)))
12742
12743(define-public python-property-cached
12744 (package
12745 (name "python-property-cached")
12746 (version "1.6.4")
12747 (source
12748 (origin
12749 (method url-fetch)
12750 (uri (pypi-uri "property-cached" version ".zip"))
12751 (sha256
12752 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
12753 (patches
12754 (search-patches "python-property-cached-asyncio-3_11.patch"))))
12755 (build-system pyproject-build-system)
12756 (arguments
12757 (list
12758 ;; AssertionError.
12759 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
12760 (native-inputs (list python-freezegun python-pytest unzip
12761 python-setuptools python-wheel))
12762 (home-page "https://github.com/althonos/property-cached/")
12763 (synopsis "Decorator for caching properties in classes")
12764 (description "This package provides a decorator for caching properties in
12765classes. It is forked from @code{cached-property}.")
12766 (license license:bsd-3)))
12767
12768(define-public python-pdf2image
12769 (package
12770 (name "python-pdf2image")
12771 (version "1.17.0")
12772 (source
12773 (origin
12774 (method git-fetch)
12775 (uri (git-reference
12776 (url "https://github.com/Belval/pdf2image")
12777 (commit (string-append "v" version))))
12778 (file-name (git-file-name name version))
12779 (sha256
12780 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
12781 (build-system pyproject-build-system)
12782 (arguments
12783 (list
12784 ;; The following excluded tests assume hardcoded binary paths to
12785 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
12786 #:test-flags
12787 #~(list "--exclude=^test_use_poppler_path$"
12788 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
12789 (propagated-inputs (list python-pillow))
12790 (inputs (list poppler))
12791 (native-inputs (list python-pynose which python-setuptools))
12792 (home-page "https://github.com/Belval/pdf2image")
12793 (synopsis
12794 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
12795 (description
12796 "This package provides a Python API wrapping the @command{pdftoppm} and
12797@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
12798Python list with elements of type @code{PIL.Image} (from the
12799@code{python-pillow} library).")
12800 (license license:expat)))
12801
12802(define-public python-pikepdf
12803 (package
12804 (name "python-pikepdf")
12805 (version "8.15.1")
12806 (source
12807 (origin
12808 (method git-fetch)
12809 (uri (git-reference
12810 (url "https://github.com/pikepdf/pikepdf")
12811 (commit (string-append "v" version))))
12812 (file-name (git-file-name name version))
12813 (sha256
12814 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
12815 (build-system pyproject-build-system)
12816 (native-inputs
12817 (list pybind11-2
12818 python-attrs
12819 python-hypothesis
12820 python-setuptools-scm
12821 python-psutil
12822 python-pytest
12823 python-pytest-timeout
12824 python-pytest-xdist
12825 python-dateutil
12826 python-xmp-toolkit
12827 python-tomli
12828 python-setuptools))
12829 (inputs
12830 (list qpdf))
12831 (propagated-inputs
12832 (list python-deprecated python-lxml python-packaging python-pillow))
12833 (home-page "https://github.com/pikepdf/pikepdf")
12834 (synopsis "Read and write PDFs with Python")
12835 (description
12836 "pikepdf is a Python library for reading and writing PDF files.")
12837 (license license:mpl2.0)))
12838
12839(define-public python-pillow
12840 (package
12841 (name "python-pillow")
12842 (version "11.1.0")
12843 (source
12844 (origin
12845 (method url-fetch)
12846 (uri (pypi-uri "pillow" version))
12847 (sha256
12848 (base32 "081abgpz7g013cgzz7pjhmf8m7q626ngza4hnfs76vdk104ag39n"))))
12849 (build-system pyproject-build-system)
12850 (arguments
12851 (list
12852 #:phases
12853 #~(modify-phases %standard-phases
12854 (add-after 'unpack 'patch-ldconfig
12855 (lambda _
12856 (substitute* "setup.py"
12857 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
12858 (replace 'check
12859 (lambda* (#:key tests? #:allow-other-keys)
12860 (when tests?
12861 (setenv "HOME" (getcwd))
12862 (invoke "python" "selftest.py" "--installed")
12863 (invoke "python" "-m" "pytest" "-vv")))))))
12864 (native-inputs (list python-defusedxml
12865 python-markdown2
12866 python-olefile
12867 python-pytest
12868 python-setuptools
12869 python-trove-classifiers))
12870 (inputs (list freetype
12871 lcms
12872 libjpeg-turbo
12873 libtiff
12874 libwebp
12875 openjpeg
12876 zlib))
12877 (home-page "https://python-pillow.org")
12878 (synopsis "Fork of the Python Imaging Library")
12879 (description
12880 "The Python Imaging Library adds image processing capabilities to your
12881Python interpreter. This library provides extensive file format support, an
12882efficient internal representation, and fairly powerful image processing
12883capabilities. The core image library is designed for fast access to data
12884stored in a few basic pixel formats. It should provide a solid foundation for
12885a general image processing tool.")
12886 (properties `((cpe-name . "pillow")))
12887 (license (license:x11-style
12888 "http://www.pythonware.com/products/pil/license.htm"
12889 "The PIL Software License"))))
12890
12891(define-public python-pillow-heif
12892 (package
12893 (name "python-pillow-heif")
12894 (version "1.1.1")
12895 (source
12896 (origin
12897 (method url-fetch)
12898 (uri (pypi-uri "pillow_heif" version))
12899 (sha256
12900 (base32 "1pkbkg88jg6f24xvbg95aq8dm8fa8ffz7zy4rq262m98i658q3pn"))))
12901 (build-system pyproject-build-system)
12902 (inputs (list libheif))
12903 (propagated-inputs (list python-pillow))
12904 (native-inputs (list opencv ; for opencv-python
12905 python-defusedxml
12906 python-numpy
12907 python-packaging
12908 python-pympler
12909 python-pytest
12910 python-setuptools))
12911 (home-page "https://github.com/bigcat88/pillow_heif")
12912 (synopsis "Python interface for libheif library")
12913 (description "This package provides Python bindings for the libheif library
12914and a plugin for Pillow.")
12915 (license license:bsd-3)))
12916
12917(define-public python-pillow-heif-0.22
12918 (package
12919 (inherit python-pillow-heif)
12920 (version "0.22.0")
12921 (source
12922 (origin
12923 (method url-fetch)
12924 (uri (pypi-uri "pillow_heif" version))
12925 (sha256
12926 (base32 "16mkap63d14f69105b3bm8pi64fvpdznncgn48vhgls0jf977m31"))))))
12927
12928(define-public python-pixelmatch
12929 (package
12930 (name "python-pixelmatch")
12931 (version "0.3.0")
12932 (source
12933 (origin
12934 (method git-fetch)
12935 (uri (git-reference
12936 (url "https://github.com/whtsky/pixelmatch-py")
12937 (commit (string-append "v" version))))
12938 (file-name (git-file-name name version))
12939 (sha256
12940 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
12941 (build-system pyproject-build-system)
12942 (arguments
12943 ;; XXX: PIL.UnidentifiedImageError despite images being present.
12944 (list #:tests? #f))
12945 (native-inputs
12946 (list python-poetry-core
12947 python-pillow
12948 python-pytest
12949 python-pytest-benchmark))
12950 (home-page "https://github.com/whtsky/pixelmatch-py")
12951 (synopsis "Pixel-level image comparison library")
12952 (description
12953 "This package provides a pixel-level image comparison library for Python,
12954originally created to compare screenshots in tests. Its features include
12955accurate anti-aliased pixels detection and perceptual color difference
12956metrics.")
12957 (license license:isc)))
12958
12959(define-public python-imagecodecs
12960 (package
12961 (name "python-imagecodecs")
12962 (version "2025.8.2")
12963 (source
12964 (origin
12965 (method url-fetch)
12966 (uri (pypi-uri "imagecodecs" version))
12967 (sha256
12968 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
12969 (modules '((guix build utils)))
12970 (snippet #~(for-each delete-file
12971 ;; Delete pre-generated Cython files.
12972 (find-files "imagecodecs" "_.*\\.c$")))))
12973 (build-system pyproject-build-system)
12974 (arguments
12975 (list
12976 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
12977 #:test-flags
12978 ;; Some of those tests are flaky.
12979 #~(list "-k" "not test_cms_identity_transforms")
12980 #:phases
12981 #~(modify-phases %standard-phases
12982 (add-after 'unpack 'create-configuration
12983 (lambda _
12984 ;; By default everything is enabled. We can selectively disable
12985 ;; extensions (and thus dependencies) by deleting them from the
12986 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
12987 (call-with-output-file "imagecodecs_distributor_setup.py"
12988 (lambda (port)
12989 (format port "\
12990def customize_build(EXTENSIONS, OPTIONS):
12991~{ del EXTENSIONS[~s]~%~}~%"
12992 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
12993 ;; Those rely on unpackaged inputs.
12994 "aec" "avif" "bitshuffle" "brunsli" "deflate"
12995 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
12996 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
12997 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
12998 "zlibng" "zopfli"))))))
12999 (add-after 'unpack 'fix-sanity-check
13000 (lambda _
13001 ;; XXX: Don't exit twice. The generated script already does that.
13002 (substitute* "imagecodecs/__main__.py"
13003 (("sys\\.exit\\(main\\(\\)\\)")
13004 ""))))
13005 (add-before 'check 'configure-tests
13006 (lambda _
13007 (setenv "HOME" (getcwd)))))))
13008 (inputs
13009 (list brotli
13010 c-blosc
13011 c-blosc2
13012 giflib
13013 lcms
13014 libheif
13015 libjpeg-turbo
13016 libpng
13017 libtiff
13018 libwebp
13019 lz4
13020 lzfse
13021 snappy
13022 xz
13023 zlib
13024 `(,zstd "lib")))
13025 (propagated-inputs
13026 (list python-numpy python-matplotlib python-tifffile))
13027 (native-inputs
13028 (list python-cython python-pytest python-setuptools))
13029 (home-page "https://www.lfd.uci.edu/~gohlke/")
13030 (synopsis "Image transformation, compression, and decompression codecs")
13031 (description
13032 "Imagecodecs is a Python library that provides block-oriented, in-memory
13033buffer transformation, compression, and decompression functions for use in the
13034tifffile, czifile, and other scientific image input/output modules.")
13035 (license license:bsd-3)))
13036
13037(define-public python-property-manager
13038 (package
13039 (name "python-property-manager")
13040 (version "3.0")
13041 (source
13042 (origin
13043 (method git-fetch)
13044 (uri (git-reference
13045 (url "https://github.com/xolox/python-property-manager")
13046 (commit version)))
13047 (file-name (git-file-name name version))
13048 (sha256
13049 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
13050 (build-system pyproject-build-system)
13051 (native-inputs (list python-pytest python-setuptools))
13052 (propagated-inputs
13053 (list python-verboselogs
13054 python-humanfriendly
13055 python-coloredlogs))
13056 (home-page "https://github.com/xolox/python-property-manager")
13057 (synopsis "Useful property variants for Python programming")
13058 (description
13059 "The @code{property-manager} package defines several custom property
13060variants for Python programming including required properties,writable
13061properties, cached properties, etc.")
13062 (license license:expat)))
13063
13064(define-public python-executing
13065 (package
13066 (name "python-executing")
13067 (version "2.2.0")
13068 (source
13069 (origin
13070 (method url-fetch)
13071 (uri (pypi-uri "executing" version))
13072 (sha256
13073 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
13074 (build-system pyproject-build-system)
13075 (arguments
13076 (list
13077 #:test-flags
13078 ;; Test needs IPython
13079 #~(list "-k" "not test_two_statement_lookups")
13080 #:phases
13081 #~(modify-phases %standard-phases
13082 (add-after 'unpack 'fix-tests
13083 (lambda _
13084 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
13085 (substitute* "pyproject.toml"
13086 (("ignore_missing_imports = true.*")
13087 "ignore_missing_imports = true
13088
13089[tool.pytest.ini_options]
13090python_functions = \"test_\"\n")))))))
13091 (native-inputs
13092 (list python-asttokens
13093 python-littleutils
13094 python-pytest
13095 python-rich
13096 python-setuptools
13097 python-setuptools-scm
13098 python-wheel))
13099 (home-page "https://github.com/alexmojaki/executing")
13100 (synopsis "Get information about what a Python frame is currently doing")
13101 (description "This package lets you get information about what a frame is
13102currently doing, particularly the AST node being executed.")
13103 (license license:expat)))
13104
13105(define-public python-executor
13106 (package
13107 (name "python-executor")
13108 (version "23.2")
13109 (source
13110 (origin
13111 (method git-fetch)
13112 (uri (git-reference
13113 (url "https://github.com/xolox/python-executor")
13114 (commit version)))
13115 (file-name (git-file-name name version))
13116 (sha256
13117 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
13118 (build-system pyproject-build-system)
13119 (arguments
13120 (list #:tests? #f)) ;TODO: tests require root/sudo
13121 (native-inputs (list python-mock python-pytest python-setuptools))
13122 (propagated-inputs
13123 (list python-six
13124 python-property-manager
13125 python-fasteners
13126 python-virtualenv))
13127 (home-page "https://github.com/xolox/python-executor")
13128 (synopsis "Programmer friendly subprocess wrapper")
13129 (description
13130 "The @code{executor} package is a simple wrapper for Python’s subprocess
13131module that makes it very easy to handle subprocesses on UNIX systems with
13132proper escaping of arguments and error checking currently doing, particularly
13133the AST node being executed.")
13134 (license license:expat)))
13135
13136(define-public python-roifile
13137 (package
13138 (name "python-roifile")
13139 (version "2025.5.10")
13140 (source
13141 (origin
13142 (method url-fetch)
13143 (uri (pypi-uri "roifile" version))
13144 (sha256
13145 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
13146 (build-system pyproject-build-system)
13147 (arguments (list #:tests? #f)) ; There are none.
13148 (native-inputs (list python-setuptools))
13149 (propagated-inputs (list python-numpy))
13150 (home-page "https://www.lfd.uci.edu/~gohlke/")
13151 (synopsis "Read and write ImageJ ROI format")
13152 (description "Roifile is a Python library to read, write, create, and plot
13153ImageJ ROIs, an undocumented and ImageJ application specific format to store
13154regions of interest, geometric shapes, paths, text, etc for image overlays.")
13155 (license license:bsd-3)))
13156
13157(define-public python-lfdfiles
13158 (package
13159 (name "python-lfdfiles")
13160 (version "2025.9.17")
13161 (source
13162 (origin
13163 (method url-fetch)
13164 (uri (pypi-uri "lfdfiles" version))
13165 (sha256
13166 (base32 "0b363vv146icsn86gxc04grq2d5r7xzzabr03xsc7aq9wybgvgqp"))
13167 (modules '((guix build utils)))
13168 (snippet
13169 ;; Delete pre-generated Cython files.
13170 #~(for-each delete-file (find-files "lfdfiles" "_.*\\.c$")))))
13171 (build-system pyproject-build-system)
13172 (arguments
13173 (list #:tests? #f)) ; No tests, despite a test dependency on pytest.
13174 (native-inputs (list python-setuptools))
13175 (propagated-inputs (list python-click python-numpy python-tifffile))
13176 (home-page "https://www.lfd.uci.edu/~gohlke/")
13177 (synopsis "Work with LFD data files")
13178 (description
13179 "Lfdfiles is a Python library and console script for reading, writing,
13180converting, and viewing many of the proprietary file formats used to store
13181experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
13182 (license license:bsd-3)))
13183
13184;; ~8Mo of test files.
13185(define python-av-testdata
13186 (file-union
13187 "python-av-testdata"
13188 (cons*
13189 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
13190 `(,(string-append "pyav-curated/" file)
13191 ,(origin
13192 (method url-fetch)
13193 (uri (string-append "https://pyav.org/datasets/" file))
13194 (sha256
13195 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
13196 (map
13197 (match-lambda
13198 ((file . hash)
13199 (list (string-append "fate-suite/" file)
13200 (origin
13201 (method url-fetch)
13202 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
13203 (sha256 (base32 hash))))))
13204 '(("aac/latm_stereo_to_51.ts" .
13205 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
13206 ("h264/extradata-reload-multi-stsd.mov" .
13207 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
13208 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
13209 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
13210 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
13211 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
13212 ("h264/interlaced_crop.mp4" .
13213 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
13214 ("hap/HAPQA_NoSnappy_127x1.mov" .
13215 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
13216 ("mkv/codec_delay_opus.mkv" .
13217 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
13218 ("mov/displaymatrix.mov" .
13219 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
13220 ("mov/mov-1elist-ends-last-bframe.mov" .
13221 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
13222 ("mov/white_zombie_scrunch-part.mov" .
13223 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
13224 ("mpeg2/mpeg2_field_encoding.ts" .
13225 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
13226 ("vorbis/vorbis_chapter_extension_demo.ogg" .
13227 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
13228 ("mxf/track_01_v02.mxf" .
13229 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
13230 ("png1/55c99e750a5fd6_50314226.png" .
13231 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
13232 ("qtrle/aletrek-rle.mov" .
13233 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
13234 ("sub/MovText_capability_tester.mp4" .
13235 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
13236 ("sub/vobsub.sub" .
13237 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
13238
13239(define-public python-av
13240 (package
13241 (name "python-av")
13242 (version "16.0.1")
13243 (source
13244 (origin
13245 (method url-fetch)
13246 (uri (pypi-uri "av" version))
13247 (sha256
13248 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
13249 (build-system pyproject-build-system)
13250 (arguments
13251 (list
13252 ;; Upstream is not great in responding to open issues or change requests.
13253 ;; See:
13254 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
13255 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
13256 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
13257 #:test-flags
13258 ;; Writing to custom IO requires network access.
13259 #~(list "-k" "not test_writing_to_custom_io_dash")
13260 #:phases
13261 #~(modify-phases %standard-phases
13262 (add-before 'check 'pre-check
13263 (lambda _
13264 ;; This would otherwise interfere with finding the installed
13265 ;; av when running tests.
13266 (delete-file-recursively "av")
13267 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
13268 (substitute* "tests/common.py"
13269 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
13270 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
13271 (native-inputs
13272 (list pkg-config
13273 python-cython
13274 python-numpy
13275 python-pillow
13276 python-pytest
13277 python-setuptools))
13278 (inputs (list ffmpeg))
13279 (home-page "https://github.com/PyAV-Org/PyAV")
13280 (synopsis "Pythonic bindings for FFmpeg's libraries")
13281 (description
13282 "PyAV is a Python library that allows for direct and precise manipulation
13283of media through containers, streams, packets, codecs, and frames. It provides
13284access to the powerful FFmpeg libraries while managing the complex details as
13285much as possible.
13286PyAV also facilitates data transformation and integration with
13287other packages such as Numpy and Pillow. However, working with media is a
13288challenging task and PyAV cannot abstract it away or make all the best decisions
13289for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
13290be necessary. Nonetheless, PyAV is an essential tool when working with media
13291that requires its specific capabilities.")
13292 (license license:bsd-3)))
13293
13294(define-public python-ffmpeg-python
13295 ;; The latest release (0.2.0) is old and its test suite crashs on Python 3.10.
13296 (package
13297 (name "python-ffmpeg-python")
13298 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
13299 (revision . "0")))
13300 (version (git-version "0.2.0"
13301 (assoc-ref properties 'revision)
13302 (assoc-ref properties 'commit)))
13303 (source
13304 (origin
13305 (method git-fetch)
13306 (uri (git-reference
13307 (url "https://github.com/kkroening/ffmpeg-python.git")
13308 (commit (assoc-ref properties 'commit))))
13309 (file-name (git-file-name name version))
13310 (sha256
13311 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
13312 (build-system pyproject-build-system)
13313 (arguments
13314 (list
13315 #:test-flags
13316 #~(list "-k" "not test_pipe and not test__probe")
13317 #:phases
13318 #~(modify-phases %standard-phases
13319 (add-after 'unpack 'hardcode-ffmpeg
13320 (lambda* (#:key inputs #:allow-other-keys)
13321 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
13322 (substitute* "ffmpeg/_run.py"
13323 (("cmd='ffmpeg'")
13324 (string-append "cmd='" ffmpeg "'")))
13325 (substitute* "ffmpeg/tests/test_ffmpeg.py"
13326 (("out_file.compile\\(\\) == \\['ffmpeg'")
13327 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
13328 (inputs (list ffmpeg))
13329 (propagated-inputs (list python-future))
13330 (native-inputs (list python-future
13331 python-numpy
13332 python-pytest
13333 python-pytest-mock
13334 python-setuptools))
13335 (home-page "https://github.com/kkroening/ffmpeg-python")
13336 (synopsis "Python bindings for FFmpeg with complex filtering support")
13337 (description
13338 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
13339Python terms, taking care of running ffmpeg with the correct command-line
13340arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
13341 (license license:asl2.0)))
13342
13343(define-public python-imageio-ffmpeg
13344 (package
13345 (name "python-imageio-ffmpeg")
13346 (version "0.6.0")
13347 (source
13348 (origin
13349 (method url-fetch)
13350 (uri (pypi-uri "imageio_ffmpeg" version))
13351 (sha256
13352 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
13353 (build-system pyproject-build-system)
13354 (arguments
13355 (list
13356 #:tests? #f ;XXX: tests requrie network access to get FFmpeg data
13357 #:phases
13358 #~(modify-phases %standard-phases
13359 (add-after 'unpack 'hardcode-ffmpeg
13360 (lambda* (#:key inputs #:allow-other-keys)
13361 (substitute* "imageio_ffmpeg/_utils.py"
13362 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
13363 (string-append "(" all " or \""
13364 (search-input-file inputs "bin/ffmpeg")
13365 "\")"))))))))
13366 (native-inputs
13367 (list python-setuptools
13368 python-wheel))
13369 (inputs
13370 (list ffmpeg))
13371 (home-page "https://github.com/imageio/imageio-ffmpeg")
13372 (synopsis "FFMPEG wrapper for Python")
13373 (description
13374 "This package provides an FFMPEG wrapper for working with video files.
13375It implements generator functions for reading and writing data to and from
13376FFMPEG, reliably terminating the process when done.")
13377 (license license:bsd-2)))
13378
13379(define-public python-imageio
13380 (package
13381 (name "python-imageio")
13382 (version "2.36.1")
13383 (source
13384 (origin
13385 (method url-fetch)
13386 (uri (pypi-uri "imageio" version))
13387 (sha256
13388 (base32
13389 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
13390 (build-system pyproject-build-system)
13391 (arguments
13392 (list
13393 #:test-flags #~(list "-m" "not needs_internet"
13394 ;; This attempts to load libGL.so (provided by mesa)
13395 ;; at the Python store path (sys.base_prefix?).
13396 "-k" "not test_findlib2"
13397 "--ignore" "tests/test_freeimage.py")
13398 #:phases
13399 #~(modify-phases %standard-phases
13400 (add-after 'unpack 'fix-source
13401 (lambda* (#:key inputs #:allow-other-keys)
13402 (substitute* "imageio/core/util.py"
13403 (("\"/var/tmp\"")
13404 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
13405 (propagated-inputs
13406 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
13407 (native-inputs
13408 (list python-fsspec
13409 python-pytest
13410 python-setuptools))
13411 (home-page "https://imageio.github.io/")
13412 (synopsis "Library for reading and writing a wide range of image data")
13413 (description
13414 "Imageio is a Python library that provides an easy interface to read and
13415write a wide range of image data, including animated images, video, volumetric
13416data, and scientific formats.")
13417 (license license:bsd-2)))
13418
13419(define-public python-pyvips
13420 (package
13421 (name "python-pyvips")
13422 (version "3.1.1")
13423 (source
13424 (origin
13425 (method git-fetch) ; PyPI does not include test helpers
13426 (uri (git-reference
13427 (url "https://github.com/libvips/pyvips")
13428 (commit (string-append "v" version))))
13429 (file-name (git-file-name name version))
13430 (sha256
13431 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
13432 (build-system pyproject-build-system)
13433 (native-inputs
13434 (list pkg-config
13435 python-pytest
13436 python-setuptools
13437 python-wheel))
13438 (inputs
13439 (list glib vips))
13440 (propagated-inputs
13441 (list python-cffi python-pkgconfig))
13442 (home-page "https://github.com/libvips/pyvips")
13443 (synopsis "Python bindings for VIPS")
13444 (description "The @code{pyvips} package provides Python bindings for VIPS,
13445a multithreaded image-processing system with low memory needs.")
13446 (license license:expat)))
13447
13448;; WARNING: This package is a dependency of mesa.
13449;; There are no users in python-xyz for this package, consider to adopt closer
13450;; to Mesa.
13451(define-public python-pycparser
13452 (package
13453 (name "python-pycparser")
13454 (version "2.22")
13455 (source
13456 (origin
13457 (method url-fetch)
13458 (uri (pypi-uri "pycparser" version))
13459 (sha256
13460 (base32
13461 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
13462 (outputs '("out" "doc"))
13463 (build-system pyproject-build-system)
13464 (arguments
13465 (list
13466 #:test-backend #~'unittest
13467 #:phases
13468 #~(modify-phases %standard-phases
13469 (add-after 'install 'install-doc
13470 (lambda _
13471 (let* ((data (string-append #$output:doc "/share"))
13472 (doc (string-append data "/doc/" #$name "-" #$version))
13473 (examples (string-append doc "/examples")))
13474 (mkdir-p examples)
13475 (for-each (lambda (file)
13476 (copy-file (string-append "." file)
13477 (string-append doc file)))
13478 '("/README.rst" "/CHANGES" "/LICENSE"))
13479 (copy-recursively "examples" examples)))))))
13480 (native-inputs
13481 (list python-setuptools))
13482 (home-page "https://github.com/eliben/pycparser")
13483 (synopsis "C parser in Python")
13484 (description
13485 "Pycparser is a complete parser of the C language, written in pure Python
13486using the PLY parsing library. It parses C code into an AST and can serve as
13487a front-end for C compilers or analysis tools.")
13488 (license license:bsd-3)))
13489
13490(define-public python-pywavelets
13491 (package
13492 (name "python-pywavelets")
13493 (version "1.8.0")
13494 (home-page "https://github.com/PyWavelets/pywt")
13495 (source (origin
13496 (method url-fetch)
13497 (uri (pypi-uri "pywavelets" version))
13498 (sha256
13499 (base32
13500 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
13501 (build-system pyproject-build-system)
13502 (arguments
13503 (list
13504 #:test-flags '(list "--pyargs" "pywt")
13505 #:phases
13506 #~(modify-phases %standard-phases
13507 ;; The compiled libraries are only in the output at this point,
13508 ;; but they are needed to run tests.
13509 ;; FIXME: This should be handled by the pyargs pytest argument,
13510 ;; but is not for some reason.
13511 (add-before 'check 'pre-check
13512 (lambda _ (chdir #$output))))))
13513 (native-inputs
13514 (list meson
13515 ninja
13516 pkg-config
13517 python-cython
13518 python-meson
13519 python-numpy
13520 python-pytest))
13521 (propagated-inputs
13522 (list python-numpy python-scipy))
13523 (synopsis "Wavelet transforms in Python")
13524 (description
13525 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
13526mathematical basis functions that are localized in both time and frequency.
13527Wavelet transforms are time-frequency transforms employing wavelets. They are
13528similar to Fourier transforms, the difference being that Fourier transforms are
13529localized only in frequency instead of in time and frequency.")
13530 (license license:expat)))
13531
13532(define-public python-pywal
13533 (package
13534 (name "python-pywal")
13535 (version "3.3.0")
13536 (source
13537 (origin
13538 (method git-fetch)
13539 (uri (git-reference
13540 (url "https://github.com/dylanaraps/pywal")
13541 (commit version)))
13542 (file-name (git-file-name name version))
13543 (sha256
13544 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
13545 (build-system pyproject-build-system)
13546 (arguments
13547 `(#:phases
13548 (modify-phases %standard-phases
13549 (add-before 'check 'fix-home-directory
13550 (lambda _
13551 ;; Tests fail with "Permission denied: '/homeless-shelter'".
13552 (setenv "HOME" "/tmp"))))))
13553 (native-inputs
13554 (list python-pytest
13555 python-setuptools))
13556 (inputs
13557 (list imagemagick))
13558 (home-page "https://github.com/dylanaraps/pywal")
13559 (synopsis "Color palette generator and applicator")
13560 (description
13561 "Pywal is a tool that generates a color palette from the dominant colors
13562in an image. It then applies the colors system-wide and on-the-fly in all of
13563your favourite programs.")
13564 (license license:expat)))
13565
13566(define-public python-pywal16
13567 (package
13568 (name "python-pywal16")
13569 (version "3.8.10")
13570 (source
13571 (origin
13572 (method url-fetch)
13573 (uri (pypi-uri "pywal16" version))
13574 (sha256
13575 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
13576 (build-system pyproject-build-system)
13577 (arguments
13578 (list
13579 #:phases
13580 '(modify-phases %standard-phases
13581 (add-before 'check 'set-HOME
13582 (lambda _ (setenv "HOME" "/tmp"))))))
13583 (native-inputs
13584 (list imagemagick
13585 python-pytest
13586 python-setuptools))
13587 (home-page "https://github.com/eylles/pywal16")
13588 (synopsis "16 colors fork of pywal")
13589 (description
13590 "Pywal16 is a tool that generates a color palette from the dominant
13591colors in an image. It then applies the colors system-wide and on-the-fly in
13592all of your favorite programs.")
13593 (license license:expat)))
13594
13595(define-public python-click-didyoumean
13596 (package
13597 (name "python-click-didyoumean")
13598 (version "0.3.1")
13599 (source
13600 (origin
13601 (method git-fetch) ;no tests in PyPI archive
13602 (uri (git-reference
13603 (url "https://github.com/click-contrib/click-didyoumean")
13604 (commit (string-append "v" version))))
13605 (file-name (git-file-name name version))
13606 (sha256
13607 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
13608 (build-system pyproject-build-system)
13609 (native-inputs
13610 (list python-poetry-core python-pytest))
13611 (propagated-inputs
13612 (list python-click))
13613 (home-page "https://github.com/timofurrer/click-didyoumean")
13614 (synopsis "Git-like did-you-mean feature in Click")
13615 (description
13616 "This plugin enables git-like did-you-mean feature in Click.")
13617 (license license:expat)))
13618
13619(define-public python-pywinrm
13620 (package
13621 (name "python-pywinrm")
13622 (version "0.5.0")
13623 (source
13624 (origin
13625 (method git-fetch)
13626 (uri (git-reference
13627 (url "https://github.com/diyan/pywinrm/")
13628 (commit (string-append "v" version))))
13629 (file-name (git-file-name name version))
13630 (sha256
13631 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
13632 (build-system pyproject-build-system)
13633 (propagated-inputs
13634 (list python-requests python-requests-ntlm python-xmltodict))
13635 (native-inputs
13636 (list python-mock python-pytest python-setuptools))
13637 (home-page "https://github.com/diyan/pywinrm/")
13638 (synopsis "Python library for Windows Remote Management (WinRM)")
13639 (description
13640 "pywinrm is a Python client for the Windows Remote Management (WinRM)
13641service. It allows you to invoke commands on target Windows machines from
13642any machine that can run Python.")
13643 (license license:expat)))
13644
13645(define-public python-manimpango
13646 (package
13647 (name "python-manimpango")
13648 (version "0.5.0")
13649 (source
13650 (origin
13651 (method git-fetch) ; no tests data in PyPi package
13652 (uri (git-reference
13653 (url "https://github.com/ManimCommunity/ManimPango")
13654 (commit (string-append "v" version))))
13655 (file-name (git-file-name name version))
13656 (sha256
13657 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
13658 (build-system pyproject-build-system)
13659 (arguments
13660 (list
13661 #:phases
13662 #~(modify-phases %standard-phases
13663 (add-before 'check 'build-extensions
13664 (lambda _
13665 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
13666 (native-inputs
13667 (list pkg-config
13668 python-cython
13669 python-pytest
13670 python-pytest-cov
13671 python-setuptools
13672 python-wheel))
13673 (inputs
13674 (list pango))
13675 (home-page "https://manimpango.manim.community/")
13676 (synopsis "Bindings for Pango for using with Manim")
13677 (description
13678 "Python bindings for ManimPango which is a C binding for Pango,
13679using Cython.
13680
13681ManimPango is internally used in Manim to render (non-LaTeX) text.")
13682 (license license:expat)))
13683
13684(define-public python-cairocffi
13685 (package
13686 (name "python-cairocffi")
13687 (version "1.7.1")
13688 (source
13689 (origin
13690 ;; The PyPI archive does not include the documentation, so use Git.
13691 (method git-fetch)
13692 (uri (git-reference
13693 (url "https://github.com/Kozea/cairocffi")
13694 (commit (string-append "v" version))))
13695 (file-name (git-file-name name version))
13696 (sha256
13697 (base32
13698 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
13699 (build-system pyproject-build-system)
13700 (outputs '("out" "doc"))
13701 (inputs
13702 (list glib gtk+ gdk-pixbuf cairo))
13703 (native-inputs
13704 (list python-flit-core
13705 python-numpy
13706 python-pikepdf
13707 python-pytest
13708 python-pytest-cov
13709 python-pytest-runner
13710 python-sphinx
13711 python-sphinx-rtd-theme))
13712 (propagated-inputs
13713 (list python-xcffib)) ; used at run time
13714 (arguments
13715 (list
13716 #:phases
13717 #~(modify-phases %standard-phases
13718 (add-after 'unpack 'patch-paths
13719 (lambda* (#:key inputs #:allow-other-keys)
13720 (substitute* "cairocffi/__init__.py"
13721 ;; Hack the dynamic library loading mechanism.
13722 (("find_library\\(library_name\\)")
13723 "\"found\"")
13724 (("filenames = \\(library_filename,\\) \\+ filenames")
13725 "pass")
13726 (("libcairo.so.2")
13727 (search-input-file inputs "/lib/libcairo.so.2")))
13728 (substitute* "cairocffi/pixbuf.py"
13729 (("libgdk_pixbuf-2.0.so.0")
13730 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
13731 (("libgobject-2.0.so.0")
13732 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
13733 (("libglib-2.0.so.0")
13734 (search-input-file inputs "/lib/libglib-2.0.so.0"))
13735 (("libgdk-3.so.0")
13736 (search-input-file inputs "/lib/libgdk-3.so.0")))))
13737 (add-after 'install 'install-doc
13738 (lambda* (#:key inputs #:allow-other-keys)
13739 (let* ((data (string-append #$output:doc "/share"))
13740 (doc (string-append data "/doc/" #$name "-" #$version))
13741 (html (string-append doc "/html")))
13742 (setenv "LD_LIBRARY_PATH"
13743 (string-append (assoc-ref inputs "cairo") "/lib" ":"
13744 (assoc-ref inputs "gdk-pixbuf") "/lib"))
13745 (setenv "LANG" "en_US.UTF-8")
13746 (mkdir-p html)
13747 (for-each (lambda (file)
13748 (copy-file (string-append "." file)
13749 (string-append doc file)))
13750 '("/README.rst" "/NEWS.rst"))
13751 (system* "python" "setup.py" "build_sphinx")
13752 (copy-recursively "docs/_build/html" html)))))))
13753 (home-page "https://github.com/Kozea/cairocffi")
13754 (synopsis "Python bindings and object-oriented API for Cairo")
13755 (description
13756 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
13757Python bindings and object-oriented API for cairo. Cairo is a 2D vector
13758graphics library with support for multiple backends including image buffers,
13759PNG, PostScript, PDF, and SVG file output.")
13760 (license license:bsd-3)))
13761
13762(define-public python-decorator
13763 (package
13764 (name "python-decorator")
13765 (version "5.2.1")
13766 (source
13767 (origin
13768 (method url-fetch)
13769 (uri (pypi-uri "decorator" version))
13770 (sha256
13771 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
13772 (build-system pyproject-build-system)
13773 (arguments
13774 (list #:test-backend #~'custom
13775 #:test-flags #~(list "tests/test.py")))
13776 (native-inputs
13777 (list python-setuptools))
13778 (home-page "https://pypi.org/project/decorator/")
13779 (synopsis "Python module to simplify usage of decorators")
13780 (description
13781 "The aim of the decorator module is to simplify the usage of decorators
13782for the average programmer, and to popularize decorators usage giving examples
13783of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
13784etc. The core of this module is a decorator factory.")
13785 (license license:expat)))
13786
13787(define-public python-drmaa
13788 (package
13789 (name "python-drmaa")
13790 (version "0.7.7")
13791 (source
13792 (origin
13793 (method url-fetch)
13794 (uri (pypi-uri "drmaa" version))
13795 (sha256
13796 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
13797 (build-system pyproject-build-system)
13798 ;; The test suite requires libdrmaa which is provided by the cluster
13799 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
13800 ;; should be set to the path of the libdrmaa library.
13801 (arguments
13802 (list
13803 #:tests? #f
13804 #:phases
13805 #~(modify-phases %standard-phases
13806 ;; Loading the library fails because DRMAA_LIBRARY_PATH
13807 ;; is not configured.
13808 (delete 'sanity-check))))
13809 (native-inputs (list python-setuptools))
13810 (home-page "https://pypi.org/project/drmaa/")
13811 (synopsis "Python bindings for the DRMAA library")
13812 (description
13813 "A Python package for Distributed Resource Management (DRM) job
13814submission and control. This package is an implementation of the DRMAA 1.0
13815Python language binding specification.")
13816 (license license:bsd-3)))
13817
13818(define-public python-grako
13819 (package
13820 (name "python-grako")
13821 (version "3.99.9")
13822 (source
13823 (origin
13824 (method url-fetch)
13825 (uri (pypi-uri "grako" version ".zip"))
13826 (sha256
13827 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
13828 (snippet
13829 #~(begin (use-modules (guix build utils))
13830 (substitute* "grako/grammars.py"
13831 (("from collections import defaultdict, Mapping")
13832 (string-append "from collections import defaultdict\n"
13833 "from collections.abc import Mapping")))
13834 (substitute* '("grako/util.py"
13835 "grako/walkers.py")
13836 (("collections\\.Mapping") "collections.abc.Mapping"))))))
13837 (build-system pyproject-build-system)
13838 ;; XXX: Test file 'grako.ebnf' is missing from archive.
13839 (arguments (list #:tests? #f))
13840 (native-inputs (list unzip python-pytest python-setuptools))
13841 (home-page "https://pypi.org/project/grako")
13842 (synopsis "EBNF parser generator")
13843 (description
13844 "Grako takes a grammar in a variation of EBNF as input, and outputs a
13845memoizing PEG/Packrat parser in Python.")
13846 (license license:bsd-3)))
13847
13848(define-public python-grandalf
13849 (package
13850 (name "python-grandalf")
13851 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
13852 (version "0.8")
13853 (source
13854 (origin
13855 (method git-fetch)
13856 (uri (git-reference
13857 (url "https://github.com/bdcht/grandalf")
13858 (commit (string-append "v" version))))
13859 (file-name (git-file-name name version))
13860 (sha256
13861 (base32
13862 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
13863 (build-system pyproject-build-system)
13864 (arguments
13865 (list
13866 #:phases
13867 #~(modify-phases %standard-phases
13868 (add-before 'build 'patch-requirements
13869 (lambda _
13870 (substitute* "setup.py"
13871 (("install_requires=\\['pyparsing'],") "")))))))
13872 (native-inputs
13873 (list python-setuptools python-pytest))
13874 (propagated-inputs
13875 (list python-numpy python-ply))
13876 (home-page "https://github.com/bdcht/grandalf")
13877 (synopsis "Graph and drawing algorithms framework")
13878 (description
13879 "Grandalf is a Python package made for experimentations with graphs
13880drawing algorithms. It is written in pure Python, and currently implements
13881two layouts: the Sugiyama hierarchical layout and the force-driven or energy
13882minimization approach. While not as fast or featured as graphviz or other
13883libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
13884than thousands of nodes, while keeping the source code simple enough to tweak
13885and hack any part of it for experimental purpose. With a total of about 1500
13886lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
13887in less than 600 lines. The energy minimization approach is comprised of only
13888250 lines!
13889
13890Grandalf does only 2 not-so-simple things:
13891@itemize
13892@item computing the nodes (x,y) coordinates (based on provided nodes
13893dimensions, and a chosen layout)
13894@item routing the edges with lines or nurbs
13895@end itemize
13896
13897It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
13898will help you find where to draw things like nodes and edges, but it’s up to
13899you to actually draw things with your favorite toolkit.")
13900 ;; The user can choose either license.
13901 (license (list license:gpl2 license:epl1.0))))
13902
13903(define-public python-gridmap
13904 (package
13905 (name "python-gridmap")
13906 (version "0.15.0")
13907 (source
13908 (origin
13909 (method git-fetch)
13910 (uri (git-reference
13911 (url "https://github.com/pygridtools/gridmap")
13912 (commit (string-append "v" version))))
13913 (file-name (git-file-name name version))
13914 (sha256
13915 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
13916 (build-system pyproject-build-system)
13917 (arguments
13918 (list #:tests? #f ;XXX: freezes or timeout
13919 #:test-backend #~'nose))
13920 (native-inputs
13921 (list ;; python-pynose
13922 python-setuptools))
13923 (propagated-inputs
13924 (list python-cherrypy
13925 python-cloudpickle
13926 python-psutil
13927 python-drmaa
13928 python-pyzmq))
13929 (home-page "https://github.com/pygridtools/gridmap")
13930 (synopsis "Create jobs on a cluster directly from Python")
13931 (description
13932 "Gridmap is a Python package to allow you to easily create jobs on the
13933cluster directly from Python. You can directly map Python functions onto the
13934cluster without needing to write any wrapper code yourself.")
13935 (license license:gpl3+)))
13936
13937(define-public python-honcho
13938 (package
13939 (name "python-honcho")
13940 (version "2.0.0")
13941 (source
13942 (origin
13943 (method git-fetch)
13944 (uri (git-reference
13945 (url "https://github.com/nickstenning/honcho")
13946 (commit (string-append "v" version))))
13947 (file-name (git-file-name name version))
13948 (sha256
13949 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
13950 (build-system pyproject-build-system)
13951 (arguments
13952 ;; Tests below fail with the error
13953 ;; ValueError: The 'honcho.export.xxx' package was not installed
13954 ;; in a way that PackageLoader understands.
13955 ;; Probably safe because it's testing for different init systems.
13956 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
13957 "--ignore" "tests/test_export_runit.py"
13958 "--ignore" "tests/test_export_supervisord.py"
13959 "--ignore" "tests/test_export_systemd.py"
13960 "--ignore" "tests/test_export_upstart.py")))
13961 (native-inputs
13962 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
13963 (propagated-inputs
13964 (list python-colorama))
13965 (home-page "https://github.com/nickstenning/honcho")
13966 (synopsis "Manage Procfile-based applications")
13967 (description
13968 "A Procfile is a file which describes how to run an application
13969consisting of several processes. honcho starts all listed processes.
13970The output of all running processes is collected by honcho and
13971displayed.")
13972 (license license:expat)))
13973
13974(define-public python-hsluv
13975 (package
13976 (name "python-hsluv")
13977 (version "5.0.4")
13978 (source
13979 (origin
13980 (method url-fetch)
13981 (uri (pypi-uri "hsluv" version))
13982 (sha256
13983 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
13984 (build-system pyproject-build-system)
13985 (native-inputs
13986 (list python-pytest python-setuptools))
13987 (home-page "https://www.hsluv.org")
13988 (synopsis "Human-friendly HSL colour space implemented in Python")
13989 (description
13990 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
13991@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
13992component that allows you to span all the available chroma as a neat
13993percentage.")
13994 (license license:expat)))
13995
13996(define-public python-pebble
13997 (package
13998 (name "python-pebble")
13999 (version "5.1.3")
14000 (source
14001 (origin
14002 (method git-fetch)
14003 (uri (git-reference
14004 (url "https://github.com/noxdafox/pebble")
14005 (commit version)))
14006 (file-name (git-file-name name version))
14007 (sha256
14008 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
14009 (build-system pyproject-build-system)
14010 (native-inputs (list python-pytest python-setuptools))
14011 (home-page "https://github.com/noxdafox/pebble")
14012 (synopsis "Threading and multiprocessing for Python")
14013 (description
14014 "Pebble aims to help manage threads and processes in an easier way. It
14015wraps Python's standard library threading and multiprocessing objects.")
14016 (license license:lgpl3+)))
14017
14018(define-public python-pexpect
14019 (package
14020 (name "python-pexpect")
14021 (version "4.9.0")
14022 (source
14023 (origin
14024 (method url-fetch)
14025 (uri (pypi-uri "pexpect" version))
14026 (sha256
14027 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
14028 (build-system pyproject-build-system)
14029 (arguments
14030 (list
14031 #:test-flags
14032 #~(list "-k" (string-join
14033 (list
14034 ;; Disable failing test, see
14035 ;; <https://github.com/pexpect/pexpect/issues/568>.
14036 "not test_bash"
14037 ;; Fails with attempt to find OpenSSL.
14038 "test_large_stdout_stream"
14039 ;; Tests fail while trying to find
14040 ;; tmp-pexpect-xxxxxxxxxxxx directories.
14041 "test_run_uses_env"
14042 "test_run_uses_env_path"
14043 "test_run_uses_env_path_over_path"
14044 "test_spawn_uses_env"
14045 ;; Fails with assertion error: assert 0 == 500
14046 "test_before_across_chunks"
14047 ;; Bash is enough for tests.
14048 "test_zsh")
14049 " and not "))
14050 #:phases
14051 #~(modify-phases %standard-phases
14052 (add-before 'check 'prepare-tests
14053 (lambda _
14054 (substitute* (find-files "tests")
14055 (("/bin/bash") (which "bash"))
14056 (("/bin/echo") (which "echo"))
14057 (("/bin/ls") (which "ls"))
14058 (("/bin/which") (which "which"))
14059 ;; Many tests try to use the /bin directory which is not
14060 ;; present in the build environment. Use one that's non-empty
14061 ;; and unlikely to change.
14062 (("/bin'") "/dev'")))))))
14063 (native-inputs
14064 (list bash ;full Bash for 'test_replwrap.py'
14065 man-db
14066 python-pytest
14067 python-setuptools
14068 python-wheel
14069 which))
14070 (propagated-inputs
14071 (list python-ptyprocess))
14072 (home-page "https://pexpect.readthedocs.org/")
14073 (synopsis "Controlling interactive console applications")
14074 (description
14075 "Pexpect is a pure Python module for spawning child applications;
14076controlling them; and responding to expected patterns in their output. Pexpect
14077works like Don Libes’ Expect. Pexpect allows your script to spawn a child
14078application and control it as if a human were typing commands.")
14079 (license license:isc)))
14080
14081(define-public python-sexpdata
14082 (package
14083 (name "python-sexpdata")
14084 (version "1.0.2")
14085 (source
14086 (origin
14087 (method url-fetch)
14088 (uri (pypi-uri "sexpdata" version))
14089 (sha256
14090 (base32
14091 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
14092 (build-system pyproject-build-system)
14093 (arguments
14094 (list #:tests? #f)) ; no tests
14095 (native-inputs (list python-setuptools python-wheel))
14096 (home-page "https://github.com/jd-boyd/sexpdata")
14097 (synopsis "S-expression parser for Python")
14098 (description
14099 "Sexpdata is an S-expression parser/serializer. It has load and dump
14100functions like pickle, json or PyYAML module.")
14101 (license license:bsd-3)))
14102
14103(define-public python-pathable
14104 (package
14105 (name "python-pathable")
14106 (version "0.4.3")
14107 (source
14108 (origin
14109 (method url-fetch)
14110 (uri (pypi-uri "pathable" version))
14111 (sha256
14112 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
14113 (build-system pyproject-build-system)
14114 (arguments (list #:tests? #false)) ;there are none
14115 (native-inputs (list python-poetry-core))
14116 (home-page "https://github.com/p1c2u/pathable")
14117 (synopsis "Object-oriented paths")
14118 (description "With this package you can traverse resources like paths and
14119access resources on demand with separate accessor layer.")
14120 (license license:asl2.0)))
14121
14122(define-public python-importlib-resources
14123 (package
14124 (name "python-importlib-resources")
14125 (version "6.5.2")
14126 (source (origin
14127 (method url-fetch)
14128 (uri (pypi-uri "importlib_resources" version))
14129 (sha256
14130 (base32
14131 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
14132 (build-system pyproject-build-system)
14133 (native-inputs
14134 (list python-jaraco-test
14135 python-jaraco-collections
14136 python-pytest
14137 python-setuptools
14138 python-setuptools-scm
14139 python-zipp))
14140 (home-page "https://importlib-resources.readthedocs.io/")
14141 (synopsis "Read resources from Python packages")
14142 (description
14143 "@code{importlib_resources} is a backport of Python 3's standard library
14144@code{importlib.resources} module for Python 2.7, and Python 3.")
14145 (license license:asl2.0)))
14146
14147(define-public python-importlib-metadata
14148 (package
14149 (name "python-importlib-metadata")
14150 (version "8.7.0")
14151 (source
14152 (origin
14153 (method url-fetch)
14154 (uri (pypi-uri "importlib_metadata" version))
14155 (sha256
14156 (base32
14157 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
14158 (build-system pyproject-build-system)
14159 (arguments
14160 (list #:test-flags #~(list "tests")))
14161 (native-inputs
14162 (list python-jaraco-test
14163 python-packaging-bootstrap
14164 python-pyfakefs
14165 python-pytest-bootstrap
14166 python-setuptools
14167 python-setuptools-scm))
14168 (propagated-inputs
14169 (list python-zipp))
14170 (home-page "https://importlib-metadata.readthedocs.io/")
14171 (synopsis "Read metadata from Python packages")
14172 (description
14173 "@code{importlib_metadata} is a library which provides an API for
14174accessing an installed Python package's metadata, such as its entry points or
14175its top-level name. This functionality intends to replace most uses of
14176@code{pkg_resources} entry point API and metadata API. Along with
14177@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
14178need to use the older and less efficient @code{pkg_resources} package.")
14179 (license license:asl2.0)))
14180
14181(define-public python-importlib-metadata-argparse-version
14182 (package
14183 (name "python-importlib-metadata-argparse-version")
14184 (version "2.0.1")
14185 (home-page
14186 "https://github.com/mondeja/importlib-metadata-argparse-version")
14187 (source
14188 (origin
14189 (method git-fetch)
14190 (uri (git-reference
14191 (url home-page)
14192 (commit (string-append "v" version))))
14193 (file-name (git-file-name name version))
14194 (sha256
14195 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
14196 (build-system pyproject-build-system)
14197 (native-inputs (list python-pytest python-hatchling))
14198 (synopsis "Get Python package version more efficiently")
14199 (description
14200 "This package provides an @code{argparse} action to define CLI version
14201with a delayed call to @code{importlib.metadata}, avoiding to load this module
14202when not needed.")
14203 (license license:bsd-3)))
14204
14205(define-public python-importmagic
14206 (package
14207 (name "python-importmagic")
14208 (version "0.1.7")
14209 (source
14210 (origin
14211 (method git-fetch)
14212 (uri (git-reference
14213 (url "https://github.com/alecthomas/importmagic")
14214 (commit version)))
14215 (file-name (git-file-name name version))
14216 (sha256
14217 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
14218 (build-system pyproject-build-system)
14219 (native-inputs (list python-pytest python-setuptools))
14220 (home-page "https://github.com/alecthomas/importmagic")
14221 (synopsis "Library for adding, removing and managing Python imports")
14222 (description
14223 "Importmagic is a Python library for automatically managing imports by
14224finding unresolved symbols in Python code and their corresponding imports.")
14225 (license license:bsd-3)))
14226
14227(define-public python-inotify-simple
14228 (package
14229 (name "python-inotify-simple")
14230 (version "1.3.5")
14231 (source
14232 (origin
14233 (method git-fetch)
14234 (uri (git-reference
14235 (url "https://github.com/chrisjbillington/inotify_simple")
14236 (commit version)))
14237 (file-name (git-file-name name version))
14238 (sha256
14239 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
14240 (build-system pyproject-build-system)
14241 (arguments
14242 (list
14243 #:test-backend #~'custom
14244 #:test-flags #~(list "example.py")))
14245 (native-inputs (list python-setuptools))
14246 (home-page "https://github.com/chrisjbillington/inotify_simple")
14247 (synopsis "Simple wrapper around inotify library")
14248 (description
14249 "@code{inotify-simple} is a simple wrapper around inotify library.")
14250 (license license:bsd-3)))
14251
14252(define-public python-interface-meta
14253 (package
14254 (name "python-interface-meta")
14255 (version "1.3.0")
14256 (source
14257 (origin
14258 (method url-fetch)
14259 (uri (pypi-uri "interface_meta" version))
14260 (sha256
14261 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
14262 (build-system pyproject-build-system)
14263 (native-inputs (list python-poetry-core python-pytest))
14264 (home-page "https://github.com/matthewwardrop/interface_meta")
14265 (synopsis
14266 "API for enforced method signatures and consistent documentation")
14267 (description
14268 "This package provides a convenient way to expose an extensible API with
14269enforced method signatures and consistent documentation.")
14270 (license license:expat)))
14271
14272(define-public python-jaraco-packaging
14273 (package
14274 (name "python-jaraco-packaging")
14275 (version "9.4.0") ;the latest version compatible with [email protected]
14276 (source
14277 (origin
14278 (method url-fetch)
14279 (uri (pypi-uri "jaraco.packaging" version))
14280 (sha256
14281 (base32
14282 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
14283 (build-system pyproject-build-system)
14284 (arguments
14285 (list #:tests? #f)) ;no tests in PyPI archive
14286 (native-inputs
14287 (list python-setuptools
14288 python-setuptools-scm))
14289 (propagated-inputs
14290 (list python-pypa-build
14291 python-virtualenv
14292 python-domdf-python-tools
14293 python-jaraco-context
14294 python-sphinx))
14295 (home-page "https://github.com/jaraco/jaraco.packaging")
14296 (synopsis "Tools to supplement packaging Python releases")
14297 (description
14298 "This package provides various tools to supplement packaging Python
14299releases.")
14300 (license license:expat)))
14301
14302(define-public python-jaraco-vcs
14303 (package
14304 (name "python-jaraco-vcs")
14305 (version "2.4.1")
14306 (source
14307 (origin
14308 (method git-fetch)
14309 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
14310 (commit (string-append "v" version))))
14311 (file-name (git-file-name name version))
14312 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
14313 (build-system pyproject-build-system)
14314 (arguments
14315 (list
14316 #:test-flags
14317 ;; Ignore doctests.
14318 #~(list "--ignore-glob=jaraco/vcs/*.py")))
14319 (propagated-inputs (list python-jaraco-classes
14320 python-jaraco-path
14321 python-jaraco-versioning
14322 python-more-itertools
14323 python-packaging
14324 python-dateutil
14325 python-tempora))
14326 (native-inputs (list python-pygments
14327 python-pytest
14328 python-pytest-home
14329 python-setuptools
14330 python-setuptools-scm))
14331 (home-page "https://github.com/jaraco/jaraco.vcs")
14332 (synopsis "Utilities for working with VCS repositories")
14333 (description
14334 "This package provides facilities for working with VCS repositories in
14335Python.")
14336 (license license:expat)))
14337
14338(define-public python-jaraco-versioning
14339 (package
14340 (name "python-jaraco-versioning")
14341 (version "1.1.0")
14342 (source
14343 (origin
14344 (method git-fetch)
14345 (uri (git-reference
14346 (url "https://github.com/jaraco/jaraco.versioning")
14347 (commit (string-append "v" version))))
14348 (file-name (git-file-name name version))
14349 (sha256
14350 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
14351 (build-system pyproject-build-system)
14352 (propagated-inputs (list python-packaging))
14353 (native-inputs
14354 (list python-pytest python-setuptools python-setuptools-scm))
14355 (home-page "https://github.com/jaraco/jaraco.versioning")
14356 (synopsis "Version manipulation utils")
14357 (description
14358 "This package builds upon @code{python-packaging} to provide more
14359sophisticated version manipulation.")
14360 (license license:expat)))
14361
14362(define-public python-pypytools
14363 (package
14364 (name "python-pypytools")
14365 (version "0.6.2")
14366 (source
14367 (origin
14368 (method git-fetch)
14369 (uri (git-reference
14370 (url "https://github.com/antocuni/pypytools/")
14371 (commit version)))
14372 (file-name (git-file-name name version))
14373 (sha256
14374 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
14375 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
14376 (build-system pyproject-build-system)
14377 (arguments
14378 (list
14379 ;; These tests are using deprecated py.code module.
14380 #:test-flags
14381 #~(list
14382 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
14383 "--deselect=pypytools/testing/test_codegen.py::test_def_"
14384 "--deselect=pypytools/testing/test_codegen.py::test_compile"
14385 "--ignore=pypytools/testing/test_unroll.py"
14386 ;; clone_func returns an object of the wrong type.
14387 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
14388 (native-inputs
14389 (list python-freezegun
14390 python-numpy
14391 python-pytest
14392 python-setuptools))
14393 (propagated-inputs (list python-py))
14394 (home-page "https://github.com/antocuni/pypytools/")
14395 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
14396 (description
14397 "This package provides a collection of useful tools to use PyPy-specific
14398features, with CPython fallbacks.")
14399 (license license:x11)))
14400
14401(define-public python-simplegeneric
14402 (package
14403 (name "python-simplegeneric")
14404 (version "0.8.1")
14405 (source
14406 (origin
14407 (method url-fetch)
14408 (uri (pypi-uri "simplegeneric" version ".zip"))
14409 (sha256
14410 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
14411 (build-system pyproject-build-system)
14412 (arguments
14413 (list
14414 #:test-backend #~'custom
14415 #:test-flags #~(list "-m" "simplegeneric")))
14416 (native-inputs
14417 (list unzip python-setuptools))
14418 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
14419 (synopsis "Python module for simple generic functions")
14420 (description
14421 "The simplegeneric module lets you define simple single-dispatch generic
14422functions, akin to Python’s built-in generic functions like @code{len()},
14423@code{iter()} and so on. However, instead of using specially-named methods,
14424these generic functions use simple lookup tables, akin to those used by
14425e.g. @code{pickle.dump()} and other generic functions found in the Python
14426standard library.")
14427 (license license:zpl2.1)))
14428
14429(define-public python-ipython-genutils
14430 ;; TODO: This package is retired, check if can be removed, see description.
14431 (package
14432 (name "python-ipython-genutils")
14433 (version "0.1.0")
14434 (source
14435 (origin
14436 (method url-fetch)
14437 (uri (pypi-uri "ipython_genutils" version))
14438 (sha256
14439 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
14440 (build-system pyproject-build-system)
14441 (arguments `(#:tests? #f)) ; no tests
14442 (native-inputs
14443 (list python-setuptools))
14444 (home-page "https://ipython.org")
14445 (synopsis "Vestigial utilities from IPython")
14446 (description
14447 "This package provides retired utilities from IPython. No packages
14448outside IPython/Jupyter should depend on it.
14449
14450This package shouldn't exist. It contains some common utilities shared by
14451Jupyter and IPython projects during The Big Split. As soon as possible, those
14452packages will remove their dependency on this, and this package will go
14453away.")
14454 (license license:bsd-3)))
14455
14456;;; Variant used to break a cycle with python-ipykernel.
14457(define-public python-ipyparallel-bootstrap
14458 (hidden-package
14459 (package
14460 (name "python-ipyparallel-bootstrap")
14461 (version "9.0.1")
14462 (source
14463 (origin
14464 (method url-fetch)
14465 (uri (pypi-uri "ipyparallel" version))
14466 (sha256
14467 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
14468 (build-system pyproject-build-system)
14469 (arguments
14470 (list
14471 #:tests? #f
14472 #:phases #~(modify-phases %standard-phases
14473 ;; The python-ipykernel is normally propagated but is
14474 ;; removed from this package to break the cycle.
14475 (delete 'sanity-check))))
14476 (native-inputs
14477 (list python-hatchling))
14478 (propagated-inputs
14479 (list python-dateutil
14480 python-decorator
14481 python-entrypoints
14482 python-ipython
14483 ;; python-ipykernel is omitted here to break a cycle.
14484 python-jupyter-client-bootstrap
14485 python-psutil
14486 python-pyzmq
14487 python-tornado
14488 python-tqdm
14489 python-traitlets))
14490 (home-page "https://ipython.org/")
14491 (synopsis "Interactive Parallel Computing with IPython")
14492 (description
14493 "@code{ipyparallel} is a Python package and collection of CLI scripts
14494for controlling clusters for Jupyter. @code{ipyparallel} contains the
14495following CLI scripts:
14496@enumerate
14497@item ipcluster - start/stop a cluster
14498@item ipcontroller - start a scheduler
14499@item ipengine - start an engine
14500@end enumerate")
14501 (license license:bsd-3))))
14502
14503(define-public python-ipyparallel
14504 (package
14505 (inherit python-ipyparallel-bootstrap)
14506 (name "python-ipyparallel")
14507 (arguments
14508 (list #:test-flags #~(list "--pyargs" "ipyparallel")))
14509 (native-inputs
14510 (modify-inputs (package-native-inputs python-ipyparallel-bootstrap)
14511 (append python-ipython
14512 python-pytest
14513 python-pytest-asyncio
14514 python-pytest-tornado
14515 python-testpath)))
14516 (propagated-inputs
14517 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
14518 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
14519 (append python-ipykernel)))
14520 (properties (alist-delete 'hidden? (package-properties
14521 python-ipyparallel-bootstrap)))))
14522
14523;; TODO: Package python-jupysql which is the maintained fork of this one.
14524(define-public python-ipython-sql
14525 (package
14526 (name "python-ipython-sql")
14527 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
14528 (revision . "0")))
14529 (version (git-version "0.5.0"
14530 (assoc-ref properties 'revision)
14531 (assoc-ref properties 'commit)))
14532 (source
14533 (origin
14534 (method git-fetch)
14535 (uri (git-reference
14536 (url "https://github.com/catherinedevlin/ipython-sql")
14537 (commit (assoc-ref properties 'commit))))
14538 (file-name (git-file-name name version))
14539 (sha256
14540 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
14541 (build-system pyproject-build-system)
14542 (arguments
14543 (list #:tests? #f ;Fail because of prettytable.
14544 #:phases
14545 #~(modify-phases %standard-phases
14546 (replace 'check
14547 (lambda* (#:key tests? #:allow-other-keys)
14548 (setenv "HOME" (getcwd))
14549 (if tests?
14550 (invoke "ipython" "-c"
14551 "import pytest; pytest.main(['.'])")
14552 (format #t "test suite not run.~%")))))))
14553 (native-inputs (list python-pytest python-setuptools))
14554 (propagated-inputs
14555 (list python-ipython
14556 python-ipython-genutils
14557 python-prettytable
14558 python-sqlalchemy-2
14559 python-sqlparse))
14560 (home-page "https://github.com/catherinedevlin/ipython-sql")
14561 (synopsis "RDBMS access via IPython")
14562 (description "This library connects to a database, using SQLAlchemy URL
14563connect strings, then issue SQL commands within IPython or IPython Notebook.")
14564 (license license:expat)))
14565
14566(define-public python-optree
14567 (package
14568 (name "python-optree")
14569 (version "0.14.0")
14570 (source
14571 (origin
14572 (method git-fetch)
14573 (uri (git-reference
14574 (url "https://github.com/metaopt/optree")
14575 (commit (string-append "v" version))))
14576 (file-name (git-file-name name version))
14577 (sha256
14578 (base32
14579 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
14580 (build-system pyproject-build-system)
14581 (arguments
14582 (list
14583 #:test-flags
14584 ;; These tests fails due to a circular import
14585 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
14586 " and not test_import_no_warnings"))))
14587 (propagated-inputs (list python-typing-extensions))
14588 (native-inputs
14589 (list python-pytest
14590 python-setuptools
14591 python-wheel
14592 cmake-minimal
14593 pybind11-2))
14594 (home-page "https://github.com/metaopt/optree")
14595 (synopsis "Optimized PyTree Utilities")
14596 (description "This package contains operations on PyTrees (a tree made of
14597container data structures in Python).")
14598 (license license:asl2.0)))
14599
14600(define-public python-backcall
14601 (package
14602 (name "python-backcall")
14603 (version "0.2.0")
14604 (source
14605 (origin
14606 (method git-fetch)
14607 (uri (git-reference
14608 (url "https://github.com/takluyver/backcall/")
14609 (commit version)))
14610 (file-name (git-file-name name version))
14611 (sha256
14612 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
14613 (build-system pyproject-build-system)
14614 (native-inputs (list python-flit-core python-pytest))
14615 (home-page "https://github.com/takluyver/backcall/")
14616 (synopsis "Specifications for callback functions passed in to an API")
14617 (description
14618 "If your code lets other people supply callback functions, it's important
14619to specify the function signature you expect, and check that functions support
14620that. Adding extra parameters later would break other peoples code unless
14621you're careful. The @code{backcall} package provides a way of specifying the
14622callback signature using a prototype function.")
14623 (license license:bsd-3)))
14624
14625(define-public python-pubmed-parser
14626 (package
14627 (name "python-pubmed-parser")
14628 (version "0.5.1")
14629 (source (origin
14630 (method git-fetch)
14631 (uri (git-reference
14632 (url "https://github.com/titipata/pubmed_parser")
14633 (commit version)))
14634 (file-name (git-file-name name version))
14635 (sha256
14636 (base32
14637 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
14638 (build-system pyproject-build-system)
14639 (arguments (list #:tests? #f)) ;; Tests require internet
14640 (native-inputs
14641 (list python-setuptools))
14642 (propagated-inputs
14643 (list python-lxml
14644 python-numpy
14645 python-requests
14646 python-six ;hard dependency
14647 python-unidecode))
14648 (home-page "https://titipata.github.io/pubmed_parser/")
14649 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
14650 (description
14651 "This package provides a Python parser for Pubmed Open-Access Subset and
14652MEDLINE XML repository.")
14653 (license license:expat)))
14654
14655(define-public python-pure-eval
14656 (package
14657 (name "python-pure-eval")
14658 (version "0.2.3")
14659 (source
14660 (origin
14661 (method url-fetch)
14662 (uri (pypi-uri "pure_eval" version))
14663 (sha256
14664 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
14665 (build-system pyproject-build-system)
14666 (native-inputs
14667 (list python-pytest
14668 python-setuptools
14669 python-setuptools-scm
14670 python-wheel))
14671 (home-page "https://github.com/alexmojaki/pure_eval")
14672 (synopsis "Python library to evaluate abstract syntax tree nodes")
14673 (description "The @code{pure_eval} Python library can safely evaluate
14674abstract syntax tree (AST) nodes without side effects.")
14675 (license license:expat)))
14676
14677(define-public python-puremagic
14678 (package
14679 (name "python-puremagic")
14680 (version "1.28")
14681 (source
14682 (origin
14683 (method git-fetch) ;no tests in PyPI archive
14684 (uri (git-reference
14685 (url "https://github.com/cdgriffith/puremagic")
14686 (commit version)))
14687 (file-name (git-file-name name version))
14688 (sha256
14689 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
14690 (build-system pyproject-build-system)
14691 (native-inputs
14692 (list python-pytest python-setuptools python-wheel))
14693 (home-page "https://github.com/cdgriffith/puremagic")
14694 (synopsis "Pure Python implementation of magic file detection")
14695 (description
14696 "This package implements a functionality that will identify a file based
14697off it's magic numbers.")
14698 (license license:expat)))
14699
14700(define-public python-ast-decompiler
14701 (package
14702 (name "python-ast-decompiler")
14703 (version "0.7.0")
14704 (source
14705 (origin
14706 (method url-fetch)
14707 (uri (pypi-uri "ast_decompiler" version))
14708 (sha256
14709 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
14710 ;; We need to manually create an __init__.py file under the tests/
14711 ;; directory, since it is not included in the distributed
14712 ;; version. (See:
14713 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
14714 (modules '((guix build utils)))
14715 (snippet '(call-with-output-file "tests/__init__.py"
14716 (const #t)))))
14717 (build-system pyproject-build-system)
14718 (native-inputs (list python-flit-core python-pytest))
14719 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
14720 (synopsis
14721 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
14722 (description
14723 "This library provides functionality to decompile @acronym{AST, Abstract
14724Syntax Tree} objects, as generated by the standard library @code{ast} module,
14725to Python code.")
14726 (license license:asl2.0)))
14727
14728(define-public python-asttokens
14729 (package
14730 (name "python-asttokens")
14731 (version "3.0.0")
14732 (source
14733 (origin
14734 (method url-fetch)
14735 (uri (pypi-uri "asttokens" version))
14736 (sha256
14737 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
14738 (build-system pyproject-build-system)
14739 (native-inputs
14740 (list python-astroid
14741 python-pytest
14742 python-setuptools
14743 python-setuptools-scm
14744 python-wheel))
14745 (home-page "https://github.com/gristlabs/asttokens")
14746 (synopsis "Python library to annotate abstract syntax trees")
14747 (description "The @code{asttokens} module annotates Python abstract syntax
14748trees (ASTs) with the positions of tokens and text in the source code that
14749generated them. It makes it possible for tools that work with logical AST
14750nodes to find the particular text that resulted in those nodes, for example
14751for automated refactoring or highlighting.")
14752 (license license:asl2.0)))
14753
14754(define-public python-littleutils
14755 (package
14756 (name "python-littleutils")
14757 (version "0.2.4")
14758 (source
14759 (origin
14760 (method url-fetch)
14761 (uri (pypi-uri "littleutils" version))
14762 (sha256
14763 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
14764 (build-system pyproject-build-system)
14765 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
14766 (native-inputs
14767 (list python-setuptools
14768 python-setuptools-scm
14769 python-wheel))
14770 (home-page "https://github.com/alexmojaki/littleutils")
14771 (synopsis "Python utility function collection")
14772 (description "@code{littleutils} is a small collection of Python utility
14773functions, useful in the context of writing unit tests among other uses.")
14774 (license license:expat)))
14775
14776(define-public python-ipython
14777 (package
14778 (name "python-ipython")
14779 (version "9.8.0")
14780 (source
14781 (origin
14782 (method git-fetch)
14783 (uri (git-reference
14784 (url "https://github.com/ipython/ipython")
14785 (commit version)))
14786 (file-name (git-file-name name version))
14787 (sha256
14788 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
14789 (build-system pyproject-build-system)
14790 (arguments
14791 (list
14792 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
14793 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
14794 #:test-backend #~'custom
14795 ;; XXX: It's a workaround to fix the error with module import
14796 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
14797 ;; <https://codeberg.org/guix/guix/issues/2108>.
14798 #:test-flags
14799 #~(list "-m" "pytest" "-vv"
14800 "-k" (string-join
14801 ;; These need git.
14802 (list "not test_json_getsysinfo"
14803 "IPython.utils.sysinfo.sys_info"
14804 ;; Failed: DID NOT RAISE
14805 "test_timeit_raise_on_interrupt"
14806 "test_script_raise_on_interrupt"
14807 "test_time_raise_on_interrupt")
14808 " and not "))
14809 #:phases
14810 #~(modify-phases %standard-phases
14811 (add-before 'check 'pre-check
14812 (lambda _
14813 (setenv "HOME" "/tmp"))))))
14814 (propagated-inputs
14815 (list python-decorator
14816 python-ipython-pygments-lexers
14817 python-jedi
14818 python-matplotlib-inline
14819 python-pexpect
14820 python-prompt-toolkit
14821 python-pygments
14822 python-stack-data
14823 python-traitlets
14824 python-typing-extensions))
14825 (native-inputs
14826 (list python-pytest
14827 python-pytest-asyncio
14828 python-setuptools
14829 python-testpath
14830 ;; [extra]
14831 ;; python-curio ;deprecated
14832 ;; python-ipykernel ;cycles
14833 ;; python-jupyter-ai ;not packaged
14834 python-matplotlib
14835 ;; python-nbclient ;cycles
14836 python-nbformat
14837 python-numpy
14838 python-pandas
14839 python-trio))
14840 (home-page "https://ipython.org")
14841 (synopsis "IPython is a tool for interactive computing in Python")
14842 (description
14843 "IPython provides a rich architecture for interactive computing with:
14844Powerful interactive shells, a browser-based notebook, support for interactive
14845data visualization, embeddable interpreters and tools for parallel
14846computing.")
14847 (properties '((cpe-name . "ipython")))
14848 (license license:bsd-3)))
14849
14850(define-public python-ipython-documentation
14851 (package
14852 (inherit python-ipython)
14853 (name "python-ipython-documentation")
14854 (version (package-version python-ipython))
14855 (arguments
14856 (list
14857 #:phases
14858 #~(modify-phases %standard-phases
14859 (add-after 'unpack 'set-pythonpath
14860 (lambda _
14861 ;; Ensure this fixed (via the
14862 ;; "python-ipython-documentation-chars.patch" patch) copy of
14863 ;; IPython gets used.
14864 (setenv "PYTHONPATH" (string-append (getcwd)))))
14865 (delete 'build)
14866 (delete 'check)
14867 (replace 'install
14868 (lambda* (#:key outputs #:allow-other-keys)
14869 (let* ((data (string-append #$output "/share"))
14870 (doc (string-append data "/doc/" #$name "-" #$version))
14871 (html (string-append doc "/html"))
14872 (info (string-append data "/info")))
14873 (invoke "make" "-C" "docs" "info" "html"
14874 (string-append "SPHINXOPTS=-j"
14875 (number->string (parallel-job-count))))
14876 (install-file "COPYING.rst" doc)
14877 (copy-recursively "examples" (string-append doc "/examples"))
14878 ;; Install HTML documentation.
14879 (copy-recursively "docs/build/html" html)
14880 ;; Likewise for the info manual.
14881 (install-file "docs/build/texinfo/ipython.info" info)
14882 (symlink (string-append html "/_images")
14883 (string-append info "/ipython-figures"))))))))
14884 (native-inputs
14885 (list graphviz
14886 python-docrepr
14887 python-ipykernel
14888 python-sphinx
14889 python-sphinx-rtd-theme
14890 python-sphinx-toml
14891 texinfo))))
14892
14893;; A bare minimal package, mainly to use in tests and reduce closure
14894;; size. Tests are left out in the main package to slim down native-inputs.
14895(define-public python-ipython-minimal
14896 (package/inherit python-ipython
14897 (name "python-ipython-minimal")
14898 (arguments
14899 (list #:tests? #f))
14900 (native-inputs
14901 (list python-setuptools))))
14902
14903(define-public python-ipython-pygments-lexers
14904 (package
14905 (name "python-ipython-pygments-lexers")
14906 (version "1.1.1")
14907 (source
14908 (origin
14909 (method git-fetch)
14910 (uri (git-reference
14911 (url "https://github.com/ipython/ipython-pygments-lexers/")
14912 (commit version)))
14913 (file-name (git-file-name name version))
14914 (sha256
14915 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
14916 (build-system pyproject-build-system)
14917 (propagated-inputs (list python-pygments))
14918 (native-inputs (list python-flit-core python-pytest))
14919 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
14920 (synopsis "Plugin for IPython code sessions")
14921 (description
14922 "This package defines a variety of Pygments lexers for highlighting IPython
14923code.")
14924 (license license:bsd-3)))
14925
14926(define-public python-pydbus
14927 (package
14928 (name "python-pydbus")
14929 (version "0.6.0")
14930 (source
14931 (origin
14932 (method url-fetch)
14933 (uri (pypi-uri "pydbus" version))
14934 (sha256
14935 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
14936 (build-system pyproject-build-system)
14937 (arguments
14938 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
14939 #:phases
14940 #~(modify-phases %standard-phases
14941 (add-after 'unpack 'fix-comparability-with-pygobject
14942 (lambda _
14943 (substitute* "pydbus/_inspect3.py"
14944 (("getargspec")
14945 "getfullargspec")))))))
14946 (native-inputs
14947 (list python-setuptools
14948 python-wheel))
14949 (propagated-inputs
14950 (list python-pygobject))
14951 (home-page "https://github.com/LEW21/pydbus")
14952 (synopsis "Pythonic D-Bus library")
14953 (description
14954 "Pydbus provides a pythonic interface to the D-Bus message bus system.
14955Pydbus can be used to access remote objects and also for object publication.
14956It is based on PyGI, the Python GObject Introspection bindings, which is the
14957recommended way to use GLib from Python.")
14958 (license license:lgpl2.1+)))
14959
14960(define-public python-dbus-1.2
14961 (package
14962 (name "python-dbus")
14963 (version "1.2.18")
14964 (source
14965 (origin
14966 (method url-fetch)
14967 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
14968 "dbus-python-" version ".tar.gz"))
14969 (sha256
14970 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
14971 (build-system gnu-build-system)
14972 (native-inputs
14973 (list pkg-config))
14974 (inputs
14975 `(("python" ,python-wrapper)
14976 ("dbus-glib" ,dbus-glib)))
14977 (synopsis "Python bindings for D-bus")
14978 (description "python-dbus provides bindings for libdbus, the reference
14979implementation of D-Bus.")
14980 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
14981 (properties `((python2-variant . ,(delay python2-dbus))))
14982 (license license:expat)))
14983
14984(define-public python-notify2
14985 (package
14986 (name "python-notify2")
14987 (version "0.3.1")
14988 (source
14989 (origin
14990 (method url-fetch)
14991 (uri (pypi-uri "notify2" version))
14992 (sha256
14993 (base32
14994 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
14995 (build-system pyproject-build-system)
14996 (arguments (list #:tests? #f)) ; tests depend on system state
14997 (native-inputs (list python-setuptools))
14998 (propagated-inputs (list python-dbus-1.2))
14999 (home-page "https://bitbucket.org/takluyver/pynotify2")
15000 (synopsis "Python interface to D-Bus notifications")
15001 (description
15002 "Pynotify2 provides a Python interface for sending D-Bus notifications.
15003It is a reimplementation of pynotify in pure Python, and an alternative to
15004the GObject Introspection bindings to libnotify for non-GTK applications.")
15005 (license (list license:bsd-2
15006 license:lgpl2.1+))))
15007
15008;; beautifulsoup4 has a totally different namespace than 3.x,
15009;; and pypi seems to put it under its own name, so I guess we should too
15010(define-public python-beautifulsoup4
15011 (package
15012 (name "python-beautifulsoup4")
15013 (version "4.14.3")
15014 (source
15015 (origin
15016 (method url-fetch)
15017 (uri (pypi-uri "beautifulsoup4" version))
15018 (sha256
15019 (base32
15020 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
15021 (build-system pyproject-build-system)
15022 (native-inputs
15023 (list python-hatchling
15024 python-pytest))
15025 (propagated-inputs
15026 (list python-soupsieve
15027 python-typing-extensions
15028 ;; [optional]
15029 python-cchardet
15030 python-chardet
15031 python-charset-normalizer
15032 python-html5lib
15033 python-lxml))
15034 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
15035 (synopsis "Python screen-scraping library")
15036 (description
15037 "Beautiful Soup is a Python library designed for rapidly setting up
15038screen-scraping projects. It offers Pythonic idioms for navigating,
15039searching, and modifying a parse tree, providing a toolkit for
15040dissecting a document and extracting what you need. It automatically
15041converts incoming documents to Unicode and outgoing documents to UTF-8.")
15042 (license license:expat)))
15043
15044(define-public python-beautifulsoup4-bootstrap
15045 (hidden-package
15046 (package/inherit python-beautifulsoup4
15047 (arguments
15048 (list #:tests? #f))
15049 (native-inputs
15050 (list python-hatchling))
15051 (propagated-inputs '()))))
15052
15053(define-public python-soupsieve
15054 (package
15055 (name "python-soupsieve")
15056 (version "2.7")
15057 (source
15058 (origin
15059 (method url-fetch)
15060 (uri (pypi-uri "soupsieve" version))
15061 (sha256
15062 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
15063 (build-system pyproject-build-system)
15064 (native-inputs
15065 (list python-beautifulsoup4-bootstrap
15066 python-hatchling
15067 python-pytest))
15068 (home-page "https://github.com/facelessuser/soupsieve")
15069 (synopsis "CSS selector library")
15070 (description
15071 "Soup Sieve is a CSS selector library designed to be used with Beautiful
15072Soup 4. It aims to provide selecting, matching, and filtering using modern
15073CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
15074specifications up through the latest CSS level 4 drafts and beyond (though
15075some are not yet implemented).")
15076 (license license:expat)))
15077
15078
15079(define-public python-netifaces
15080 (package
15081 (name "python-netifaces")
15082 (version "0.11.0")
15083 (source
15084 (origin
15085 (method url-fetch)
15086 (uri (pypi-uri "netifaces" version))
15087 (sha256
15088 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
15089 (build-system pyproject-build-system)
15090 (arguments
15091 (list
15092 #:test-backend #~'custom
15093 #:test-flags #~(list "test.py")))
15094 (native-inputs (list python-setuptools))
15095 (home-page "https://github.com/al45tair/netifaces")
15096 (synopsis "Python module for portable network interface information")
15097 (description
15098 "Netifaces is a Python module providing information on network
15099interfaces in an easy and portable manner.")
15100 (license license:expat)))
15101
15102(define-public python-networkx
15103 (package
15104 (name "python-networkx")
15105 (version "3.4.2")
15106 (source
15107 (origin
15108 (method url-fetch)
15109 (uri (pypi-uri "networkx" version))
15110 (sha256
15111 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
15112 (build-system pyproject-build-system)
15113 (arguments
15114 (list
15115 #:test-flags
15116 #~(list "--numprocesses" (number->string (parallel-job-count)))))
15117 (native-inputs
15118 (list python-pytest
15119 python-pytest-xdist
15120 python-setuptools
15121 python-wheel))
15122 (propagated-inputs
15123 (list python-decorator))
15124 (home-page "https://networkx.github.io/")
15125 (synopsis "Python module for creating and manipulating graphs and networks")
15126 (description
15127 "NetworkX is a Python package for the creation, manipulation, and study
15128of the structure, dynamics, and functions of complex networks.")
15129 (license license:bsd-3)))
15130
15131(define-public python-datrie
15132 (package
15133 (name "python-datrie")
15134 (version "0.8.3")
15135 (source
15136 (origin
15137 (method git-fetch)
15138 (uri (git-reference
15139 (url "https://github.com/kmike/datrie")
15140 (commit version)))
15141 (file-name (git-file-name name version))
15142 (sha256
15143 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
15144 (build-system pyproject-build-system)
15145 (arguments
15146 (list
15147 #:phases
15148 #~(modify-phases %standard-phases
15149 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
15150 (lambda* (#:key inputs #:allow-other-keys)
15151 (let* ((headers (search-input-directory inputs
15152 "include/datrie"))
15153 (base (dirname (dirname headers))))
15154 (symlink headers "libdatrie/datrie")
15155 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
15156 (add-before 'build 'relax-gcc-14-strictness
15157 (lambda _
15158 (setenv "CFLAGS"
15159 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
15160 (native-inputs
15161 (list python-cython python-hypothesis python-pytest python-setuptools))
15162 (inputs (list libdatrie))
15163 (home-page "https://github.com/kmike/datrie")
15164 (synopsis "Fast, efficiently stored trie for Python")
15165 (description
15166 "This package provides a fast, efficiently stored trie implementation for
15167Python.")
15168 (license license:lgpl2.1+)))
15169
15170(define-public python-amply
15171 (package
15172 (name "python-amply")
15173 (version "0.1.6")
15174 (source
15175 (origin
15176 (method url-fetch)
15177 (uri (pypi-uri "amply" version))
15178 (sha256
15179 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
15180 (build-system pyproject-build-system)
15181 (native-inputs
15182 (list python-pytest
15183 python-setuptools
15184 python-setuptools-scm
15185 python-wheel))
15186 (propagated-inputs
15187 (list python-docutils
15188 python-pyparsing))
15189 (home-page "https://github.com/willu47/amply")
15190 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
15191 (description
15192 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
15193structures.")
15194 (license license:epl1.0)))
15195
15196(define-public python-pulp
15197 ;; When updating, check snakemake@N builds still fine, see:
15198 ;; <https://codeberg.org/guix/guix/issues/4782>.
15199 (package
15200 (name "python-pulp")
15201 (version "2.4")
15202 (source
15203 (origin
15204 (method url-fetch)
15205 (uri (pypi-uri "PuLP" version))
15206 (sha256
15207 (base32
15208 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
15209 (build-system pyproject-build-system)
15210 (arguments
15211 ;; TODO: They need a special setup, see:
15212 ;; <https://codeberg.org/guix/guix/pulls/4908>.
15213 (list #:tests? #f))
15214 (native-inputs
15215 (list python-setuptools))
15216 (propagated-inputs
15217 (list python-amply))
15218 (home-page "https://github.com/coin-or/pulp")
15219 (synopsis "Linear Programming modeler")
15220 (description
15221 "PuLP is a Linear Programming modeler written in Python. PuLP can
15222generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
15223solve linear problems.")
15224 (license license:expat)))
15225
15226(define-public python-py-partiql-parser
15227 (package
15228 (name "python-py-partiql-parser")
15229 (version "0.6.3")
15230 (source
15231 (origin
15232 (method git-fetch)
15233 (uri (git-reference
15234 (url "https://github.com/getmoto/py-partiql-parser")
15235 (commit version)))
15236 (file-name (git-file-name name version))
15237 (sha256
15238 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
15239 (build-system pyproject-build-system)
15240 (native-inputs
15241 (list python-hatchling
15242 python-pytest))
15243 (home-page "https://pypi.org/project/py-partiql-parser/")
15244 (synopsis "Pure Python PartiQL Parser")
15245 (description
15246 "This package provides a tokenizer/parser/executor for the PartiQL
15247language, in Python.")
15248 (license license:expat)))
15249
15250(define-public python-py-tes
15251 (package
15252 (name "python-py-tes")
15253 (version "0.4.2")
15254 (source
15255 (origin
15256 (method git-fetch)
15257 (uri (git-reference
15258 (url "https://github.com/ohsu-comp-bio/py-tes")
15259 (commit version)))
15260 (file-name (git-file-name name version))
15261 (sha256
15262 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
15263 (build-system pyproject-build-system)
15264 (native-inputs
15265 (list python-pytest python-requests-mock python-setuptools))
15266 (propagated-inputs
15267 (list python-attrs python-dateutil python-future python-requests))
15268 (home-page "https://github.com/ohsu-comp-bio/py-tes")
15269 (synopsis "Library for communicating with the GA4GH Task Execution API")
15270 (description "This package provides a library for communicating with the
15271GA4GH Task Execution API.")
15272 (license license:expat)))
15273
15274(define-public python-altgraph
15275 (package
15276 (name "python-altgraph")
15277 (version "0.17.4")
15278 (source
15279 (origin
15280 (method url-fetch)
15281 (uri (pypi-uri "altgraph" version))
15282 (sha256
15283 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
15284 (build-system pyproject-build-system)
15285 (native-inputs (list python-pytest python-setuptools python-wheel))
15286 (home-page "https://altgraph.readthedocs.io")
15287 (synopsis "Python graph network package")
15288 (description
15289"This package provides tools for constructing graphs, BFS and DFS
15290traversals, topological sort, shortest paths, and more with graphviz
15291output.")
15292 (license license:expat)))
15293
15294(define-public python-pyqrcode
15295 (package
15296 (name "python-pyqrcode")
15297 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
15298 (revision . "0")))
15299 (version (git-version "1.2.1"
15300 (assoc-ref properties 'revision)
15301 (assoc-ref properties 'commit)))
15302 (source
15303 (origin
15304 (method git-fetch)
15305 (uri (git-reference
15306 (url "https://github.com/mnooner256/pyqrcode")
15307 (commit (assoc-ref properties 'commit))))
15308 (file-name (git-file-name name version))
15309 (sha256
15310 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
15311 (build-system pyproject-build-system)
15312 (arguments (list #:test-backend #~'nose))
15313 (native-inputs (list python-pynose python-pypng python-setuptools))
15314 (home-page "https://github.com/mnooner256/pyqrcode")
15315 (synopsis "QR code generator")
15316 (description
15317 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
15318PNG and terminal output.")
15319 (license license:bsd-3)))
15320
15321(define-public python-seaborn
15322 (package
15323 (name "python-seaborn")
15324 (version "0.13.2")
15325 (source (origin
15326 (method url-fetch)
15327 (uri (pypi-uri "seaborn" version))
15328 (sha256
15329 (base32
15330 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
15331 (build-system pyproject-build-system)
15332 (arguments
15333 (list
15334 ;; tests: 2354 passed, 16 skipped, 6 xfailed, 224 warnings
15335 #:test-flags
15336 #~(list "--numprocesses" (number->string (parallel-job-count))
15337 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
15338 ;; KeyError: 'labelleft'
15339 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
15340 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
15341 ;; AttributeError: module 'numpy' has no attribute
15342 ;; 'VisibleDeprecationWarning'
15343 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
15344 (native-inputs
15345 (list python-flit-core
15346 python-pytest-8
15347 python-pytest-xdist))
15348 (propagated-inputs
15349 (list python-matplotlib
15350 python-numpy
15351 python-pandas
15352 python-scipy
15353 python-statsmodels))
15354 (home-page "https://seaborn.pydata.org/")
15355 (synopsis "Statistical data visualization")
15356 (description
15357 "Seaborn is a library for making attractive and informative statistical
15358graphics in Python. It is built on top of matplotlib and tightly integrated
15359with the PyData stack, including support for numpy and pandas data structures
15360and statistical routines from scipy and statsmodels.")
15361 (license license:bsd-3)))
15362
15363(define-public python-session-info
15364 (package
15365 (name "python-session-info")
15366 (version "1.0.0")
15367 (source
15368 (origin
15369 (method git-fetch)
15370 (uri (git-reference
15371 (url "https://gitlab.com/joelostblom/session_info")
15372 (commit version)))
15373 (file-name (git-file-name name version))
15374 (sha256
15375 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
15376 (build-system pyproject-build-system)
15377 (arguments (list #:tests? #f)) ; No tests.
15378 (native-inputs (list python-setuptools))
15379 (propagated-inputs (list python-stdlib-list))
15380 (home-page "https://gitlab.com/joelostblom/session_info")
15381 (synopsis "Output version information for modules currently loaded")
15382 (description
15383 "This package outputs version information for modules loaded in the current
15384session, Python, and the OS.")
15385 (license license:bsd-3)))
15386
15387(define-public python-mpmath
15388 (package
15389 (name "python-mpmath")
15390 (version "1.3.0")
15391 (source
15392 (origin
15393 (method git-fetch)
15394 (uri (git-reference
15395 (url "https://github.com/fredrik-johansson/mpmath")
15396 (commit version)))
15397 (file-name (git-file-name name version))
15398 (sha256
15399 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
15400 (build-system pyproject-build-system)
15401 (native-inputs
15402 (list python-pytest
15403 python-setuptools
15404 python-setuptools-scm))
15405 (home-page "https://mpmath.org")
15406 (synopsis "Arbitrary-precision floating-point arithmetic in python")
15407 (description
15408 "@code{mpmath} can be used as an arbitrary-precision substitute for
15409Python's float/complex types and math/cmath modules, but also does much
15410more advanced mathematics.")
15411 (license license:bsd-3)))
15412
15413(define-public python-bigfloat
15414 (package
15415 (name "python-bigfloat")
15416 (version "0.4.0")
15417 (source
15418 (origin
15419 (method url-fetch)
15420 (uri (pypi-uri "bigfloat" version))
15421 (sha256
15422 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
15423 (snippet '(delete-file "mpfr.c"))))
15424 (build-system pyproject-build-system)
15425 (arguments
15426 (list
15427 #:test-flags
15428 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
15429 ;; but I don't know what to do about it.
15430 '(list "-k" "not test_hash")
15431 #:phases
15432 '(modify-phases %standard-phases
15433 (add-before 'build 'cythonize
15434 (lambda _ (invoke "cython" "mpfr.pyx"))))))
15435 (inputs (list mpfr))
15436 (native-inputs
15437 (list python-cython python-pytest python-setuptools python-wheel))
15438 (propagated-inputs
15439 (list python-six))
15440 (home-page "https://github.com/mdickinson/bigfloat")
15441 (synopsis "Arbitrary precision floating-point arithmetic for Python")
15442 (description
15443 "This package provides a Python interface to the MPFR library for
15444multiprecision arithmetic.")
15445 (license license:lgpl3+)))
15446
15447(define-public python-plac
15448 (package
15449 (name "python-plac")
15450 (version "1.3.5")
15451 (source
15452 (origin
15453 (method git-fetch)
15454 (uri (git-reference
15455 (url "https://github.com/ialbert/plac")
15456 (commit (string-append "v" version))))
15457 (file-name (git-file-name name version))
15458 (sha256
15459 (base32 "1n0cbil1snbn0diw8zjm7qs77zpbgmf2k76mc2jknhk1hbnksyak"))))
15460 (build-system pyproject-build-system)
15461 (arguments
15462 (list
15463 #:phases
15464 #~(modify-phases %standard-phases
15465 (add-after 'unpack 'fix-tkinter
15466 (lambda _
15467 (substitute* "plac_tk.py"
15468 (("from Tkinter import Tk")
15469 "from tkinter import Tk")
15470 (("from ScrolledText import ScrolledText")
15471 "from tkinter.scrolledtext import ScrolledText")))))))
15472 (native-inputs
15473 (list (list python "tk") python-pytest python-setuptools))
15474 (home-page "https://github.com/ialbert/plac")
15475 (synopsis "Command line arguments parser")
15476 (description
15477 "This package can generate command line parameters from function
15478signatures.")
15479 (license license:bsd-3)))
15480
15481(define-public python-q
15482 (package
15483 (name "python-q")
15484 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
15485 (revision . "0")))
15486 (version (git-version "2.7"
15487 (assoc-ref properties 'revision)
15488 (assoc-ref properties 'commit)))
15489 (source
15490 (origin
15491 (method git-fetch)
15492 (uri (git-reference
15493 (url "https://github.com/zestyping/q")
15494 (commit (assoc-ref properties 'commit))))
15495 (file-name (git-file-name name version))
15496 (sha256
15497 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
15498 (build-system pyproject-build-system)
15499 (arguments
15500 (list
15501 ;; Deduced from the makefile.
15502 #:test-backend #~'custom
15503 #:test-flags #~(list "test/test_basic.py")
15504 #:phases
15505 #~(modify-phases %standard-phases
15506 (add-before 'check 'configure-tests
15507 (lambda* (#:key tests? #:allow-other-keys)
15508 (when tests?
15509 (setenv "TMPDIR" "/tmp")))))))
15510 (native-inputs (list python-setuptools))
15511 (home-page "https://github.com/zestyping/q")
15512 (synopsis "Quick-and-dirty debugging output for tired programmers")
15513 (description
15514 "q is a Python module for \"print\" style of debugging Python code. It
15515provides convenient short API for print out of values, tracebacks, and
15516falling into the Python interpreter.")
15517 (license license:asl2.0)))
15518
15519(define-public python-qnorm
15520 (package
15521 (name "python-qnorm")
15522 (version "0.9.0")
15523 (source
15524 (origin
15525 (method git-fetch)
15526 (uri (git-reference
15527 (url "https://github.com/Maarten-vd-Sande/qnorm")
15528 (commit (string-append "v" version))))
15529 (file-name (git-file-name name version))
15530 (sha256
15531 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
15532 (build-system pyproject-build-system)
15533 (propagated-inputs
15534 (list python-numba python-numpy python-pandas
15535 ;; XXX: pandas optional dependencies.
15536 python-tables python-pyarrow python-fastparquet))
15537 (native-inputs (list python-setuptools))
15538 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
15539 (synopsis "Quantile normalization")
15540 (description
15541 "This tool implements quantile normalization. It properly resolves rank
15542ties, which is important when ties happen frequently, such as when working
15543with discrete numbers (integers) in count tables. This implementation should
15544be relatively fast, and can use multiple cores to sort the columns and
15545tie-resolvement is accelerated by numba.")
15546 (license license:expat)))
15547
15548(define-public python-quantlaw
15549 (package
15550 (name "python-quantlaw")
15551 (version "0.0.7")
15552 (source
15553 (origin
15554 (method git-fetch)
15555 (uri (git-reference
15556 (url "https://github.com/Quantlaw/quantlaw")
15557 (commit (string-append "v" version))))
15558 (file-name (git-file-name name version))
15559 (sha256
15560 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
15561 (build-system pyproject-build-system)
15562 (arguments
15563 (list
15564 #:test-flags
15565 #~(list "-k"
15566 ;; test expects network access
15567 "not test_load_statue_names")
15568 #:phases
15569 #~(modify-phases %standard-phases
15570 (add-after 'unpack 'fix-pytest-config
15571 (lambda _
15572 (substitute* "setup.cfg"
15573 (("--cov.*")
15574 "")))))))
15575 (native-inputs (list python-pytest python-setuptools))
15576 (propagated-inputs (list python-beautifulsoup4 python-networkx
15577 python-pandas python-regex python-requests))
15578 (home-page "https://quantlaw.readthedocs.io/")
15579 (synopsis "Coding utilities for quantitative legal studies")
15580 (description
15581 "This package provides coding utilities for quantitative legal studies.")
15582 (license license:bsd-3)))
15583
15584(define-public python-singledispatch
15585 (package
15586 (name "python-singledispatch")
15587 (version "4.0.0")
15588 (source
15589 (origin
15590 (method url-fetch)
15591 (uri (pypi-uri "singledispatch" version))
15592 (sha256
15593 (base32
15594 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
15595 (build-system pyproject-build-system)
15596 (native-inputs
15597 (list python-pytest
15598 python-setuptools
15599 python-six ; required for conversion, not at run-time
15600 python-wheel))
15601 (home-page
15602 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
15603 (synopsis "Backport of singledispatch feature from Python 3.4")
15604 (description
15605 "This library brings functools.singledispatch from Python 3.4 to Python
156062.6-3.3.")
15607 (license license:expat)))
15608
15609(define-public python-pyzmq
15610 (package
15611 (name "python-pyzmq")
15612 (version "27.0.1")
15613 (source
15614 (origin
15615 (method url-fetch)
15616 (uri (pypi-uri "pyzmq" version))
15617 (sha256
15618 (base32 "0jznvl7v41241pbbvwzjxi028mrfy1n5ymfjzy2783n29ch4kia5"))))
15619 (build-system pyproject-build-system)
15620 (arguments
15621 (list
15622 #:test-flags
15623 '(list "-m" "not flaky")
15624 #:phases
15625 #~(modify-phases %standard-phases
15626 (add-before 'build 'configure
15627 (lambda _
15628 ;; Our zeromq package is built with '--enable-drafts'; also
15629 ;; enable draft support for pyzmq so the draft test passes.
15630 (setenv "ZMQ_DRAFT_API" "1")
15631 ;; Make sure to prevent building bundled libzmq.
15632 (setenv "PYZMQ_NO_BUNDLE" "1")))
15633 (add-before 'check 'delete-source
15634 ;; To prevent loading it and skip build extensions one more times.
15635 (lambda _
15636 (delete-file-recursively "zmq"))))))
15637 (native-inputs
15638 (list cmake-minimal
15639 ;; python-cffi ; for PyPy
15640 python-cython
15641 python-packaging
15642 python-pytest
15643 python-pytest-asyncio
15644 python-scikit-build-core
15645 python-tornado))
15646 (inputs
15647 (list libsodium
15648 zeromq))
15649 (home-page "https://github.com/zeromq/pyzmq")
15650 (synopsis "Python bindings for 0MQ")
15651 (description
15652 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
15653 (license license:bsd-4)))
15654
15655(define-public python-immutabledict
15656 (package
15657 (name "python-immutabledict")
15658 (version "4.2.0")
15659 (source
15660 (origin
15661 (method url-fetch)
15662 (uri (pypi-uri "immutabledict" version))
15663 (sha256
15664 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
15665 (build-system pyproject-build-system)
15666 (native-inputs
15667 (list python-poetry-core python-pytest))
15668 (home-page "https://github.com/corenting/immutabledict")
15669 (synopsis "Immutable wrapper around dictionaries")
15670 (description
15671 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
15672It implements the complete mapping interface and can be used as a drop-in
15673replacement for dictionaries where immutability is desired.")
15674 (license license:expat)))
15675
15676(define-public python-emoji
15677 (package
15678 (name "python-emoji")
15679 (version "2.12.1")
15680 (source
15681 (origin
15682 (method url-fetch)
15683 (uri (pypi-uri "emoji" version))
15684 (sha256
15685 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
15686 (build-system pyproject-build-system)
15687 (propagated-inputs (list python-typing-extensions))
15688 (native-inputs
15689 (list python-pytest
15690 python-setuptools
15691 python-wheel))
15692 (home-page "https://github.com/carpedm20/emoji/")
15693 (synopsis "Emoji terminal output for Python")
15694 (description
15695 "This package provides Emoji terminal output for Python. The
15696entire set of Emoji codes as defined by the Unicode Consortium is supported in
15697addition to a bunch of aliases.")
15698 (license license:bsd-3)))
15699
15700;; TODO: Remove this package when upgrading python-gh-md-to-html to the
15701;; latest version. The latest gh-md-to-html does not build successfully from
15702;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
15703;; version 1.21.2 from failing.
15704;; https://issues.guix.gnu.org/72102
15705;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
15706(define-public python-emoji-for-gh-md-to-html
15707 (package
15708 (inherit python-emoji)
15709 (version "1.6.1")
15710 (source
15711 (origin
15712 (method url-fetch)
15713 (uri (pypi-uri "emoji" version))
15714 (sha256
15715 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
15716
15717(define-public python-sarge
15718 (package
15719 (name "python-sarge")
15720 (version "0.1.7.post1") ;post release only to correct errors in metadata
15721 (source
15722 (origin
15723 (method git-fetch)
15724 (uri (git-reference
15725 (url "https://github.com/vsajip/sarge")
15726 (commit version)))
15727 (file-name (git-file-name name version))
15728 (sha256
15729 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
15730 (build-system pyproject-build-system)
15731 (native-inputs (list python-pytest python-setuptools))
15732 (home-page "https://docs.red-dove.com/sarge/")
15733 (synopsis "Subprocess wrapper with command pipeline functionality")
15734 (description "@code{sarge} is a wrapper for subprocess which provides
15735command pipeline functionality.")
15736 (license license:bsd-3)))
15737
15738(define-public python-sentry-sdk
15739 (package
15740 (name "python-sentry-sdk")
15741 (version "1.5.5")
15742 (source
15743 (origin
15744 (method git-fetch) ; no tests in PyPI release
15745 (uri (git-reference
15746 (url "https://github.com/getsentry/sentry-python")
15747 (commit version)))
15748 (file-name (git-file-name name version))
15749 (sha256
15750 (base32 "0dygfaapvznpj2j7cfjb0vlwhsn5qa5kf0kq488xbhjg06n8rrc4"))))
15751 (build-system pyproject-build-system)
15752 (arguments
15753 (list
15754 #:test-flags
15755 ;; See <https://github.com/pytest-dev/pytest-forked/issues/88>.
15756 ;; AttributeError: module 'py' has no attribute 'process'
15757 '(list "--ignore=tests/integrations/django/test_basic.py"
15758 "--ignore=tests/utils/test_contextvars.py"
15759 ;; These try to use pip to install packages.
15760 "--ignore=tests/integrations/gcp/test_gcp.py"
15761 "-k"
15762 (string-append
15763 ;; This test requires extra dependencies.
15764 "not test_auto_enabling_integrations"
15765 ;; AttributeError: module 'py' has no attribute 'process'
15766 " and not test_threading"
15767 " and not test_transport"
15768 ;; Tests below require network.
15769 " and not test_crumb_capture"
15770 " and not test_crumb_capture_hint"
15771 " and not test_httplib_misuse"
15772 ;; Unclear assert error
15773 " and not test_auto_session_tracking_with_aggregates"
15774 ;; Fails with IndexError.
15775 " and not test_session_mode_defaults_to"
15776 "_request_mode_in_wsgi_handler"))
15777 #:phases
15778 '(modify-phases %standard-phases
15779 (add-before 'check 'fix-test
15780 ;; See https://github.com/getsentry/sentry-python/pull/2712
15781 (lambda _
15782 (substitute* "tests/__init__.py"
15783 (("import pytest")
15784 "import warnings")
15785 (("pytest.warns\\(None\\)")
15786 "warnings.catch_warnings(record=True)"))))
15787 (replace 'check
15788 (lambda* (#:key tests? test-flags #:allow-other-keys)
15789 (when tests?
15790 (apply invoke "python" "-m" "pytest" test-flags)))))))
15791 (native-inputs
15792 (list nss-certs-for-test
15793 python-django
15794 python-executing
15795 python-gevent
15796 python-jsonschema
15797 python-mock
15798 python-pyrsistent
15799 python-pytest
15800 python-pytest-cov
15801 python-pytest-django
15802 python-pytest-localserver
15803 python-setuptools
15804 python-werkzeug
15805 python-wheel))
15806 (propagated-inputs
15807 (list python-certifi python-urllib3))
15808 (home-page "https://github.com/getsentry/sentry-python")
15809 (synopsis "Python SDK for Sentry")
15810 (description "This package provides a Python SDK for the Sentry
15811application monitoring and error tracking software.")
15812 (license license:bsd-2)))
15813
15814(define-public python-pep440
15815 (package
15816 (name "python-pep440")
15817 (version "0.1.2")
15818 (source
15819 (origin
15820 (method url-fetch)
15821 (uri (pypi-uri "pep440" version))
15822 (sha256
15823 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
15824 (build-system pyproject-build-system)
15825 (arguments
15826 ;; This checks for "pep440" in the output, but we actually print
15827 ;; ".pep440-real" due to wrapping.
15828 (list #:test-flags '(list "-k" "not test_cli_help")))
15829 (propagated-inputs (list python-check-manifest python-mypy python-pytest
15830 python-pytest-console-scripts python-pytest-cov))
15831 (native-inputs (list python-flit-core))
15832 (home-page "https://pypi.org/project/pep440/")
15833 (synopsis "Utils to check whether versions number match PEP 440")
15834 (description
15835 "This package provides a simple package with utils to check whether
15836versions number match PEP 440.")
15837 (license license:expat)))
15838
15839(define-public python-pyproject-metadata
15840 (package
15841 (name "python-pyproject-metadata")
15842 (version "0.10.0")
15843 (source
15844 (origin
15845 (method git-fetch)
15846 (uri (git-reference
15847 (url "https://github.com/FFY00/python-pyproject-metadata")
15848 (commit version)))
15849 (file-name (git-file-name name version))
15850 (sha256
15851 (base32 "1vz2dx46ag42bqp81frd92pfnryfdry6112g6z5inrywqs8vymkw"))))
15852 (build-system pyproject-build-system)
15853 (arguments
15854 (list
15855 #:test-flags
15856 ;; Two tests fail because the error message slightly changed, so the
15857 ;; tests' regular expressions no longer match.
15858 '(list "--ignore=tests/test_standard_metadata.py")))
15859 (propagated-inputs (list python-packaging))
15860 (native-inputs
15861 (list python-flit-core python-pytest python-tomli))
15862 (home-page "https://github.com/FFY00/python-pyproject-metadata")
15863 (synopsis "Dataclass for PEP 621 metadata")
15864 (description "This project does not implement the parsing of
15865@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
15866data structure representing PEP 621 metadata (already parsed), it will
15867validate this input and generate a PEP 643-compliant metadata
15868file (e.g. @file{PKG-INFO}).")
15869 (license license:expat)))
15870
15871(define-public python-meson
15872 (package
15873 (name "python-meson")
15874 (version "0.19.0")
15875 (source
15876 (origin
15877 (method git-fetch)
15878 (uri (git-reference
15879 (url "https://github.com/mesonbuild/meson-python")
15880 (commit version)))
15881 (file-name (git-file-name name version))
15882 (sha256
15883 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
15884 (build-system pyproject-build-system)
15885 ;; tests: 124 passed, 16 skipped
15886 (native-inputs
15887 (list git-minimal
15888 patchelf
15889 python-pytest
15890 python-pytest-mock))
15891 (propagated-inputs
15892 (list meson
15893 ninja
15894 python-cython
15895 python-packaging
15896 python-pyproject-metadata))
15897 (home-page "https://github.com/mesonbuild/meson-python")
15898 (synopsis "Meson Python build backend (PEP 517)")
15899 (description "This package provides a PEP 517 build backend that makes
15900use of the Meson build system.")
15901 (license license:expat)))
15902
15903;; XXX: Deprecated on <2026-01-26>.
15904(define-deprecated/public-alias python-meson-python python-meson)
15905;;; Deprecated on 2026-03-02.
15906(define-deprecated-package meson-python python-meson)
15907
15908(define-public python-mccabe
15909 (package
15910 (name "python-mccabe")
15911 (version "0.7.0")
15912 (source
15913 (origin
15914 (method url-fetch)
15915 (uri (pypi-uri "mccabe" version))
15916 (sha256
15917 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
15918 (build-system pyproject-build-system)
15919 (arguments
15920 (list
15921 ;; Test fixtures are not released yet, see
15922 ;; <https://github.com/PyCQA/mccabe/issues/93>
15923 #:tests? #f))
15924 (native-inputs
15925 (list python-toml
15926 python-setuptools
15927 python-wheel))
15928 (home-page "https://github.com/PyCQA/mccabe")
15929 (synopsis "McCabe checker, plugin for flake8")
15930 (description
15931 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
15932complexity of Python source code.")
15933 (license license:expat)))
15934
15935(define-public python-autoflake8
15936 (package
15937 (name "python-autoflake8")
15938 (version "0.4.0")
15939 (source (origin
15940 (method git-fetch) ;for tests
15941 (uri (git-reference
15942 (url "https://github.com/fsouza/autoflake8")
15943 (commit (string-append "v" version))))
15944 (file-name (git-file-name name version))
15945 (sha256
15946 (base32
15947 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
15948 (build-system pyproject-build-system)
15949 (native-inputs
15950 (list python-aiofiles
15951 python-poetry-core
15952 python-pytest
15953 python-pytest-xdist))
15954 (propagated-inputs (list python-pyflakes))
15955 (home-page "https://github.com/fsouza/autoflake8")
15956 (synopsis "Automatically fix issues reported by flake8")
15957 (description "Tool to automatically fix some issues reported by
15958@command{flake8}.")
15959 (license license:expat)))
15960
15961(define-public python-flake8
15962 (package
15963 (name "python-flake8")
15964 (version "7.1.1")
15965 (source
15966 (origin
15967 (method git-fetch) ; no tests data in PyPi package
15968 (uri (git-reference
15969 (url "https://github.com/pycqa/flake8")
15970 (commit version)))
15971 (file-name (git-file-name name version))
15972 (sha256
15973 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
15974 (build-system pyproject-build-system)
15975 (native-inputs
15976 (list python-pytest
15977 python-setuptools
15978 python-wheel))
15979 (propagated-inputs
15980 (list python-mccabe
15981 python-pycodestyle
15982 python-pyflakes))
15983 (home-page "https://flake8.pycqa.org/en/latest/")
15984 (synopsis "The modular source code checker: pep8, pyflakes and co")
15985 (description
15986 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
15987 (license license:expat)))
15988
15989(define-public python-flake8-blind-except
15990 (package
15991 (name "python-flake8-blind-except")
15992 (version "0.2.1")
15993 (source
15994 (origin
15995 (method git-fetch)
15996 (uri (git-reference
15997 (url "https://github.com/elijahandrews/flake8-blind-except")
15998 (commit (string-append "v" version))))
15999 (file-name (git-file-name name version))
16000 (sha256
16001 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
16002 (build-system pyproject-build-system)
16003 (arguments (list #:tests? #f)) ;no tests
16004 (native-inputs (list python-setuptools))
16005 (propagated-inputs (list python-pycodestyle))
16006 (home-page "https://github.com/elijahandrews/flake8-blind-except")
16007 (synopsis "Check for blind @code{except:} statements")
16008 (description
16009 "This package provides a flake8 extension that checks for blind
16010@code{except:} statements.")
16011 (license license:expat)))
16012
16013(define-public python-flake8-bugbear
16014 (package
16015 (name "python-flake8-bugbear")
16016 (version "24.10.31")
16017 (source
16018 (origin
16019 (method url-fetch)
16020 (uri (pypi-uri "flake8_bugbear" version))
16021 (sha256
16022 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
16023 (build-system pyproject-build-system)
16024 (native-inputs
16025 (list python-hypothesmith
16026 python-pytest
16027 python-setuptools
16028 python-wheel))
16029 (propagated-inputs
16030 (list python-attrs
16031 python-flake8))
16032 (home-page "https://github.com/PyCQA/flake8-bugbear")
16033 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
16034 (description
16035 "This package contains a plugin for Flake8 finding likely bugs and design
16036problems in your program. It contains warnings that don't belong in pyflakes
16037and pycodestyle.")
16038 (license license:expat)))
16039
16040(define-public python-flake8-continuation
16041 (package
16042 (name "python-flake8-continuation")
16043 (version "1.0.5")
16044 (source
16045 (origin
16046 (method git-fetch)
16047 (uri (git-reference
16048 (url "https://github.com/planetlabs/flake8-continuation")
16049 (commit version)))
16050 (file-name (git-file-name name version))
16051 (sha256
16052 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
16053 (build-system pyproject-build-system)
16054 (arguments
16055 (list
16056 #:phases
16057 #~(modify-phases %standard-phases
16058 (add-after 'unpack 'remove-python-six-dependency
16059 (lambda _
16060 (substitute* "flake8_continuation.py"
16061 (("import six|six\\.moves\\.")
16062 ""))
16063 (substitute* "setup.py"
16064 ((", \"six\"")
16065 "")))))))
16066 (native-inputs (list python-pytest python-setuptools))
16067 (propagated-inputs (list python-flake8 python-pycodestyle))
16068 (home-page "https://github.com/planetlabs/flake8-continuation")
16069 (synopsis "Flake8 Line Continuation Plugin")
16070 (description
16071 "A Flake8 plugin that checks for the line continuation style to be in the
16072preferred method according to PEP-8, specifically:
16073@quotation
16074The preferred way of wrapping long lines is by using Python's implied line
16075continuation inside parentheses, brackets and braces. Long lines can be
16076broken over multiple lines by wrapping expressions in parentheses. These
16077should be used in preference to using a backslash for line continuation.
16078@end quotation")
16079 (license license:asl2.0)))
16080
16081(define-public python-flake8-debugger
16082 (package
16083 (name "python-flake8-debugger")
16084 (version "4.1.2")
16085 (source
16086 (origin
16087 (method git-fetch)
16088 (uri (git-reference
16089 (url "https://github.com/jbkahn/flake8-debugger")
16090 (commit version)))
16091 (file-name (git-file-name name version))
16092 (sha256
16093 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
16094 (build-system pyproject-build-system)
16095 (native-inputs (list python-poetry-core python-pytest python-setuptools))
16096 (propagated-inputs (list python-flake8 python-pycodestyle))
16097 (home-page "https://github.com/jbkahn/flake8-debugger")
16098 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
16099 (description
16100 "This package provides a Flake8 plugin that checks for @code{ipdb} and
16101@code{pdb} imports and set traces, as well as @code{from
16102IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
16103@code{InteractiveShellEmbed()()}.")
16104 (license license:expat)))
16105
16106(define-public python-flake8-implicit-str-concat
16107 (package
16108 (name "python-flake8-implicit-str-concat")
16109 (version "0.5.0")
16110 (source
16111 (origin
16112 (method url-fetch)
16113 (uri (pypi-uri "flake8_implicit_str_concat" version))
16114 (sha256
16115 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
16116 (build-system pyproject-build-system)
16117 (arguments
16118 (list
16119 #:tests? #f)) ; no tests in PiPY or git checkout
16120 (native-inputs
16121 (list python-hatchling))
16122 (propagated-inputs
16123 (list python-attrs
16124 python-more-itertools))
16125 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
16126 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
16127 (description
16128 "This is a plugin for the Python code checking tool Flake8 to encourage
16129correct string literal concatenation.
16130
16131It looks for style problems like implicitly concatenated string literals on
16132the same line (which can be introduced by the code formatting tool Black), or
16133unnecessary plus operators for explicit string literal concatenation.")
16134 (license license:expat)))
16135
16136(define-public python-flake8-print
16137 (package
16138 (name "python-flake8-print")
16139 (version "5.0.0")
16140 (source
16141 (origin
16142 (method url-fetch)
16143 (uri (pypi-uri "flake8-print" version))
16144 (sha256
16145 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
16146 (build-system pyproject-build-system)
16147 (arguments
16148 (list
16149 #:tests? #f)) ; no tests in PiPY or git checkout
16150 (native-inputs
16151 (list python-poetry-core))
16152 (propagated-inputs
16153 (list python-flake8
16154 python-pycodestyle))
16155 (home-page "https://github.com/jbkahn/flake8-print")
16156 (synopsis "Print statement checker plugin for Flake8")
16157 (description
16158 "This plugin for Flake8 checks for @code{print} statements in Python
16159files.")
16160 (license license:expat)))
16161
16162(define-public python-flake8-pyi
16163 (package
16164 (name "python-flake8-pyi")
16165 (version "24.9.0")
16166 (source
16167 (origin
16168 (method url-fetch)
16169 (uri (pypi-uri "flake8_pyi" version))
16170 (sha256
16171 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
16172 (build-system pyproject-build-system)
16173 (arguments
16174 (list
16175 #:phases
16176 #~(modify-phases %standard-phases
16177 (add-after 'unpack 'fix-pytest-config
16178 (lambda _
16179 ;; Prevent full threads utilization.
16180 (substitute* "pyproject.toml"
16181 (("-nauto") "")))))))
16182 (native-inputs
16183 (list python-hatchling
16184 python-pytest))
16185 (propagated-inputs
16186 (list python-attrs
16187 python-flake8
16188 python-pyflakes))
16189 (home-page "https://github.com/ambv/flake8-pyi")
16190 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
16191 (description
16192 "This package contains a plugin that provides specializations for type
16193hinting stub files, especially interesting for linting typeshed. It adds the
16194@file{.pyi} extension to the default value of the @code{--filename}
16195command-line argument to Flake8. This means stubs are linted by default with
16196this plugin enabled, without needing to explicitly list every file. It
16197modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
16198expressions after the entire file has been read. This enables support for
16199first-class forward references that stub files use.")
16200 (license license:expat)))
16201
16202(define-public python-flake8-quotes
16203 (package
16204 (name "python-flake8-quotes")
16205 (version "3.4.0")
16206 (source
16207 (origin
16208 (method url-fetch)
16209 (uri (pypi-uri "flake8-quotes" version))
16210 (sha256
16211 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
16212 (build-system pyproject-build-system)
16213 (native-inputs
16214 (list python-pytest
16215 python-setuptools
16216 python-wheel))
16217 (propagated-inputs
16218 (list python-flake8))
16219 (home-page "https://github.com/zheller/flake8-quotes/")
16220 (synopsis "Flake8 lint for quotes")
16221 (description "This package provides a Flake8 lint for quotes.")
16222 (license license:expat)))
16223
16224(define-public python-flake8-todo
16225 (package
16226 (name "python-flake8-todo")
16227 (version "0.7")
16228 (source
16229 (origin
16230 (method git-fetch)
16231 (uri (git-reference
16232 (url "https://github.com/schlamar/flake8-todo")
16233 (commit (string-append "v" version))))
16234 (file-name (git-file-name name version))
16235 (sha256
16236 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
16237 (build-system pyproject-build-system)
16238 (arguments (list #:tests? #f)) ; No tests.
16239 (native-inputs (list python-setuptools))
16240 (propagated-inputs (list python-pycodestyle))
16241 (home-page "https://github.com/schlamar/flake8-todo")
16242 (synopsis "TODO notes checker, plugin for flake8")
16243 (description
16244 "This package provides the @code{flake8-todo} Python module, a
16245TODO notes checker plugin for flake8.")
16246 (license license:expat)))
16247
16248(define-public python-flake8-isort
16249 (package
16250 (name "python-flake8-isort")
16251 (version "6.1.1")
16252 (source
16253 (origin
16254 (method url-fetch)
16255 (uri (pypi-uri "flake8_isort" version))
16256 (sha256
16257 (base32 "1cvh0d18scgq36gqa2vqbifjarln1r3axgq93lzc303ay0y2zy61"))))
16258 (build-system pyproject-build-system)
16259 (arguments
16260 (list
16261 #:tests? #f)) ; no tests in PiPY or git checkout
16262 (native-inputs
16263 (list python-hatchling))
16264 (propagated-inputs
16265 (list python-flake8
16266 python-isort))
16267 (home-page "https://github.com/gforcada/flake8-isort")
16268 (synopsis "Flake8 plugin integrating isort")
16269 (description
16270 "This package provides a flake8 plugin that integrates isort,
16271extending flake8 so that it can warn about badly sorted Python import
16272directives.")
16273 (license license:gpl2+)))
16274
16275(define-public python-autoflake
16276 (package
16277 (name "python-autoflake")
16278 (version "2.3.1")
16279 (source
16280 (origin
16281 (method url-fetch)
16282 (uri (pypi-uri "autoflake" version))
16283 (sha256
16284 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
16285 (build-system pyproject-build-system)
16286 (arguments
16287 (list
16288 #:phases
16289 #~(modify-phases %standard-phases
16290 (replace 'check
16291 (lambda _
16292 (invoke "python" "test_autoflake.py"))))))
16293 (native-inputs
16294 (list python-hatchling))
16295 (propagated-inputs
16296 (list python-pyflakes))
16297 (home-page "https://github.com/myint/autoflake")
16298 (synopsis "Removes unused imports and unused variables")
16299 (description
16300 "@code{autoflake} removes unused imports and unused variables from Python
16301code as reported by @code{pyflakes}.
16302
16303By default, it only removes unused imports for modules that are part of the
16304standard library. Removal of unused variables is also disabled by default.
16305It also removes useless @code{pass} statements.")
16306 (license license:expat)))
16307
16308(define-public python-mistune
16309 (package
16310 (name "python-mistune")
16311 (version "3.1.3")
16312 (source
16313 (origin
16314 (method url-fetch)
16315 (uri (pypi-uri "mistune" version))
16316 (sha256
16317 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
16318 (build-system pyproject-build-system)
16319 (native-inputs
16320 (list python-pytest
16321 python-setuptools
16322 python-wheel))
16323 (home-page "https://github.com/lepture/mistune")
16324 (synopsis "Markdown parser in pure Python")
16325 (description "This package provides a fast markdown parser in pure
16326Python.")
16327 (license license:bsd-3)))
16328
16329(define-public python-markdown
16330 (package
16331 (name "python-markdown")
16332 (version "3.10")
16333 (source
16334 (origin
16335 (method url-fetch)
16336 (uri (pypi-uri "markdown" version))
16337 (sha256
16338 (base32
16339 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
16340 (build-system pyproject-build-system)
16341 (native-inputs
16342 (list python-pyyaml
16343 python-setuptools))
16344 (home-page "https://python-markdown.github.io/")
16345 (synopsis "Python implementation of Markdown")
16346 (description
16347 "This package provides a Python implementation of John Gruber's
16348Markdown. The library features international input, various Markdown
16349extensions, and several HTML output formats. A command line wrapper
16350markdown_py is also provided to convert Markdown files to HTML.")
16351 (license license:bsd-3)))
16352
16353(define-public python-markdown2
16354 (package
16355 (name "python-markdown2")
16356 (version "2.5.3")
16357 (source
16358 (origin
16359 (method git-fetch) ; no tests data in PyPi package
16360 (uri (git-reference
16361 (url "https://github.com/trentm/python-markdown2")
16362 (commit version)))
16363 (file-name (git-file-name name version))
16364 (sha256
16365 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
16366 (build-system pyproject-build-system)
16367 (arguments
16368 (list
16369 #:test-backend #~'custom
16370 #:test-flags #~(list "test.py" "--" "-knownfailure")
16371 #:phases
16372 #~(modify-phases %standard-phases
16373 (add-before 'check 'pre-check
16374 (lambda _
16375 (chdir "test"))))))
16376 (native-inputs
16377 (list ;; python-pygments ;optinal, tests fail when added
16378 ;; python-wavedrom ;optinal, not packaged
16379 ;; python-latex2mathml ;optinal, not packaged
16380 python-setuptools))
16381 (home-page "https://github.com/trentm/python-markdown2")
16382 (synopsis "Fast and complete Python implementation of Markdown")
16383 (description
16384 "This package provides a fast and complete Python implementation of
16385Markdown. It was written to closely match the behaviour of the original
16386Perl-implemented Markdown.pl. It also comes with a number of
16387extensions (called @code{extras}) for things like syntax coloring, tables,
16388header-ids.")
16389 (license license:expat)))
16390
16391(define-public python-mdx-include
16392 (package
16393 (name "python-mdx-include")
16394 (version "1.4.2")
16395 (source
16396 (origin
16397 (method git-fetch)
16398 (uri (git-reference
16399 (url "https://github.com/neurobin/mdx_include")
16400 (commit (string-append "v" version))))
16401 (file-name (git-file-name name version))
16402 (sha256
16403 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
16404 (build-system pyproject-build-system)
16405 (arguments
16406 (list
16407 #:test-backend #~'unittest
16408 #:phases
16409 (let* ((django-hello-url "\
16410https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1641173951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
16412 (django-hello
16413 (origin
16414 (method url-fetch)
16415 (uri django-hello-url)
16416 (sha256 (base32 "\
1641713bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
16418 #~(modify-phases %standard-phases
16419 (add-before 'check 'disable-test-requiring-network
16420 (lambda _
16421 (substitute* "mdx_include/test/test.py"
16422 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
16423 (string-append pre "__off__test_" post "("))
16424 (((string-join (string-split #$django-hello-url #\.) "\\."))
16425 #+django-hello))))))))
16426 (native-inputs (list python-setuptools))
16427 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
16428 (home-page "https://github.com/neurobin/mdx_include")
16429 (synopsis "Python Markdown extension to include local or remote files")
16430 (description "Include extension for Python Markdown. It lets you include
16431local or remote (downloadable) files into your markdown at arbitrary
16432positions.
16433
16434This project is motivated by markdown-include and provides the same
16435functionalities with some extras.")
16436 (license license:bsd-3)))
16437
16438(define-public python-ptyprocess
16439 (package
16440 (name "python-ptyprocess")
16441 (version "0.7.0")
16442 (source
16443 (origin
16444 (method url-fetch)
16445 (uri (pypi-uri "ptyprocess" version))
16446 (sha256
16447 (base32
16448 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
16449 (build-system pyproject-build-system)
16450 (native-inputs
16451 (list python-flit-core
16452 python-pytest))
16453 (home-page "https://github.com/pexpect/ptyprocess")
16454 (synopsis "Run a subprocess in a pseudo terminal")
16455 (description
16456 "This package provides a Python library used to launch a subprocess in a
16457pseudo terminal (pty), and interact with both the process and its pty.")
16458 (license license:isc)))
16459
16460(define-public python-configshell-fb
16461 (package
16462 (name "python-configshell-fb")
16463 (version "1.1.30")
16464 (source
16465 (origin
16466 (method url-fetch)
16467 (uri (pypi-uri "configshell-fb" version))
16468 ;; XXX: Snippet below is required because on v1.1.30 the source code
16469 ;; has configshell_fb as softlink to configshell and guix
16470 ;; pyproject-build-system doesn't work with symlinks very well.
16471 ;;
16472 ;; This package is only used in spdk for now and it's crucial to keep
16473 ;; it locked on version and keep the snipped for spdk to build
16474 ;; successfully.
16475 (snippet #~(begin
16476 (use-modules (guix build utils))
16477 (delete-file "setup.py")
16478 (delete-file-recursively "configshell_fb")
16479 (rename-file "configshell" "configshell_fb")))
16480 (sha256
16481 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
16482 (build-system pyproject-build-system)
16483 (arguments
16484 (list #:tests? #f)) ;; this package has no tests
16485 (native-inputs
16486 (list python-setuptools
16487 python-six
16488 python-wheel))
16489 (propagated-inputs
16490 (list python-pyparsing))
16491 (home-page "https://github.com/open-iscsi/configshell-fb")
16492 (synopsis "Framework to implement simple but nice CLIs")
16493 (description
16494 "This package provides a framework to implement simple but nice CLIs.")
16495 (license license:asl2.0)))
16496
16497(define-public python-configupdater
16498 (package
16499 (name "python-configupdater")
16500 (version "3.2")
16501 (source
16502 (origin
16503 (method git-fetch)
16504 (uri (git-reference
16505 (url "https://github.com/pyscaffold/configupdater")
16506 (commit (string-append "v" version))))
16507 (file-name (git-file-name name version))
16508 (sha256
16509 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
16510 (build-system pyproject-build-system)
16511 (native-inputs
16512 (list python-pytest
16513 python-pytest-cov
16514 python-setuptools
16515 python-setuptools-scm))
16516 (home-page "https://github.com/pyscaffold/configupdater")
16517 (synopsis "Parser like ConfigParser but for updating configuration files")
16518 (description
16519 "ConfigUpdater is a Python library for updating INI configuration files
16520while preserving the original file's formatting, structure, and comments.
16521Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
16522targeted changes--keeping comments, section ordering, key-value pair
16523ordering, and original casing intact.")
16524 (license license:expat)))
16525
16526(define-public python-crccheck
16527 (package
16528 (name "python-crccheck")
16529 (version "1.3.0")
16530 (source
16531 (origin
16532 (method git-fetch) ; no tests in PyPI
16533 (uri (git-reference
16534 (url "https://github.com/MartinScharrer/crccheck")
16535 (commit (string-append "v" version))))
16536 (file-name (git-file-name name version))
16537 (sha256
16538 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
16539 (build-system pyproject-build-system)
16540 (native-inputs (list python-pytest python-setuptools python-wheel))
16541 (home-page "https://github.com/MartinScharrer/crccheck")
16542 (synopsis "Calculation library for CRCs and checksums")
16543 (description "@code{crccheck} is a calculation library for CRCs and
16544checksums. It implement more than a hundred checksum routines.")
16545 (license license:gpl3+)))
16546
16547(define-public python-crashtest
16548 (package
16549 (name "python-crashtest")
16550 (version "0.4.1")
16551 (source
16552 (origin
16553 (method git-fetch)
16554 (uri (git-reference
16555 (url "https://github.com/sdispater/crashtest")
16556 (commit version)))
16557 (file-name (git-file-name name version))
16558 (sha256
16559 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
16560 (build-system pyproject-build-system)
16561 (native-inputs (list python-poetry-core python-pytest))
16562 (home-page "https://github.com/sdispater/crashtest")
16563 (synopsis "Manage Python errors with ease")
16564 (description
16565 "Python library that makes exceptions handling and inspection easier.")
16566 (license license:expat)))
16567
16568(define-public python-pysendfile
16569 (package
16570 (name "python-pysendfile")
16571 (version "2.0.1")
16572 (source
16573 (origin
16574 (method git-fetch)
16575 (uri (git-reference
16576 (url "https://github.com/giampaolo/pysendfile")
16577 (commit (string-append "release-" version))))
16578 (file-name (git-file-name name version))
16579 (sha256
16580 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
16581 (build-system pyproject-build-system)
16582 (arguments
16583 (list
16584 #:phases
16585 #~(modify-phases %standard-phases
16586 (replace 'check
16587 (lambda* (#:key tests? #:allow-other-keys)
16588 (when tests?
16589 (setenv "HOME" "/tmp")
16590 (invoke "make" "test")))))))
16591 (native-inputs (list python-pytest python-setuptools))
16592 (home-page "https://github.com/giampaolo/pysendfile")
16593 (synopsis "Python interface to sendfile(2)")
16594 (description "The @code{pysendfile} Python library provides an interface to
16595the @code{sendfile(2)} system call.")
16596 (license license:expat)))
16597
16598(define-public python-pyftpdlib
16599 (package
16600 (name "python-pyftpdlib")
16601 (version "1.5.7")
16602 (source
16603 (origin
16604 (method url-fetch)
16605 (uri (pypi-uri "pyftpdlib" version))
16606 (sha256
16607 (base32 "0vk5gcx4svjrpm014ykwxmijqihgb4ha17kb3yphk0nv6x0wx8vy"))))
16608 (build-system pyproject-build-system)
16609 ;; Using Pytest instead of the Makefile causes the command line tests to
16610 ;; fail on unknown Pytest arguments.
16611 (arguments
16612 (list
16613 #:test-flags
16614 #~(list "-k" "not TestCommandLineParser"
16615 #$@(if (target-aarch64?)
16616 ;; TimeoutError: timed out
16617 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
16618 "::TestTimeouts::test_idle_data_timeout2"))
16619 '()))))
16620 (native-inputs
16621 (list python-psutil
16622 python-pytest
16623 python-setuptools
16624 python-wheel))
16625 (propagated-inputs
16626 (list python-pyopenssl
16627 python-pysendfile))
16628 (home-page "https://github.com/giampaolo/pyftpdlib/")
16629 (synopsis "Asynchronous and scalable Python FTP server library")
16630 (description "The Python FTP server library provides a high-level
16631interface to write efficient, scalable and asynchronous FTP servers with
16632Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
16633RFC-959} FTP server implementation available for Python, and has the following
16634traits:
16635@itemize
16636@item
16637It is lightweight, fast and scalable.
16638@item
16639It uses the @code{sendfile(2)} system call for uploads.
16640@item
16641It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
16642asynchronously.
16643@item
16644It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
16645IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
16646RFC-2640}) and MLSD/MLST commands (RFC-3659).
16647@item
16648It has a flexible system of @samp{authorizers} able to manage both
16649@samp{virtual} and @samp{real} users.
16650@end itemize")
16651 (license license:expat)))
16652
16653(define-public python-fs
16654 (package
16655 (name "python-fs")
16656 (version "2.4.16")
16657 (source
16658 (origin
16659 (method git-fetch)
16660 (uri (git-reference
16661 (url "https://github.com/PyFilesystem/pyfilesystem2/")
16662 (commit (string-append "v" version))))
16663 (file-name (git-file-name name version))
16664 (sha256
16665 (base32 "1wrkhsv57kv4jcadn7w330mgbjjsimgzfvicni8cka6y1a8chbjs"))))
16666 (build-system pyproject-build-system)
16667 (arguments
16668 (list
16669 ;; tests: 1995 passed, 21 skipped, 411 deselected, 14 warnings
16670 #:test-flags #~(list "-m" "not slow")
16671 #:tests? (and (not (%current-target-system))
16672 (->bool (this-package-native-input "python-pytest")))
16673 #:phases
16674 #~(modify-phases %standard-phases
16675 (add-before 'check 'pre-check
16676 (lambda _
16677 (setenv "HOME" "/tmp"))))))
16678 (native-inputs
16679 (append
16680 (list python-setuptools)
16681 ;; 'python-pyftpdlib' is needed for tests but it indirectly depends Rust,
16682 ;; which is currently unavailable on aarch64-linux. Remove all the test
16683 ;; dependencies in that case.
16684 (if (and (not (%current-target-system))
16685 (supported-package? python-pyftpdlib))
16686 (list python-mock
16687 python-parameterized
16688 python-pyftpdlib
16689 python-pytest)
16690 '())))
16691 (propagated-inputs
16692 (list python-appdirs
16693 python-pytz
16694 python-six)) ;still hard itegrated
16695 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
16696 (synopsis "File system abstraction layer for Python")
16697 (description
16698 "PyFilesystem's @code{FS} object is a file system abstraction sharing
16699similarities with Python's own @code{file} object for single files. It allows
16700opening all the files under a given directory recursively, as a single
16701@code{FS} object. This enables, for example, counting the combined number of
16702lines in the contained files easily.")
16703 (license license:expat)))
16704
16705;;; Tests are left out in the main package to avoid cycles.
16706;; XXX: When updating, solve comment in python-cu2qu.
16707(define-public python-fonttools-minimal
16708 (hidden-package
16709 (package
16710 (name "python-fonttools-minimal")
16711 (version "4.59.2")
16712 (source (origin
16713 (method url-fetch)
16714 (uri (pypi-uri "fonttools" version ".tar.gz"))
16715 (sha256
16716 (base32
16717 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
16718 (build-system pyproject-build-system)
16719 (native-inputs
16720 (list python-setuptools))
16721 (arguments '(#:tests? #f))
16722 (home-page "https://github.com/fonttools/fonttools")
16723 (synopsis "Tools to manipulate font files")
16724 (description
16725 "FontTools/TTX is a library to manipulate font files from Python. It
16726supports reading and writing of TrueType/OpenType fonts, reading and writing
16727of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
16728also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
16729from an XML-based format.")
16730 (license license:expat))))
16731
16732(define-public python-fonttools
16733 (let ((base python-fonttools-minimal))
16734 (package/inherit base
16735 (name "python-fonttools")
16736 (arguments
16737 (substitute-keyword-arguments (package-arguments base)
16738 ((#:tests? _ #f)
16739 (not (%current-target-system)))
16740 ((#:phases phases '%standard-phases)
16741 `(modify-phases ,phases
16742 (replace 'check
16743 (lambda* (#:key tests? #:allow-other-keys)
16744 (when tests?
16745 (invoke "pytest" "-vv"
16746 "-k"
16747 ;; XXX: These tests need data files that are not
16748 ;; shipped with the PyPI release.
16749 (format #f "not ~a"
16750 (string-join
16751 '("test_cli_vtp"
16752 "test_group_order"
16753 "test_read_fontdimens_mathsy"
16754 "test_read_fontdimens_mathex"
16755 "test_read_fontdimens_vanilla"
16756 "test_read_boundary_char"
16757 "test_reading_supplement_encoding"
16758 "fontTools.tfmLib"
16759 ;; The MtiTest tests fail for unknown
16760 ;; reasons (see:
16761 ;; https://github.com/fonttools/
16762 ;; fonttools/issues/3078)
16763 "MtiTest")
16764 " and not "))))))))))
16765 (native-inputs
16766 (modify-inputs (package-native-inputs base)
16767 (append python-pytest)))
16768 (propagated-inputs
16769 (list python-brotli
16770 python-fs
16771 python-lxml
16772 python-lz4
16773 python-scipy
16774 python-unicodedata2
16775 python-zopfli))
16776 (properties (alist-delete 'hidden? (package-properties base))))))
16777
16778(define-public python-ly
16779 (package
16780 (name "python-ly")
16781 (version "0.9.9")
16782 (source
16783 (origin
16784 (method git-fetch)
16785 (uri (git-reference
16786 (url "https://github.com/frescobaldi/python-ly")
16787 (commit (string-append "v" version))))
16788 (file-name (git-file-name name version))
16789 (sha256
16790 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
16791 (build-system pyproject-build-system)
16792 (arguments
16793 (list
16794 #:phases
16795 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
16796 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
16797 #~(modify-phases %standard-phases
16798 (add-after 'unpack 'inject-data
16799 (lambda _
16800 (substitute* "tests/musicxml.xsd"
16801 (((string-join (string-split #$namespace-url #\.) "\\."))
16802 #$(origin
16803 (method url-fetch)
16804 (uri namespace-url)
16805 (sha256 (base32 "\
168061j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
16807 (((string-join (string-split #$xlink-url #\.) "\\."))
16808 #$(origin
16809 (method url-fetch)
16810 (uri xlink-url)
16811 (sha256 (base32 "\
168120jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
16813 (native-inputs (list python-hatchling python-lxml python-pytest))
16814 (synopsis "Tool and library for manipulating LilyPond files")
16815 (description
16816 "This package provides a Python library to parse, manipulate or create
16817documents in LilyPond format. A command line program ly is also provided that
16818can be used to do various manipulations with LilyPond files.")
16819 (home-page "https://pypi.org/project/python-ly/")
16820 (license license:gpl2+)))
16821
16822(define-public python-appdirs
16823 (package
16824 (name "python-appdirs")
16825 (version "1.4.4")
16826 (source
16827 (origin
16828 (method url-fetch)
16829 (uri (pypi-uri "appdirs" version))
16830 (sha256
16831 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
16832 (build-system pyproject-build-system)
16833 (arguments (list #:test-backend #~'unittest))
16834 (native-inputs (list python-setuptools))
16835 (home-page "https://github.com/ActiveState/appdirs")
16836 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
16837 (description
16838 "This module provides a portable way of finding out where user data
16839should be stored on various operating systems.")
16840 (license license:expat)))
16841
16842(define-public python-google-pasta
16843 (package
16844 (name "python-google-pasta")
16845 (version "0.2.0")
16846 (source
16847 (origin
16848 (method url-fetch)
16849 (uri (pypi-uri "google-pasta" version))
16850 (sha256
16851 (base32 "0vm1r1jlaiagj0l9yf7j6zn9w3733dr2169911c0svgrr3gwiwn9"))))
16852 (build-system pyproject-build-system)
16853 (propagated-inputs (list python-six))
16854 (native-inputs (list python-pytest python-setuptools))
16855 (home-page "https://github.com/google/pasta")
16856 (synopsis "AST-based Python refactoring library")
16857 (description "This package provides \"pasta\", an AST-based Python
16858refactoring library.")
16859 (license license:asl2.0)))
16860
16861(define-public python-gorilla
16862 (package
16863 (name "python-gorilla")
16864 (version "0.3.0")
16865 (source
16866 (origin
16867 (method git-fetch)
16868 (uri (git-reference
16869 (url "https://github.com/christophercrouzet/gorilla")
16870 (commit (string-append "v" version))))
16871 (file-name (git-file-name name version))
16872 (sha256
16873 (base32 "0hm5ynswhz6i763s6cjlh8lv5ai0f3x17mjvlihqs8idlk4vbrn0"))))
16874 (build-system pyproject-build-system)
16875 (arguments (list #:test-backend #~'unittest))
16876 (native-inputs (list python-setuptools))
16877 (home-page "https://github.com/christophercrouzet/gorilla")
16878 (synopsis "Convenient monkey patching with Python")
16879 (description
16880 "Gorilla is a Python library that provides a convenient approach to
16881monkey patching. Monkey patching is the process of modifying module and
16882class attributes at runtime with the purpose of replacing or extending
16883third-party code.")
16884 (license license:expat)))
16885
16886(define-public python-llfuse
16887 (package
16888 (name "python-llfuse")
16889 (version "1.5.1")
16890 (source
16891 (origin
16892 (method git-fetch)
16893 (uri (git-reference
16894 (url "https://github.com/python-llfuse/python-llfuse")
16895 (commit (string-append "release-" version))))
16896 (file-name (git-file-name name version))
16897 (sha256
16898 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
16899 (build-system pyproject-build-system)
16900 (arguments
16901 (list
16902 #:test-flags
16903 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
16904 #:phases
16905 #~(modify-phases %standard-phases
16906 (add-before 'build 'build-cython
16907 (lambda _
16908 (invoke "python" "setup.py" "build_cython"))))))
16909 (inputs (list fuse-2 attr))
16910 (native-inputs
16911 (list pkg-config python-cython python-pytest python-setuptools))
16912 (synopsis "Python bindings for FUSE")
16913 (description
16914 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
16915 (home-page "https://github.com/python-llfuse/python-llfuse")
16916 (license license:lgpl2.0+)))
16917
16918(define-public python-msgpack
16919 (package
16920 (name "python-msgpack")
16921 (version "1.1.2")
16922 (source
16923 (origin
16924 (method url-fetch)
16925 (uri (pypi-uri "msgpack" version))
16926 (sha256
16927 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
16928 (build-system pyproject-build-system)
16929 (native-inputs
16930 (list python-pytest
16931 python-setuptools))
16932 (home-page "https://msgpack.org/")
16933 (synopsis "MessagePack (de)serializer")
16934 (description "MessagePack is a fast, compact binary serialization format,
16935suitable for similar data to JSON. This package provides CPython bindings for
16936reading and writing MessagePack data.")
16937 (license license:asl2.0)))
16938
16939(define-public python-msgpack-for-borg
16940 (hidden-package
16941 (package
16942 (inherit python-msgpack)
16943 (version "1.0.4")
16944 (source
16945 (origin
16946 (method url-fetch)
16947 (uri (pypi-uri "msgpack" version))
16948 (sha256
16949 (base32 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m")))))))
16950
16951(define-public python-openstep-plist
16952 (package
16953 (name "python-openstep-plist")
16954 (version "0.3.0")
16955 (source
16956 (origin
16957 (method git-fetch)
16958 (uri (git-reference
16959 (url "https://github.com/fonttools/openstep-plist")
16960 (commit (string-append "v" version))))
16961 (file-name (git-file-name name version))
16962 (sha256
16963 (base32 "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
16964 (build-system pyproject-build-system)
16965 (native-inputs (list python-cython-0 python-pytest python-setuptools-scm
16966 python-setuptools))
16967 (home-page "https://github.com/fonttools/openstep-plist")
16968 (synopsis "OpenStep plist parser and writer")
16969 (description
16970 "This package provides a parser for the \"old style\" OpenStep property
16971list format (also known as ASCII plist), written in Cython.")
16972 (license license:expat)))
16973
16974(define-public python-resolvelib
16975 (package
16976 (name "python-resolvelib")
16977 (version "1.1.0")
16978 (source
16979 (origin
16980 ;; Tests are missing from the PyPI release.
16981 (method git-fetch)
16982 (uri (git-reference
16983 (url "https://github.com/sarugaku/resolvelib")
16984 (commit version)))
16985 (file-name (git-file-name name version))
16986 (sha256
16987 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
16988 (build-system pyproject-build-system)
16989 (native-inputs
16990 (list python-packaging
16991 python-pytest
16992 python-setuptools
16993 python-wheel))
16994 (home-page "https://github.com/sarugaku/resolvelib")
16995 (synopsis "Abstract dependencies resolver")
16996 (description
16997 "The ResolveLib library provides a @code{Resolver} class that includes
16998dependency resolution logic.")
16999 (license license:isc)))
17000
17001;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
17002;; 2022. It is now read-only.
17003(define-public python-commonmark
17004 (package
17005 (name "python-commonmark")
17006 (version "0.9.1")
17007 (source
17008 (origin
17009 (method url-fetch)
17010 (uri (pypi-uri "commonmark" version))
17011 (sha256
17012 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
17013 (build-system pyproject-build-system)
17014 (native-inputs
17015 (list python-setuptools))
17016 (home-page "https://github.com/readthedocs/commonmark.py")
17017 (synopsis "Python parser for the CommonMark Markdown spec")
17018 (description
17019 "This module is a pure Python port of jgm's @code{commonmark.js}, a
17020Markdown parser and renderer for the CommonMark specification, using only
17021native modules.")
17022 (license license:bsd-3)))
17023
17024(define-public python-immutables
17025 (package
17026 (name "python-immutables")
17027 (version "0.21")
17028 (source
17029 (origin
17030 (method git-fetch)
17031 (uri (git-reference
17032 (url "https://github.com/MagicStack/immutables")
17033 (commit (string-append "v" version))))
17034 (file-name (git-file-name name version))
17035 (sha256
17036 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
17037 (build-system pyproject-build-system)
17038 (arguments
17039 (list #:phases #~(modify-phases %standard-phases
17040 (add-after 'unpack 'remove-mypy-dependency
17041 (lambda _
17042 (delete-file "tests/test_mypy.py")
17043 (delete-file "tests/conftest.py"))))))
17044 (native-inputs
17045 (list python-pytest python-setuptools python-wheel))
17046 (home-page "https://github.com/MagicStack/immutables")
17047 (synopsis "High-performance immutable mapping type for Python")
17048 (description
17049 "An immutable mapping type for Python. The underlying datastructure is a
17050Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
17051functional languages.")
17052 (license license:asl2.0)))
17053
17054(define-public python-prettytable
17055 (package
17056 (name "python-prettytable")
17057 (version "3.12.0")
17058 (source
17059 (origin
17060 (method url-fetch)
17061 (uri (pypi-uri "prettytable" version))
17062 (sha256
17063 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
17064 (build-system pyproject-build-system)
17065 (native-inputs
17066 (list python-hatchling
17067 python-hatch-vcs
17068 python-pytest
17069 python-pytest-cov
17070 python-pytest-lazy-fixtures
17071 python-setuptools-scm))
17072 (propagated-inputs
17073 (list python-wcwidth))
17074 (home-page "https://github.com/jazzband/prettytable")
17075 (synopsis "Display tabular data in an ASCII table format")
17076 (description
17077 "A library designed to represent tabular data in visually appealing ASCII
17078tables. PrettyTable allows for selection of which columns are to be printed,
17079independent alignment of columns (left or right justified or centred) and
17080printing of sub-tables by specifying a row range.")
17081 (license license:bsd-3)))
17082
17083(define-public python-rtf-tokenize
17084 (package
17085 (name "python-rtf-tokenize")
17086 (version "1.0.1")
17087 (source (origin
17088 (method url-fetch)
17089 (uri (pypi-uri "rtf_tokenize" version))
17090 (sha256
17091 (base32
17092 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
17093 (build-system pyproject-build-system)
17094 (native-inputs (list python-pytest python-setuptools python-wheel))
17095 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
17096 (synopsis "Simple RTF tokenizer")
17097 (description "This package is a simple RTF tokenizer.")
17098 (license license:gpl2+)))
17099
17100(define-public python-sniffio
17101 (package
17102 (name "python-sniffio")
17103 (version "1.3.1")
17104 (source
17105 (origin
17106 (method url-fetch)
17107 (uri (pypi-uri "sniffio" version))
17108 (sha256
17109 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
17110 (build-system pyproject-build-system)
17111 (arguments
17112 (list
17113 #:test-flags
17114 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
17115 (native-inputs
17116 (list python-pytest python-setuptools))
17117 (home-page "https://github.com/python-trio/sniffio")
17118 (synopsis "Detect which async library a program is running under")
17119 (description
17120 "This package detects which async library a program is running under. It
17121supports multiple async I/O packages, like Trio, and asyncio.")
17122 ;; Either license applies.
17123 (license (list license:expat license:asl2.0))))
17124
17125(define-public python-snuggs
17126 (package
17127 (name "python-snuggs")
17128 (version "1.4.7")
17129 (source (origin
17130 (method url-fetch)
17131 (uri (pypi-uri "snuggs" version))
17132 (sha256
17133 (base32
17134 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
17135 (build-system pyproject-build-system)
17136 (propagated-inputs (list python-numpy python-pyparsing))
17137 (native-inputs (list python-hypothesis python-pytest python-setuptools
17138 python-wheel))
17139 (home-page "https://github.com/mapbox/snuggs")
17140 (synopsis "Snuggs are S-expressions for Numpy")
17141 (description "Snuggs are S-expressions for Numpy.")
17142 (license license:expat)))
17143
17144(define-public python-geojson
17145 (package
17146 (name "python-geojson")
17147 (version "3.2.0")
17148 (source
17149 (origin
17150 (method url-fetch)
17151 (uri (pypi-uri "geojson" version))
17152 (sha256
17153 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
17154 (build-system pyproject-build-system)
17155 (native-inputs (list python-pytest python-setuptools))
17156 (home-page "https://github.com/jazzband/geojson")
17157 (synopsis "Python bindings and utilities for GeoJSON")
17158 (description
17159 "This package provides Python bindings and utilities for
17160@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
17161structures.")
17162 (license license:bsd-3)))
17163
17164;; pyowm only accepts a version less than version 3.
17165(define-public python-geojson-for-pyowm
17166 (package
17167 (inherit python-geojson)
17168 (version "2.5.0")
17169 (source
17170 (origin
17171 (method url-fetch)
17172 (uri (pypi-uri "geojson" version))
17173 (sha256
17174 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
17175 (arguments
17176 ;; https://github.com/jazzband/geojson/issues/175
17177 (list #:tests? #f))))
17178
17179(define-public python-gpxpy
17180 (package
17181 (name "python-gpxpy")
17182 (version "1.6.2")
17183 (source
17184 (origin
17185 (method url-fetch)
17186 (uri (pypi-uri "gpxpy" version))
17187 (sha256
17188 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
17189 (build-system pyproject-build-system)
17190 (arguments
17191 (list #:test-backend #~'unittest))
17192 (native-inputs
17193 (list python-setuptools))
17194 (home-page "https://github.com/tkrajina/gpxpy")
17195 (synopsis "Python GPX parser")
17196 (description "GPX file parser and GPS track manipulation library.")
17197 (license license:asl2.0)))
17198
17199(define-public python-get-version
17200 (package
17201 (name "python-get-version")
17202 (version "3.5.5")
17203 (source
17204 (origin
17205 (method url-fetch)
17206 (uri (pypi-uri "get_version" version))
17207 (sha256
17208 (base32
17209 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
17210 (build-system pyproject-build-system)
17211 (arguments
17212 ;; XXX: No tests in PyPI and building from GitHub fails because of the
17213 ;; lack of git metadata in the checkout.
17214 (list #:tests? #f))
17215 (native-inputs (list python-flit-core))
17216 (propagated-inputs (list python-dunamai))
17217 (home-page "https://github.com/flying-sheep/get_version")
17218 (synopsis "Version helper in the spirit of versioneer")
17219 (description
17220 "This package provides a version helper that lets you automatically use
17221the latest @code{vX.X.X} Git tag as the version in your Python package. It
17222also supports getting the version from Python source distributions or, once
17223your package is installed, via @code{pkg_resources} (part of
17224@code{setuptools}).")
17225 (license license:gpl3+)))
17226
17227(define-public python-filetype
17228 (package
17229 (name "python-filetype")
17230 (version "1.2.0")
17231 (source
17232 (origin
17233 (method url-fetch)
17234 (uri (pypi-uri "filetype" version))
17235 (sha256
17236 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
17237 (build-system pyproject-build-system)
17238 (native-inputs (list python-pytest
17239 python-pytest-benchmark
17240 python-setuptools
17241 python-wheel))
17242 (home-page "https://github.com/h2non/filetype.py")
17243 (synopsis "Infer file type and MIME type of any file/buffer")
17244 (description "@code{filetype} is a small and dependency free Python
17245package to infer file type and MIME type checking the magic numbers
17246signature of a file or buffer.")
17247 (license license:expat)))
17248
17249(define-public python-cachelib
17250 (package
17251 (name "python-cachelib")
17252 (version "0.13.0")
17253 (source
17254 (origin
17255 (method url-fetch)
17256 (uri (pypi-uri "cachelib" version))
17257 (sha256
17258 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
17259 (build-system pyproject-build-system)
17260 (arguments
17261 ;; These tests use a remote connection.
17262 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
17263 "--ignore" "tests/test_mongodb_cache.py")))
17264 (native-inputs
17265 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
17266 (home-page "https://github.com/pallets-eco/cachelib")
17267 (synopsis "Collection of cache libraries")
17268 (description "Cachelib is a library extracted from @code{werkzeug} which
17269provides a collection of cache libraries in the same API interface.")
17270 (license license:bsd-3)))
17271
17272(define-public python-pylru
17273 (package
17274 (name "python-pylru")
17275 (version "1.2.0")
17276 (source
17277 (origin
17278 (method git-fetch)
17279 (uri (git-reference
17280 (url "https://github.com/jlhutch/pylru")
17281 (commit (string-append "v" version))))
17282 (file-name (git-file-name name version))
17283 (sha256
17284 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
17285 (build-system pyproject-build-system)
17286 (arguments
17287 (list
17288 #:test-backend #~'custom
17289 #:test-flags #~(list "test.py")))
17290 (native-inputs (list python-pytest python-setuptools))
17291 (home-page "https://github.com/jlhutch/pylru")
17292 (synopsis "Least recently used (LRU) cache implementation")
17293 (description
17294 "Pylru implements a true LRU cache along with several support classes.
17295Pylru provides a cache class with a simple dict interface. It also provides
17296classes to wrap any object that has a dict interface with a cache. Both
17297write-through and write-back semantics are supported. Pylru also provides
17298classes to wrap functions in a similar way, including a function decorator.")
17299 (license license:gpl2+)))
17300
17301(define-public python-legacy-api-wrap
17302 (package
17303 (name "python-legacy-api-wrap")
17304 (version "1.5")
17305 (source
17306 (origin
17307 (method url-fetch)
17308 (uri (pypi-uri "legacy_api_wrap" version))
17309 (sha256
17310 (base32
17311 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
17312 (build-system pyproject-build-system)
17313 (native-inputs
17314 (list python-hatch-docstring-description
17315 python-hatch-vcs
17316 python-hatchling
17317 python-pytest
17318 python-typer))
17319 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
17320 (synopsis "Legacy API wrapper")
17321 (description "This module defines a decorator to wrap legacy APIs. The
17322primary use case is APIs defined before keyword-only parameters existed.")
17323 (license license:gpl3+)))
17324
17325(define-public python-langdetect
17326 (package
17327 (name "python-langdetect")
17328 (version "1.0.9")
17329 (source
17330 (origin
17331 (method url-fetch)
17332 (uri (pypi-uri "langdetect" version))
17333 (sha256
17334 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
17335 (build-system pyproject-build-system)
17336 (native-inputs
17337 (list python-pytest
17338 python-setuptools))
17339 (propagated-inputs
17340 (list python-six))
17341 (home-page "https://github.com/Mimino666/langdetect")
17342 (synopsis "Language detection library")
17343 (description
17344 "This library is a port of Nakatani Shuyo's language-detection library
17345(version from 03/03/2014) to Python.")
17346 (license license:expat)))
17347
17348(define-public python-pyasn1
17349 (package
17350 (name "python-pyasn1")
17351 (version "0.6.1")
17352 (source
17353 (origin
17354 (method url-fetch)
17355 (uri (pypi-uri "pyasn1" version))
17356 (sha256
17357 (base32
17358 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
17359 (build-system pyproject-build-system)
17360 (arguments
17361 (list #:test-backend #~'unittest
17362 #:test-flags #~(list "discover" "tests")))
17363 (native-inputs
17364 (list python-setuptools))
17365 (home-page "https://github.com/pyasn1/pyasn1")
17366 (synopsis "ASN.1 types and codecs")
17367 (description
17368 "This is an implementation of ASN.1 types and codecs in Python. It is
17369suitable for a wide range of protocols based on the ASN.1 specification.")
17370 (license license:bsd-2)))
17371
17372(define-public python-pyasn1-modules
17373 (package
17374 (name "python-pyasn1-modules")
17375 (version "0.4.2")
17376 (source
17377 (origin
17378 (method url-fetch)
17379 (uri (pypi-uri "pyasn1_modules" version))
17380 (sha256
17381 (base32
17382 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
17383 (build-system pyproject-build-system)
17384 (arguments
17385 (list #:test-backend #~'unittest
17386 #:test-flags #~(list "discover" "tests")))
17387 (native-inputs
17388 (list python-setuptools))
17389 (propagated-inputs
17390 (list python-pyasn1))
17391 (home-page "https://github.com/pyasn1/pyasn1-modules")
17392 (synopsis "ASN.1 codec implementations")
17393 (description
17394 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
17395implementations of ASN.1-based codecs and protocols.")
17396 (license license:bsd-3)))
17397
17398(define-public python-asn1tools
17399 (package
17400 (name "python-asn1tools")
17401 (version "0.167.0")
17402 (source
17403 (origin
17404 (method url-fetch)
17405 (uri (pypi-uri "asn1tools" version))
17406 (sha256
17407 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
17408 (build-system pyproject-build-system)
17409 (arguments
17410 (list
17411 #:test-flags
17412 #~(list "-k" (string-join
17413 ;; Tests fail with error: IndexError: string index out of
17414 ;; range. It may be some incompatability wit pyparsing,
17415 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
17416 (list "not test_c_source"
17417 "test_command_line_generate_c_source_oer"
17418 "test_command_line_generate_c_source_uper"
17419 "test_command_line_generate_rust_source_uper"
17420 "test_missing_parameterized_value"
17421 "test_c_source"
17422 "test_parse_parameterization")
17423 " and not "))))
17424 (native-inputs
17425 (list python-pytest
17426 python-setuptools
17427 python-wheel))
17428 (propagated-inputs
17429 (list python-bitstruct
17430 python-diskcache
17431 python-prompt-toolkit
17432 python-pyparsing))
17433 (home-page "https://github.com/eerimoq/asn1tools")
17434 (synopsis "ASN.1 parsing, encoding and decoding")
17435 (description "This package provides ASN.1 parsing, encoding and decoding
17436for Python, including constraints checking. It supports several
17437codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
17438for OER and UPER.")
17439 (license license:expat)))
17440
17441(define-public python-idna
17442 (package
17443 (name "python-idna")
17444 (version "3.10")
17445 (source
17446 (origin
17447 (method url-fetch)
17448 (uri (pypi-uri "idna" version))
17449 (sha256
17450 (base32
17451 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
17452 (build-system pyproject-build-system)
17453 (native-inputs
17454 (list python-flit-core))
17455 (home-page "https://github.com/kjd/idna")
17456 (synopsis "Internationalized domain names in applications")
17457 (description
17458 "This is a library to support the Internationalised Domain Names in
17459Applications (IDNA) protocol as specified in RFC 5891. This version of the
17460protocol is often referred to as “IDNA2008” and can produce different results
17461from the earlier standard from 2003. The library is also intended to act as a
17462suitable drop-in replacement for the “encodings.idna” module that comes with
17463the Python standard library but currently only supports the older 2003
17464specification.")
17465 (license license:bsd-4)))
17466
17467(define-public python-libsass
17468 (package
17469 (name "python-libsass")
17470 (version "0.23.0")
17471 (source
17472 (origin
17473 ;; PyPI tarball is missing some test files.
17474 (method git-fetch)
17475 (uri (git-reference
17476 (url "https://github.com/sass/libsass-python")
17477 (commit version)))
17478 (file-name (git-file-name name version))
17479 (sha256
17480 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
17481 (build-system pyproject-build-system)
17482 (arguments
17483 '(#:phases
17484 (modify-phases %standard-phases
17485 ;; Use Guix package of libsass instead of compiling from a checkout.
17486 (add-before 'build 'set-libsass
17487 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
17488 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
17489 ;; https://github.com/sass/libsass-python/issues/440. It passed with
17490 ;; [email protected] which requires rebuild the world (1200+ packages),
17491 ;; remove when v3.6.5 is available.
17492 (add-before 'check 'silent-failing-tests
17493 (lambda _
17494 (substitute* "sasstests.py"
17495 (("def test_build_one")
17496 "def __off_test_build_one")
17497 (("def test_stack_trace_formatting")
17498 "def __off_test_stack_trace_formatting"))))
17499 (replace 'check
17500 (lambda* (#:key tests? #:allow-other-keys)
17501 (when tests?
17502 (invoke "pytest" "sasstests.py"))))
17503 (add-after 'install 'delete-test
17504 (lambda* (#:key inputs outputs #:allow-other-keys)
17505 ;; Delete sasstests.py because it attempts to open a file
17506 ;; that is not installed when loaded, which breaks the sanity
17507 ;; check.
17508 (delete-file (string-append
17509 (assoc-ref outputs "out")
17510 "/lib/python"
17511 (python-version
17512 (dirname (dirname
17513 (search-input-file inputs "bin/python"))))
17514 "/site-packages/sasstests.py")))))))
17515 (native-inputs
17516 (list python-pytest python-setuptools python-werkzeug python-wheel))
17517 (inputs
17518 (list libsass))
17519 (home-page "https://sass.github.io/libsass-python/")
17520 (synopsis "Straightforward binding of libsass for Python")
17521 (description
17522 "This package provides a simple Python extension module @code{sass} which
17523is binding LibSass.")
17524 (license license:expat)))
17525
17526(define-public python-idna-ssl
17527 (package
17528 (name "python-idna-ssl")
17529 (version "1.0.1")
17530 (source
17531 (origin
17532 (method git-fetch)
17533 (uri (git-reference
17534 (url "https://github.com/aio-libs/idna-ssl")
17535 (commit (string-append "v" version))))
17536 (file-name (git-file-name name version))
17537 (sha256
17538 (base32 "1fj4zkcnx3mk7kbnf4d6pjgv331n17wzpphpwdnmr498ghbsph9k"))))
17539 (build-system pyproject-build-system)
17540 (arguments (list #:tests? #f)) ;circular dependency with python-aiohttp
17541 (native-inputs (list python-setuptools))
17542 (propagated-inputs (list python-idna))
17543 (home-page "https://github.com/aio-libs/idna-ssl")
17544 (synopsis "Support Unicode(idna) domains for Python's @code{ssl} module")
17545 (description
17546 "This package provides Unicode(idna) domains support for Python's
17547@code{ssl} module. It patches @code{ssl.match_hostname} for that purpose.")
17548 (license license:expat)))
17549
17550;; It may be removed after 2026-01-24.
17551(define-deprecated/public-alias python-path-bootstrap python-path)
17552(define-deprecated/public-alias python-pathpy python-path)
17553
17554(define-public python-pip-run
17555 (package
17556 (name "python-pip-run")
17557 (version "8.8.0")
17558 (source
17559 (origin
17560 (method git-fetch)
17561 (uri (git-reference
17562 (url "https://github.com/jaraco/pip-run")
17563 (commit (string-append "v" version))))
17564 (file-name (git-file-name name version))
17565 (sha256
17566 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
17567 (build-system pyproject-build-system)
17568 (arguments
17569 (list
17570 #:tests? (not (%current-target-system))
17571 #:test-flags
17572 #~(list "-k" (string-append
17573 ;; Do not test the myproject.toml build as it tries
17574 ;; to pull dependencies from the internet.
17575 "not project "
17576 ;; These tests attempt to install dependencies from
17577 ;; the network and fail.
17578 "and not test_pkg_imported "
17579 "and not test_pkg_loaded_from_alternate_index "
17580 "and not test_pkg_loaded_from_url "))))
17581 (native-inputs
17582 (list python-nbformat
17583 python-pygments
17584 python-pytest
17585 python-setuptools
17586 python-setuptools-scm))
17587 (propagated-inputs
17588 (list python-autocommand
17589 python-packaging
17590 python-path
17591 python-pip))
17592 (home-page "https://github.com/jaraco/pip-run")
17593 (synopsis "Dynamic dependency loader for Python")
17594 (description "The @command{pip-run} command provides on-demand temporary
17595package installation for a single interpreter run. It replaces this series of
17596commands:
17597@example
17598$ virtualenv --python pythonX.X --system-site-packages /tmp/env
17599$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
17600$ /tmp/env/bin/python ...
17601$ rm -rf /tmp/env
17602@end example")
17603 (license license:expat)))
17604
17605;; It may be removed after 2026-01-24.
17606(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
17607
17608(define-public python-libarchive-c
17609 (package
17610 (name "python-libarchive-c")
17611 (version "5.2")
17612 (source (origin
17613 (method url-fetch)
17614 (uri (pypi-uri "libarchive_c" version))
17615 (sha256
17616 (base32
17617 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
17618 (build-system pyproject-build-system)
17619 (arguments
17620 (list
17621 #:phases
17622 #~(modify-phases %standard-phases
17623 (add-before 'build 'reference-libarchive
17624 (lambda* (#:key inputs #:allow-other-keys)
17625 ;; Retain the absolute file name of libarchive.so.
17626 (substitute* "libarchive/ffi.py"
17627 (("find_library\\('archive'\\)")
17628 (string-append
17629 "'"
17630 (search-input-file inputs "/lib/libarchive.so")
17631 "'"))))))))
17632 (native-inputs
17633 (list python-setuptools python-wheel python-pytest))
17634 (inputs
17635 (list libarchive))
17636 (home-page "https://github.com/Changaco/python-libarchive-c")
17637 (synopsis "Python interface to libarchive")
17638 (description
17639 "This package provides Python bindings to libarchive, a C library to
17640access possibly compressed archives in many different formats. It uses
17641Python's @code{ctypes} foreign function interface (FFI).")
17642 (license license:lgpl2.0+)))
17643
17644(define-public python-file
17645 (package/inherit file
17646 (name "python-file")
17647 (build-system pyproject-build-system)
17648 (arguments
17649 (list
17650 #:tests? #f ;no tests
17651 #:phases
17652 #~(modify-phases %standard-phases
17653 (add-before 'build 'change-directory
17654 (lambda _
17655 (chdir "python")))
17656 (add-before 'build 'set-library-file-name
17657 (lambda* (#:key inputs #:allow-other-keys)
17658 (substitute* "magic.py"
17659 (("find_library\\('magic'\\)")
17660 (format #f "~s" (search-input-file inputs
17661 "lib/libmagic.so")))))))))
17662 (inputs (list file))
17663 (native-inputs (cons* python-setuptools
17664 (if (%current-target-system)
17665 (list this-package)
17666 '())))
17667 (synopsis "Python bindings to the libmagic file type guesser")
17668 (description "This package provides Python bindings to the libmagic file
17669type guesser.
17670
17671Note that this module and the @code{python-magic} module both provide a
17672@file{magic.py} file; these two modules, which are different and were
17673developed separately, both serve the same purpose: provide Python bindings for
17674libmagic.")))
17675
17676(define-public python-pydevd
17677 (package
17678 (name "python-pydevd")
17679 (version "3.2.3")
17680 (source
17681 (origin
17682 (method git-fetch)
17683 (uri (git-reference
17684 (url "https://github.com/fabioz/PyDev.Debugger")
17685 (commit (string-append
17686 "pydev_debugger_"
17687 (string-join (string-split version #\.) "_")))))
17688 (modules '((guix build utils)))
17689 (snippet '(begin
17690 ;; Delete pre-built binaries.
17691 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
17692 ;; This source is generated via Cython.
17693 (delete-file "_pydevd_bundle/pydevd_cython.c")))
17694 (file-name (git-file-name name version))
17695 (sha256
17696 (base32
17697 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
17698 (build-system pyproject-build-system)
17699 (arguments
17700 (list
17701 #:test-flags
17702 #~(list "-n" (number->string (parallel-job-count))
17703 "-m" "not flaky"
17704 "-k"
17705 (string-join
17706 (list
17707 ;; The two "break_01" tests have been failing on
17708 ;; Python 3.10:
17709 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
17710 "not test_set_pydevd_break_01 "
17711 ;; the GUI event loop requires an X server.
17712 "test_gui_event_loop_custom"
17713 ;; This test validates that 'pydevd' is not in the
17714 ;; exception message, but it is due to being part
17715 ;; of the build file name present in the message.
17716 "test_evaluate_exception_trace"
17717 ;; This test fail with TimeoutError, no message on stderr.
17718 "test_soft_terminate"
17719 "test_debugger_case_deadlock_interrupt_thread"
17720 ;; subprocess.CalledProcessError
17721 ;; Python 3.11/3.12 specific issue:
17722 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
17723 "test_find_main_thread_id")
17724 " and not "))
17725 #:phases
17726 #~(modify-phases %standard-phases
17727 (add-after 'unpack 'fix-tests
17728 (lambda _
17729 (substitute* "tests_python/test_convert_utilities.py"
17730 ;; Add missing trailing '/'.
17731 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
17732 (string-append all "/")))))
17733 (add-after 'unpack 'patch-command-paths
17734 (lambda* (#:key inputs #:allow-other-keys)
17735 (substitute* "_pydevd_bundle/pydevd_api.py"
17736 (("'kill'")
17737 (format #f "~s" (search-input-file inputs "bin/kill")))
17738 (("'pgrep'")
17739 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
17740 (add-after 'unpack 'generate-sources
17741 (lambda _
17742 (setenv "PYTHONPATH" (getcwd))
17743 (invoke "python" "build_tools/build.py")))
17744 (add-after 'unpack 'adjust-attach-binary-name
17745 (lambda _
17746 (substitute*
17747 '("pydevd_tracing.py"
17748 "pydevd_attach_to_process/add_code_to_python_process.py")
17749 (("def get_(target|python_helper_lib)_filename.*" all)
17750 (format #f "~a return ~s~%" all
17751 (string-append #$output "/lib/attach.so"))))))
17752 (add-after 'unpack 'patch-gdb
17753 (lambda* (#:key inputs #:allow-other-keys)
17754 (substitute*
17755 "pydevd_attach_to_process/add_code_to_python_process.py"
17756 (("'gdb',")
17757 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
17758 (add-after 'build 'build-attach-linux-binary
17759 (lambda _
17760 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
17761 "-fPIC" "-nostartfiles"
17762 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
17763 (add-before 'check 'pre-check
17764 (lambda* (#:key tests? #:allow-other-keys)
17765 (when tests?
17766 (setenv "PYDEVD_USE_CYTHON" "YES"))))
17767 (add-after 'install 'install-attach-binary
17768 (lambda _
17769 (install-file "attach.so"
17770 (string-append #$output "/lib"))))
17771 ;; Some modules aren't designed to be loadable by themselves, such
17772 ;; as 'pydev_app_engine_debug_startup' and fail.
17773 (delete 'sanity-check))))
17774 (native-inputs
17775 (list python-cython
17776 python-numpy
17777 python-psutil
17778 python-pytest
17779 python-pytest-xdist
17780 python-setuptools
17781 python-trio
17782 python-untangle
17783 python-wheel))
17784 (inputs (list coreutils gdb/pinned procps))
17785 (home-page "https://github.com/fabioz/PyDev.Debugger/")
17786 (synopsis "Python debugger")
17787 (description "PyDev.Debugger is a capable Python debugger used in PyDev
17788and other @acronym{IDEs, Integrated Development Environments}.")
17789 (license license:epl1.0)))
17790
17791(define-public python-debugpy
17792 (package
17793 (name "python-debugpy")
17794 (version "1.8.17")
17795 (source
17796 (origin
17797 (method git-fetch)
17798 (uri (git-reference ;no tests in PyPI archive
17799 (url "https://github.com/microsoft/debugpy")
17800 (commit (string-append "v" version))))
17801 (file-name (git-file-name name version))
17802 (modules '((guix build utils)))
17803 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
17804 ;; attach binary.
17805 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
17806 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
17807 (sha256
17808 (base32
17809 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
17810 (build-system pyproject-build-system)
17811 (arguments
17812 (list
17813 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
17814 #:phases
17815 #~(modify-phases %standard-phases
17816 (add-after 'unpack 'patch-sh-in-tests
17817 (lambda _
17818 (substitute* "tests/debugpy/test_run.py"
17819 (("#!/bin/sh")
17820 (string-append "#!" (which "sh"))))))
17821 (add-after 'unpack 'fix-version
17822 ;; Versioneer is useless when there is no git metadata.
17823 (lambda _
17824 (substitute* "setup.py"
17825 (("version=versioneer.get_version\\(),")
17826 (format #f "version=~s," #$version)))))
17827 (add-before 'build 'configure
17828 (lambda _
17829 ;; This adjusts the behavior of debugpy to load pydevd from
17830 ;; Python site packages.
17831 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
17832 (native-inputs
17833 (list python-setuptools))
17834 (propagated-inputs
17835 (list python-pydevd))
17836 (home-page "https://aka.ms/debugpy")
17837 (synopsis "Debug Adapter Protocol Python implementation")
17838 (description "An implementation of the Debug Adapter Protocol for
17839Python.")
17840 (license license:expat)))
17841
17842(define-public python-debian
17843 (package
17844 (name "python-debian")
17845 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
17846 (version "0.1.49")
17847 (source
17848 (origin
17849 ;; Use git-fetch, as pypi doesn't include test suite.
17850 (method git-fetch)
17851 (uri (git-reference
17852 (url home-page)
17853 (commit version)))
17854 (file-name (git-file-name name version))
17855 (sha256
17856 (base32
17857 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
17858 (modules '((guix build utils)))
17859 (snippet
17860 #~(begin
17861 ;; python-apt, apt and dpkg are not yet available in guix,
17862 ;; and these tests heavily depend on them.
17863 (for-each delete-file
17864 '("lib/debian/tests/test_deb822.py"
17865 "lib/debian/tests/test_debfile.py"))
17866
17867 ;; for reproducible builds, otherwise python-debian
17868 ;; generates a _version.py including the date
17869 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
17870 (substitute* "lib/debian/_version.py"
17871 (("__CHANGELOG_VERSION__") #$version))))))
17872 (build-system pyproject-build-system)
17873 (native-inputs
17874 (list python-pytest python-setuptools))
17875 (propagated-inputs
17876 (list python-six python-chardet))
17877 (synopsis "Debian package related modules")
17878 (description
17879 "This package provides Python modules that abstract many formats of
17880Debian-related files, such as:
17881@itemize
17882@item Debtags information;
17883@item @file{debian/changelog} files;
17884@item packages files, pdiffs;
17885@item control files of single or multiple RFC822-style paragraphs---e.g.
17886 @file{debian/control}, @file{.changes}, @file{.dsc};
17887@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
17888 contained files and meta-information.
17889@end itemize")
17890 ;; Modules are either GPLv2+ or GPLv3+.
17891 (license license:gpl3+)))
17892
17893(define-public python-json-spec
17894 (package
17895 (name "python-json-spec")
17896 (version "0.12.0")
17897 (source
17898 (origin
17899 (method git-fetch) ;no tests in PyPI archive
17900 (uri (git-reference
17901 (url "https://github.com/johnnoone/json-spec")
17902 (commit version)))
17903 (file-name (git-file-name name version))
17904 (sha256
17905 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
17906 (build-system pyproject-build-system)
17907 (native-inputs
17908 (list python-pytest
17909 python-poetry-core))
17910 (propagated-inputs
17911 (list python-termcolor)) ;for the CLI
17912 (home-page "https://json-spec.readthedocs.io/")
17913 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
17914 (description
17915 "This Python library implements several JSON specs, like JSON Schema,
17916JSON Reference and JSON Pointer.")
17917 (license license:bsd-3)))
17918
17919(define-public python-fastbencode
17920 (package
17921 (name "python-fastbencode")
17922 (version "0.3.2") ;the last non Rust version
17923 (source
17924 (origin
17925 (method url-fetch)
17926 (uri (pypi-uri "fastbencode" version))
17927 (modules '((guix build utils)))
17928 ;; Delete pre-generated Cython C files.
17929 (snippet '(for-each delete-file (find-files "." "\\.c$")))
17930 (sha256
17931 (base32 "1daal7xgsl2sjxq8pcilcas9wd9j9796wd4rlkhrvv5h0k2k4k53"))))
17932 (build-system pyproject-build-system)
17933 (arguments
17934 (list
17935 #:test-backend #~'unittest
17936 #:test-flags #~(list "fastbencode.tests.test_suite")))
17937 (native-inputs
17938 (list python-cython
17939 python-setuptools))
17940 (home-page "https://github.com/breezy-team/fastbencode")
17941 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
17942 (description
17943 "The fastbencode Python package implements the bencode serialization
17944format for storing and transmitting loosely structured data, originally used
17945by BitTorrent.
17946
17947The format can encode four different types of values: byte strings, integers,
17948lists, and dictionaries (associative arrays). It's simple and unaffected by
17949endianness,
17950
17951This package includes both a pure-Python version and an optional C extension
17952based on Cython. Both provide the same functionality, but the C version has
17953significantly better performance.")
17954 (license (list license:expat ; _bencode_py.py
17955 license:gpl2+)))) ; __init__.py
17956
17957(define-public python-fastjsonschema
17958 (package
17959 (name "python-fastjsonschema")
17960 (version "2.21.1")
17961 (source
17962 (origin
17963 (method git-fetch) ; no tests in PyPI release
17964 (uri (git-reference
17965 (url "https://github.com/horejsek/python-fastjsonschema")
17966 (commit (string-append "v" version))))
17967 (file-name (git-file-name name version))
17968 (sha256
17969 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
17970 (build-system pyproject-build-system)
17971 (arguments
17972 (list
17973 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
17974 (native-inputs
17975 (list python-json-spec
17976 python-jsonschema
17977 python-pytest
17978 python-pytest-benchmark
17979 python-setuptools))
17980 (home-page "https://github.com/horejsek/python-fastjsonschema")
17981 (synopsis "Fast Python implementation of JSON schema")
17982 (description
17983 "This library implements validation of JSON documents by JSON schema for
17984drafts 04, 06 and 07.")
17985 (license license:bsd-3)))
17986
17987(define-public python-nbformat
17988 (package
17989 (name "python-nbformat")
17990 (version "5.10.4")
17991 ;; The PyPi release tarball lacks some test cases and test data.
17992 (source (origin
17993 (method git-fetch)
17994 (uri (git-reference
17995 (url "https://github.com/jupyter/nbformat")
17996 (commit (string-append "v" version))))
17997 (sha256
17998 (base32
17999 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
18000 (file-name (git-file-name name version))))
18001 (build-system pyproject-build-system)
18002 (arguments
18003 (list
18004 #:phases
18005 #~(modify-phases %standard-phases
18006 ;; We don't want to use hatch-nodejs just to get a version string.
18007 (add-after 'unpack 'patch-pyproject
18008 (lambda _
18009 (substitute* "pyproject.toml"
18010 ((", \"hatch-nodejs-version\"") "")
18011 (("dynamic = \\[\"version\"\\]")
18012 (string-append "version = \"" #$version "\""))))))))
18013 (propagated-inputs
18014 (list python-fastjsonschema python-jsonschema python-jupyter-core
18015 python-traitlets))
18016 (native-inputs
18017 (list python-hatchling
18018 python-pep440
18019 python-pytest
18020 python-testpath))
18021 (home-page "https://jupyter.org")
18022 (synopsis "Jupyter Notebook format")
18023 (description "This package provides the reference implementation of the
18024Jupyter Notebook format and Python APIs for working with notebooks.")
18025 (license license:bsd-3)))
18026
18027(define-public python-nb-clean
18028 (package
18029 (name "python-nb-clean")
18030 (version "4.0.1")
18031 (source
18032 (origin
18033 (method git-fetch) ; no tests in PyPI
18034 (uri (git-reference
18035 (url "https://github.com/srstevenson/nb-clean")
18036 (commit version)))
18037 (file-name (git-file-name name version))
18038 (sha256
18039 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
18040 (build-system pyproject-build-system)
18041 (native-inputs (list python-poetry-core
18042 python-pytest
18043 python-pytest-cov ; runs by default
18044 python-pytest-mock))
18045 (propagated-inputs (list python-nbformat))
18046 (home-page "https://github.com/srstevenson/nb-clean")
18047 (synopsis "Clean Jupyter notebooks for versioning")
18048 (description "This package cleans Jupyter notebooks of cell execution
18049counts, metadata, outputs, and empty cells, preparing them for committing to
18050version control. It provides a Git filter to automatically clean notebooks
18051before they're staged, and can also be used with other version control
18052systems, as a command line tool, and as a Python library.")
18053 (license license:isc)))
18054
18055(define-public python-bleach
18056 (package
18057 (name "python-bleach")
18058 (version "6.2.0")
18059 (source
18060 (origin
18061 (method url-fetch)
18062 (uri (pypi-uri "bleach" version))
18063 (sha256
18064 (base32 "07wrbzlmd6x63dz7lcdih9c4xkn79inimv6kh3yrk9dq310qjghj"))
18065 (snippet
18066 #~(begin
18067 (use-modules (guix build utils))
18068 (substitute* (find-files "." "\\.py$")
18069 (("bleach\\._vendor\\.html5lib") "html5lib"))
18070 (delete-file-recursively "bleach/_vendor/html5lib")))))
18071 (build-system pyproject-build-system)
18072 (native-inputs
18073 (list python-pytest
18074 python-setuptools))
18075 (propagated-inputs
18076 (list python-html5lib
18077 python-webencodings))
18078 (home-page "https://github.com/mozilla/bleach")
18079 (synopsis "Whitelist-based HTML-sanitizing tool")
18080 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
18081 (license license:asl2.0)))
18082
18083(define-public python-entrypoints
18084 (package
18085 (name "python-entrypoints")
18086 (version "0.4")
18087 (source
18088 (origin
18089 (method url-fetch)
18090 (uri (pypi-uri "entrypoints" version))
18091 (sha256
18092 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
18093 (build-system pyproject-build-system)
18094 (native-inputs
18095 (list python-flit-core
18096 python-pytest))
18097 (home-page "https://github.com/takluyver/entrypoints")
18098 (synopsis "Discover and load entry points from installed Python packages")
18099 (description "Entry points are a way for Python packages to advertise
18100objects with some common interface. The most common examples are
18101@code{console_scripts} entry points, which define shell commands by
18102identifying a Python function to run. The @code{entrypoints} module contains
18103functions to find and load entry points.")
18104 (license license:expat)))
18105
18106(define-public python-epc
18107 (package
18108 (name "python-epc")
18109 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
18110 (revision . "0")))
18111 (version (git-version "0.0.5"
18112 (assoc-ref properties 'revision)
18113 (assoc-ref properties 'commit)))
18114 (source
18115 (origin
18116 (method git-fetch)
18117 (uri (git-reference
18118 (url "https://github.com/tkf/python-epc")
18119 (commit (assoc-ref properties 'commit))))
18120 (file-name (git-file-name name version))
18121 (sha256
18122 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
18123 (build-system pyproject-build-system)
18124 (arguments (list #:test-backend #~'nose))
18125 (propagated-inputs (list python-sexpdata))
18126 (native-inputs (list python-pynose python-setuptools))
18127 (home-page "https://github.com/tkf/python-epc")
18128 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
18129 (description
18130 "Python-EPC can call elisp functions from Python and Python functions
18131from elisp.")
18132 (license license:gpl3)))
18133
18134(define-public python-forex-python
18135 (package
18136 (name "python-forex-python")
18137 (version "1.5")
18138 (source
18139 (origin
18140 (method git-fetch)
18141 (uri (git-reference
18142 (url "https://github.com/MicroPyramid/forex-python")
18143 (commit version)))
18144 (file-name (git-file-name name version))
18145 (sha256
18146 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
18147 (build-system pyproject-build-system)
18148 (arguments (list #:tests? #f)) ; Tests require online data.
18149 (native-inputs (list python-setuptools))
18150 (propagated-inputs (list python-requests python-simplejson))
18151 (home-page "https://github.com/MicroPyramid/forex-python")
18152 (synopsis "Foreign exchange rates and currency conversion")
18153 (description
18154 "@code{python-forex-python} can be used to manipulate foreign
18155exchange rates and to operate currency conversions.
18156
18157Features:
18158@itemize
18159@item List all currency rates.
18160@item BitCoin price for all currencies.
18161@item Converting amount to BitCoins.
18162@item Get historical rates for any day since 1999.
18163@item Conversion rate for one currency(ex; USD to INR).
18164@item Convert amount from one currency to other.('USD 10$' to INR).
18165@item Currency symbols.
18166@item Currency names.
18167@end itemize")
18168 (license license:expat)))
18169
18170(define-public python-simpleeval
18171 (package
18172 (name "python-simpleeval")
18173 (version "0.9.12")
18174 (source
18175 (origin
18176 (method git-fetch)
18177 (uri (git-reference
18178 (url "https://github.com/danthedeckie/simpleeval")
18179 (commit version)))
18180 (file-name (git-file-name name version))
18181 (sha256
18182 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
18183 (build-system pyproject-build-system)
18184 (native-inputs (list python-pytest python-setuptools))
18185 (home-page "https://github.com/danthedeckie/simpleeval")
18186 (synopsis "Simple, safe single expression evaluator library")
18187 (description
18188 "This package provides a quick single file library for easily adding
18189evaluatable expressions into python projects. Say you want to allow a user
18190to set an alarm volume, which could depend on the time of day, alarm level,
18191how many previous alarms had gone off, and if there is music playing at the
18192time.")
18193 (license license:expat)))
18194
18195(define-public python-simplesat
18196 (package
18197 (name "python-simplesat")
18198 (version "0.9.2")
18199 (source
18200 (origin
18201 (method git-fetch)
18202 (uri (git-reference
18203 (url "https://github.com/enthought/sat-solver")
18204 (commit (string-append "v" version))))
18205 (file-name (git-file-name name version))
18206 (sha256
18207 (base32 "0z44pi8yb6pvc9bisl3qnn3glj7ir0ad2j4gd4jfg2kxvwvi0w0b"))))
18208 (build-system pyproject-build-system)
18209 (arguments
18210 (list
18211 #:test-flags #~(list "--ignore=old")))
18212 (propagated-inputs
18213 (list python-attrs
18214 python-okonomiyaki
18215 python-six))
18216 (native-inputs
18217 (list python-mock
18218 python-pytest
18219 python-pyyaml
18220 python-setuptools))
18221 (home-page "https://github.com/enthought/sat-solver")
18222 (synopsis
18223 "@acronym{SAT, Boolean Satisfiability Problem} dependency handling")
18224 (description
18225 "This package provides a prototype Python implementation for SAT-based
18226problems.")
18227 (license license:bsd-3)))
18228
18229(define-public python-haas
18230 ;; A recent revision is required to avoid obsoleted dependencies.
18231 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
18232 (revision "0"))
18233 (package
18234 (name "python-haas")
18235 (version (git-version "0.9.0" revision commit))
18236 (source
18237 (origin
18238 (method git-fetch)
18239 (uri (git-reference
18240 (url "https://github.com/scalative/haas")
18241 (commit commit)))
18242 (file-name (git-file-name name version))
18243 (sha256
18244 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
18245 (build-system pyproject-build-system)
18246 (propagated-inputs
18247 (list python-stevedore))
18248 (native-inputs
18249 (list python-coverage
18250 python-pytest
18251 python-setuptools
18252 python-testfixtures))
18253 (home-page "https://github.com/scalative/haas")
18254 (synopsis "Extensible Python test runner")
18255 (description "Haas is a python test runner that is backward-compatible
18256with Python's built-in unittest test-cases, but supports more advanced
18257features, such as project-specific plugins.")
18258 (license license:bsd-3))))
18259
18260(define-public python-zipfile2
18261 (package
18262 (name "python-zipfile2")
18263 (version "0.0.12")
18264 (source
18265 (origin
18266 (method git-fetch)
18267 (uri (git-reference
18268 (url "https://github.com/itziakos/zipfile2/")
18269 (commit (string-append "v" version))))
18270 (file-name (git-file-name name version))
18271 (sha256
18272 (base32 "1hmq33r3ffrrvm5nggsp69cjdbgjbwn6zbcrs2rhmb8pds0h81q7"))))
18273 (build-system pyproject-build-system)
18274 (native-inputs (list python-setuptools python-pytest))
18275 (home-page "https://github.com/itziakos/zipfile2/")
18276 (synopsis "Improved @code{ZipFile} Python class")
18277 (description "Zipfile2 is a backward compatible replacement to
18278@code{ZipFile}. It provides handling of symlinks, and exception management.")
18279 (license license:psfl)))
18280
18281(define-public python-okonomiyaki
18282 (package
18283 (name "python-okonomiyaki")
18284 (version "3.0.0")
18285 (source
18286 (origin
18287 (method git-fetch)
18288 (uri (git-reference
18289 (url "https://github.com/enthought/okonomiyaki/")
18290 (commit version)))
18291 (file-name (git-file-name name version))
18292 (sha256
18293 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
18294 (build-system pyproject-build-system)
18295 (arguments
18296 (list
18297 #:phases
18298 #~(modify-phases %standard-phases
18299 ;; Unknown platform.
18300 (add-before 'check 'delete-fail-tests
18301 (lambda _
18302 (delete-file-recursively
18303 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
18304 (native-inputs
18305 (list python-distro
18306 python-haas
18307 python-jsonschema
18308 python-packaging
18309 python-parameterized
18310 python-pytest
18311 python-setuptools
18312 python-testfixtures
18313 python-zipfile2))
18314 (home-page "https://github.com/enthought/okonomiyaki/")
18315 (synopsis "Python library to deal with Enthought-specific metadata")
18316 (description
18317 "Okonomiyaki is a self-contained library aiming at consolidating
18318low-level code used in Enthought-specific egg and runtime archives.")
18319 (license license:bsd-3)))
18320
18321(define-public python-nbconvert
18322 (package
18323 (name "python-nbconvert")
18324 (version "7.16.6")
18325 (source
18326 (origin
18327 (method url-fetch)
18328 (uri (pypi-uri "nbconvert" version))
18329 (sha256
18330 (base32
18331 "10pmq31p2srwcdrc7k71dj0l6hl42xnadvsy8swaf3a8qqvpwsjp"))))
18332 (build-system pyproject-build-system)
18333 (arguments
18334 (list
18335 #:test-flags
18336 '(list "-k"
18337 (string-append
18338 ;; These tests require pyppeteer, not yet
18339 ;; available in Guix.
18340 "not test_webpdf_with_chromium"
18341 " and not test_webpdf.py"
18342 ;; These tests require ipywidgets, which would
18343 ;; introduce a dependency cycle.
18344 " and not test_execute_widgets_from_nbconvert"
18345 " and not test_execute_multiple_notebooks"
18346
18347 ;; This test calls nbconvert itself via "sys.executable -m
18348 ;; nbconvert". It's probably harmless.
18349 " and not test_default_config"))
18350 #:phases
18351 #~(modify-phases %standard-phases
18352 (add-after 'unpack 'fix-paths
18353 (lambda* (#:key inputs #:allow-other-keys)
18354 ;; Use pandoc binary from input.
18355 (substitute* "nbconvert/utils/pandoc.py"
18356 (("'pandoc'")
18357 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
18358 ;; Same for LaTeX.
18359 (substitute* "nbconvert/exporters/pdf.py"
18360 (("\"xelatex\"")
18361 (format #f "~s" (search-input-file inputs "bin/xelatex")))
18362 (("\"bibtex\"")
18363 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
18364 ;; Likewise for Inkscape.
18365 (substitute* "nbconvert/preprocessors/svg2pdf.py"
18366 (("inkscape_path = which\\(\"inkscape\")")
18367 (format #f "inkscape_path = ~s"
18368 (search-input-file inputs "bin/inkscape"))))))
18369 (add-after 'unpack 'ignore-deprecation-warnings
18370 (lambda _
18371 (substitute* "pyproject.toml"
18372 (("\"ignore:nbconvert.utils" m)
18373 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
18374 m)))))
18375 (add-before 'check 'pre-check
18376 (lambda _
18377 ;; Tests depend on templates installed to output.
18378 (setenv "JUPYTER_PATH"
18379 (string-append #$output "/share/jupyter:"
18380 (getenv "JUPYTER_PATH")))
18381 ;; jupyter-core demands this
18382 (setenv "JUPYTER_PLATFORM_DIRS" "1")
18383 ;; Tests need writable HOME and TEXMFVAR.
18384 (setenv "HOME" "/tmp")
18385 (setenv "TEXMFVAR" "/tmp"))))))
18386 (inputs
18387 (list inkscape/pinned pandoc))
18388 (native-inputs
18389 (list python-flaky
18390 python-hatchling
18391 python-ipykernel
18392 ;; Adding ipywidgets would create a cycle.
18393 ;;python-ipywidgets
18394 python-pytest
18395 (texlive-local-tree
18396 (list texlive-adjustbox
18397 texlive-booktabs
18398 texlive-caption
18399 texlive-enumitem
18400 texlive-eurosym
18401 texlive-fancyvrb
18402 texlive-float
18403 texlive-fontspec
18404 texlive-grffile
18405 texlive-jknapltx
18406 texlive-parskip
18407 texlive-pdfcol
18408 texlive-rsfs
18409 texlive-soul
18410 texlive-tcolorbox
18411 texlive-titling
18412 texlive-ulem
18413 texlive-unicode-math
18414 texlive-upquote
18415 texlive-xetex))))
18416 (propagated-inputs
18417 (list python-beautifulsoup4
18418 python-bleach
18419 python-defusedxml
18420 python-jinja2
18421 python-jupyter-core
18422 python-jupyterlab-pygments
18423 python-markupsafe
18424 python-mistune
18425 python-nbclient
18426 python-nbformat
18427 python-packaging
18428 python-pandocfilters
18429 python-pygments
18430 python-tinycss2
18431 python-traitlets
18432 ;; Required, even if [serve] is not used.
18433 python-tornado
18434 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
18435 texlive-adjustbox
18436 texlive-amsmath
18437 texlive-booktabs
18438 texlive-caption
18439 texlive-collection-basic
18440 texlive-enumitem
18441 texlive-environ
18442 texlive-etoolbox
18443 texlive-eurosym
18444 texlive-etoolbox
18445 texlive-fancyvrb
18446 texlive-float
18447 texlive-fontspec
18448 texlive-geometry
18449 texlive-grffile
18450 texlive-hyperref
18451 texlive-infwarerr
18452 texlive-jknapltx
18453 texlive-kvoptions
18454 texlive-lm
18455 texlive-lm-math
18456 texlive-mathpazo
18457 texlive-parskip
18458 texlive-pdfcol
18459 texlive-pgf
18460 texlive-rsfs
18461 texlive-soul
18462 texlive-stringenc
18463 texlive-tcolorbox
18464 texlive-titling
18465 texlive-tools
18466 texlive-trimspaces
18467 texlive-ucs
18468 texlive-ulem
18469 texlive-unicode-math
18470 texlive-upquote
18471 texlive-xcolor
18472 texlive-xetex
18473 texlive-zapfding))
18474 (home-page "https://jupyter.org")
18475 (synopsis "Converting Jupyter Notebooks")
18476 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
18477notebooks to various other formats via Jinja templates. It allows you to
18478convert an @code{.ipynb} notebook file into various static formats including:
18479
18480@enumerate
18481@item HTML
18482@item LaTeX
18483@item PDF
18484@item Reveal JS
18485@item Markdown (md)
18486@item ReStructured Text (rst)
18487@item executable script
18488@end enumerate\n")
18489 (license license:bsd-3)))
18490
18491(define-public python-ipywidgets
18492 (package
18493 (name "python-ipywidgets")
18494 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
18495 (version "8.1.4")
18496 (source
18497 (origin
18498 (method url-fetch)
18499 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
18500 (uri (pypi-uri "ipywidgets" version))
18501 (sha256
18502 (base32
18503 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
18504 (build-system pyproject-build-system)
18505 (native-inputs
18506 (list python-ipykernel
18507 python-jsonschema
18508 python-pytest
18509 python-pytz
18510 python-setuptools))
18511 (propagated-inputs
18512 (list python-comm
18513 python-ipython
18514 python-jupyterlab-widgets
18515 python-traitlets
18516 python-widgetsnbextension))
18517 (home-page "https://ipython.org")
18518 (synopsis "IPython HTML widgets for Jupyter")
18519 (description "Ipywidgets are interactive HTML widgets for Jupyter
18520notebooks and the IPython kernel. Notebooks come alive when interactive
18521widgets are used. Users gain control of their data and can visualize changes
18522in the data.")
18523 (license license:bsd-3)))
18524
18525(define-public python-jsbeautifier
18526 (package
18527 (name "python-jsbeautifier")
18528 (version "1.15.3")
18529 (home-page "https://github.com/beautify-web/js-beautify")
18530 (source
18531 (origin
18532 (method git-fetch)
18533 (uri (git-reference
18534 (url home-page)
18535 (commit (string-append "v" version))))
18536 (file-name (git-file-name name version))
18537 (sha256
18538 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
18539 (build-system pyproject-build-system)
18540 (arguments
18541 (list
18542 #:phases
18543 #~(modify-phases %standard-phases
18544 (add-after 'unpack 'chdir
18545 (lambda _
18546 (chdir "python")
18547 (rename-file "setup-js.py" "setup.py"))))))
18548 (propagated-inputs (list python-editorconfig python-six))
18549 (native-inputs (list python-pytest python-setuptools))
18550 (synopsis "JavaScript unobfuscator and beautifier")
18551 (description
18552 "This packages provides tooling to beautify, unpack or deobfuscate
18553JavaScript, leveraging popular online obfuscators.")
18554 (license license:expat)))
18555
18556(define-public python-chardet
18557 (package
18558 (name "python-chardet")
18559 (version "5.2.0")
18560 (source
18561 (origin
18562 (method url-fetch)
18563 (uri (pypi-uri "chardet" version))
18564 (sha256
18565 (base32
18566 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
18567 (native-inputs
18568 (list python-pytest python-setuptools python-wheel))
18569 (build-system pyproject-build-system)
18570 (arguments
18571 (list #:test-flags
18572 ;; Disable test that fails sporadically:
18573 ;; https://github.com/chardet/chardet/issues/256
18574 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
18575 #:phases
18576 #~(modify-phases %standard-phases
18577 ;; This package provides a 'chardetect' executable that only
18578 ;; depends on Python, so customize the wrap phase to avoid
18579 ;; adding pytest and friends in order to save size.
18580 ;; (See also <https://bugs.gnu.org/25235>.)
18581 (replace 'wrap
18582 (lambda* (#:key inputs outputs #:allow-other-keys)
18583 (let* ((sitedir (site-packages inputs outputs))
18584 (python (dirname (dirname
18585 (search-input-file
18586 inputs "bin/python"))))
18587 (python-sitedir
18588 (string-append python "/lib/python"
18589 (python-version python)
18590 "/site-packages")))
18591 (wrap-program (string-append #$output "/bin/chardetect")
18592 `("GUIX_PYTHONPATH" ":" suffix
18593 ,(list sitedir python-sitedir)))))))))
18594 (home-page "https://github.com/chardet/chardet")
18595 (synopsis "Universal encoding detector for Python 2 and 3")
18596 (description
18597 "This package provides @code{chardet}, a Python module that can
18598automatically detect a wide range of file encodings.")
18599 (license license:lgpl2.1+)))
18600
18601(define-public python-charset-normalizer
18602 (package
18603 (name "python-charset-normalizer")
18604 (version "3.4.2")
18605 (source
18606 (origin
18607 (method url-fetch)
18608 (uri (pypi-uri "charset_normalizer" version))
18609 (sha256
18610 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
18611 (build-system pyproject-build-system)
18612 (arguments
18613 (list
18614 #:phases
18615 #~(modify-phases %standard-phases
18616 ;; https://github.com/jawah/charset_normalizer/issues/625
18617 ;; https://github.com/jawah/charset_normalizer/pull/626
18618 (add-after 'unpack 'fix-scripts
18619 (lambda _
18620 (substitute* "pyproject.toml"
18621 (("charset_normalizer:cli.cli_detect")
18622 "charset_normalizer.cli:cli_detect")))))))
18623 (native-inputs
18624 (list python-pytest
18625 python-setuptools))
18626 (home-page "https://github.com/ousret/charset_normalizer")
18627 (synopsis "Universal Charset Detector, alternative to Chardet")
18628 (description "This library helps you read text from an unknown charset
18629encoding. Motivated by @code{chardet}, it tries to resolve the issue by
18630taking a new approach. All IANA character set names for which the Python core
18631library provides codecs are supported.")
18632 (license license:expat)))
18633
18634(define-public python-docopt
18635 (package
18636 (name "python-docopt")
18637 (version "0.6.2")
18638 (source
18639 (origin
18640 (method git-fetch)
18641 (uri (git-reference
18642 (url "https://github.com/docopt/docopt")
18643 (commit version)))
18644 (file-name (git-file-name name version))
18645 (sha256
18646 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
18647 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
18648 (build-system pyproject-build-system)
18649 ;; tests: 203 passed, 6 warnings
18650 (native-inputs
18651 (list python-pytest-8 python-setuptools))
18652 (home-page "http://docopt.org")
18653 (synopsis "Command-line interface description language for Python")
18654 (description
18655 "This library allows the user to define a command-line interface from a
18656program's help message rather than specifying it programmatically with
18657command-line parsers like @code{getopt} and @code{argparse}.")
18658 (license license:expat)))
18659
18660(define-public python-pythonanywhere
18661 (package
18662 (name "python-pythonanywhere")
18663 (version "0.17.0")
18664 (source
18665 (origin
18666 (method git-fetch)
18667 (uri (git-reference
18668 (url "https://github.com/pythonanywhere/helper_scripts")
18669 (commit (string-append "v" version))))
18670 (file-name (git-file-name name version))
18671 (sha256
18672 (base32 "0hsxrw1inqqnxbfvjk0j218ijx5xv4lkfh1qzvay7pzk9ifc0sfz"))))
18673 (build-system pyproject-build-system)
18674 (arguments
18675 (list
18676 #:test-flags
18677 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
18678 "-k" (string-join
18679 ;; Network access is required to clone external
18680 ;; repositories.
18681 (list "not test_actually_creates_django_project_in_vir"
18682 "test_actually_downloads_repo"
18683 "test_actually_installing_a_real_package"
18684 "test_actually_works_against_example_repo"
18685 "test_autoconfigure_actually_works_against_example_repo"
18686 "test_exits_because_boolean_not_satisfied"
18687 "test_gets_version"
18688 "test_nuke_option_lets_you_run_twice"
18689 "test_nuke_option_lets_you_run_twice"
18690 "test_start_actually_creates_django_project_in_vir")
18691 " and not "))
18692 #:phases
18693 #~(modify-phases %standard-phases
18694 (add-before 'check 'change-home
18695 (lambda _
18696 (setenv "HOME" "/tmp"))))))
18697 (native-inputs
18698 (list python-psutil
18699 python-pytest
18700 python-pytest-mock
18701 python-responses
18702 python-setuptools))
18703 (propagated-inputs
18704 (list python-dateutil
18705 python-docopt
18706 python-packaging
18707 python-pythonanywhere-core
18708 python-requests
18709 python-schema
18710 python-snakesay
18711 python-tabulate
18712 python-typer))
18713 (home-page "https://github.com/pythonanywhere/helper_scripts/")
18714 (synopsis "PythonAnywhere helper tools for users")
18715 (description
18716 "PythonAnywhere provides a command-line interface and an application
18717programming interface that allows managing files Web apps, scheduled
18718tasks and students. It includes single-command deployment for the Django Girls
18719tutorial.")
18720 (license license:expat)))
18721
18722(define-public python-pythonanywhere-core
18723 (package
18724 (name "python-pythonanywhere-core")
18725 (version "0.2.7")
18726 (source
18727 (origin
18728 (method git-fetch)
18729 (uri (git-reference
18730 (url "https://github.com/pythonanywhere/pythonanywhere-core")
18731 (commit (string-append "v" version))))
18732 (file-name (git-file-name name version))
18733 (sha256
18734 (base32 "1p9zlq3is0jvbni9ydiv6f0fw89lm44hkgbj6nari2a3gb3qw856"))))
18735 (build-system pyproject-build-system)
18736 (arguments
18737 (list
18738 #:phases
18739 #~(modify-phases %standard-phases
18740 (add-before 'check 'pre-check
18741 (lambda _
18742 (setenv "HOME" "/tmp"))))))
18743 (native-inputs
18744 (list python-poetry-core
18745 python-pytest
18746 python-pytest-mock
18747 python-responses))
18748 (propagated-inputs
18749 (list python-dateutil
18750 python-requests
18751 python-snakesay
18752 python-typing-extensions))
18753 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
18754 (synopsis "API wrapper for PythonAnywhere services")
18755 (description
18756 "This package provides an API wrapper for programmatic management of
18757@code{PythonAnywhere} services.")
18758 (license license:expat)))
18759
18760(define-public python-dialog
18761 (package
18762 (name "python-dialog")
18763 (version "3.5.3")
18764 (source
18765 (origin
18766 (method url-fetch)
18767 (uri (pypi-uri "pythondialog" version))
18768 (sha256
18769 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
18770 (modules '((guix build utils)))
18771 (snippet #~(delete-file-recursively "doc"))))
18772 (build-system pyproject-build-system)
18773 (arguments
18774 (list
18775 ;; XXX: There are no tests, but some examples. However, they need to
18776 ;; be run on a terminal.
18777 #:tests? #f
18778 #:phases
18779 #~(modify-phases %standard-phases
18780 (add-after 'unpack 'patch-path
18781 (lambda* (#:key inputs #:allow-other-keys)
18782 (substitute* "dialog.py"
18783 (("_path_to_executable\\(dialog\\)")
18784 (format #f "os.path.realpath(~s)"
18785 (search-input-file inputs "bin/dialog")))))))))
18786 (native-inputs (list python-setuptools))
18787 (inputs (list dialog))
18788 (home-page "https://pythondialog.sourceforge.net/")
18789 (synopsis "Python interface to the UNIX dialog utility")
18790 (description
18791 "A Python wrapper for the dialog utility. Its purpose is to provide an
18792easy to use, pythonic and comprehensive Python interface to dialog. This
18793allows one to make simple text-mode user interfaces on Unix-like systems")
18794 (license license:lgpl2.1)))
18795
18796(define-deprecated-package python-pythondialog python-dialog)
18797
18798(define-public python-confection
18799 (package
18800 (name "python-confection")
18801 (version "0.1.5")
18802 (source (origin
18803 (method url-fetch)
18804 (uri (pypi-uri "confection" version))
18805 (sha256
18806 (base32
18807 "03hgb6601mx6iip4nr8i0is8x5vmh85z286j7j8lhkxxlqydswlf"))))
18808 (build-system pyproject-build-system)
18809 (propagated-inputs (list python-pydantic python-srsly))
18810 (native-inputs (list python-pytest python-setuptools python-wheel))
18811 (home-page "https://github.com/explosion/confection")
18812 (synopsis "Config system for Python")
18813 (description "Confection is a lightweight library that offers a
18814configuration system letting you conveniently describe arbitrary trees of
18815objects.")
18816 (license license:expat)))
18817
18818(define-public python-configobj
18819 (package
18820 (name "python-configobj")
18821 (version "5.0.9")
18822 (source
18823 (origin
18824 (method url-fetch)
18825 (uri (pypi-uri "configobj" version))
18826 (sha256
18827 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
18828 (build-system pyproject-build-system)
18829 (native-inputs
18830 (list python-pytest
18831 python-setuptools))
18832 (home-page "https://github.com/DiffSK/configobj")
18833 (synopsis "Config file reading, writing and validation")
18834 (description
18835 "ConfigObj is a simple but powerful config file reader and writer: an
18836 ini file round tripper. Its main feature is that it is very easy to use,
18837with a straightforward programmer’s interface and a simple syntax for config
18838files.")
18839 (license license:bsd-3)))
18840
18841(define-public python-omegaconf
18842 (let ((commit "117f7de07285e4d1324b9229eaf873de15279457")
18843 (revision "0"))
18844 (package
18845 (name "python-omegaconf")
18846 (version (git-version "2.3.0" revision commit))
18847 (source
18848 (origin
18849 (method git-fetch)
18850 (uri (git-reference
18851 (url "https://github.com/omry/omegaconf")
18852 (commit commit)))
18853 (file-name (git-file-name name version))
18854 (modules '((guix build utils)))
18855 (snippet
18856 #~(begin
18857 (delete-file-recursively "build_helpers/bin")
18858 (substitute* "build_helpers/build_helpers.py"
18859 (("java") "antlr4")
18860 (("\"-jar\",") "")
18861 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
18862 (sha256
18863 (base32 "0f922dar5dwyyfk1bwsbs9gws0vyj1w2h9n3148hcfa8c4hg2ysv"))))
18864 (build-system pyproject-build-system)
18865 (arguments
18866 (list
18867 #:test-flags
18868 ;; XXX: Those tests currently fail collection.
18869 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
18870 "--ignore=tests/test_basic_ops_list.py"
18871 "--ignore=tests/test_merge.py"
18872 "--ignore=tests/test_select.py")
18873 #:phases
18874 #~(modify-phases %standard-phases
18875 (add-after 'unpack 'loosen-requirements
18876 (lambda _
18877 (substitute* "requirements/base.txt"
18878 (("antlr4-python3-runtime==.*")
18879 "antlr4-python3-runtime >=4.9\n"))
18880 ;; Ignore deprecation warnings.
18881 (substitute* "pyproject.toml"
18882 (("-Werror") "")))))))
18883 (native-inputs
18884 (list icedtea
18885 antlr4
18886 python-pytest
18887 python-pytest-mock
18888 python-setuptools
18889 python-wheel))
18890 (propagated-inputs
18891 (list python-antlr4-runtime
18892 python-pydevd
18893 python-pyyaml))
18894 (home-page "https://github.com/omry/omegaconf")
18895 (synopsis "Flexible configuration system")
18896 (description
18897 "OmegaConf is a hierarchical configuration system and supports merging
18898configurations from multiple sources. It provides a consistent API regardless
18899of how the configuration was created.")
18900 (license license:bsd-3))))
18901
18902(define-public python-configargparse
18903 (package
18904 (name "python-configargparse")
18905 (version "1.7")
18906 (source (origin
18907 (method url-fetch)
18908 (uri (pypi-uri "ConfigArgParse" version))
18909 (sha256
18910 (base32
18911 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
18912 (build-system pyproject-build-system)
18913 (propagated-inputs
18914 (list python-pyyaml))
18915 (native-inputs
18916 (list python-mock python-pytest python-setuptools python-wheel))
18917 (synopsis "Replacement for argparse")
18918 (description "A drop-in replacement for argparse that allows options to also
18919be set via config files and/or environment variables.")
18920 (home-page "https://github.com/bw2/ConfigArgParse")
18921 (license license:expat)))
18922
18923(define-public python-connection-pool
18924 (package
18925 (name "python-connection-pool")
18926 (version "0.0.3")
18927 (source
18928 (origin
18929 (method git-fetch)
18930 (uri (git-reference
18931 (url "https://github.com/zhouyl/ConnectionPool")
18932 (commit version)))
18933 (file-name (git-file-name name version))
18934 (sha256
18935 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
18936 (build-system pyproject-build-system)
18937 (arguments (list #:tests? #f)) ; No tests.
18938 (native-inputs (list python-setuptools))
18939 (home-page "https://github.com/zhouyl/ConnectionPool")
18940 (synopsis "Thread-safe connection pool")
18941 (description
18942 "This package provides a library implementing a thread-safe connection
18943pool.")
18944 (license license:expat)))
18945
18946(define-public python-argparse-dataclass
18947 (package
18948 (name "python-argparse-dataclass")
18949 (version "2.0.0")
18950 (source
18951 (origin
18952 (method git-fetch) ;no tests in PyPI archive
18953 (uri (git-reference
18954 (url "https://github.com/mivade/argparse_dataclass")
18955 (commit version)))
18956 (file-name (git-file-name name version))
18957 (sha256
18958 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
18959 (build-system pyproject-build-system)
18960 (native-inputs (list python-pytest python-setuptools python-wheel))
18961 (home-page "https://github.com/mivade/argparse_dataclass")
18962 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
18963 (description
18964 "This package provides declarative command-line interfaces using argparse
18965and dataclasses.")
18966 (license license:expat)))
18967
18968(define-public python-argparse-manpage
18969 (package
18970 (name "python-argparse-manpage")
18971 (version "4.7")
18972 (source
18973 (origin
18974 (method url-fetch)
18975 (uri (pypi-uri "argparse_manpage" version))
18976 (sha256
18977 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
18978 (build-system pyproject-build-system)
18979 (arguments
18980 (list
18981 #:test-flags
18982 ;; Tests require PIP.
18983 #~(list "--ignore=tests/test_examples.py")))
18984 (native-inputs
18985 (list python-pytest
18986 python-setuptools))
18987 (home-page "https://github.com/praiskup/argparse-manpage")
18988 (synopsis "Build manual page from Python's ArgumentParser object")
18989 (description
18990 "This package provides tools to build manual pages from Python's
18991@code{ArgumentParser} object.")
18992 (license license:asl2.0)))
18993
18994(define-public python-atomicwrites
18995 (package
18996 (name "python-atomicwrites")
18997 (version "1.4.0")
18998 (source
18999 (origin
19000 (method git-fetch)
19001 (uri (git-reference
19002 (url "https://github.com/untitaker/python-atomicwrites")
19003 (commit version)))
19004 (file-name (git-file-name name version))
19005 (sha256
19006 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
19007 (build-system pyproject-build-system)
19008 (native-inputs (list python-pytest python-setuptools))
19009 (synopsis "Atomic file writes in Python")
19010 (description
19011 "Library for atomic file writes using platform dependent tools
19012for atomic file system operations.")
19013 (home-page "https://github.com/untitaker/python-atomicwrites")
19014 (license license:expat)))
19015
19016(define-public python-qstylizer
19017 (package
19018 (name "python-qstylizer")
19019 (version "0.2.4")
19020 (source
19021 (origin
19022 (method git-fetch)
19023 (uri (git-reference
19024 (url "https://github.com/blambright/qstylizer")
19025 (commit version)))
19026 (file-name (git-file-name name version))
19027 (sha256
19028 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
19029 (build-system pyproject-build-system)
19030 (arguments
19031 (list
19032 #:phases
19033 #~(modify-phases %standard-phases
19034 (add-before 'build 'set-pbr-version
19035 (lambda _
19036 (setenv "PBR_VERSION" "3.0.1"))))))
19037 (native-inputs
19038 (list python-pbr
19039 python-pytest
19040 python-pytest-mock
19041 python-setuptools
19042 python-wheel))
19043 (propagated-inputs
19044 (list python-inflection
19045 python-tinycss2))
19046 (home-page "https://github.com/blambright/qstylizer")
19047 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
19048 (description "@code{qstylizer} is a Python package designed to help with
19049the construction of PyQt/PySide stylesheets.")
19050 (license license:expat)))
19051
19052(define-public python-click-threading
19053 (package
19054 (name "python-click-threading")
19055 (version "0.5.0")
19056 (source
19057 (origin
19058 (method git-fetch)
19059 (uri (git-reference
19060 (url "https://github.com/click-contrib/click-threading")
19061 (commit version)))
19062 (file-name (git-file-name name version))
19063 (sha256
19064 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
19065 (build-system pyproject-build-system)
19066 (native-inputs (list python-pytest python-setuptools))
19067 (propagated-inputs (list python-click))
19068 (synopsis "Utilities for multithreading in Click")
19069 (description
19070 "This package provides utilities for multithreading in Click
19071applications.")
19072 (home-page "https://github.com/click-contrib/click-threading")
19073 (license license:expat)))
19074
19075(define-public python-click-log
19076 (package
19077 (name "python-click-log")
19078 (version "0.3.2")
19079 (source
19080 (origin
19081 (method git-fetch)
19082 (uri (git-reference
19083 (url "https://github.com/click-contrib/click-log")
19084 (commit version)))
19085 (file-name (git-file-name name version))
19086 (sha256
19087 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
19088 (build-system pyproject-build-system)
19089 (native-inputs (list python-pytest python-setuptools))
19090 (propagated-inputs (list python-click))
19091 (synopsis "Logging for click applications")
19092 (description
19093 "This package provides a Python library for logging Click applications.")
19094 (home-page "https://github.com/click-contrib/click-log")
19095 (license license:expat)))
19096
19097(define-public python-click-default-group
19098 (package
19099 (name "python-click-default-group")
19100 (version "1.2.4")
19101 (source
19102 (origin
19103 (method git-fetch) ; no tests in PyPI release
19104 (uri (git-reference
19105 (url "https://github.com/click-contrib/click-default-group")
19106 (commit (string-append "v" version))))
19107 (file-name (git-file-name name version))
19108 (sha256
19109 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
19110 (build-system pyproject-build-system)
19111 (propagated-inputs
19112 (list python-click))
19113 (native-inputs
19114 (list python-flit-core python-pytest))
19115 (synopsis "Extends click.Group")
19116 (description "This package extends click.Group to invoke a command without
19117explicit subcommand name.")
19118 (home-page "https://github.com/click-contrib/click-default-group")
19119 (license license:bsd-3)))
19120
19121(define-public python-apipkg
19122 (package
19123 (name "python-apipkg")
19124 (version "3.0.2")
19125 (source
19126 (origin
19127 (method url-fetch)
19128 (uri (pypi-uri "apipkg" version))
19129 (sha256
19130 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
19131 (build-system pyproject-build-system)
19132 (arguments (list #:tests? #f)) ;no tests in PyPI archvie
19133 (native-inputs
19134 (list python-hatch-vcs
19135 python-hatchling))
19136 (home-page "https://github.com/pytest-dev/apipkg")
19137 (synopsis "Namespace control and lazy-import mechanism")
19138 (description "With apipkg you can control the exported namespace of a Python
19139package and greatly reduce the number of imports for your users. It is a small
19140pure Python module that works on virtually all Python versions.")
19141 (license license:expat)))
19142
19143(define-public python-essentials
19144 (package
19145 (name "python-essentials")
19146 (version "1.1.8")
19147 (source
19148 (origin
19149 (method git-fetch)
19150 (uri (git-reference
19151 (url "https://github.com/Neoteroi/essentials")
19152 (commit (string-append "v" version))))
19153 (file-name (git-file-name name version))
19154 (sha256
19155 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
19156 (build-system pyproject-build-system)
19157 (native-inputs
19158 (list python-hatchling
19159 python-pydantic
19160 python-pytest-asyncio))
19161 (home-page "https://github.com/Neoteroi/essentials/wiki")
19162 (synopsis
19163 "Utility functions, exceptions, and classes for Python applications")
19164 (description
19165 "Essentials is a collection of functions, exceptions, and classes for Python
19166applications. Examples of utilities are exceptions for common scenarios,
19167friendly JSON encoder, decorators for retries and logging.")
19168 (license license:expat)))
19169
19170(define-public python-execnet
19171 (package
19172 (name "python-execnet")
19173 (version "2.1.2")
19174 (source
19175 (origin
19176 (method git-fetch)
19177 (uri (git-reference
19178 (url "https://github.com/pytest-dev/execnet")
19179 (commit (string-append "v" version))))
19180 (file-name (git-file-name name version))
19181 (sha256
19182 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
19183 (build-system pyproject-build-system)
19184 (arguments
19185 (list
19186 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
19187 #:phases
19188 #~(modify-phases %standard-phases
19189 (add-before 'check 'pre-check
19190 (lambda _
19191 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
19192 ;; test in 'testing/test_gateway.py'.
19193 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
19194 (native-inputs
19195 (list python-hatchling
19196 python-hatch-vcs
19197 python-pytest-bootstrap))
19198 (home-page "https://codespeak.net/execnet/")
19199 (synopsis "Rapid multi-Python deployment")
19200 (description
19201 "Execnet provides a share-nothing model with channel-send/receive communication
19202for distributing execution across many Python interpreters across version,
19203platform and network barriers. It has a minimal and fast API targeting the
19204following uses:
19205
19206@enumerate
19207@item distribute tasks to (many) local or remote CPUs
19208@item write and deploy hybrid multi-process applications
19209@item write scripts to administer multiple environments
19210@end enumerate")
19211 (license license:expat)))
19212
19213(define-public python-icalendar
19214 (package
19215 (name "python-icalendar")
19216 (version "5.0.13")
19217 (source (origin
19218 (method url-fetch)
19219 (uri (pypi-uri "icalendar" version))
19220 (sha256
19221 (base32
19222 "01lp0advx60z8wgng8aga1p1668ydn1r6d9qm3d622yfikg9yycj"))))
19223 (build-system pyproject-build-system)
19224 (arguments
19225 (list
19226 #:phases
19227 #~(modify-phases %standard-phases
19228 (replace 'check
19229 (lambda* (#:key tests? #:allow-other-keys)
19230 (when tests?
19231 (invoke "pytest" "-vv" "src/icalendar/tests")))))))
19232 (propagated-inputs
19233 (list python-dateutil python-pytz python-tzdata))
19234 (native-inputs
19235 (list python-pytest python-pytz python-setuptools python-wheel))
19236 (synopsis "Python library for parsing and generating iCalendar files")
19237 (description
19238 "@code{icalendar} is a Python library for parsing and generating iCalendar files.")
19239 (home-page "https://github.com/collective/icalendar")
19240 (license license:bsd-2)))
19241
19242(define-public python-args
19243 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
19244 (revision "0"))
19245 (package
19246 (name "python-args")
19247 (version (git-version "0.1.0" revision commit))
19248 (source
19249 (origin
19250 (method git-fetch)
19251 (uri (git-reference
19252 (url "https://github.com/kennethreitz-archive/args")
19253 (commit commit)))
19254 (file-name (git-file-name name version))
19255 (sha256
19256 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
19257 (build-system pyproject-build-system)
19258 (arguments
19259 (list
19260 #:tests? #f ; XXX: python-nose is deprecated.
19261 #:phases
19262 #~(modify-phases %standard-phases
19263 (add-after 'unpack 'patch-args.py
19264 (lambda _
19265 (substitute* "args.py"
19266 (("basestring")
19267 "str")))))))
19268 (native-inputs (list python-setuptools python-wheel))
19269 (home-page "https://github.com/kennethreitz-archive/args")
19270 (synopsis "Command-line argument parser")
19271 (description
19272 "This library provides a Python module to parse command-line arguments.")
19273 (license license:bsd-3))))
19274
19275(define-public python-clint
19276 (package
19277 (name "python-clint")
19278 (version "0.5.1")
19279 (source (origin
19280 (method url-fetch)
19281 (uri (pypi-uri "clint" version))
19282 (sha256
19283 (base32
19284 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
19285 (build-system pyproject-build-system)
19286 (native-inputs
19287 (list python-pytest python-setuptools python-wheel))
19288 (propagated-inputs
19289 (list python-args))
19290 (home-page "https://github.com/kennethreitz/clint")
19291 (synopsis "Command-line interface tools")
19292 (description
19293 "Clint is a Python module filled with a set of tools for developing
19294command-line applications, including tools for colored and indented
19295output, progress bar display, and pipes.")
19296 (license license:isc)))
19297
19298(define-public python-rply
19299 (package
19300 (name "python-rply")
19301 (version "0.7.8")
19302 (source
19303 (origin
19304 (method git-fetch)
19305 (uri (git-reference
19306 (url "https://github.com/alex/rply")
19307 (commit (string-append "v" version))))
19308 (file-name (git-file-name name version))
19309 (sha256
19310 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
19311 (build-system pyproject-build-system)
19312 (arguments
19313 (list
19314 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
19315 #:phases
19316 #~(modify-phases %standard-phases
19317 (add-before 'check 'fix-pytest-use
19318 (lambda _
19319 (substitute* (find-files "tests" "\\.py$")
19320 (("import py")
19321 "import pytest")
19322 (("py\\.test")
19323 "pytest"))
19324 (setenv "HOME" (getcwd)))))))
19325 (native-inputs (list python-pytest python-setuptools))
19326 (propagated-inputs (list python-appdirs))
19327 (home-page "https://github.com/alex/rply")
19328 (synopsis "Parser generator for Python")
19329 (description
19330 "This package provides a pure Python based parser generator, that also
19331works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
19332with a new public API, and RPython support.")
19333 (license license:bsd-3)))
19334
19335(define-public python-hy
19336 (package
19337 (name "python-hy")
19338 (version "1.2.0")
19339 (source
19340 (origin
19341 (method git-fetch) ;no tests in PyPI release
19342 (uri (git-reference
19343 (url "https://github.com/hylang/hy")
19344 (commit version)))
19345 (file-name (git-file-name name version))
19346 (sha256
19347 (base32 "1z5p5y2k8g3j264lvzvlzkyc1d1dqs8j5ixnmm79xh7jkcgi7adq"))))
19348 (build-system pyproject-build-system)
19349 (arguments
19350 (list
19351 ;; This test expects the hy executable to be called 'hy', but in Guix
19352 ;; it's .hy-real.
19353 #:test-flags #~(list "-k" "not test_sys_executable")))
19354 (native-inputs (list python-pytest python-setuptools python-wheel))
19355 (propagated-inputs (list python-funcparserlib))
19356 (home-page "https://docs.hylang.org/en/stable/")
19357 (synopsis "Lisp frontend to Python")
19358 (description
19359 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
19360its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
19361Python at your fingertips, in Lisp form.")
19362 (license license:expat)))
19363
19364(define-public python-hissp
19365 (package
19366 (name "python-hissp")
19367 (version "0.5.0")
19368 (source
19369 (origin
19370 (method git-fetch)
19371 (uri (git-reference
19372 (url "https://github.com/gilch/hissp")
19373 (commit (string-append "v" version))))
19374 (file-name (git-file-name name version))
19375 (sha256
19376 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
19377 (build-system pyproject-build-system)
19378 (arguments (list #:test-backend #~'unittest))
19379 (native-inputs (list python-hypothesis python-setuptools))
19380 (home-page "https://github.com/gilch/hissp")
19381 (synopsis "It's Python with a Lissp")
19382 (description
19383 "Hissp is a modular Lisp implementation that compiles to a functional
19384subset of Python—Syntactic macro metaprogramming with full access to the
19385Python ecosystem.")
19386 (license license:asl2.0)))
19387
19388(define-public python-promise
19389 (package
19390 (name "python-promise")
19391 (version "2.3.0")
19392 (source
19393 (origin
19394 (method git-fetch)
19395 (uri (git-reference
19396 (url "https://github.com/syrusakbary/promise")
19397 (commit (string-append "v" version))))
19398 (file-name (git-file-name name version))
19399 (sha256
19400 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
19401 (build-system pyproject-build-system)
19402 (arguments
19403 (list
19404 #:test-flags
19405 #~(list "--ignore=tests/test_benchmark.py"
19406 ;; Issues with pytest-asyncio
19407 "--ignore=tests/test_awaitable.py"
19408 "-k" (string-join
19409 (list "not test_issue_9_safe"
19410 ;; Stacktrace issues.
19411 "test_thrown_exceptions_have_stacktrace"
19412 "test_thrown_exceptions_preserve_stacktrace")
19413 " and not "))))
19414 (native-inputs
19415 (list python-mock
19416 python-pytest
19417 python-pytest-asyncio
19418 python-setuptools))
19419 (propagated-inputs (list python-six))
19420 (home-page "https://github.com/syrusakbary/promise")
19421 (synopsis "Promises/A+ implementation for Python")
19422 (description
19423 "This package provides an implementation of Promises in Python. It is a
19424super set of Promises/A+ designed to have readable, performant code and to
19425provide just the extensions that are absolutely necessary for using promises
19426in Python.")
19427 (license license:expat)))
19428
19429(define-public python-progress
19430 (package
19431 (name "python-progress")
19432 (version "1.6")
19433 (source
19434 (origin
19435 (method git-fetch)
19436 (uri (git-reference
19437 (url "https://github.com/verigak/progress/")
19438 (commit version)))
19439 (file-name (git-file-name name version))
19440 (sha256
19441 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
19442 (snippet #~(delete-file "demo.gif"))))
19443 (build-system pyproject-build-system)
19444 (arguments
19445 (list
19446 #:test-backend #~'custom
19447 #:test-flags #~(list "test_progress.py")))
19448 (native-inputs (list python-setuptools))
19449 (home-page "https://github.com/verigak/progress/")
19450 (synopsis "Progress reporting bars for Python")
19451 (description
19452 "This Python package provides progress reporting for visual of progress
19453of long running operations. There are multiple choices of progress bars and
19454spinners, with customizable options, such as width, fill character, and
19455suffix.")
19456 (license license:isc)))
19457
19458(define-public python-progressbar2
19459 (package
19460 (name "python-progressbar2")
19461 (version "4.5.0")
19462 (source
19463 (origin
19464 (method url-fetch)
19465 (uri (pypi-uri "progressbar2" version))
19466 (sha256
19467 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
19468 (build-system pyproject-build-system)
19469 (arguments
19470 (list
19471 #:test-flags #~(list "--pyargs" "progressbar" "tests")
19472 #:phases
19473 #~(modify-phases %standard-phases
19474 (add-after 'unpack 'fix-pytest-config
19475 (lambda _
19476 ;; Drop test coverage requirements.
19477 (substitute* "pytest.ini"
19478 ((".*-cov.*") "")))))))
19479 (native-inputs
19480 (list python-dill
19481 python-pytest
19482 python-freezegun
19483 python-setuptools
19484 python-setuptools-scm
19485 python-wheel))
19486 (propagated-inputs
19487 (list python-utils))
19488 (home-page "https://github.com/WoLpH/python-progressbar")
19489 (synopsis "Text progress bar library for Python")
19490 (description
19491 "This package provides a Python progressbar library to provide
19492visual (yet text based) progress to long running operations.")
19493 (license license:bsd-3)))
19494
19495(define-public python-progressbar33
19496 (package
19497 (name "python-progressbar33")
19498 (version "2.4")
19499 (source
19500 (origin
19501 (method git-fetch)
19502 (uri (git-reference
19503 (url "https://github.com/germangh/python-progressbar")
19504 (commit (string-append "v" version))))
19505 (file-name (git-file-name name version))
19506 (sha256
19507 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
19508 (build-system pyproject-build-system)
19509 (arguments
19510 (list
19511 #:test-backend #~'custom
19512 #:test-flags #~(list "examples.py")))
19513 (native-inputs (list python-setuptools))
19514 (home-page "https://github.com/germangh/python-progressbar")
19515 (synopsis "Text progress bar library for Python")
19516 (description
19517 "This package provides a text progress bar library for Python. This
19518version only differs from the original @code{progressbar} package in that it
19519uses relative package imports instead of absolute imports, which is necessary
19520for the module to work under Python 3.3.")
19521 ;; Either or both of these licenses may be selected.
19522 (license (list license:lgpl2.1+ license:bsd-3))))
19523
19524;; XXX: Not maintained since 2012.
19525(define-public python-monthdelta
19526 (package
19527 (name "python-monthdelta")
19528 (version "0.9.1")
19529 (source
19530 (origin
19531 (method url-fetch)
19532 (uri (pypi-uri "MonthDelta" version))
19533 (sha256
19534 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
19535 (build-system pyproject-build-system)
19536 (arguments
19537 (list #:tests? #f)) ; No tests.
19538 (native-inputs (list python-setuptools))
19539 (home-page "http://packages.python.org/MonthDelta")
19540 (synopsis "Date computations with months")
19541 (description
19542 "MonthDelta provides functionality to do date computations with months.")
19543 (license license:expat)))
19544
19545(define-public python-moto
19546 (package
19547 (name "python-moto")
19548 (version "5.1.20")
19549 (source (origin
19550 (method url-fetch)
19551 (uri (pypi-uri "moto" version))
19552 (sha256
19553 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
19554 (build-system pyproject-build-system)
19555 (arguments
19556 (list
19557 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
19558 #:test-flags
19559 #~(list "-m" "not network and not requires_docker"
19560 ;; Not all of the tests are thread save, see:
19561 ;; <https://github.com/getmoto/moto/issues/7786>.
19562 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
19563 "-k" (string-join
19564 ;; Network access is required.
19565 (list "not test_passthrough_calls_for_entire_service"
19566 "test_passthrough_calls_for_specific_url"
19567 "test_passthrough_calls_for_wildcard_urls"
19568 "test_put_record_batch_http_destination"
19569 "test_put_record_http_destination"
19570 "test_s3_server_post_cors_multiple_origins"
19571 "test_with_custom_request_header"
19572 ;; AttributeError: 'ImportError' object has no
19573 ;; attribute 'message'
19574 "test_batch_update"
19575 "test_batch_update__not_enough_parameters"
19576 "test_execute_transaction"
19577 "test_without_primary_key_in_where_clause")
19578 " and not ")
19579 "tests")
19580 #:phases
19581 #~(modify-phases %standard-phases
19582 (add-after 'unpack 'patch-hardcoded-executable-names
19583 (lambda* (#:key inputs #:allow-other-keys)
19584 (let ((bash-exec (search-input-file inputs "/bin/sh")))
19585 (substitute* "moto/batch/models.py"
19586 (("/bin/sh") bash-exec))
19587 (substitute* (find-files "tests" "\\.py$")
19588 (("#!/bin/bash") (string-append "#!" bash-exec))))))
19589 (add-before 'check 'pre-check
19590 (lambda _
19591 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
19592 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
19593 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
19594 (native-inputs
19595 (list python-flask
19596 python-flask-cors
19597 python-freezegun
19598 python-pycognito
19599 python-pyotp
19600 python-pytest
19601 python-setuptools))
19602 (inputs
19603 (list bash-minimal))
19604 (propagated-inputs
19605 (list python-antlr4-runtime
19606 python-aws-xray-sdk
19607 python-boto3
19608 python-botocore
19609 python-cfn-lint
19610 python-cryptography
19611 python-dateutil
19612 python-graphql-core
19613 python-jinja2
19614 python-joserfc
19615 python-jsonpath-ng
19616 python-multipart
19617 python-openapi-spec-validator
19618 python-py-partiql-parser
19619 python-pyparsing
19620 python-requests
19621 python-responses
19622 python-werkzeug
19623 python-xmltodict))
19624 (home-page "https://github.com/spulec/moto")
19625 (synopsis "Mock out the boto library")
19626 (description
19627 "@code{moto} is a library designed to easily mock out the
19628@code{boto} library.")
19629 (license license:asl2.0)))
19630
19631(define-public python-plumbum
19632 (package
19633 (name "python-plumbum")
19634 (version "1.7.0")
19635 (source
19636 (origin
19637 (method git-fetch)
19638 (uri (git-reference
19639 (url "https://github.com/tomerfiliba/plumbum")
19640 (commit (string-append "v" version))))
19641 (file-name (git-file-name name version))
19642 (sha256
19643 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
19644 (build-system pyproject-build-system)
19645 (arguments
19646 (list
19647 #:test-flags
19648 #~(list "--ignore=tests/test_remote.py"
19649 "--ignore=tests/test_putty.py"
19650 "--ignore=tests/test_sudo.py"
19651 "-k"
19652 (string-join (list "not test_home"
19653 "test_iter_lines_error"
19654 "test_quoting"
19655 "test_copy_move_delete")
19656 " and not "))))
19657 (native-inputs
19658 (list procps
19659 python-psutil
19660 python-pytest
19661 python-pytest-cov
19662 python-setuptools
19663 python-setuptools-scm
19664 python-wheel))
19665 (home-page "https://plumbum.readthedocs.io")
19666 (synopsis "Python shell combinators library")
19667 (description
19668 "Plumbum is a library of tools for replacing shell scripts with Python
19669code.")
19670 (license license:expat)))
19671
19672(define-public python-deprecation
19673 (package
19674 (name "python-deprecation")
19675 (version "2.1.0")
19676 (source
19677 (origin
19678 (method url-fetch)
19679 (uri (pypi-uri "deprecation" version))
19680 (sha256
19681 (base32
19682 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
19683 (build-system pyproject-build-system)
19684 (arguments
19685 (list
19686 #:test-backend #~'unittest
19687 #:phases
19688 #~(modify-phases %standard-phases
19689 (add-after 'unpack 'drop-unittest2
19690 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
19691 (lambda _
19692 (substitute* "tests/test_deprecation.py"
19693 (("import unittest2")
19694 "import unittest as unittest2")))))))
19695 (native-inputs
19696 (list python-setuptools))
19697 (propagated-inputs
19698 (list python-packaging))
19699 (home-page "https://deprecation.readthedocs.io/")
19700 (synopsis "Python library to handle automated deprecations")
19701 (description
19702 "This is a library that enables automated deprecations. It offers the
19703@code{deprecated()} decorator to wrap functions, providing proper warnings
19704both in documentation and via Python’s warnings system, as well as the
19705@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
19706that deprecated code is eventually removed.")
19707 (license license:asl2.0)))
19708
19709(define-public python-jmespath
19710 (package
19711 (name "python-jmespath")
19712 (version "1.0.1")
19713 (source
19714 (origin
19715 (method url-fetch)
19716 (uri (pypi-uri "jmespath" version))
19717 (sha256
19718 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
19719 (build-system pyproject-build-system)
19720 (native-inputs
19721 (list python-pytest
19722 python-setuptools))
19723 (home-page "https://github.com/jmespath/jmespath.py")
19724 (synopsis "JSON Matching Expressions")
19725 (description
19726 "JMESPath (pronounced “james path”) is a Python library that allows one
19727to declaratively specify how to extract elements from a JSON document.")
19728 (license license:expat)))
19729
19730(define-public python-asteval
19731 (package
19732 (name "python-asteval")
19733 (version "1.0.6")
19734 (source
19735 (origin
19736 (method url-fetch)
19737 (uri (pypi-uri "asteval" version))
19738 (sha256
19739 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
19740 (build-system pyproject-build-system)
19741 (native-inputs
19742 (list python-pytest
19743 python-pytest-cov
19744 python-setuptools
19745 python-setuptools-scm))
19746 (home-page "https://github.com/newville/asteval")
19747 (synopsis "Minimalistic evaluator of Python expressions")
19748 (description
19749 "This package provides a minimalistic evaluator of Python expression
19750using the @code{ast} module.")
19751 (license license:expat)))
19752
19753(define-public python-lmfit
19754 (package
19755 (name "python-lmfit")
19756 (version "1.3.4")
19757 (source
19758 (origin
19759 (method url-fetch)
19760 (uri (pypi-uri "lmfit" version))
19761 (sha256
19762 (base32
19763 "15z4zcyc4crfdw22qnbaq8wrf552jgl83gd3nk2zc5zp8f6c48iw"))))
19764 (build-system pyproject-build-system)
19765 (arguments
19766 (list
19767 #:test-flags
19768 ;; Costly tests that may fail with multiprocessing.context.TimeoutError.
19769 #~(list "--ignore=tests/test_jacobian_pickling.py")
19770 #:phases
19771 #~(modify-phases %standard-phases
19772 ;; XXX: Unclear why, but the phase seems broken.
19773 ;; asteval>=1.0 is not understood correctly.
19774 (delete 'sanity-check))))
19775 (propagated-inputs
19776 (list python-asteval python-dill python-numpy python-scipy
19777 python-uncertainties))
19778 (native-inputs
19779 (list python-pytest python-pytest-cov python-setuptools))
19780 (home-page "https://lmfit.github.io/lmfit-py/")
19781 (synopsis "Least-Squares minimization with bounds and constraints")
19782 (description
19783 "Lmfit provides a high-level interface to non-linear optimization and
19784curve fitting problems for Python. It builds on and extends many of the
19785optimization methods of @code{scipy.optimize}. Initially inspired by (and
19786named for) extending the Levenberg-Marquardt method from
19787@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
19788enhancements to optimization and data fitting problems.")
19789 (license license:bsd-3)))
19790
19791(define-public python-bokeh
19792 (package
19793 (name "python-bokeh")
19794 (version "3.7.3")
19795 (source (origin
19796 (method url-fetch)
19797 (uri (pypi-uri "bokeh" version))
19798 (sha256
19799 (base32
19800 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
19801 (build-system pyproject-build-system)
19802 (arguments
19803 (list
19804 ;; FIXME: Most of the tests do not work, figure out how to enable some
19805 ;; portion.
19806 #:tests? #f
19807 #:test-flags
19808 '(list
19809 ;; These require selenium.
19810 "--ignore=tests/unit/bokeh/io/test_export.py"
19811 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
19812 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
19813
19814 ;; Doesn't find ManagedServerLoop fixture
19815 "--ignore=tests/unit/bokeh/test_client_server.py"
19816
19817 ;; This fails because of the Guix wrapper around pytest
19818 "--ignore=tests/unit/bokeh/io/test_util__io.py"
19819
19820 ;; Fixture ipython not found.
19821 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
19822 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
19823
19824 ;; pd fixture not found.
19825 "--ignore=tests/unit/bokeh/models/test_mappers.py"
19826 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
19827 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
19828 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
19829 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
19830 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
19831 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
19832 "--ignore=tests/unit/bokeh/core/property/test_container.py"
19833 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
19834 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
19835 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
19836
19837 ;; nx fixture not found.
19838 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
19839 "--ignore=tests/unit/bokeh/models/test_graphs.py"
19840 "--ignore=tests/unit/bokeh/io/test_showing.py"
19841 "--ignore=tests/unit/bokeh/document/test_events__document.py"
19842
19843 ;; These tests need external sample data
19844 "--ignore-glob=tests/unit/bokeh/sampledata/*"
19845
19846 ;; Attempts to install something via npm.
19847 "--ignore=tests/unit/bokeh/test_ext.py"
19848
19849 ;; More failures due to set up problems.
19850 "--ignore=tests/unit/bokeh/server/test_server__server.py"
19851 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
19852 "--ignore=tests/unit/bokeh/util/test_serialization.py"
19853 "--ignore=tests/unit/bokeh/util/test_hex.py"
19854 "--ignore=tests/unit/bokeh/models/test_sources.py"
19855 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
19856
19857 "-k"
19858 (string-append
19859 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
19860 ;; Did you mean: 'assert_called_once_with'?
19861 "not test_set_from_json"
19862
19863 ;; XXX: This one test transforms a gif of a red box. It transforms
19864 ;; it all right but the base64 doesn't look as expected, probably
19865 ;; because of a change in pillow.
19866 " and not test_transform_PIL"))
19867 #:phases
19868 #~(modify-phases %standard-phases
19869 (add-before 'build 'set-version
19870 (lambda _
19871 (substitute* "pyproject.toml"
19872 ((", \"setuptools-git-versioning\"") "")
19873 (("dynamic = \\[\"version\"\\]")
19874 (string-append "version = '" #$version "'"))))))))
19875 (propagated-inputs
19876 (list node-lts
19877 python-contourpy
19878 python-jinja2
19879 python-narwhals
19880 python-numpy
19881 python-packaging
19882 python-pandas
19883 python-pillow
19884 python-pyyaml
19885 python-tornado
19886 python-xyzservices))
19887 (native-inputs
19888 (list python-beautifulsoup4
19889 python-dateutil
19890 python-flaky
19891 python-mock
19892 python-nbconvert
19893 python-pandas
19894 python-pytest
19895 python-pytz
19896 python-requests
19897 python-setuptools
19898 python-wheel))
19899 (home-page "https://github.com/bokeh/bokeh")
19900 (synopsis "Interactive plots and applications in the browser from Python")
19901 (description
19902 "This package provides tools for interactive plots and applications in the
19903browser from Python.")
19904 (license license:bsd-3)))
19905
19906;; TODO: Move to python-web.
19907(define-public python-botocore
19908 ;; Note: When updating botocore, also make sure that boto3 and awscli
19909 ;; are compatible.
19910 (package
19911 (name "python-botocore")
19912 (version "1.42.5")
19913 (source
19914 (origin
19915 (method url-fetch)
19916 (uri (pypi-uri "botocore" version))
19917 (sha256
19918 (base32
19919 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
19920 (build-system pyproject-build-system)
19921 (arguments
19922 (list
19923 ;; tests: 4496 passed, 87 skipped
19924 #:test-flags
19925 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
19926 ;; The full test suite is huge, run some of it's portion.
19927 "--ignore=tests/integration"
19928 "--ignore=tests/functional")))
19929 (native-inputs
19930 (list python-jsonschema
19931 python-pytest
19932 python-pytest-xdist
19933 python-setuptools))
19934 (propagated-inputs
19935 (list python-dateutil
19936 python-jmespath
19937 python-urllib3))
19938 (home-page "https://github.com/boto/botocore")
19939 (synopsis "Low-level interface to AWS")
19940 (description
19941 "Botocore is a Python library that provides a low-level interface to the
19942Amazon Web Services (AWS) API.")
19943 (license license:asl2.0)))
19944
19945(define-public python-boto3
19946 (package
19947 (name "python-boto3")
19948 (version "1.42.5")
19949 (source
19950 (origin
19951 (method git-fetch)
19952 (uri (git-reference
19953 (url "https://github.com/boto/boto3")
19954 (commit version)))
19955 (file-name (git-file-name name version))
19956 (sha256
19957 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
19958 (build-system pyproject-build-system)
19959 (arguments
19960 (list
19961 ;; tests: 1435 passed, 22 skipped, 1 warning
19962 #:test-flags
19963 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
19964 ;; Integration tests are trying to connect to AWS.
19965 "--ignore=tests/integration")))
19966 (native-inputs
19967 (list python-mock
19968 python-pytest
19969 python-pytest-xdist
19970 python-setuptools))
19971 (propagated-inputs
19972 (list python-botocore
19973 python-jmespath
19974 python-s3transfer))
19975 (home-page "https://github.com/boto/boto3")
19976 (synopsis "AWS SDK for Python")
19977 (description
19978 "Boto3 is a Python library for writing programs that interact with
19979@acronym{AWS,Amazon Web Services}.")
19980 (license license:asl2.0)))
19981
19982(define-public python-pyfiglet
19983 (package
19984 (name "python-pyfiglet")
19985 (version "1.0.4")
19986 (source
19987 (origin
19988 (method git-fetch)
19989 (uri (git-reference
19990 (url "https://github.com/pwaller/pyfiglet")
19991 (commit (string-append "v" version))))
19992 (file-name (git-file-name name version))
19993 (sha256
19994 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
19995 (build-system pyproject-build-system)
19996 (arguments
19997 (list
19998 #:phases
19999 #~(modify-phases %standard-phases
20000 (add-after 'unpack 'fallback-on-default-build
20001 (lambda _
20002 ;; This pyproject has little value and fails because of the
20003 ;; :__legacy__ suffix. Removing it to rely on defaults.
20004 (delete-file "pyproject.toml"))))))
20005 (native-inputs (list python-pytest python-setuptools))
20006 (home-page "https://github.com/pwaller/pyfiglet")
20007 (synopsis "Draw ASCII art big letters in Python")
20008 (description
20009 "This module lets you draw large letter from ordinary characters in pure
20010 Python.")
20011 (license license:expat)))
20012
20013(define-public python-mako
20014 (package
20015 (name "python-mako")
20016 (version "1.3.10")
20017 (source
20018 (origin
20019 (method url-fetch)
20020 (uri (pypi-uri "mako" version))
20021 (sha256
20022 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
20023 (build-system pyproject-build-system)
20024 (native-inputs
20025 (list python-pytest
20026 python-setuptools
20027 python-wheel))
20028 (propagated-inputs
20029 (list python-markupsafe))
20030 (home-page "https://www.makotemplates.org/")
20031 (synopsis "Templating language for Python")
20032 (description "Mako is a templating language for Python that compiles
20033templates into Python modules.")
20034 (license license:expat)))
20035
20036(define-public python-cookiecutter
20037 (package
20038 (name "python-cookiecutter")
20039 (version "2.6.0")
20040 (source
20041 (origin
20042 (method url-fetch)
20043 (uri (pypi-uri "cookiecutter" version))
20044 (sha256
20045 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
20046 (build-system pyproject-build-system)
20047 (arguments
20048 (list
20049 #:phases #~(modify-phases %standard-phases
20050 (add-before 'check 'pre-check
20051 (lambda _
20052 ;; test_get_user_config.py requires a writable home
20053 ;; directory.
20054 (setenv "HOME"
20055 (getcwd))
20056 ;; test_hooks.py dynamically creates shell scripts
20057 ;; with a /bin/bash shebang. We have to patch these.
20058 (substitute* "tests/test_hooks.py"
20059 (("/bin/bash")
20060 (string-append #$(this-package-native-input
20061 "bash-minimal") "/bin/bash"))))))))
20062 (native-inputs (list bash-minimal
20063 git-minimal
20064 python-freezegun
20065 python-pytest
20066 python-pytest-cov
20067 python-pytest-mock
20068 python-setuptools
20069 python-wheel))
20070 (propagated-inputs (list python-arrow
20071 python-binaryornot
20072 python-click
20073 python-jinja2
20074 python-pyyaml
20075 python-requests
20076 python-rich
20077 python-slugify))
20078 (home-page "https://github.com/cookiecutter/cookiecutter")
20079 (synopsis
20080 "Command-line utility that creates projects from project templates")
20081 (description
20082 "This package provides a command-line utility that creates projects from
20083project templates, e.g. creating a Python package project from a Python package
20084project template.")
20085 (license license:bsd-3)))
20086
20087(define-public python-pyquery
20088 (package
20089 (name "python-pyquery")
20090 (version "2.0.1")
20091 (source
20092 (origin
20093 (method url-fetch)
20094 (uri (pypi-uri "pyquery" version))
20095 (sha256
20096 (base32
20097 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
20098 (build-system pyproject-build-system)
20099 (arguments
20100 (list
20101 #:test-flags
20102 #~(list #$@(map (lambda (test) (string-append
20103 "--deselect=tests/test_pyquery.py::"
20104 test))
20105 (list
20106 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
20107 "TestWebScrapping::test_post"
20108 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
20109 "TestWebScrapping::test_session"
20110 ;; Assertion is not equal.
20111 "TestManipulating::test_val_for_textarea"
20112 "TestHTMLParser::test_replaceWith"
20113 "TestHTMLParser::test_replaceWith_with_function"
20114 ;; Network access is required.
20115 "TestWebScrapping::test_get"
20116 "TestWebScrappingEncoding::test_get")))))
20117 (native-inputs
20118 (list python-pytest
20119 python-pytest-cov
20120 python-requests
20121 python-setuptools
20122 python-webob
20123 python-webtest
20124 python-wheel))
20125 (propagated-inputs
20126 (list python-cssselect python-lxml))
20127 (home-page "https://github.com/gawel/pyquery")
20128 (synopsis "Make jQuery-like queries on xml documents")
20129 (description "pyquery allows you to make jQuery queries on xml documents.
20130The API is as much as possible the similar to jQuery. pyquery uses lxml for
20131fast xml and html manipulation.")
20132 (license license:bsd-3)))
20133
20134(define-public python-amqp
20135 (package
20136 (name "python-amqp")
20137 (version "5.1.1")
20138 (source
20139 (origin
20140 (method url-fetch)
20141 (uri (pypi-uri "amqp" version))
20142 (sha256
20143 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
20144 (build-system pyproject-build-system)
20145 (arguments
20146 (list ; Integration tests require network connectivity.
20147 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
20148 (native-inputs (list python-pytest python-setuptools python-wheel))
20149 (propagated-inputs (list python-vine))
20150 (home-page "https://github.com/celery/py-amqp")
20151 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
20152 (description
20153 "This is a fork of amqplib which was originally written by Barry Pederson.
20154It is maintained by the Celery project, and used by kombu as a pure python
20155alternative when librabbitmq is not available.")
20156 (license license:lgpl2.1+)))
20157
20158(define-public python-benchmark-4dn
20159 (package
20160 (name "python-benchmark-4dn")
20161 (version "0.5.24")
20162 (source (origin
20163 (method url-fetch)
20164 (uri (pypi-uri "benchmark_4dn" version))
20165 (sha256
20166 (base32
20167 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
20168 (properties '(("upstream-name" . "benchmark_4dn")))
20169 (build-system pyproject-build-system)
20170 ;; There are none.
20171 (arguments (list #:tests? #false))
20172 (native-inputs
20173 (list python-poetry-core))
20174 (home-page "https://github.com/SooLee/Benchmark/")
20175 (synopsis "Benchmark functions for CWL workflows")
20176 (description
20177 "This package provides benchmark functions that return total space, memory,
20178CPUs required per given input size, and parameters for CWL workflows.")
20179 (license license:expat)))
20180
20181(define-public python-beniget
20182 (package
20183 (name "python-beniget")
20184 (version "0.4.2.post1")
20185 (source
20186 (origin
20187 (method url-fetch)
20188 (uri (pypi-uri "beniget" version))
20189 (sha256
20190 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
20191 (build-system pyproject-build-system)
20192 (native-inputs
20193 (list python-pytest
20194 python-setuptools))
20195 (propagated-inputs
20196 (list python-gast))
20197 (home-page "https://github.com/serge-sans-paille/beniget")
20198 (synopsis "Extract semantic information about static Python code")
20199 (description
20200 "Beniget is a collection of analyzers for Python @acronym{AST,
20201Abstract Syntax Tree}. It is a building block for writing a static analyzer
20202or compiler for Python.")
20203 (license license:bsd-3)))
20204
20205(define-public python-kombu
20206 (package
20207 (name "python-kombu")
20208 (version "5.6.2")
20209 (source
20210 (origin
20211 (method git-fetch)
20212 (uri (git-reference
20213 (url "https://github.com/celery/kombu")
20214 (commit (string-append "v" version))))
20215 (file-name (git-file-name name version))
20216 (sha256
20217 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
20218 (build-system pyproject-build-system)
20219 (arguments
20220 (list
20221 ;; tests: 854 passed, 193 skipped
20222 #:test-flags
20223 #~(list
20224 ;; TODO: Package azure-identity (required for this file)
20225 "--ignore=t/unit/transport/test_azurestoragequeues.py"
20226 ;; XXX: Requires google-cloud-pubsub.
20227 "--ignore=t/unit/transport/test_gcpubsub.py"
20228 ;; XXX: Requires pyro, see:
20229 ;; <https://codeberg.org/guix/guix/issues/5857>
20230 "--ignore=t/unit/transport/test_pyro.py")
20231 #:phases
20232 #~(modify-phases %standard-phases
20233 (add-after 'unpack 'relax-requirements
20234 (lambda _
20235 (substitute* "requirements/default.txt"
20236 (("tzdata>=2025.2")
20237 "tzdata>=2025.1")))))))
20238 (native-inputs
20239 (list python-botocore
20240 python-pytest
20241 python-pytest-freezer
20242 python-pytest-sugar
20243 python-setuptools))
20244 (propagated-inputs
20245 (list python-amqp
20246 python-packaging
20247 python-tzdata
20248 python-vine))
20249 (home-page "https://kombu.readthedocs.io")
20250 (synopsis "Message passing library for Python")
20251 (description
20252 "The aim of Kombu is to make messaging in Python as easy as possible by
20253providing an idiomatic high-level interface for the AMQ protocol, and also
20254provide proven and tested solutions to common messaging problems. AMQP is the
20255Advanced Message Queuing Protocol, an open standard protocol for message
20256orientation, queuing, routing, reliability and security, for which the
20257RabbitMQ messaging server is the most popular implementation.")
20258 (license license:bsd-3)))
20259
20260(define-public python-billiard
20261 (package
20262 (name "python-billiard")
20263 (version "4.2.2")
20264 (source
20265 (origin
20266 (method git-fetch)
20267 (uri (git-reference
20268 (url "https://github.com/celery/billiard")
20269 (commit (string-append "v" version))))
20270 (file-name (git-file-name name version))
20271 (sha256
20272 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
20273 (build-system pyproject-build-system)
20274 (arguments
20275 (list
20276 #:phases
20277 #~(modify-phases %standard-phases
20278 (add-after 'unpack 'remove-win-files
20279 (lambda _
20280 (for-each delete-file-recursively
20281 '("billiard/popen_spawn_win32.py"
20282 "billiard/_win.py")))))))
20283 (native-inputs (list python-psutil python-pytest python-setuptools))
20284 (home-page "https://github.com/celery/billiard")
20285 (synopsis "Python multiprocessing fork with improvements and bugfixes")
20286 (description
20287 "Billiard is a fork of the Python 2.7 multiprocessing package. The
20288multiprocessing package itself is a renamed and updated version of R Oudkerk's
20289pyprocessing package. This standalone variant is intended to be compatible with
20290Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
20291 (license license:bsd-3)))
20292
20293(define-public python-celery
20294 (package
20295 (name "python-celery")
20296 (version "5.6.2")
20297 (source
20298 (origin
20299 (method url-fetch)
20300 (uri (pypi-uri "celery" version))
20301 (sha256
20302 (base32 "16q0hlsw9p2mri1c1i2l4knq2d8hf83h4a9vglqpdbgjzk1j32aa"))))
20303 (build-system pyproject-build-system)
20304 (arguments
20305 (list
20306 ;; tests: 3248 passed, 26 skipped, 8 deselected, 3 xfailed, 54 warnings,
20307 ;; 28958 subtests passed
20308 #:test-flags
20309 ;; The MongoDB backend test appears to expect an older version of
20310 ;; MongoDB which provided its own bson module, fails with "
20311 ;; AttributeError: module 'bson' has no attribute 'encode'".
20312 #~(list "--ignore=t/unit/backends/test_mongodb.py"
20313 ;; XXX: Requires google-cloud-firestore
20314 "--ignore=t/unit/backends/test_gcs.py"
20315 "-k" (string-join
20316 (list ;; AssertionError.
20317 "not test_check_privileges_no_fchown"
20318 ;; These 3 tests error out on ci.guix.gnu.org with
20319 ;; OSError: [Errno 24] Too many open files
20320 "test_register_with_event_loop__no_on_tick_dupes"
20321 "test_with_autoscaler_file_descriptor_safety"
20322 "test_with_file_descriptor_safety"
20323 ;; XXX: Fails to compare local timezones.
20324 "test_use_local_timezone")
20325 " and not "))))
20326 (native-inputs
20327 (list python-azure-core
20328 python-dnspython
20329 python-flaky
20330 python-gevent
20331 python-google-cloud-storage
20332 python-iniconfig
20333 python-moto
20334 python-msgpack
20335 python-pymongo
20336 python-pytest
20337 python-pytest-celery
20338 python-pytest-click
20339 python-pytest-order
20340 python-pytest-subtests
20341 python-pytest-timeout
20342 python-redis
20343 python-setuptools))
20344 (propagated-inputs
20345 (list python-billiard
20346 python-click
20347 python-click-didyoumean
20348 python-click-plugins-1
20349 python-click-repl
20350 python-dateutil
20351 python-kombu
20352 python-tzlocal
20353 python-vine))
20354 (home-page "https://celeryproject.org")
20355 (synopsis "Distributed Task Queue")
20356 (description
20357 "Celery is an asynchronous task queue/job queue based on distributed
20358message passing. It is focused on real-time operation, but supports
20359scheduling as well. The execution units, called tasks, are executed
20360concurrently on a single or more worker servers using multiprocessing,
20361Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
20362synchronously (wait until ready).")
20363 (license license:bsd-3)))
20364
20365;; A bare minimal package, mainly to use in tests and reduce closure
20366;; size. Tests are left out in the main package to slim down native-inputs.
20367(define-public python-celery-minimal
20368 (package/inherit python-celery
20369 (name "python-celery-minimal")
20370 (arguments
20371 (list #:tests? #f))
20372 (native-inputs
20373 (list python-setuptools))))
20374
20375(define-public python-anyqt
20376 (package
20377 (name "python-anyqt")
20378 (version "0.2.1")
20379 (source
20380 (origin
20381 (method git-fetch)
20382 (uri (git-reference
20383 (url "https://github.com/ales-erjavec/anyqt")
20384 (commit version)))
20385 (file-name (git-file-name name version))
20386 (sha256
20387 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
20388 (build-system pyproject-build-system)
20389 (arguments
20390 (list
20391 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
20392 ;; TODO Add/configure the right Qt inputs.
20393 #:test-flags
20394 #~(list "--ignore-glob=tests/test_q*.py")
20395 #:phases
20396 #~(modify-phases %standard-phases
20397 (add-after 'unpack 'delete-files
20398 ;; Delete files related to other operating systems.
20399 (lambda _
20400 (delete-file "AnyQt/QtMacExtras.py")
20401 (delete-file "AnyQt/QtWinExtras.py"))))))
20402 (native-inputs
20403 (list python-pyqt-6
20404 python-pytest
20405 python-pytest-qt
20406 python-setuptools))
20407 (home-page "https://github.com/ales-erjavec/anyqt")
20408 (synopsis "PyQt compatibility layer")
20409 (description
20410 "This package provides a PyQt/PySide compatibility layer. More precisely,
20411it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
20412PySide, PySide2.")
20413 (license license:gpl3)))
20414
20415(define-public python-qasync
20416 (package
20417 (name "python-qasync")
20418 (version "0.28.0")
20419 (source
20420 (origin
20421 (method git-fetch)
20422 (uri (git-reference
20423 (url "https://github.com/CabbageDevelopment/qasync/")
20424 (commit (string-append "v" version))))
20425 (file-name (git-file-name name version))
20426 (sha256
20427 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
20428 (build-system pyproject-build-system)
20429 (arguments
20430 (list
20431 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
20432 #:phases
20433 #~(modify-phases %standard-phases
20434 (add-before 'check 'set-qpa
20435 (lambda _
20436 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
20437 (native-inputs
20438 (list python-poetry-core python-pytest))
20439 (propagated-inputs
20440 (list python-pyqt-6))
20441 (home-page "https://github.com/CabbageDevelopment/qasync")
20442 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
20443 (description
20444 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
20445by providing an implementation of the PEP 3156 event-loop.")
20446 (license license:bsd-2)))
20447
20448(define-public python-editor
20449 (package
20450 (name "python-editor")
20451 (version "1.0.4")
20452 (source
20453 (origin
20454 (method git-fetch)
20455 (uri (git-reference
20456 (url "https://github.com/fmoo/python-editor")
20457 (commit version)))
20458 (file-name (git-file-name name version))
20459 (sha256
20460 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
20461 (build-system pyproject-build-system)
20462 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
20463 (native-inputs (list python-setuptools))
20464 (home-page "https://github.com/fmoo/python-editor")
20465 (synopsis "Programmatically open an editor, capture the result")
20466 (description
20467 "This package provides the editor module for programmatically interfacing
20468with your system's $EDITOR.")
20469 (license license:asl2.0)))
20470
20471(define-public python-multiprocessing-logging
20472 (package
20473 (name "python-multiprocessing-logging")
20474 (version "0.3.4")
20475 (home-page "https://github.com/jruere/multiprocessing-logging")
20476 (source
20477 (origin
20478 (method git-fetch)
20479 (uri (git-reference
20480 (url home-page)
20481 (commit (string-append "v" version))))
20482 (file-name (git-file-name name version))
20483 (sha256
20484 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
20485 (build-system pyproject-build-system)
20486 (arguments (list #:test-backend #~'unittest))
20487 (native-inputs (list python-setuptools))
20488 (synopsis "Manage logs from multiple processes")
20489 (description
20490 "This Python module implements a multiprocessing-aware @code{Handler}
20491that, when set on the root @code{Logger}, will tunnel log records to the
20492main process so that they are handled correctly.")
20493 (license license:lgpl3+)))
20494
20495(define-public python-munkres
20496 (package
20497 (name "python-munkres")
20498 (version "1.1.4")
20499 (source
20500 (origin
20501 (method url-fetch)
20502 (uri (pypi-uri "munkres" version))
20503 (sha256
20504 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
20505 (build-system pyproject-build-system)
20506 (arguments
20507 (list
20508 ;; See https://github.com/bmc/munkres/issues/40
20509 #:test-flags
20510 (if (member (%current-system) %32bit-supported-systems)
20511 #~(list "-k" "not test_profit_float")
20512 #~(list))))
20513 (native-inputs (list python-pytest python-setuptools))
20514 (home-page "https://software.clapper.org/munkres/")
20515 (synopsis "Implementation of the Munkres algorithm")
20516 (description
20517 "The Munkres module provides an implementation of the Munkres algorithm
20518(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
20519for solving the Assignment Problem.")
20520 (license license:bsd-3)))
20521
20522(define-public python-codespell
20523 (package
20524 (name "python-codespell")
20525 (version "2.3.0")
20526 (source
20527 (origin
20528 (method url-fetch)
20529 (uri (pypi-uri "codespell" version))
20530 (sha256
20531 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
20532 (build-system pyproject-build-system)
20533 (arguments
20534 (list
20535 #:phases
20536 #~(modify-phases %standard-phases
20537 (add-after 'unpack 'fix-pytest-config
20538 (lambda _
20539 ;; Drop test coverage requirements.
20540 (substitute* "pyproject.toml"
20541 (("\"--cov=codespell_lib\",") "")
20542 (("\"--cov-report=\",") "")))))))
20543 (native-inputs
20544 (list python-pygments
20545 python-pytest
20546 python-pytest-dependency
20547 python-setuptools
20548 python-setuptools-scm
20549 python-wheel))
20550 (propagated-inputs
20551 (list python-chardet))
20552 (home-page "https://github.com/codespell-project/codespell/")
20553 (synopsis "Spellchecker for code")
20554 (description
20555 "Codespell fixes common misspellings in text files. It's designed
20556primarily for checking misspelled words in source code, but it can be used
20557with other files as well. It does not check for word membership in a complete
20558dictionary, but instead looks for a set of common misspellings. Therefore it
20559should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
20560also means it shouldn't generate false-positives when you use a niche term it
20561doesn't know about.")
20562 (license
20563 (list
20564 ; for codespell and codespell_lib
20565 license:gpl2
20566 ; for dictionary*.txt
20567 license:cc-by-sa3.0))))
20568
20569(define-public python-jellyfish
20570 (package
20571 (name "python-jellyfish")
20572 (version "1.2.1")
20573 (source
20574 (origin
20575 (method git-fetch)
20576 (uri (git-reference
20577 (url "https://github.com/jamesturk/jellyfish")
20578 (commit (string-append "v" version))))
20579 (file-name (git-file-name name version))
20580 (sha256
20581 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
20582 (build-system pyproject-build-system)
20583 (arguments
20584 (list
20585 #:imported-modules (append %cargo-build-system-modules
20586 %pyproject-build-system-modules)
20587 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
20588 (guix build pyproject-build-system)
20589 (guix build utils))
20590 #:phases
20591 #~(modify-phases %standard-phases
20592 (add-after 'unpack 'prepare-cargo-build-system
20593 (lambda args
20594 (for-each
20595 (lambda (phase)
20596 (format #t "Running cargo phase: ~a~%" phase)
20597 (apply (assoc-ref cargo:%standard-phases phase)
20598 #:cargo-target #$(cargo-triplet)
20599 args))
20600 '(unpack-rust-crates
20601 configure
20602 check-for-pregenerated-files
20603 patch-cargo-checksums)))))))
20604 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
20605 (native-inputs
20606 (append
20607 (list python-pytest
20608 python-setuptools
20609 rust
20610 `(,rust "cargo"))
20611 (or (and=> (%current-target-system)
20612 (compose list make-rust-sysroot))
20613 '())))
20614 (home-page "https://www.jpt.sh/projects/jellyfish/")
20615 (synopsis "Approximate and phonetic matching of strings")
20616 (description "Jellyfish uses a variety of string comparison and phonetic
20617encoding algorithms to do fuzzy string matching.")
20618 (license license:bsd-2)))
20619
20620(define-public python-pdfminer-six
20621 (package
20622 (name "python-pdfminer-six")
20623 (version "20260107")
20624 ;; There are no tests in the PyPI tarball.
20625 (source
20626 (origin
20627 (method git-fetch)
20628 (uri (git-reference
20629 (url "https://github.com/pdfminer/pdfminer.six")
20630 (commit version)))
20631 (file-name (git-file-name name version))
20632 (sha256
20633 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
20634 (build-system pyproject-build-system)
20635 (arguments
20636 (list #:phases
20637 #~(modify-phases %standard-phases
20638 ;; Tests write to the source tree.
20639 (add-after 'unpack 'make-git-checkout-writable
20640 (lambda _
20641 (for-each make-file-writable (find-files ".")))))))
20642 (propagated-inputs
20643 (list python-charset-normalizer python-cryptography))
20644 (native-inputs
20645 (list python-pytest python-setuptools python-setuptools-scm))
20646 (home-page "https://github.com/pdfminer/pdfminer.six")
20647 (synopsis "PDF parser and analyzer")
20648 (description "@code{pdfminer.six} is a community maintained fork of
20649the original PDFMiner. It is a tool for extracting information from PDF
20650documents. It focuses on getting and analyzing text data. Pdfminer.six
20651extracts the text from a page directly from the sourcecode of the PDF. It
20652can also be used to get the exact location, font or color of the text.")
20653 (license license:expat)))
20654
20655(define-public python-rarfile
20656 (package
20657 (name "python-rarfile")
20658 (version "4.2")
20659 (source
20660 (origin
20661 (method git-fetch)
20662 (uri (git-reference
20663 (url "https://github.com/markokr/rarfile")
20664 (commit (string-append "v" version))))
20665 (file-name (git-file-name name version))
20666 (sha256
20667 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
20668 (build-system pyproject-build-system)
20669 (arguments
20670 (list
20671 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
20672 #:phases
20673 #~(modify-phases %standard-phases
20674 (add-after 'unpack 'patch
20675 (lambda* (#:key inputs #:allow-other-keys)
20676 (substitute* "rarfile.py"
20677 ;; Disable unrar and unar, which are unavailable on Guix.
20678 (("(unrar|unar)=True" all tool)
20679 (string-append tool "=False"))
20680 ;; Hardcode path to bsdtar
20681 (("\"bsdtar\"")
20682 (format #f "~s"
20683 (search-input-file inputs "bin/bsdtar")))))))))
20684 (native-inputs (list python-pytest python-setuptools))
20685 (inputs (list libarchive))
20686 (home-page "https://github.com/markokr/rarfile")
20687 (synopsis "RAR archive reader for Python")
20688 (description
20689 "This is Python module for RAR archive reading. The interface is made as
20690zipfile like as possible.")
20691 (license license:isc)))
20692
20693(define-public python-slugid
20694 (package
20695 (name "python-slugid")
20696 (version "2.0.0")
20697 (source
20698 (origin
20699 (method git-fetch)
20700 (uri (git-reference
20701 (url "https://github.com/taskcluster/slugid.py")
20702 (commit (string-append "v" version))))
20703 (file-name (git-file-name name version))
20704 (sha256
20705 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
20706 (build-system pyproject-build-system)
20707 (arguments (list #:test-backend #~'nose))
20708 (native-inputs (list python-pynose python-setuptools))
20709 (home-page "http://taskcluster.github.io/slugid.py")
20710 (synopsis "Module for Base64 encoded UUID v4 slugs")
20711 (description
20712 "This package provides a module for generating v4 UUIDs and encoding them
20713into 22 character URL-safe base64 slug representation.")
20714 (license license:mpl2.0)))
20715
20716(define-public python-rich
20717 (package
20718 (name "python-rich")
20719 (version "14.2.0")
20720 (source
20721 (origin
20722 (method git-fetch)
20723 (uri (git-reference
20724 (url "https://github.com/willmcgugan/rich")
20725 (commit (string-append "v" version))))
20726 (file-name (git-file-name name version))
20727 (sha256
20728 (base32 "0zwjry4ylqncqvxrywp0km96jng4f288dgz8kz5vymk7nr2z21m1"))))
20729 (build-system pyproject-build-system)
20730 ;; tests: 856 passed, 24 skipped
20731 (native-inputs
20732 (list python-poetry-core
20733 python-pytest
20734 which))
20735 (propagated-inputs
20736 (list python-markdown-it-py
20737 python-pygments))
20738 (home-page "https://github.com/willmcgugan/rich")
20739 (synopsis "Render rich text and more to the terminal")
20740 (description
20741 "This is a Python package for rendering rich text, tables, progress bars,
20742syntax highlighting, markdown and more to the terminal.")
20743 (license license:expat)))
20744
20745;; XXX: Deprecated on <2026-01-18>.
20746(define-deprecated/public-alias python-rich-next python-rich)
20747
20748(define-public python-rich-click
20749 (package
20750 (name "python-rich-click")
20751 (version "1.8.9")
20752 (source
20753 (origin
20754 (method git-fetch)
20755 (uri (git-reference
20756 (url "https://github.com/ewels/rich-click")
20757 (commit (string-append "v" version))))
20758 (file-name (git-file-name name version))
20759 (sha256
20760 (base32 "0kc2wcb5dpgxhdcz8fy6gfhl7vra03xwgwfg7h0qxxibr8yzhmmq"))))
20761 (build-system pyproject-build-system)
20762 (native-inputs
20763 (list python-pytest
20764 python-setuptools))
20765 (propagated-inputs
20766 (list python-click
20767 python-rich
20768 python-typing-extensions))
20769 (home-page "https://github.com/ewels/rich-click")
20770 (synopsis "Format click help output nicely with rich")
20771 (description "Click is a \"Python package for creating beautiful command
20772line interfaces\". Rich is a \"Python library for rich text and beautiful
20773formatting in the terminal\". The intention of rich-click is to provide
20774attractive help output from click, formatted with rich, with minimal
20775customization required.")
20776 (license license:expat)))
20777
20778(define-public python-magic
20779 (package
20780 (name "python-magic")
20781 (version "0.4.27")
20782 (home-page "https://github.com/ahupp/python-magic")
20783 (source
20784 (origin
20785 (method git-fetch)
20786 (uri (git-reference (url home-page) (commit version)))
20787 (file-name (git-file-name name version))
20788 (sha256
20789 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
20790 (build-system pyproject-build-system)
20791 (arguments
20792 (list
20793 #:test-backend #~'custom
20794 #:test-flags #~(list "test/libmagic_test.py")
20795 #:phases
20796 #~(modify-phases %standard-phases
20797 (add-after 'unpack 'fix-tests
20798 (lambda _
20799 ;; Adjust expected output for [email protected].
20800 (substitute* "test/libmagic_test.py"
20801 (("PDF document, version 1\\.2, 2 pages")
20802 "PDF document, version 1.2, 2 page(s)"))))
20803 ;; Replace a specific method call with a hard-coded path to the
20804 ;; necessary libmagic.so file in the store.
20805 (add-before 'build 'hard-code-path-to-libmagic
20806 (lambda* (#:key inputs #:allow-other-keys)
20807 (substitute* "magic/loader.py"
20808 (("find_library\\('magic'\\)")
20809 (format #f "~s"
20810 (search-input-file inputs "lib/libmagic.so")))))))))
20811 (native-inputs (list which python-setuptools))
20812 (inputs
20813 ;; python-magic needs to be able to find libmagic.so.
20814 (list file))
20815 (synopsis "File type identification using libmagic")
20816 (description
20817 "This module uses ctypes to access the libmagic file type identification
20818library. It makes use of the local magic database and supports both textual
20819and MIME-type output. Note that this module and the python-file module both
20820provide a \"magic.py\" file; these two modules, which are different and were
20821developed separately, both serve the same purpose: to provide Python bindings
20822for libmagic.")
20823 (license license:expat)))
20824
20825(define-public python-securetar
20826 (package
20827 (name "python-securetar")
20828 (version "2025.1.4")
20829 (source
20830 (origin
20831 (method git-fetch)
20832 (uri (git-reference
20833 (url "https://github.com/pvizeli/securetar")
20834 (commit version)))
20835 (file-name (git-file-name name version))
20836 (sha256
20837 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
20838 (build-system pyproject-build-system)
20839 (native-inputs (list python-setuptools python-wheel python-pytest))
20840 (propagated-inputs (list python-cryptography))
20841 (home-page "https://github.com/pvizeli/securetar")
20842 (synopsis "Python module to handle tarfile backups")
20843 (description
20844 "This library provides a streaming wrapper around python tarfile and allow
20845secure handling files and support encryption.")
20846 (license license:asl2.0)))
20847
20848(define-public python-pkgconfig
20849 (package
20850 (name "python-pkgconfig")
20851 (version "1.5.5")
20852 (source
20853 (origin
20854 (method url-fetch)
20855 (uri (pypi-uri "pkgconfig" version))
20856 (sha256
20857 (base32
20858 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
20859 (build-system pyproject-build-system)
20860 (arguments
20861 (list
20862 #:tests? #false ;there are none
20863 #:phases
20864 '(modify-phases %standard-phases
20865 (add-before 'build 'patch
20866 ;; Hard-code the path to pkg-config.
20867 (lambda _
20868 (substitute* "pkgconfig/pkgconfig.py"
20869 (("'pkg-config'")
20870 (string-append "'" (which "pkg-config") "'"))))))))
20871 (native-inputs (list python-poetry-core))
20872 (inputs (list pkg-config))
20873 (home-page "https://github.com/matze/pkgconfig")
20874 (synopsis "Python interface for pkg-config")
20875 (description "This module provides a Python interface to pkg-config. It
20876can be used to find all pkg-config packages, check if a package exists,
20877check if a package meets certain version requirements, query CFLAGS and
20878LDFLAGS and parse the output to build extensions with setup.py.")
20879 (license license:expat)))
20880
20881;; This package is unmaintained since 2014, but still used in `khmer'.
20882(define-public python-bz2file
20883 (package
20884 (name "python-bz2file")
20885 (version "0.98")
20886 (source
20887 (origin
20888 (method url-fetch)
20889 (uri (pypi-uri "bz2file" version))
20890 (sha256
20891 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
20892 (build-system pyproject-build-system)
20893 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
20894 (native-inputs (list python-setuptools))
20895 (home-page "https://github.com/nvawda/bz2file")
20896 (synopsis "Read and write bzip2-compressed files")
20897 (description
20898 "Bz2file is a Python library for reading and writing bzip2-compressed
20899files. It contains a drop-in replacement for the I/O interface in the
20900standard library's @code{bz2} module, including features from the latest
20901development version of CPython that are not available in older releases.")
20902 (license license:asl2.0)))
20903
20904(define-public python-future
20905 (package
20906 (name "python-future")
20907 (version "1.0.0")
20908 (source
20909 (origin
20910 (method url-fetch)
20911 (uri (pypi-uri "future" version))
20912 (sha256
20913 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
20914 (build-system pyproject-build-system)
20915 (arguments
20916 (list
20917 #:test-flags
20918 ;; Self tests failed.
20919 #~(list "--ignore=tests/test_future/test_futurize.py"
20920 "-k" (string-join
20921 ;; Self tests failed.
20922 (list "not test_division"
20923 "test_functions_unchanged"
20924 "test_mixed_annotations"
20925 "test_multiple_param_annotations"
20926 "test_print"
20927 "test_range_slice"
20928 ;; Network access is required.
20929 "test_ftp"
20930 "test_main"
20931 "test_moves_urllib_request_http"
20932 "test_urllib_request_http")
20933 " and not "))))
20934 (native-inputs
20935 (list python-pytest
20936 python-setuptools))
20937 (home-page "https://python-future.org")
20938 (synopsis "Single-source support for Python 3 and 2")
20939 (description
20940 "@code{python-future} is the missing compatibility layer between Python 2
20941and Python 3. It allows you to use a single, clean Python 3.x-compatible
20942codebase to support both Python 2 and Python 3 with minimal overhead.")
20943 (license license:expat)))
20944
20945(define-public python-cysignals
20946 (package
20947 (name "python-cysignals")
20948 (version "1.12.3")
20949 (source
20950 (origin
20951 (method url-fetch)
20952 (uri (pypi-uri "cysignals" version))
20953 (sha256
20954 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
20955 (build-system pyproject-build-system)
20956 (native-inputs (list python-meson
20957 python-cython
20958 python-pytest))
20959 (home-page "https://github.com/sagemath/cysignals")
20960 (synopsis "Handling of interrupts and signals for Cython")
20961 (description
20962 "The cysignals package provides mechanisms to handle interrupts (and
20963other signals and errors) in Cython code, using two related approaches,
20964for mixed Cython/Python code or external C libraries and pure Cython code,
20965respectively.")
20966 (license license:lgpl3+)))
20967
20968(define-public python-rope
20969 (package
20970 (name "python-rope")
20971 (version "1.13.0")
20972 (source
20973 (origin
20974 (method url-fetch)
20975 (uri (pypi-uri "rope" version))
20976 (sha256
20977 (base32
20978 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
20979 (build-system pyproject-build-system)
20980 (arguments
20981 (list
20982 #:test-flags
20983 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
20984 (propagated-inputs (list python-pytoolconfig))
20985 (native-inputs
20986 (list python-pytest python-pytest-timeout python-setuptools))
20987 (home-page "https://github.com/python-rope/rope")
20988 (synopsis "Refactoring library for Python")
20989 (description
20990 "Rope is a refactoring library for Python. It facilitates the renaming,
20991moving and extracting of attributes, functions, modules, fields and parameters
20992in Python source code. These refactorings can also be applied to occurrences
20993in strings and comments.")
20994 (license license:lgpl3+)))
20995
20996(define-public python-py3status
20997 (package
20998 (name "python-py3status")
20999 (version "3.62")
21000 (source
21001 (origin
21002 (method git-fetch)
21003 (uri (git-reference
21004 (url "https://github.com/ultrabug/py3status")
21005 (commit version)))
21006 (file-name (git-file-name name version))
21007 (sha256
21008 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
21009 (build-system pyproject-build-system)
21010 (arguments
21011 (list
21012 #:phases
21013 #~(modify-phases %standard-phases
21014 (add-before 'build 'hardcode-file-path
21015 (lambda* (#:key inputs #:allow-other-keys)
21016 (substitute* "py3status/parse_config.py"
21017 (("\\[\"file\", \"-b\"")
21018 (format #f "[~s, \"-b\""
21019 (search-input-file inputs "bin/file")))))))))
21020 (native-inputs (list python-hatchling python-pytest))
21021 (inputs (list file))
21022 (home-page "https://github.com/ultrabug/py3status")
21023 (synopsis "Extensible i3status wrapper written in Python")
21024 (description
21025 "py3status is an i3status wrapper which extends i3status functionality in
21026a modular way, allowing you to extend your panel with your own code,
21027responding to click events and updating clock every second.")
21028 (license license:bsd-3)))
21029
21030(define-public python-greenlet
21031 (package
21032 (name "python-greenlet")
21033 (version "3.1.1")
21034 (source
21035 (origin
21036 (method url-fetch)
21037 (uri (pypi-uri "greenlet" version))
21038 (sha256
21039 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
21040 (build-system pyproject-build-system)
21041 (arguments
21042 (list
21043 ;; AssertionError: 'Exception' not found in ''
21044 #:test-flags
21045 #~(list (string-join
21046 (list "--deselect=src/greenlet/tests/test_greenlet.py"
21047 "TestGreenlet"
21048 "test_dealloc_catches_GreenletExit_throws_other")
21049 "::"))
21050 #:phases
21051 #~(modify-phases %standard-phases
21052 (add-before 'check 'build-extensions
21053 (lambda _
21054 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
21055 (native-inputs
21056 (list python-objgraph
21057 python-pytest
21058 python-psutil
21059 python-setuptools
21060 python-wheel))
21061 (home-page "https://greenlet.readthedocs.io/")
21062 (synopsis "Lightweight in-process concurrent programming")
21063 (description
21064 "Greenlet package is a spin-off of Stackless, a version of CPython
21065that supports micro-threads called \"tasklets\". Tasklets run
21066pseudo-concurrently (typically in a single or a few OS-level threads) and
21067are synchronized with data exchanges on \"channels\".")
21068 (license (list license:psfl license:expat))))
21069
21070(define-public python-greenlet-2
21071 (hidden-package
21072 (package
21073 (inherit python-greenlet)
21074 (version "2.0.2")
21075 (source
21076 (origin
21077 (method url-fetch)
21078 (uri (pypi-uri "greenlet" version))
21079 (sha256
21080 (base32 "1h1l1mll5s4y1b09asf2jps0m7wyshnis1aassz9gc3xmw9xrj77")))))))
21081
21082(define-public python-objgraph
21083 (package
21084 (name "python-objgraph")
21085 (version "3.6.2")
21086 (source
21087 (origin
21088 (method url-fetch)
21089 (uri (pypi-uri "objgraph" version))
21090 (sha256
21091 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
21092 (build-system pyproject-build-system)
21093 (arguments
21094 (list
21095 #:test-flags
21096 #~(list "tests.py"
21097 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
21098 ;; [], [], [], [], [], [], [], ...
21099 "-k" "not test_at_addrs")))
21100 (native-inputs
21101 (list graphviz
21102 python-pytest
21103 python-setuptools
21104 python-wheel))
21105 (propagated-inputs
21106 (list python-graphviz))
21107 (home-page "https://mg.pov.lt/objgraph/")
21108 (synopsis "Draw Python object reference graphs with graphviz")
21109 (description
21110 "This package provides tools to draw Python object reference graphs with
21111graphviz.")
21112 (license license:expat)))
21113
21114(define-public python-gevent
21115 (package
21116 (name "python-gevent")
21117 (version "24.11.1")
21118 (source (origin
21119 (method url-fetch)
21120 (uri (pypi-uri "gevent" version))
21121 (sha256
21122 (base32
21123 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
21124 (modules '((guix build utils)))
21125 (snippet
21126 '(begin
21127 ;; unbunding libev and c-ares
21128 (delete-file-recursively "deps")
21129 ;; Remove cythonized files.
21130 (with-directory-excursion "src/gevent"
21131 (for-each delete-file
21132 (append (list "resolver/cares.c"
21133 "queue.c"
21134 "local.c"
21135 "libev/corecext.h"
21136 "libev/corecext.c"
21137 "greenlet.c"
21138 "event.c"
21139 "_waiter.c"
21140 "_tracer.c"
21141 "_semaphore.c"
21142 "_imap.c"
21143 "_ident.c"
21144 "_hub_primitives.c"
21145 "_hub_local.c"
21146 "_greenlet_primitives.c"
21147 "_abstract_linkable.c")
21148 (find-files "." "\\.html$"))))))))
21149 (build-system pyproject-build-system)
21150 (arguments
21151 (list
21152 #:test-flags
21153 '(list
21154 ;; These tests relies on networking which is
21155 ;; not available in the build container.
21156 "test__getaddrinfo_import.py"
21157 ;; These tests rely on KeyboardInterrupts which do not
21158 ;; work inside the build container for some reason
21159 ;; (lack of controlling terminal?).
21160 "test__issues461_471.py"
21161 ;; TODO: Patch out the tests that use getprotobyname, etc
21162 ;; instead of disabling all the tests from these files.
21163 "test__resolver_dnspython.py"
21164 ;; This test contains 'test_unlink', which
21165 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
21166 "test__core_stat.py")
21167 #:phases
21168 #~(modify-phases %standard-phases
21169 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
21170 (lambda _
21171 (substitute* "src/gevent/subprocess.py"
21172 (("/bin/sh") (which "sh")))
21173 (for-each (lambda (file)
21174 (substitute* file
21175 (("/bin/sh") (which "sh"))
21176 (("/bin/true") (which "true"))))
21177 (find-files "src/greentest" "\\.py$"))))
21178 (add-before 'build 'do-not-use-bundled-sources
21179 (lambda _
21180 (setenv "GEVENTSETUP_EMBED" "0")
21181
21182 ;; Prevent building bundled libev.
21183 (substitute* "setup.py"
21184 (("run_make=_BUILDING")
21185 "run_make=False"))))
21186 (add-before 'build 'augment-C_INCLUDE_PATH
21187 (lambda* (#:key inputs #:allow-other-keys)
21188 (let* ((python (dirname (dirname
21189 (search-input-file
21190 inputs "bin/python"))))
21191 (version (python-version python))
21192 (greenlet (string-append
21193 #$(this-package-input "python-greenlet")
21194 "/include/python" version)))
21195 (setenv "C_INCLUDE_PATH"
21196 (string-append greenlet "/:"
21197 (or (getenv "C_INCLUDE_PATH")
21198 ""))))))
21199 (add-before 'check 'pretend-to-be-CI
21200 (lambda _
21201 ;; A few tests are skipped due to network constraints or
21202 ;; get longer timeouts when running in a CI environment.
21203 ;; Piggy-back on that, as we need the same adjustments.
21204 (setenv "TRAVIS" "1")
21205 (setenv "APPVEYOR" "1")))
21206 (add-before 'check 'adjust-tests
21207 (lambda* (#:key test-flags #:allow-other-keys)
21208 (call-with-output-file "skipped_tests.txt"
21209 (lambda (port)
21210 (format port "~a~%" (string-join test-flags "\n"))))))
21211 (replace 'check
21212 (lambda* (#:key tests? #:allow-other-keys)
21213 (when tests?
21214 ;; Use the build daemons configured number of workers.
21215 (setenv "NWORKERS" (number->string (parallel-job-count)))
21216 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
21217 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
21218 (propagated-inputs
21219 (list python-greenlet python-zope-event python-zope-interface))
21220 (native-inputs
21221 (list python-cffi
21222 python-cython
21223 python-dnspython
21224 python-idna
21225 python-objgraph
21226 python-psutil
21227 python-requests
21228 python-setuptools))
21229 (inputs
21230 (list c-ares libev libuv))
21231 (home-page "https://www.gevent.org/")
21232 (synopsis "Coroutine-based network library")
21233 (description
21234 "@code{gevent} is a coroutine-based Python networking library that uses
21235@code{greenlet} to provide a high-level synchronous API on top of the
21236@code{libev} event loop.")
21237 (license license:expat)))
21238
21239(define-public python-fastimport
21240 (package
21241 (name "python-fastimport")
21242 (version "0.9.16")
21243 (source
21244 (origin
21245 (method git-fetch)
21246 (uri (git-reference
21247 (url "https://github.com/jelmer/python-fastimport")
21248 (commit (string-append "v" version))))
21249 (file-name (git-file-name name version))
21250 (sha256
21251 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
21252 (build-system pyproject-build-system)
21253 (arguments (list #:test-backend #~'unittest))
21254 (native-inputs (list python-setuptools))
21255 (home-page "https://github.com/jelmer/python-fastimport")
21256 (synopsis "VCS fastimport parser and generator in Python")
21257 (description
21258 "This package provides a parser for and generator of the Git
21259@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
21260format.")
21261 (license license:gpl2+)))
21262
21263(define-public python-pika
21264 (package
21265 (name "python-pika")
21266 (version "1.3.2")
21267 (source
21268 (origin
21269 (method git-fetch)
21270 (uri (git-reference
21271 (url "https://github.com/pika/pika")
21272 (commit version)))
21273 (file-name (git-file-name name version))
21274 (sha256
21275 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
21276 (build-system pyproject-build-system)
21277 (arguments
21278 (list
21279 #:test-flags
21280 ;; XXX: These test most likely require a running RabbitMQ server.
21281 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
21282 #:phases
21283 #~(modify-phases %standard-phases
21284 (add-before 'check 'configure-tests
21285 (lambda* (#:key tests? #:allow-other-keys)
21286 (when tests?
21287 (setenv "PYTHONPATH" (getcwd))))))))
21288 (native-inputs (list python-pytest
21289 python-gevent
21290 python-tornado
21291 python-twisted
21292 python-setuptools))
21293 (home-page "https://pika.readthedocs.org")
21294 (synopsis "Pure Python AMQP Client Library")
21295 (description
21296 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
21297Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
21298network support library.")
21299 (license license:bsd-3)))
21300
21301;; WARNING: This package is a dependency of mesa.
21302(define-public python-ply
21303 (package
21304 (name "python-ply")
21305 (version "3.11")
21306 (source
21307 (origin
21308 (method url-fetch)
21309 (uri (pypi-uri "ply" version))
21310 (sha256
21311 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
21312 (build-system pyproject-build-system)
21313 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archvie, there are in Git
21314 (native-inputs
21315 (list python-setuptools
21316 python-wheel))
21317 (home-page "http://www.dabeaz.com/ply/")
21318 (synopsis "Python Lex & Yacc")
21319 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
21320It uses LR parsing and does extensive error checking.")
21321 (license license:bsd-3)))
21322
21323(define-public python-kazoo
21324 (package
21325 (name "python-kazoo")
21326 (version "2.10.0")
21327 (source
21328 (origin
21329 (method git-fetch)
21330 (uri (git-reference
21331 (url "https://github.com/python-zk/kazoo")
21332 (commit version)))
21333 (file-name (git-file-name name version))
21334 (sha256
21335 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
21336 (build-system pyproject-build-system)
21337 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
21338 (native-inputs (list python-setuptools))
21339 (home-page "https://kazoo.readthedocs.org")
21340 (synopsis "High-level Zookeeper client library")
21341 (description
21342 "Kazoo is a Python client library for the Apache Zookeeper distributed
21343application service. It is designed to be easy to use and to avoid common
21344programming errors.")
21345 (license license:asl2.0)))
21346
21347(define-public python-columnize
21348 (package
21349 (name "python-columnize")
21350 (version "0.3.11")
21351 (source
21352 (origin
21353 (method url-fetch)
21354 (uri (pypi-uri "columnize" version))
21355 (sha256
21356 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
21357 (build-system pyproject-build-system)
21358 (native-inputs (list python-pytest python-setuptools))
21359 (home-page "https://github.com/rocky/pycolumnize")
21360 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
21361 (description
21362 "This package provides a way to format a simple (i.e. not nested) list
21363into aligned columns.")
21364 (license license:expat)))
21365
21366(define-public python-chai
21367 (package
21368 (name "python-chai")
21369 (version "1.1.2")
21370 (source
21371 (origin
21372 (method url-fetch)
21373 (uri (pypi-uri "chai" version))
21374 (sha256
21375 (base32 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
21376 (patches (search-patches "python-chai-drop-python2.patch"))))
21377 (build-system pyproject-build-system)
21378 (native-inputs (list python-pytest python-setuptools))
21379 (home-page "https://github.com/agoragames/chai")
21380 (synopsis "Mocking framework for Python")
21381 (description
21382 "Chai provides an api for mocking, stubbing and spying your python
21383objects, patterned after the Mocha library for Ruby.")
21384 (license license:bsd-3)))
21385
21386(define-public python-pysol-cards
21387 (package
21388 (name "python-pysol-cards")
21389 (version "0.24.0")
21390 (source
21391 (origin
21392 (method url-fetch)
21393 (uri (pypi-uri "pysol_cards" version))
21394 (sha256
21395 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
21396 (build-system pyproject-build-system)
21397 (arguments
21398 (list
21399 #:phases
21400 #~(modify-phases %standard-phases
21401 (replace 'check
21402 (lambda* (#:key test-flags tests? #:allow-other-keys)
21403 (when tests?
21404 (apply invoke
21405 "python"
21406 "-m"
21407 "unittest"
21408 "discover"
21409 "tests"
21410 test-flags)))))))
21411 (native-inputs (list python-setuptools python-wheel))
21412 (home-page "https://github.com/shlomif/pysol_cards")
21413 (synopsis "Deal PySol FC Cards")
21414 (description
21415 "The pysol-cards python modules provide code to generate the initial deals of
21416some PySol games.")
21417 (license license:expat)))
21418
21419(define-public python-freecell-solver
21420 (package
21421 (name "python-freecell-solver")
21422 (version "0.6.0")
21423 (source
21424 (origin
21425 (method url-fetch)
21426 (uri (pypi-uri "freecell_solver" version))
21427 (sha256
21428 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
21429 (build-system pyproject-build-system)
21430 (arguments
21431 (list
21432 #:phases
21433 #~(modify-phases %standard-phases
21434 (replace 'check
21435 (lambda* (#:key test-flags tests? #:allow-other-keys)
21436 (when tests?
21437 (apply invoke
21438 "python"
21439 "-m"
21440 "unittest"
21441 "discover"
21442 "tests"
21443 test-flags)))))))
21444 (propagated-inputs (list python-cffi))
21445 (native-inputs (list python-setuptools python-wheel))
21446 (home-page "https://pypi.org/project/freecell-solver/")
21447 (synopsis "Freecell Solver bindings")
21448 (description
21449 "This package provides Python bindings for the freecell-solver
21450package. Freecell Solver is a program that automatically solves layouts of
21451Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
21452and Seahaven Towers, as well as Simple Simon boards.")
21453 (license license:expat)))
21454
21455(define-public python-inflection
21456 (package
21457 (name "python-inflection")
21458 (version "0.5.1")
21459 (source
21460 (origin
21461 (method git-fetch)
21462 (uri (git-reference
21463 (url "https://github.com/jpvanhal/inflection")
21464 (commit version)))
21465 (file-name (git-file-name name version))
21466 (sha256
21467 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
21468 (build-system pyproject-build-system)
21469 (native-inputs (list python-pytest python-setuptools))
21470 (home-page "https://github.com/jpvanhal/inflection")
21471 (synopsis "Python string transformation library")
21472 (description
21473 "Inflection is a string transformation library. It singularizes
21474and pluralizes English words, and transforms strings from CamelCase to
21475underscored string.")
21476 (license license:expat)))
21477
21478(define-public python-krb5
21479 (package
21480 (name "python-krb5")
21481 (version "0.5.1")
21482 (source
21483 (origin
21484 (method url-fetch)
21485 (uri (pypi-uri "krb5" version))
21486 (sha256
21487 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
21488 (build-system pyproject-build-system)
21489 (inputs (list mit-krb5))
21490 (native-inputs (list python-cython python-k5test python-pytest
21491 python-setuptools python-wheel))
21492 (home-page "https://github.com/jborean93/pykrb5")
21493 (synopsis "Kerberos API bindings for Python")
21494 (description "This library provides Python functions that wraps the
21495Kerberos 5 C API.")
21496 (license license:expat)))
21497
21498(define-public python-pylev
21499 (package
21500 (name "python-pylev")
21501 (version "1.4.0")
21502 (source
21503 (origin
21504 (method git-fetch)
21505 (uri (git-reference
21506 (url "https://github.com/toastdriven/pylev")
21507 (commit (string-append "v" version))))
21508 (file-name (git-file-name name version))
21509 (sha256
21510 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
21511 (build-system pyproject-build-system)
21512 (arguments
21513 (list
21514 #:test-backend #~'custom
21515 #:test-flags #~(list "tests.py")))
21516 (native-inputs (list python-setuptools))
21517 (home-page "https://github.com/toastdriven/pylev")
21518 (synopsis "Levenshtein distance implementation in Python")
21519 (description
21520 "Pure Python Levenshtein implementation, based off the Wikipedia code
21521samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
21522 (license license:bsd-3)))
21523
21524(define-public python-cleo
21525 (package
21526 (name "python-cleo")
21527 (version "2.1.0")
21528 (source (origin
21529 (method url-fetch)
21530 (uri (pypi-uri "cleo" version))
21531 (sha256
21532 (base32
21533 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
21534 (build-system pyproject-build-system)
21535 (native-inputs
21536 (list python-poetry-core
21537 python-mock
21538 python-pytest-mock
21539 python-pytest))
21540 (propagated-inputs
21541 (list python-crashtest python-rapidfuzz))
21542 (home-page "https://github.com/sdispater/cleo")
21543 (synopsis "Command-line arguments library for Python")
21544 (description
21545 "Cleo allows you to create command-line commands with signature in
21546docstring and colored output.")
21547 (license license:expat)))
21548
21549(define-public python-shellingham
21550 (package
21551 (name "python-shellingham")
21552 (version "1.5.4")
21553 (source
21554 (origin
21555 (method url-fetch)
21556 (uri (pypi-uri "shellingham" version))
21557 (sha256
21558 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
21559 (build-system pyproject-build-system)
21560 (native-inputs
21561 (list python-pytest python-pytest-mock python-setuptools python-wheel))
21562 (home-page "https://github.com/sarugaku/shellingham")
21563 (synopsis "Tool to detect surrounding shell")
21564 (description
21565 "Shellingham detects what shell the current Python executable is
21566running in.")
21567 (license license:isc)))
21568
21569(define-public python-shshsh
21570 (package
21571 (name "python-shshsh")
21572 (version "1.0.5")
21573 (source
21574 (origin
21575 (method git-fetch)
21576 (uri
21577 (git-reference
21578 (url "https://github.com/zqqqqz2000/shshsh")
21579 (commit
21580 "fd21c8696aebaae04507760c16cb45979291fef5")))
21581 (file-name (git-file-name name version))
21582 (sha256
21583 (base32
21584 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
21585 (build-system pyproject-build-system)
21586 (native-inputs
21587 (list python-poetry-core
21588 python-pytest))
21589 (home-page "https://github.com/zqqqqz2000/shshsh")
21590 (synopsis "Write Shell commands simply and safely within Python")
21591 (description "This package provides a way to write Shell commands from
21592within Python. Python functions can be chained together to process input
21593Bash control characters are escapted so that parameters can be passed
21594without worrying about command injection.")
21595 (license license:expat)))
21596
21597(define-public python-memcached
21598 (package
21599 (name "python-memcached")
21600 (version "1.62")
21601 (source
21602 (origin
21603 (method git-fetch)
21604 (uri (git-reference
21605 (url "https://github.com/linsomniac/python-memcached")
21606 (commit version)))
21607 (file-name (git-file-name name version))
21608 (sha256
21609 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
21610 (build-system pyproject-build-system)
21611 (arguments
21612 (list
21613 #:tests? #f ;Requires a connection to a socket.
21614 #:test-backend #~'unittest))
21615 (native-inputs (list python-setuptools))
21616 (home-page "https://github.com/linsomniac/python-memcached")
21617 (synopsis "Pure python memcached client")
21618 (description
21619 "This software is a pure Python interface to the memcached memory cache
21620daemon. It is the client side software which allows storing values in one or
21621more, possibly remote, memcached servers.")
21622 (license license:psfl)))
21623
21624(define-public python-mergedeep
21625 (package
21626 (name "python-mergedeep")
21627 (version "1.3.4")
21628 (source
21629 (origin
21630 (method git-fetch)
21631 (uri (git-reference
21632 (url "https://github.com/clarketm/mergedeep")
21633 (commit (string-append "v" version))))
21634 (file-name (git-file-name name version))
21635 (sha256
21636 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
21637 (build-system pyproject-build-system)
21638 (arguments (list #:test-backend #~'unittest))
21639 (native-inputs (list python-setuptools))
21640 (home-page "https://github.com/clarketm/mergedeep")
21641 (synopsis "Deep merge function for Python")
21642 (description
21643 "This package provides a deep merge function for Python, useful to
21644combine multiple data objects as one.")
21645 (license license:expat)))
21646
21647(define-public python-clikit
21648 (package
21649 (name "python-clikit")
21650 (version "0.6.2")
21651 (source
21652 (origin
21653 (method git-fetch)
21654 (uri (git-reference
21655 (url "https://github.com/sdispater/clikit")
21656 (commit version)))
21657 (file-name (git-file-name name version))
21658 (sha256
21659 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
21660 (build-system pyproject-build-system)
21661 (arguments
21662 (list
21663 #:phases
21664 #~(modify-phases %standard-phases
21665 (add-after 'unpack 'relax-requirements
21666 (lambda _
21667 (substitute* "pyproject.toml"
21668 (("^crashtest.*")
21669 (format #f "crashtest=~s"
21670 #$(package-version
21671 (this-package-input "python-crashtest"))))))))))
21672 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
21673 (propagated-inputs (list python-crashtest python-pastel python-pylev))
21674 (home-page "https://github.com/sdispater/clikit")
21675 (synopsis "Group of utilities to build command line interfaces")
21676 (description
21677 "CliKit is a group of utilities to build testable command line
21678interfaces.")
21679 (license license:expat)))
21680
21681(define-public python-cattrs
21682 (package
21683 (name "python-cattrs")
21684 (version "24.1.2")
21685 (source (origin
21686 (method git-fetch) ;for tests
21687 (uri (git-reference
21688 (url "https://github.com/python-attrs/cattrs")
21689 (commit (string-append "v" version))))
21690 (file-name (git-file-name name version))
21691 (sha256
21692 (base32
21693 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
21694 (build-system pyproject-build-system)
21695 (arguments
21696 (list
21697 #:test-flags
21698 '(list "--numprocesses" (number->string (parallel-job-count))
21699 ;; Skip all benchmark tests.
21700 "--ignore=bench/test_attrs_collections.py"
21701 "--ignore=bench/test_attrs_nested.py"
21702 "--ignore=bench/test_attrs_primitives.py"
21703 "--ignore=bench/test_primitives.py"
21704 "-k"
21705 (string-join
21706 ;; XXX: Tests fail with error: AssertionError: assert ...,
21707 ;; check why.
21708 (list "not test_msgspec_json_converter"
21709 "test_structure_simple_from_dict_default"
21710 "test_310_optional_field_roundtrip"
21711 "test_310_union_field_roundtrip"
21712 "test_individual_overrides"
21713 "test_nested_roundtrip"
21714 "test_nested_roundtrip_tuple"
21715 "test_omit_default_roundtrip"
21716 "test_optional_field_roundtrip"
21717 "test_renaming"
21718 ;; 'utf-8' codec can't encode character '\ud800' in
21719 ;; position 0: surrogates not allowed
21720 "test_simple_classes"
21721 ;; This test fails with an assertion error on the build
21722 ;; farm, but not on my laptop.
21723 "test_nodefs_generated_unstructuring_cl"
21724 ;; See https://github.com/python-attrs/cattrs/issues/575
21725 "test_simple_roundtrip"
21726 "test_simple_roundtrip_defaults"
21727 "test_simple_roundtrip_defaults_tuple"
21728 "test_simple_roundtrip_tuple"
21729 "test_simple_roundtrip_with_extra_keys_forbidden"
21730 "test_structure_simple_from_dict_default"
21731 "test_union_field_roundtrip"
21732 "test_unmodified_generated_structuring")
21733 " and not "))
21734 #:phases
21735 #~(modify-phases %standard-phases
21736 (add-after 'unpack 'patch-pyproject
21737 (lambda _
21738 (substitute* "pyproject.toml"
21739 ;; Fix version string
21740 (("dynamic = \\[\"version\"\\]")
21741 (string-append "version = \"" #$version "\""))
21742 ;; Just run pytest with no frills
21743 (("addopts = \"-l.*") ""))))
21744 ;; XXX Our python-hypothesis package is too old.
21745 (add-after 'unpack 'compatibility
21746 (lambda _
21747 (substitute* "tests/typed.py"
21748 (("characters\\(codec=codec\\)")
21749 "characters()")))))))
21750 (native-inputs
21751 (list python-hatchling
21752 python-hatch-vcs
21753 python-hypothesis
21754 python-immutables
21755 python-msgpack
21756 python-msgspec
21757 python-poetry-core
21758 python-pymongo ;for the bson module
21759 python-pytest
21760 python-pytest-benchmark
21761 python-pytest-xdist))
21762 (propagated-inputs
21763 (list python-attrs
21764 python-cbor2
21765 python-orjson
21766 python-pyyaml
21767 python-tomlkit
21768 python-typing-extensions
21769 python-ujson))
21770 (home-page "https://github.com/python-attrs/cattrs")
21771 (synopsis "Python library for structuring and unstructuring data")
21772 (description "@code{cattrs} is an Python library for structuring and
21773unstructuring data. @code{cattrs} works best with @code{attrs} classes,
21774@code{dataclasses} and the usual Python collections, but other kinds of
21775classes can also be supported by manually registering converters.")
21776 (license license:expat)))
21777
21778(define-public python-cachy
21779 (package
21780 (name "python-cachy")
21781 (version "0.3.0")
21782 (source
21783 (origin
21784 (method url-fetch)
21785 (uri (pypi-uri "cachy" version))
21786 (sha256
21787 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
21788 (build-system pyproject-build-system)
21789 (arguments
21790 (list
21791 #:phases
21792 #~(modify-phases %standard-phases
21793 (replace 'check
21794 (lambda* (#:key tests? #:allow-other-keys)
21795 (when tests?
21796 ;; Make it compatible with python-flexmock 0.12.
21797 (substitute* (find-files "tests" "\\.py$")
21798 (("from flexmock import flexmock, flexmock_teardown")
21799 (string-append "from flexmock import flexmock\n"
21800 "from flexmock._api import flexmock_teardown")))
21801 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
21802 "pytest")))))))
21803 (native-inputs
21804 (list memcached
21805 python-fakeredis
21806 python-flexmock
21807 python-pifpaf
21808 python-pytest
21809 python-setuptools
21810 python-wheel))
21811 (propagated-inputs
21812 (list python-memcached
21813 python-msgpack
21814 python-redis))
21815 (home-page "https://github.com/sdispater/cachy")
21816 (synopsis "Simple yet effective caching library")
21817 (description
21818 "Cachy provides a simple yet effective caching library. A simple but
21819powerful API: thread-safety; decorator syntax; support for memcached, redis,
21820database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
21821 (license license:expat)))
21822
21823(define-public python-pyproject-api
21824 (package
21825 (name "python-pyproject-api")
21826 (version "1.8.0")
21827 (source
21828 (origin
21829 (method url-fetch)
21830 (uri (pypi-uri "pyproject_api" version))
21831 (sha256
21832 (base32 "15l4fx1v4dqhhysxd2mcm1vn4qvrwbqmf6y2zkp36pgb5ygh9f3p"))))
21833 (build-system pyproject-build-system)
21834 (arguments
21835 (list
21836 #:test-flags
21837 '(list "-k" (string-append
21838 ;; This fails because of extraneous parentheses
21839 "not test_setuptools_prepare_metadata_for_build_wheel"
21840 ;; This fails because wheel shows up in requirements
21841 " and not test_setuptools_get_requires_for_build_wheel"))))
21842 (native-inputs
21843 (list python-hatch-vcs
21844 python-hatchling
21845 python-pytest
21846 python-pytest-cov
21847 python-pytest-mock
21848 python-setuptools
21849 python-wheel))
21850 (propagated-inputs
21851 (list python-packaging python-tomli))
21852 (home-page "https://pyproject-api.readthedocs.io/latest/")
21853 (synopsis "API to interact with the Python pyproject.toml based projects")
21854 (description
21855 "@code{pyproject-api} aims to abstract away interaction with
21856@code{pyproject.toml} style projects in a flexible way.")
21857 (license license:expat)))
21858
21859(define-public python-lark
21860 (package
21861 (name "python-lark")
21862 (version "1.2.2")
21863 (source
21864 (origin
21865 (method url-fetch)
21866 (uri (pypi-uri "lark" version))
21867 (sha256
21868 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
21869 (build-system pyproject-build-system)
21870 (native-inputs (list python-pytest python-setuptools python-wheel))
21871 (home-page "https://github.com/lark-parser/lark")
21872 (synopsis "Multi-language parser for Python")
21873 (description
21874 "Lark is a parser built with a focus on ergonomics, performance and
21875resilience. Lark can parse all context-free languages. That means it is
21876capable of parsing almost any programming language out there, and to
21877some degree most natural languages too.")
21878 (license license:expat)))
21879
21880(define-public python-find-libpython
21881 (package
21882 (name "python-find-libpython")
21883 (version "0.4.1")
21884 (source
21885 (origin
21886 (method git-fetch)
21887 (uri (git-reference
21888 (url "https://github.com/ktbarrett/find_libpython")
21889 (commit (string-append "v" version))))
21890 (file-name (git-file-name name version))
21891 (sha256
21892 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
21893 (build-system pyproject-build-system)
21894 (native-inputs (list python-setuptools python-wheel
21895 ;; tests
21896 python-pytest))
21897 (home-page "https://github.com/ktbarrett/find_libpython")
21898 (synopsis "Find the path to the @code{libpython} dynamic library")
21899 (description
21900 "@code{find_libpython} helps find the path to the
21901@code{libpython} dynamic library for the current Python environment. It is
21902both a script and a Python package.")
21903 (license license:expat)))
21904
21905(define-public python-libcst
21906 (package
21907 (name "python-libcst")
21908 (version "1.6.0")
21909 (source (origin
21910 (method url-fetch)
21911 (uri (pypi-uri "libcst" version))
21912 (sha256
21913 (base32
21914 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
21915 (snippet
21916 #~(begin (use-modules (guix build utils))
21917 ;; This is mostly to keep the cargo-build-system happy
21918 (with-output-to-file "Cargo.toml"
21919 (lambda ()
21920 (format #t "\
21921[workspace]
21922
21923members = [
21924 \"native\",]")))))))
21925 (build-system cargo-build-system)
21926 (arguments
21927 (list
21928 #:install-source? #false
21929 #:cargo-test-flags
21930 ;; According to .github/workflows/ci.yml
21931 '(list "--manifest-path=native/Cargo.toml"
21932 "--release"
21933 "--no-default-features")
21934 #:imported-modules `(,@%pyproject-build-system-modules
21935 ,@%cargo-build-system-modules)
21936 #:modules `((guix build cargo-build-system)
21937 ((guix build pyproject-build-system) #:prefix py:)
21938 (guix build utils))
21939 #:phases
21940 #~(modify-phases %standard-phases
21941 (add-after 'unpack 'prepare-source
21942 (lambda _
21943 (delete-file "native/Cargo.lock")))
21944 (replace 'build
21945 (assoc-ref py:%standard-phases 'build))
21946 (add-after 'install 'wrap
21947 (lambda _
21948 ;; Collection of python- and pyproject-build-system phases
21949 ;; between 'install and 'check.
21950 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
21951 (assoc-ref py:%standard-phases 'add-install-to-path)
21952 (assoc-ref py:%standard-phases 'wrap)
21953 (assoc-ref py:%standard-phases 'create-entrypoints)
21954 (assoc-ref py:%standard-phases 'compile-bytecode)))
21955 ;; We are not the only ones who cannot load libcst.native
21956 ;; during the 'check phase
21957 ;; https://github.com/Instagram/LibCST/issues/1176
21958 ;; (add-after 'wrap 'python-check
21959 ;; (lambda args
21960 ;; (apply (assoc-ref py:%standard-phases 'check)
21961 ;; #:test-flags '()
21962 ;; args)))
21963 (replace 'install
21964 (assoc-ref py:%standard-phases 'install)))))
21965 (native-inputs
21966 (list python-minimal-wrapper
21967 python-hypothesmith
21968 python-pytest
21969 python-setuptools
21970 python-setuptools-rust
21971 python-setuptools-scm
21972 python-wheel))
21973 (inputs (cons maturin (cargo-inputs 'python-libcst)))
21974 (propagated-inputs
21975 (list python-pyyaml))
21976 (home-page "https://github.com/Instagram/LibCST")
21977 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
21978 (description
21979 "LibCST parses Python source code as a CST tree that keeps all
21980formatting details (comments, whitespaces, parentheses, etc). It's useful
21981for building automated refactoring (codemod) applications and linters.
21982LibCST creates a compromise between an Abstract Syntax Tree (AST) and
21983a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
21984naming node types and fields, LibCST creates a lossless CST that looks and
21985feels like an AST.")
21986 (license (list license:expat
21987 ;; Some files unde libcst/_parser/ are under Python Software
21988 ;; Foundation license (see LICENSE file for details)
21989 license:psfl
21990 ;; libcst/_add_slots.py
21991 license:asl2.0))))
21992
21993(define-public python-libcst-minimal
21994 (hidden-package
21995 (package
21996 (inherit python-libcst)
21997 (name "python-libcst-minimal")
21998 (arguments
21999 (substitute-keyword-arguments (package-arguments python-libcst)
22000 ((#:tests? _ #t) #f)))
22001 (native-inputs
22002 (list python-minimal-wrapper
22003 python-setuptools
22004 python-setuptools-rust
22005 python-setuptools-scm
22006 python-wheel)))))
22007
22008(define-public python-lazy-loader
22009 (package
22010 (name "python-lazy-loader")
22011 (version "0.4")
22012 (source (origin
22013 (method url-fetch)
22014 (uri (pypi-uri "lazy_loader" version))
22015 (sha256
22016 (base32
22017 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
22018 (build-system pyproject-build-system)
22019 (native-inputs
22020 (list python-numpy python-pytest python-setuptools))
22021 (propagated-inputs
22022 (list python-flit-core
22023 python-setuptools
22024 python-wheel))
22025 (home-page "https://scientific-python.org/specs/spec-0001/")
22026 (synopsis "Load subpackages and functions on demand")
22027 (description "@code{python-lazy-loader} makes it easy to load subpackages
22028and functions on demand. Its main features are:
22029
22030@itemize
22031@item Allow subpackages to be made visible to users without incurring import
22032costs.
22033@item Allow external libraries to be imported only when used, improving import
22034times.
22035@end itemize")
22036 (license license:bsd-3)))
22037
22038(define-public python-lazy-object-proxy
22039 (package
22040 (name "python-lazy-object-proxy")
22041 (version "1.11.0")
22042 (source
22043 (origin
22044 (method url-fetch)
22045 (uri (pypi-uri "lazy_object_proxy" version))
22046 (sha256
22047 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
22048 (build-system pyproject-build-system)
22049 (native-inputs
22050 (list python-pytest
22051 python-pytest-benchmark
22052 python-setuptools
22053 python-setuptools-scm
22054 python-wheel))
22055 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
22056 (synopsis "Lazy object proxy for Python")
22057 (description
22058 "Lazy object proxy is an object that wraps a callable but defers the call
22059until the object is actually required, and caches the result of said call.")
22060 (license license:bsd-2)))
22061
22062(define-public python-dnspython
22063 (package
22064 (name "python-dnspython")
22065 (version "2.7.0")
22066 (source
22067 (origin
22068 (method url-fetch)
22069 (uri (pypi-uri "dnspython" version))
22070 (sha256
22071 (base32 "1wgsbiz90npdi47cilmwdccm29hl9qddzkm533v1rj8dv8p4776f"))))
22072 (build-system pyproject-build-system)
22073 (arguments
22074 (list
22075 #:test-flags
22076 #~(list
22077 ;; AssertionError: assert False
22078 "--deselect=tests/test_features.py::test_have"
22079 ;; dns.exception.SyntaxError: protocol not found
22080 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text"
22081 ;; ECDSA with deterministic signature (RFC 6979) is not supported by
22082 ;; this version of OpenSSL.
22083 "-k" (string-append "not testDeterministicSignatureECDSAP256SHA256"
22084 " and not testSignatureECDSAP256SHA256"
22085 " and not testSignatureECDSAP384SHA384"
22086 " and not test_ecdsa"))
22087 #:phases
22088 #~(modify-phases %standard-phases
22089 (add-after 'unpack 'patch-getprotobyname-calls
22090 ;; These calls are problematic in the build environment as there is
22091 ;; no /etc/protocols. This breaks the sanity-check phase of any
22092 ;; package depending on this one.
22093 (lambda _
22094 (substitute* "dns/rdtypes/IN/WKS.py"
22095 (("socket.getprotobyname\\('tcp'\\)")
22096 "6")
22097 (("socket.getprotobyname\\('udp'\\)")
22098 "17")))))))
22099 (native-inputs
22100 (list python-hatchling
22101 python-pytest))
22102 (propagated-inputs
22103 (append
22104 (if (supported-package? python-cryptography)
22105 (list ;; DNSSEC
22106 python-cryptography
22107 ;; DNS over Quic
22108 python-aioquic
22109 ;; DNS over HTTPS
22110 python-h2
22111 python-httpcore
22112 python-httpx)
22113 '())
22114 (list python-idna
22115 python-trio)))
22116 (home-page "https://www.dnspython.org")
22117 (synopsis "DNS toolkit for Python")
22118 (description
22119 "dnspython is a DNS toolkit for Python. It supports almost all record
22120types. It can be used for queries, zone transfers, and dynamic updates.
22121It supports TSIG authenticated messages and EDNS0.")
22122 (license license:expat)))
22123
22124(define-public python-dnspython-1.16
22125 (package
22126 (inherit python-dnspython)
22127 (version "1.16.0")
22128 (source (origin
22129 (method url-fetch)
22130 (uri (string-append "http://www.dnspython.org/kits/"
22131 version "/dnspython-" version ".tar.gz"))
22132 (sha256
22133 (base32
22134 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
22135 (arguments
22136 (list
22137 #:phases
22138 #~(modify-phases %standard-phases
22139 (add-after 'unpack 'compatibility
22140 (lambda _
22141 (substitute* "dns/namedict.py"
22142 (("collections.MutableMapping")
22143 "collections.abc.MutableMapping"))))
22144 (add-after 'unpack 'patch-getprotobyname-calls
22145 ;; These calls are problematic in the build environment as there is
22146 ;; no /etc/protocols. This breaks the sanity-check phase of any
22147 ;; package depending on this one.
22148 (lambda _
22149 (substitute* "dns/rdtypes/IN/WKS.py"
22150 (("socket.getprotobyname\\('tcp'\\)")
22151 "6")
22152 (("socket.getprotobyname\\('udp'\\)")
22153 "17")))))))
22154 (native-inputs (list python-pytest python-setuptools python-wheel))))
22155
22156(define-public python-py3dns
22157 (package
22158 (name "python-py3dns")
22159 (version "4.0.2")
22160 (source
22161 (origin
22162 (method url-fetch)
22163 (uri (pypi-uri "py3dns" version))
22164 (sha256
22165 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
22166 (build-system pyproject-build-system)
22167 (arguments
22168 ;; This package wants to read /etc/resolv.conf. We can't patch it without
22169 ;; removing functionality so we don't run tests.
22170 (list #:tests? #f))
22171 (native-inputs (list python-flit-core))
22172 (home-page "https://launchpad.net/py3dns")
22173 (synopsis "Python 3 DNS library")
22174 (description
22175 "This Python 3 module provides a DNS API for looking up DNS entries from
22176within Python 3 modules and applications. This module is a simple,
22177lightweight implementation.")
22178 (license license:psfl)))
22179
22180(define-public python-email-validator
22181 (package
22182 (name "python-email-validator")
22183 (version "2.2.0")
22184 (source
22185 (origin
22186 (method url-fetch)
22187 (uri (pypi-uri "email_validator" version))
22188 (sha256
22189 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
22190 (build-system pyproject-build-system)
22191 (arguments
22192 (list
22193 #:test-flags
22194 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
22195 #~(list "-k" "not test_caching_dns_resolver")))
22196 (native-inputs
22197 (list python-pytest
22198 python-setuptools
22199 python-wheel))
22200 (propagated-inputs
22201 (list python-dnspython
22202 python-idna))
22203 (home-page "https://github.com/JoshData/python-email-validator")
22204 (synopsis "Email address validation library for Python")
22205 (description
22206 "This library validates email address syntax and deliverability.")
22207 (license license:cc0)))
22208
22209(define-public python-faker
22210 (package
22211 (name "python-faker")
22212 (version "37.4.2")
22213 (source
22214 (origin
22215 (method url-fetch)
22216 (uri (pypi-uri "faker" version))
22217 (sha256
22218 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
22219 (build-system pyproject-build-system)
22220 ;; tests: 2104 passed, 12 skipped, 2 warnings
22221 (native-inputs
22222 (list python-freezegun
22223 python-pytest
22224 python-setuptools
22225 python-validators))
22226 (propagated-inputs
22227 (list python-tzdata))
22228 (home-page "https://github.com/joke2k/faker")
22229 (synopsis "Python package that generates fake data")
22230 (description
22231 "Faker is a Python package that generates fake data such as names,
22232addresses, and phone numbers.")
22233 (license license:expat)))
22234
22235(define-public python-pyaml
22236 (package
22237 (name "python-pyaml")
22238 (version "25.7.0")
22239 (source
22240 (origin
22241 (method url-fetch)
22242 (uri (pypi-uri "pyaml" version))
22243 (sha256
22244 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
22245 (build-system pyproject-build-system)
22246 (native-inputs
22247 (list python-pytest
22248 python-setuptools))
22249 (propagated-inputs
22250 (list python-pyyaml))
22251 (home-page "https://github.com/mk-fg/pretty-yaml")
22252 (synopsis "YAML pretty-print library for Python")
22253 (description
22254 "pyaml is a PyYAML based python module to produce pretty and readable
22255YAML-serialized data.")
22256 (license license:wtfpl2)))
22257
22258(define-public python-pyyaml-env-tag
22259 (package
22260 (name "python-pyyaml-env-tag")
22261 (version "1.1")
22262 (source
22263 (origin
22264 (method git-fetch)
22265 (uri (git-reference
22266 (url "https://github.com/waylan/pyyaml-env-tag")
22267 (commit version)))
22268 (file-name (git-file-name name version))
22269 (sha256
22270 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
22271 (build-system pyproject-build-system)
22272 (native-inputs (list python-pytest python-setuptools))
22273 (propagated-inputs (list python-pyyaml))
22274 (home-page "https://github.com/waylan/pyyaml-env-tag")
22275 (synopsis "Custom YAML tag for environment variables")
22276 (description
22277 "This package provides a custom YAML tag for referencing environment
22278variables in YAML files.")
22279 (license license:expat)))
22280
22281(define-public python-prompt-toolkit
22282 (package
22283 (name "python-prompt-toolkit")
22284 (version "3.0.51")
22285 (source
22286 (origin
22287 (method url-fetch)
22288 (uri (pypi-uri "prompt_toolkit" version))
22289 (sha256
22290 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
22291 (build-system pyproject-build-system)
22292 (arguments
22293 (list
22294 #:phases
22295 #~(modify-phases %standard-phases
22296 (add-before 'check 'pre-check
22297 (lambda _
22298 ;; HOME is needed for the test
22299 ;; "test_pathcompleter_can_expanduser".
22300 (setenv "HOME" "/tmp"))))))
22301 (native-inputs
22302 (list python-pytest
22303 python-setuptools))
22304 (propagated-inputs
22305 (list python-wcwidth))
22306 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
22307 (synopsis "Library for building command line interfaces in Python")
22308 (description
22309 "Prompt-Toolkit is a library for building interactive command line
22310interfaces in Python. It's like GNU Readline but it also features syntax
22311highlighting while typing, out-of-the-box multi-line input editing, advanced
22312code completion, incremental search, support for Chinese double-width
22313characters, mouse support, and auto suggestions.")
22314 (license license:bsd-3)))
22315
22316(define-public python-proselint
22317 (package
22318 (name "python-proselint")
22319 (version "0.14.0")
22320 (source
22321 (origin
22322 (method url-fetch)
22323 (uri (pypi-uri "proselint" version))
22324 (sha256
22325 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
22326 (build-system pyproject-build-system)
22327 (arguments
22328 (list
22329 #:phases
22330 #~(modify-phases %standard-phases
22331 (add-after 'unpack 'set-home-directory
22332 (lambda _
22333 (setenv "HOME" "/tmp"))))))
22334 (native-inputs
22335 (list python-poetry-core
22336 python-pytest))
22337 (propagated-inputs
22338 (list python-click))
22339 (home-page "http://proselint.com/")
22340 (synopsis "Linter for prose")
22341 (description "@code{python-proselint} is a linter for English prose, that
22342scans through a file and detects issues.")
22343 (license license:bsd-3)))
22344
22345(define-public python-jedi
22346 (package
22347 (name "python-jedi")
22348 (version "0.19.2")
22349 (source
22350 (origin
22351 (method git-fetch)
22352 (uri (git-reference
22353 (url "https://github.com/davidhalter/jedi")
22354 (commit (string-append "v" version))
22355 (recursive? #true)))
22356 (file-name (git-file-name name version))
22357 (sha256
22358 (base32
22359 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
22360 (build-system pyproject-build-system)
22361 (arguments
22362 (list
22363 #:phases
22364 '(modify-phases %standard-phases
22365 (add-before 'check 'set-HOME
22366 (lambda _ (setenv "HOME" "/tmp"))))))
22367 (native-inputs
22368 (list python-docopt
22369 python-pytest
22370 python-setuptools
22371 python-wheel))
22372 (propagated-inputs
22373 (list python-parso))
22374 (home-page "https://github.com/davidhalter/jedi")
22375 (synopsis "Autocompletion and static analysis library for Python")
22376 (description
22377 "Jedi is a static analysis tool for Python that can be used in Integrated
22378Development Environments (@dfn{IDE}s) and text editors. It understands Python
22379on a deeper level than many other static analysis frameworks for Python.
22380
22381Jedi understands docstrings and you can use Jedi autocompletion in your REPL
22382as well.")
22383 (license license:expat)))
22384
22385(define-public ptpython
22386 (package
22387 (name "ptpython")
22388 (version "3.0.20")
22389 (source
22390 (origin
22391 (method git-fetch)
22392 (uri (git-reference
22393 (url "https://github.com/jonathanslenders/ptpython")
22394 (commit version)))
22395 (file-name (git-file-name name version))
22396 (sha256
22397 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
22398 (build-system pyproject-build-system)
22399 (arguments
22400 (list
22401 ;; XXX: There is a tests/run_tests.py file but all it does is a
22402 ;; sanity check.
22403 #:tests? #f))
22404 (native-inputs (list python-setuptools))
22405 (propagated-inputs
22406 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
22407 (home-page "https://github.com/jonathanslenders/ptpython")
22408 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
22409 (description
22410 "ptpython is a Python read-eval-print loop with IDE-like features.
22411It supports syntax highlighting, multiline editing, autocompletion, mouse,
22412color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
22413etc.")
22414 (license license:bsd-3)))
22415
22416(define-public python-easyprocess
22417 (package
22418 (name "python-easyprocess")
22419 (version "1.1")
22420 (source
22421 (origin
22422 (method git-fetch)
22423 (uri (git-reference
22424 (url "https://github.com/ponty/easyprocess")
22425 (commit version)))
22426 (file-name (git-file-name name version))
22427 (sha256
22428 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
22429 (build-system pyproject-build-system)
22430 (arguments
22431 ;; Tests require pyvirtualdisplay, which requires this package.
22432 (list #:tests? #f))
22433 (native-inputs (list python-setuptools))
22434 (home-page "https://github.com/ponty/easyprocess")
22435 (synopsis "Python subprocess interface")
22436 (description
22437 "@code{easyprocess} is an easy to use Python subprocess interface.")
22438 (license license:bsd-3)))
22439
22440(define-public python-entrypoint2
22441 (package
22442 (name "python-entrypoint2")
22443 (version "0.2.4")
22444 (source
22445 (origin
22446 (method url-fetch)
22447 (uri (pypi-uri "entrypoint2" version))
22448 (sha256
22449 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
22450 (build-system pyproject-build-system)
22451 (native-inputs (list python-easyprocess python-pytest python-pytest-runner
22452 python-setuptools python-wheel))
22453 (home-page "https://github.com/ponty/entrypoint2")
22454 (synopsis "Command-line interface for Python modules")
22455 (description
22456 "@code{entrypoint2} is an easy to use command-line interface for Python
22457 modules based on @code{argparse}. It translates function signature and
22458 documentation to argparse configuration.")
22459 (license license:bsd-3)))
22460
22461(define-public python-pyvirtualdisplay
22462 (package
22463 (name "python-pyvirtualdisplay")
22464 (version "3.0")
22465 (source
22466 (origin
22467 (method url-fetch)
22468 (uri (pypi-uri "PyVirtualDisplay" version))
22469 (sha256
22470 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
22471 (build-system pyproject-build-system)
22472 (arguments
22473 (list
22474 ;; tests: 27 passed, 8 deselected
22475 #:test-flags
22476 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
22477 ;; OSError: Pillow was built without XCB support
22478 #~(list #$@(map (lambda (test) (string-append "--deselect="
22479 "tests/"
22480 test))
22481 (list "test_smart.py::test_slowshot"
22482 "test_smart.py::test_slowshot_with"
22483 "test_smart.py::test_slowshot_nocrop"
22484 "test_smart.py::test_slowshot_timeout"
22485 "test_smart.py::test_slowshot_timeout_nocrop"
22486 "test_smart2.py::test_double"
22487 "test_smart_thread.py::test_smart"
22488 "test_examples.py::test_screenshot")))))
22489 (native-inputs
22490 (list python-easyprocess
22491 python-entrypoint2
22492 python-psutil
22493 python-pytest
22494 python-setuptools
22495 python-vncdotool-bootstrap
22496 xmessage
22497 xorg-server-for-tests))
22498 (home-page "https://github.com/ponty/pyvirtualdisplay")
22499 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
22500 (description
22501 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
22502 (license license:bsd-3)))
22503
22504(define-public python-pyserial
22505 (package
22506 (name "python-pyserial")
22507 (version "3.5")
22508 (source
22509 (origin
22510 (method url-fetch)
22511 (uri (pypi-uri "pyserial" version))
22512 (sha256
22513 (base32
22514 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
22515 (build-system pyproject-build-system)
22516 (native-inputs
22517 (list python-pytest
22518 python-setuptools
22519 python-wheel))
22520 (home-page "https://github.com/pyserial/pyserial")
22521 (synopsis "Python Serial Port Bindings")
22522 (description
22523 "@code{pyserial} provide serial port bindings for Python. It supports
22524different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
22525Xon/Xoff. The port is accessed in RAW mode.")
22526 (license license:bsd-3)))
22527
22528(define-public python-pyserial-asyncio
22529 (package
22530 (name "python-pyserial-asyncio")
22531 (version "0.6")
22532 (source
22533 (origin
22534 (method git-fetch)
22535 (uri (git-reference
22536 (url "https://github.com/pyserial/pyserial-asyncio")
22537 (commit (string-append "v" version))))
22538 (file-name (git-file-name name version))
22539 (sha256
22540 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
22541 (build-system pyproject-build-system)
22542 (arguments (list #:test-backend #~'unittest))
22543 (native-inputs (list python-setuptools))
22544 (propagated-inputs (list python-pyserial))
22545 (home-page "https://github.com/pyserial/pyserial-asyncio")
22546 (synopsis "Pyserial asynchronous I/O extension")
22547 (description
22548 "This package extends Pyserial with asynchronous I/O support.")
22549 (license license:bsd-3)))
22550
22551(define-public python-pymemcache
22552 (package
22553 (name "python-pymemcache")
22554 (version "4.0.0")
22555 (source
22556 (origin
22557 (method url-fetch)
22558 (uri (pypi-uri "pymemcache" version))
22559 (sha256
22560 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
22561 (build-system pyproject-build-system)
22562 (arguments
22563 ;; We don't have the zstd module.
22564 (list
22565 #:test-flags
22566 '(list "--ignore=pymemcache/test/test_compression.py")))
22567 (native-inputs
22568 (list python-faker python-pytest python-pytest-cov python-setuptools
22569 python-wheel))
22570 (home-page "https://github.com/pinterest/pymemcache")
22571 (synopsis "Comprehensive, fast, pure Python memcached client")
22572 (description
22573 "This package provides a comprehensive, fast, pure Python memcached
22574client.")
22575 (license license:asl2.0)))
22576
22577(define-public python-pymodbus
22578 (package
22579 (name "python-pymodbus")
22580 (version "3.8.6")
22581 (source
22582 (origin
22583 (method git-fetch)
22584 (uri (git-reference
22585 (url "https://github.com/riptideio/pymodbus")
22586 (commit (string-append "v" version))))
22587 (file-name (git-file-name name version))
22588 (sha256
22589 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
22590 (build-system pyproject-build-system)
22591 (arguments
22592 (list
22593 #:test-flags
22594 #~(list "--ignore"
22595 "test/server/test_simulator_api.py"
22596 ;; These tests require the presence of a certificate.
22597 "--ignore-glob"
22598 "test/examples/*"
22599 "--ignore"
22600 "test/client/test_client.py")))
22601 (native-inputs (list python-mock
22602 python-pytest
22603 python-pytest-asyncio
22604 python-pytest-cov
22605 python-pytest-xdist
22606 python-redis
22607 python-setuptools
22608 python-sqlalchemy
22609 python-tornado
22610 python-twisted
22611 python-wheel))
22612 (propagated-inputs (list python-pyserial
22613 python-six
22614 ;; For the REPL.
22615 python-aiohttp
22616 python-click
22617 python-prompt-toolkit
22618 python-pygments
22619 python-pyserial-asyncio))
22620 (home-page "https://github.com/riptideio/pymodbus/")
22621 (synopsis "Modbus protocol stack in Python")
22622 (description
22623 "Pymodbus is a full Modbus protocol implementation using
22624 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
22625 communications core. It includes the following @emph{client} features:
22626 @itemize
22627 @item full read/write protocol on discrete and register
22628 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
22629 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
22630 @item asynchronous and synchronous versions
22631 @item payload builder/decoder utilities
22632 @item pymodbus read eval print loop (REPL).
22633 @end itemize
22634 It also includes the following @emph{server} features:
22635 @itemize
22636 @item can function as a fully implemented Modbus server
22637 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
22638 @item asynchronous and synchronous versions
22639 @item full server control context (device information, counters, etc)
22640 @item a number of backing contexts (database, redis, sqlite, a slave device).
22641 @end itemize")
22642 (license license:bsd-3)))
22643
22644(define-public python-exodriver
22645 (package
22646 (name "python-exodriver")
22647 (version "2.6.0")
22648 (source (origin
22649 (method git-fetch)
22650 (uri (git-reference
22651 (url "https://github.com/labjack/exodriver")
22652 (commit (string-append "v" version))))
22653 (file-name (git-file-name name version))
22654 (sha256
22655 (base32
22656 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
22657 (outputs (list "out"
22658 "doc")) ;544 KiB of examples
22659 (build-system gnu-build-system)
22660 (arguments
22661 (list
22662 #:tests? #f ;no test suite
22663 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
22664 (string-append "PREFIX=" #$output)
22665 "RUN_LDCONFIG=0"
22666 "LINK_SO=1")
22667 #:phases
22668 #~(modify-phases %standard-phases
22669 (delete 'configure)
22670 (replace 'build
22671 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
22672 (with-directory-excursion "liblabjackusb"
22673 (apply (assoc-ref %standard-phases 'build)
22674 `(,@args #:make-flags ,make-flags)))))
22675 (replace 'install
22676 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
22677 (with-directory-excursion "liblabjackusb"
22678 (apply (assoc-ref %standard-phases 'install)
22679 `(,@args #:make-flags ,make-flags)))
22680 ;; Install udev rules.
22681 (install-file "90-labjack.rules"
22682 (string-append #$output "/lib/udev/rules.d"))
22683 ;; Install examples.
22684 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
22685 (mkdir-p doc)
22686 (copy-recursively "examples"
22687 (string-append doc "/examples"))))))))
22688 (inputs (list libusb))
22689 (home-page "https://github.com/labjack/exodriver")
22690 (synopsis "USB driver for LabJack data acquisition instruments")
22691 (description "This package provides @code{liblabjackusb}, a USB library for low-level
22692communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
22693instruments. A udev rule is also included to allow unprivileged users to
22694communicate with the instruments via USB.")
22695 (license license:expat))) ;see README
22696
22697(define-public python-labjack
22698 (package
22699 (name "python-labjack")
22700 (version "2.1.0")
22701 (source (origin
22702 (method url-fetch)
22703 (uri (pypi-uri "LabJackPython" version))
22704 (sha256
22705 (base32
22706 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
22707 (build-system pyproject-build-system)
22708 (arguments
22709 (list
22710 #:tests? #f ;no test suite
22711 #:phases
22712 #~(modify-phases %standard-phases
22713 (add-after 'unpack 'patch-liblabjackusb.so
22714 (lambda* (#:key inputs #:allow-other-keys)
22715 (substitute* (find-files "." "\\.py$")
22716 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
22717 (format #f "ctypes.CDLL(~s"
22718 (search-input-file inputs
22719 "lib/liblabjackusb.so")))))))))
22720 (native-inputs (list python-setuptools))
22721 ;; exodriver is provided as a regular input, as only its shared object is
22722 ;; used, not its Python API.
22723 (inputs (list python-exodriver))
22724 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
22725 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
22726 (description
22727 "This Python library allows communicating with the U3, U6, UE9 and U12
22728LabJack data acquisition (DAQ) modules.")
22729 (license license:expat))) ;see setup.py
22730
22731(define-public python-kivy-garden
22732 (package
22733 (name "python-kivy-garden")
22734 (version "0.1.5")
22735 (source
22736 (origin
22737 (method git-fetch) ; source was removed from PyPI
22738 (uri (git-reference
22739 (url "https://github.com/kivy-garden/garden")
22740 (commit (string-append "v" version))))
22741 (file-name (git-file-name name version))
22742 (sha256
22743 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
22744 (build-system pyproject-build-system)
22745 (arguments
22746 (list
22747 #:tests? #f)) ; no tests in PyPI or Git distributions
22748 (native-inputs
22749 (list python-setuptools
22750 python-wheel))
22751 (propagated-inputs
22752 (list python-requests))
22753 (home-page "https://github.com/kivy-garden/garden")
22754 (synopsis "Garden tool for Kivy flowers")
22755 (description
22756 "This package provides the @command{garden} command to install packages
22757for Kivy, the multitouch application platform.")
22758 (license license:expat)))
22759
22760(define-public python-async-lru
22761 (package
22762 (name "python-async-lru")
22763 (version "2.0.4")
22764 (source
22765 (origin
22766 (method url-fetch)
22767 (uri (pypi-uri "async-lru" version))
22768 (sha256
22769 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
22770 (build-system pyproject-build-system)
22771 (native-inputs
22772 (list python-pytest
22773 python-pytest-asyncio
22774 python-pytest-cov
22775 python-pytest-timeout
22776 python-setuptools
22777 python-wheel))
22778 (propagated-inputs
22779 (list python-typing-extensions))
22780 (home-page "https://github.com/aio-libs/async-lru")
22781 (synopsis "Simple LRU cache for asyncio")
22782 (description
22783 "This package is a port of Python's built-in @code{functools.lru_cache}
22784function for @code{asyncio}. To better handle async behaviour, it also
22785ensures multiple concurrent calls will only result in 1 call to the wrapped
22786function, with all awaits receiving the result of that call when it
22787completes.")
22788 (license license:expat)))
22789
22790(define-public python-asyncinject
22791 (package
22792 (name "python-asyncinject")
22793 (version "0.6")
22794 (source
22795 (origin
22796 (method url-fetch)
22797 (uri (pypi-uri "asyncinject" version))
22798 (sha256
22799 (base32 "0x57idiy19lzyn32klgm06r223z8gr2aqqk91gysbshq7jg8g3pf"))))
22800 (build-system pyproject-build-system)
22801 (native-inputs (list python-pytest python-pytest-asyncio
22802 python-setuptools python-wheel))
22803 (home-page "https://github.com/simonw/asyncinject")
22804 (synopsis
22805 "Run async workflows using pytest-fixtures-style dependency injection")
22806 (description
22807 "This package lets you run asynchronous workflows using
22808pytest-fixtures-style dependency injection.")
22809 (license license:asl2.0)))
22810
22811(define-public python-binaryornot
22812 (package
22813 (name "python-binaryornot")
22814 (version "0.4.4")
22815 (source
22816 (origin
22817 (method url-fetch)
22818 (uri (pypi-uri "binaryornot" version))
22819 (sha256
22820 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
22821 (build-system pyproject-build-system)
22822 (arguments
22823 (list
22824 #:test-backend #~'unittest
22825 #:test-flags #~(list "discover" "tests")
22826 #:phases
22827 #~(modify-phases %standard-phases
22828 (add-after 'unpack 'patch-tests
22829 (lambda _
22830 ;; TypeError: binary() got an unexpected keyword argument
22831 ;; 'average_size'.
22832 (substitute* "tests/test_check.py"
22833 (("average_size=512") "")))))))
22834 (native-inputs
22835 (list python-hypothesis
22836 python-setuptools))
22837 (propagated-inputs
22838 (list python-chardet))
22839 (home-page "https://github.com/audreyr/binaryornot")
22840 (synopsis "Package to check if a file is binary or text")
22841 (description "Ultra-lightweight pure Python package to check if a file is
22842 binary or text.")
22843 (license license:bsd-3)))
22844
22845(define-public python-bson
22846 (package
22847 (name "python-bson")
22848 (version "0.5.10")
22849 (source
22850 (origin
22851 (method git-fetch) ;for tests
22852 (uri (git-reference
22853 (url "https://github.com/py-bson/bson")
22854 (commit version)))
22855 (file-name (git-file-name name version))
22856 (sha256
22857 (base32
22858 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
22859 (build-system pyproject-build-system)
22860 (native-inputs
22861 (list python-pytest
22862 python-setuptools))
22863 (propagated-inputs
22864 (list python-dateutil
22865 python-six))
22866 (home-page "https://github.com/py-bson/bson")
22867 (synopsis "BSON (Binary JSON) codec for Python")
22868 (description "@code{bson} is a Python library implementing a BSON (Binary
22869JSON) codec.")
22870 (license license:asl2.0)))
22871
22872(define-public python-nltk
22873 (package
22874 (name "python-nltk")
22875 (version "3.9.1")
22876 (source
22877 (origin
22878 (method url-fetch)
22879 (uri (pypi-uri "nltk" version))
22880 (sha256
22881 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
22882 (build-system pyproject-build-system)
22883 (arguments
22884 ;; Tests require some extra resources to be downloaded.
22885 ;; TODO Try packaging these resources.
22886 '(#:tests? #f))
22887 (propagated-inputs (list python-click python-joblib python-regex
22888 python-tqdm))
22889 (native-inputs (list python-setuptools python-wheel))
22890 (home-page "https://www.nltk.org/")
22891 (synopsis "Natural Language Toolkit")
22892 (description
22893 "NLTK provides interfaces to over 50 corpora and lexical resources such as
22894WordNet, along with a suite of text processing libraries for classification,
22895tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
22896natural language processing libraries.")
22897 (license license:asl2.0)))
22898
22899(define-public python-pymongo
22900 (package
22901 (name "python-pymongo")
22902 (version "4.16.0")
22903 (source
22904 (origin
22905 (method url-fetch)
22906 (uri (pypi-uri "pymongo" version))
22907 (sha256
22908 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
22909 (build-system pyproject-build-system)
22910 (arguments
22911 (list
22912 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
22913 #:test-flags
22914 ;; Tests need access to /etc/resolve.conf.
22915 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
22916 "--ignore=test/test_srv_polling.py"
22917 "-k" (string-join
22918 ;; Tests need access to /etc/resolve.conf
22919 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
22920 "test_detected_environment_warning"
22921 ;; XXX: Tests fail with assertion is not equal.
22922 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
22923 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
22924 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
22925 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
22926 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
22927 " and not "))))
22928 (native-inputs
22929 (list python-hatch-requirements-txt
22930 python-hatchling
22931 python-pytest
22932 python-pytest-asyncio
22933 python-setuptools))
22934 (propagated-inputs
22935 (list python-certifi
22936 python-dnspython))
22937 (home-page "https://github.com/mongodb/mongo-python-driver")
22938 (synopsis "Python driver for MongoDB")
22939 (description "Python driver for MongoDB.")
22940 (license license:asl2.0)))
22941
22942(define-public python-py-consul
22943 (package
22944 (name "python-py-consul")
22945 (version "1.6.0")
22946 (source
22947 (origin
22948 (method git-fetch)
22949 (uri (git-reference
22950 ;; Fork from https://github.com/cablehead/python-consul
22951 (url "https://github.com/criteo/py-consul")
22952 (commit (string-append "v" version))))
22953 (file-name (git-file-name name version))
22954 (sha256
22955 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
22956 (build-system pyproject-build-system)
22957 (arguments (list #:tests? #f)) ; Tests require docker.
22958 (native-inputs (list python-setuptools))
22959 (propagated-inputs (list python-requests))
22960 (home-page "https://github.com/criteo/py-consul")
22961 (synopsis "Python client for Consul")
22962 (description
22963 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
22964discovery, monitoring and configuration.")
22965 (license license:expat)))
22966
22967(define-public python-schematics
22968 (package
22969 (name "python-schematics")
22970 (version "2.1.1")
22971 (source
22972 (origin
22973 (method git-fetch)
22974 (uri (git-reference
22975 (url "https://github.com/schematics/schematics")
22976 (commit (string-append "v" version))))
22977 (file-name (git-file-name name version))
22978 (sha256
22979 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
22980 (build-system pyproject-build-system)
22981 (native-inputs
22982 (list python-dateutil python-mock python-pytest python-setuptools))
22983 (home-page "https://github.com/schematics/schematics")
22984 (synopsis "Python Data Structures for Humans")
22985 (description
22986 "Schematics is a Python library to combine types into structures,
22987validate them, and transform the shapes of your data based on simple
22988descriptions.
22989
22990The internals are similar to ORM type systems, but there is no database layer
22991in Schematics. Instead, building a database layer is easily made when
22992Schematics handles everything except for writing the query. Schematics can be
22993used for tasks where having a database involved is unusual.")
22994 (license license:bsd-3)))
22995
22996(define-public python-odfpy
22997 (package
22998 (name "python-odfpy")
22999 (version "1.4.2")
23000 (source
23001 (origin
23002 (method git-fetch)
23003 (uri (git-reference
23004 (url "https://github.com/eea/odfpy")
23005 (commit (string-append "release-" version))))
23006 (file-name (git-file-name name version))
23007 (sha256
23008 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
23009 (build-system pyproject-build-system)
23010 (native-inputs (list python-pytest python-setuptools))
23011 (propagated-inputs (list python-defusedxml))
23012 (home-page "https://github.com/eea/odfpy")
23013 (synopsis "Python API and tools to manipulate OpenDocument files")
23014 (description
23015 "Collection of libraries and utility programs written in Python to
23016manipulate OpenDocument 1.2 files.")
23017 (license
23018 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
23019 ;; number of files with other licenses.
23020 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
23021
23022(define-public python-namex
23023 (package
23024 (name "python-namex")
23025 (version "0.0.7")
23026 (source
23027 (origin
23028 (method url-fetch)
23029 (uri (pypi-uri "namex" version))
23030 (sha256
23031 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
23032 (build-system pyproject-build-system)
23033 (arguments (list #:tests? #false)) ;there are none
23034 (native-inputs (list python-setuptools python-wheel))
23035 (home-page "https://github.com/fchollet/namex")
23036 (synopsis
23037 "Separate implementation and public API surface of Python packages")
23038 (description
23039 "This package provides a simple utility to separate the
23040implementation of your Python package and its public API surface.")
23041 (license license:asl2.0)))
23042
23043(define-public python-natsort
23044 (package
23045 (name "python-natsort")
23046 (version "8.4.0")
23047 (source
23048 (origin
23049 (method url-fetch)
23050 (uri (pypi-uri "natsort" version))
23051 (sha256
23052 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
23053 (build-system pyproject-build-system)
23054 (native-inputs
23055 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
23056 python-pytest
23057 python-pytest-mock
23058 python-setuptools))
23059 (propagated-inputs
23060 (list python-fastnumbers
23061 python-pyicu))
23062 (home-page "https://github.com/SethMMorton/natsort")
23063 (synopsis "Natural sorting for python and shell")
23064 (description
23065 "Natsort lets you apply natural sorting on lists instead of
23066lexicographical. If you use the built-in @code{sorted} method in python on a
23067list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
23068it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
23069@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
23070numbers and sorts them separately from strings. It can also sort version
23071numbers, real numbers, mixed types and more, and comes with a shell command
23072@command{natsort} that exposes this functionality in the command line.")
23073 (license license:expat)))
23074
23075(define-public python-graphql-core
23076 (package
23077 (name "python-graphql-core")
23078 (version "3.1.2")
23079 (source
23080 (origin
23081 (method url-fetch)
23082 (uri (pypi-uri "graphql-core" version))
23083 (sha256
23084 (base32
23085 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
23086 (build-system pyproject-build-system)
23087 (arguments
23088 (list
23089 #:phases
23090 '(modify-phases %standard-phases
23091 (add-after 'unpack 'use-poetry-core
23092 (lambda _
23093 ;; Patch to use the core poetry API.
23094 (substitute* "pyproject.toml"
23095 (("poetry.masonry.api")
23096 "poetry.core.masonry.api")
23097 ;; Poetry does not like line breaks.
23098 (("description = \"\"\"")
23099 "description = \"GraphQL-core is a Python port of GraphQL.js.\"\n")
23100 (("^GraphQL-core is a Python.*") "")
23101 (("^ the JavaScript reference.*") ""))))
23102 (add-after 'unpack 'patch-setup.py
23103 (lambda _
23104 (substitute* "setup.py"
23105 ;; Relax hardcoded version
23106 (("'gevent==1.1rc1'") "'gevent'")
23107 ;; Poetry complains about this line break.
23108 (("a port of GraphQL.js,\"")
23109 (string-append "a port of GraphQL.js, "
23110 "the JavaScript reference implementation for GraphQL."))
23111 ((" \" the JavaScript reference.*") "")))))))
23112 (native-inputs
23113 (list python-gevent
23114 python-mock
23115 python-poetry-core
23116 python-pytest
23117 python-pytest-benchmark
23118 python-pytest-mock))
23119 (propagated-inputs
23120 (list python-promise python-six))
23121 (home-page "https://github.com/graphql-python/graphql-core")
23122 (synopsis "GraphQL implementation for Python")
23123 (description
23124 "GraphQL implementation for Python. GraphQL is a data query language and
23125 runtime designed and used to request and deliver data to mobile and web apps.
23126 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
23127 to Python.")
23128 (license license:expat)))
23129
23130(define-public python-graphql-relay
23131 (package
23132 (name "python-graphql-relay")
23133 (version "3.1.0")
23134 (source
23135 (origin
23136 (method git-fetch)
23137 (uri (git-reference
23138 (url "https://github.com/graphql-python/graphql-relay-py")
23139 (commit (string-append "v" version))))
23140 (file-name (git-file-name name version))
23141 (sha256
23142 (base32 "06ybi4bwqdffa5kn8xnns06wh3l0zj3qlzrxk1wpxqq320hyzx9x"))))
23143 (build-system pyproject-build-system)
23144 (arguments (list #:test-flags #~(list "tests")))
23145 (native-inputs
23146 (list python-pytest python-pytest-asyncio python-poetry-core))
23147 (propagated-inputs (list python-graphql-core))
23148 (home-page "https://github.com/graphql-python/graphql-relay-py")
23149 (synopsis "Relay implementation for Python")
23150 (description
23151 "This is a library to allow the easy creation of Relay-compliant servers
23152using the GraphQL Python reference implementation of a GraphQL server. It
23153should be noted that the code is a exact port of the original
23154@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
23155implementation} from Facebook.")
23156 (license license:expat)))
23157
23158(define-public python-graphene
23159 (package
23160 (name "python-graphene")
23161 (version "3.4.3")
23162 (source
23163 (origin
23164 (method url-fetch)
23165 (uri (pypi-uri "graphene" version))
23166 (sha256
23167 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
23168 (build-system pyproject-build-system)
23169 (arguments
23170 (list #:tests? #f)) ;XXX: tests fail to load
23171 (native-inputs
23172 (list python-setuptools))
23173 (propagated-inputs
23174 (list python-dateutil
23175 python-graphql-core
23176 python-graphql-relay
23177 python-typing-extensions))
23178 (home-page "https://graphene-python.org/")
23179 (synopsis "GraphQL Framework for Python")
23180 (description
23181 "Graphene is a Python library for building GraphQL schemas/types. A
23182GraphQL schema describes your data model, and provides a GraphQL server with
23183an associated set of resolve methods that know how to fetch data.")
23184 (license license:expat)))
23185
23186(define-public python-rodi
23187 (package
23188 (name "python-rodi")
23189 (version "2.0.8")
23190 (source
23191 (origin
23192 (method git-fetch)
23193 (uri (git-reference
23194 (url "https://github.com/Neoteroi/rodi")
23195 (commit (string-append "v" version))))
23196 (file-name (git-file-name name version))
23197 (sha256
23198 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
23199 (build-system pyproject-build-system)
23200 (native-inputs
23201 (list python-hatchling
23202 python-pytest
23203 python-pytest-asyncio))
23204 (home-page "https://github.com/Neoteroi/rodi")
23205 (synopsis "Dependency injection framework for Python")
23206 (description
23207 "Rodi is a dependency injection framework for Python applications.
23208
23209Its features include
23210
23211@itemize
23212@item Type resolution by signature types annotations.
23213@item Type resolution by class annotations.
23214@item Type resolution by names and aliases.
23215@item Build graph of objects without the need for source code changes.
23216@item Minimum overhead to obtain services, once the objects graph is built.
23217@item Support for singleton, transient, and scoped services.
23218@end itemize")
23219 (license license:expat)))
23220
23221;; XXX: The last time updated in 2015, consider to remove it when nothing is
23222;; depend on it.
23223(define-public python-snowballstemmer
23224 (package
23225 (name "python-snowballstemmer")
23226 (version "2.2.0")
23227 (source
23228 (origin
23229 (method url-fetch)
23230 (uri (pypi-uri "snowballstemmer" version))
23231 (sha256
23232 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
23233 (build-system pyproject-build-system)
23234 (arguments
23235 (list
23236 #:tests? #f)) ; no tests
23237 (native-inputs
23238 (list python-setuptools
23239 python-wheel))
23240 (home-page "https://github.com/shibukawa/snowball_py")
23241 (synopsis "Snowball stemming library collection for Python")
23242 (description
23243 "This package provides 16 word stemmer algorithms generated from Snowball
23244algorithms. It includes the 15 original ones plus the Poerter English
23245stemmer.")
23246 (license license:bsd-3)))
23247
23248(define-public python-setproctitle
23249 (package
23250 (name "python-setproctitle")
23251 (version "1.3.7")
23252 (source
23253 (origin
23254 (method git-fetch)
23255 (uri (git-reference
23256 (url "https://github.com/dvarrazzo/py-setproctitle")
23257 (commit (string-append "version-" version))))
23258 (file-name (git-file-name name version))
23259 (sha256
23260 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
23261 (build-system pyproject-build-system)
23262 (arguments
23263 (list
23264 #:phases
23265 #~(modify-phases %standard-phases
23266 (add-before 'check 'configure-tests
23267 (lambda* (#:key tests? #:allow-other-keys)
23268 (when tests?
23269 (setenv "PYTHON"
23270 (or (which "python3")
23271 (which "python")))
23272 (setenv "PYCONFIG"
23273 (if (which "python3-config")
23274 "python3-config --embed"
23275 "python-config"))
23276 (substitute* "tests/conftest.py"
23277 (("cc") "gcc"))))))))
23278 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
23279 (home-page "https://github.com/dvarrazzo/py-setproctitle")
23280 (synopsis
23281 "Setproctitle implementation for Python to customize the process title")
23282 (description
23283 "The library allows a process to change its title (as displayed by system
23284tools such as @code{ps} and @code{top}).
23285
23286Changing the title is mostly useful in multi-process systems, for example when a
23287master process is forked: changing the children's title allows identifying the
23288task each process is busy with. The technique is used by PostgreSQL and the
23289OpenSSH Server for example.")
23290 (license license:bsd-3)))
23291
23292(define-public python-pyelftools
23293 (package
23294 (name "python-pyelftools")
23295 (version "0.32")
23296 (source
23297 (origin
23298 (method git-fetch)
23299 (uri (git-reference
23300 (url "https://github.com/eliben/pyelftools")
23301 (commit (string-append "v" version))))
23302 (file-name (git-file-name name version))
23303 (sha256
23304 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
23305 (snippet
23306 #~(begin
23307 ;; Delete bundled readelf and llvm-dwardump executables. Project
23308 ;; also ships quite a lot binary files mainly for tests, check
23309 ;; with:
23310 ;;
23311 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
23312 ;;
23313 (delete-file "test/external_tools/readelf")
23314 (delete-file "test/external_tools/llvm-dwarfdump")))))
23315 (build-system pyproject-build-system)
23316 (arguments
23317 (list
23318 #:phases
23319 #~(modify-phases %standard-phases
23320 (replace 'check
23321 (lambda* (#:key tests? #:allow-other-keys)
23322 (when tests?
23323 ;; Run just basic unit and example tests, dwarfdump and
23324 ;; readelf tests are not selected as they are fragile and
23325 ;; arch-specific.
23326 (invoke "python" "test/run_all_unittests.py")
23327 (invoke "python" "test/run_examples_test.py")))))))
23328 (home-page "https://github.com/eliben/pyelftools")
23329 (native-inputs
23330 (list python-setuptools
23331 python-wheel))
23332 (synopsis "Analyze binary and library file information")
23333 (description
23334 "This Python library provides interfaces for parsing and analyzing two
23335binary and library file formats ; the Executable and Linking Format (ELF), and
23336debugging information in the Debugging With Attributed Record
23337Format (DWARF).")
23338 (license license:public-domain)))
23339
23340(define-public python-pefile
23341 (package
23342 (name "python-pefile")
23343 (version "2024.8.26")
23344 (source
23345 (origin
23346 (method git-fetch)
23347 (uri (git-reference
23348 (url "https://github.com/erocarrera/pefile")
23349 (commit (string-append "v" version))))
23350 (file-name (git-file-name name version))
23351 (sha256
23352 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
23353 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
23354 (build-system pyproject-build-system)
23355 (arguments
23356 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
23357 ;; It seems clear however that test_data.tar.bz2.enc needs to be
23358 ;; decrypted and unpacked before we can run them.
23359 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
23360 (native-inputs (list python-pytest python-setuptools))
23361 (propagated-inputs (list python-future))
23362 (home-page "https://github.com/erocarrera/pefile")
23363 (synopsis "Portable Executable (PE) file parser")
23364 (description
23365 "This python library provides interfaces for parsing and working with
23366Portable Executable (PE) files. It makes to most information from the header,
23367as well as section details and data available.")
23368 (license license:expat)))
23369
23370(define-public python-pyemd
23371 (package
23372 (name "python-pyemd")
23373 (version "1.0.0")
23374 (source (origin
23375 (method url-fetch)
23376 (uri (pypi-uri "pyemd" version))
23377 (sha256
23378 (base32
23379 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
23380 (build-system pyproject-build-system)
23381 (native-inputs
23382 (list python-cython
23383 python-pytest
23384 python-setuptools
23385 python-setuptools-scm))
23386 (propagated-inputs
23387 (list python-numpy-1))
23388 (home-page "https://github.com/wmayner/pyemd")
23389 (synopsis
23390 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
23391 (description
23392 "This package provides a Python wrapper for Ofir Pele and Michael
23393Werman's implementation of the Earth Mover's Distance.")
23394 (license license:expat)))
23395
23396(define-public python-imagesize
23397 (package
23398 (name "python-imagesize")
23399 (version "1.4.1")
23400 (source
23401 (origin
23402 (method url-fetch)
23403 (uri (pypi-uri "imagesize" version))
23404 (sha256
23405 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
23406 (build-system pyproject-build-system)
23407 (arguments (list #:test-backend #~'unittest))
23408 (native-inputs
23409 (list python-setuptools
23410 python-wheel))
23411 (home-page "https://github.com/shibukawa/imagesize_py")
23412 (synopsis "Gets image size of files in various formats in Python")
23413 (description
23414 "This package allows determination of image size from PNG, JPEG,
23415JPEG2000 and GIF files in pure Python.")
23416 (license license:expat)))
23417
23418(define-public python-argcomplete
23419 (package
23420 (name "python-argcomplete")
23421 (version "3.6.2")
23422 (source
23423 (origin
23424 (method url-fetch)
23425 (uri (pypi-uri "argcomplete" version))
23426 (sha256
23427 (base32
23428 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
23429 (build-system pyproject-build-system)
23430 (arguments
23431 (list
23432 #:test-backend #~'custom
23433 #:test-flags #~(list "test/test.py" "-v")
23434 #:phases
23435 #~(modify-phases %standard-phases
23436 (add-before 'check 'disable-pip-tests
23437 (lambda _
23438 ;; pip: command not found
23439 (substitute* "test/test.py"
23440 (("def test_console_script")
23441 "def __disable_test_console_script")))))))
23442 (native-inputs
23443 (list python-hatch-vcs
23444 python-hatchling
23445 python-pexpect
23446 tcsh
23447 fish
23448 bash ;full Bash for 'test_file_completion'
23449 zsh))
23450 (home-page "https://github.com/kislyuk/argcomplete")
23451 (synopsis "Shell tab completion for Python argparse")
23452 (description "argcomplete provides extensible command line tab completion
23453of arguments and options for Python scripts using @code{argparse}. It's
23454particularly useful for programs with many options or sub-parsers that can
23455dynamically suggest completions ; for example, when browsing resources over
23456the network.")
23457 (license license:asl2.0)))
23458
23459(define-public python-csscompressor
23460 (package
23461 (name "python-csscompressor")
23462 (version "0.9.5")
23463 (source
23464 (origin
23465 (method git-fetch)
23466 (uri (git-reference
23467 (url "https://github.com/sprymix/csscompressor")
23468 (commit (string-append "v" version))))
23469 (file-name (git-file-name name version))
23470 (sha256
23471 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
23472 (build-system pyproject-build-system)
23473 (native-inputs (list python-pytest python-setuptools))
23474 (home-page "https://github.com/sprymix/csscompressor")
23475 (synopsis "Python port of YUI CSS Compressor")
23476 (description "This package provides a python port of YUI CSS Compressor.")
23477 (license license:bsd-3)))
23478
23479(define-public python-rcssmin
23480 (package
23481 (name "python-rcssmin")
23482 (version "1.2.0")
23483 (source
23484 (origin
23485 (method url-fetch)
23486 (uri (pypi-uri "rcssmin" version))
23487 (sha256
23488 (base32
23489 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
23490 (build-system pyproject-build-system)
23491 (native-inputs (list python-pytest python-setuptools python-wheel))
23492 (home-page "http://opensource.perlig.de/rcssmin/")
23493 (synopsis "CSS Minifier")
23494 (description "The minifier is based on the semantics of the YUI compressor,
23495 which itself is based on the rule list by Isaac Schlueter.")
23496 (license license:asl2.0)))
23497
23498(define-public python-rjsmin
23499 (package
23500 (name "python-rjsmin")
23501 (version "1.2.3")
23502 (source
23503 (origin
23504 (method url-fetch)
23505 (uri (pypi-uri "rjsmin" version))
23506 (sha256
23507 (base32
23508 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
23509 (modules '((guix build utils)))
23510 (snippet
23511 '(for-each delete-file (find-files "bench" "\\.js$")))))
23512 (build-system pyproject-build-system)
23513 (native-inputs
23514 (list python-pytest python-setuptools python-wheel))
23515 (home-page "http://opensource.perlig.de/rjsmin/")
23516 (synopsis "Javascript Minifier")
23517 (description "@code{rJSmin} is a javascript minifier written in Python.
23518The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
23519module is a re-implementation aiming for speed, so it can be used at
23520runtime (rather than during a preprocessing step).")
23521 (license license:asl2.0)))
23522
23523(define-public python-cheetah
23524 (package
23525 (name "python-cheetah")
23526 (version "3.3.1")
23527 (source
23528 (origin
23529 (method url-fetch)
23530 (uri (pypi-uri "CT3" version))
23531 (sha256
23532 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
23533 (build-system pyproject-build-system)
23534 (arguments
23535 (list
23536 #:test-backend #~'custom
23537 #:test-flags #~(list "Cheetah/Tests/Test.py")
23538 #:phases
23539 #~(modify-phases %standard-phases
23540 (add-after 'unpack 'use-absolute-python
23541 (lambda _
23542 (substitute* "Cheetah/CheetahWrapper.py"
23543 (("#!/usr/bin/env python")
23544 (string-append "#!" (which "python"))))))
23545 (add-before 'check 'configure-tests
23546 (lambda* (#:key tests? #:allow-other-keys)
23547 (substitute* "Cheetah/Tests/ImportHooks.py"
23548 (("os.path.dirname\\(__file__\\)")
23549 (string-append "'" (getcwd) "/Cheetah/Tests'")))
23550 (substitute* "Cheetah/Tests/Test.py"
23551 (("unittest.TextTestRunner\\(\\)")
23552 "unittest.TextTestRunner(verbosity=2)"))
23553 (setenv "TMPDIR" "/tmp"))))))
23554 (native-inputs (list python-setuptools))
23555 (propagated-inputs (list python-markdown)) ;optional
23556 (home-page "https://cheetahtemplate.org/")
23557 (synopsis "Template engine")
23558 (description
23559 "Cheetah is a text-based template engine and Python code generator.
23560
23561 Cheetah can be used as a standalone templating utility or referenced as a
23562library from other Python applications. It has many potential uses, but web
23563developers looking for a viable alternative to ASP, JSP, PHP and PSP are
23564expected to be its principle user group.
23565
23566Features:
23567@enumerate
23568@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
23569other text-based format.
23570@item Cleanly separates content, graphic design, and program code.
23571@item Blends the power and flexibility of Python with a simple template
23572language that non-programmers can understand.
23573@item Gives template writers full access to any Python data structure, module,
23574function, object, or method in their templates.
23575@item Makes code reuse easy by providing an object-orientated interface to
23576templates that is accessible from Python code or other Cheetah templates. One
23577template can subclass another and selectively reimplement sections of it.
23578@item Provides a simple, yet powerful, caching mechanism that can dramatically
23579improve the performance of a dynamic website.
23580@item Compiles templates into optimized, yet readable, Python code.
23581@end enumerate")
23582 (license (license:x11-style "file://LICENSE"))))
23583
23584(define-public python-chevron
23585 (package
23586 (name "python-chevron")
23587 (version "0.14.0")
23588 (source (origin
23589 (method url-fetch)
23590 (uri (pypi-uri "chevron" version))
23591 (sha256
23592 (base32
23593 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
23594 (build-system pyproject-build-system)
23595 (arguments (list #:tests? #false)) ;there are none
23596 (native-inputs (list python-setuptools python-wheel))
23597 (home-page "https://github.com/noahmorrison/chevron")
23598 (synopsis "Mustache templating language renderer")
23599 (description "This package provides a Python implementation of the
23600Mustache templating language renderer.")
23601 (license license:expat)))
23602
23603(define-public python-dulwich
23604 (package
23605 (name "python-dulwich")
23606 (version "1.0.0")
23607 (source
23608 (origin
23609 (method url-fetch)
23610 (uri (list (string-append "https://www.dulwich.io/releases/"
23611 "dulwich-" version ".tar.gz")
23612 (pypi-uri "dulwich" version)))
23613 (sha256
23614 (base32 "1g09iwy5hvjgd8qmkc5cny4qqcng2734ll9mxjzj4psj6m3i01rx"))))
23615 (build-system pyproject-build-system)
23616 (arguments
23617 (list
23618 #:test-flags
23619 ;; DULWICH_SWIFT_CFG is not set.
23620 #~(list "--ignore=tests/contrib/test_swift.py"
23621 "--ignore=tests/contrib/test_swift_smoke.py")
23622 #:phases
23623 #~(modify-phases %standard-phases
23624 (add-after 'unpack 'fix-tests
23625 (lambda* (#:key inputs #:allow-other-keys)
23626 (substitute* '("tests/test_hooks.py"
23627 "tests/porcelain/test_filters.py"
23628 "tests/test_repository.py"
23629 "tests/test_worktree.py")
23630 (("/bin/sh")
23631 (search-input-file inputs "/bin/sh")))))
23632 (add-before 'check 'pre-check
23633 (lambda _ (setenv "PYTHONHASHSEED" "random"))))))
23634 (propagated-inputs
23635 (list python-fastimport python-urllib3))
23636 (native-inputs
23637 (list gnupg
23638 git-minimal/pinned
23639 openssh-sans-x
23640 python-geventhttpclient
23641 python-merge3
23642 python-mypy
23643 python-paramiko
23644 python-pytest
23645 python-requests
23646 python-setuptools
23647 python-setuptools-rust))
23648 (home-page "https://www.dulwich.io/")
23649 (synopsis "Git implementation in Python")
23650 (description "Dulwich is an implementation of the Git file formats and
23651protocols written in pure Python.")
23652 ;; Can be used with either license.
23653 (license (list license:asl2.0 license:gpl2+))))
23654
23655(define-public python-dulwich-0.24
23656 (package/inherit python-dulwich
23657 (name "python-dulwich")
23658 (version "0.24.1")
23659 (source
23660 (origin
23661 (method url-fetch)
23662 (uri (pypi-uri "dulwich" version))
23663 (sha256
23664 (base32 "0n3p8jyxl4zwc63la10v8llc58fc5pcnfqdq9f1vn0hgy5jdi7z1"))))
23665 (build-system pyproject-build-system)
23666 (native-inputs
23667 (modify-inputs (package-native-inputs python-dulwich)
23668 (prepend python-setuptools-rust)))
23669 (arguments
23670 (list
23671 #:test-flags
23672 ;; DULWICH_SWIFT_CFG is not set.
23673 '(list "--ignore=tests/contrib/test_swift_smoke.py"
23674 ;; AttributeError: 'SwiftPackData' object has no attribute '_file'
23675 "--ignore=tests/contrib/test_swift.py"
23676 ;; No git repository was found at .
23677 "--ignore=tests/test_cli.py"
23678 ;; 'HTTPClient' object has no attribute 'get_base_url'
23679 ;; 'NoneType' object has no attribute 'Merge3'
23680 "--ignore=tests/test_cli_merge.py"
23681 "--ignore=tests/test_merge_drivers.py"
23682 "--ignore=tests/test_porcelain_cherry_pick.py"
23683 "--ignore=tests/test_porcelain_merge.py"
23684 "--ignore=tests/test_rebase.py"
23685 "--ignore=tests/test_repository.py"
23686 "--ignore=tests/test_worktree.py"
23687 "--ignore=tests/test_porcelain.py"
23688 "--ignore=tests/test_porcelain_filters.py"
23689 ;; False is not true (interesting capitalization?)
23690 "--ignore=tests/test_hooks.py")
23691 #:phases
23692 #~(modify-phases %standard-phases
23693 (add-after 'unpack 'patch-pyproject
23694 (lambda _
23695 ;; setuptools cannot handle both license and license-files
23696 (substitute* "pyproject.toml"
23697 (("^license = .*") "license = {text = \"Apache-2.0\"}\n")
23698 (("^license-files = .*") ""))))
23699 (add-before 'check 'pre-check
23700 (lambda* (#:key tests? #:allow-other-keys)
23701 (when tests?
23702 (setenv "HOME" "/tmp")))))))))
23703
23704(define-public python-dunamai
23705 (package
23706 (name "python-dunamai")
23707 (version "1.21.2")
23708 (source
23709 (origin
23710 (method url-fetch)
23711 (uri (pypi-uri "dunamai" version))
23712 (sha256
23713 (base32 "1i35i8ym6n8mpgrq31hivrvfciy12gv26jwlzimmkx9jy2spz0h5"))))
23714 (build-system pyproject-build-system)
23715 (arguments
23716 (list
23717 #:test-flags
23718 #~(list "-k" "not test__version__from_git__shallow")
23719 #:phases
23720 #~(modify-phases %standard-phases
23721 ;; These steps are taked from NixOS package definition:
23722 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
23723 (add-before 'check 'pre-check
23724 (lambda _
23725 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
23726 (setenv "HOME" "/tmp")
23727 (invoke "git" "config" "--global" "user.email" "[email protected]")
23728 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
23729 (propagated-inputs
23730 (list python-packaging))
23731 (native-inputs
23732 (list git-minimal
23733 python-poetry-core
23734 python-pytest))
23735 (home-page "https://github.com/mtkennerly/dunamai")
23736 (synopsis "Dynamic version generation")
23737 (description
23738 "Dunamai is Python library and command line tool for producing dynamic,
23739standards-compliant version strings, derived from tags in your version control
23740system. This facilitates uniquely identifying nightly or per-commit builds in
23741continuous integration and releasing new versions of your software simply by
23742creating a tag.")
23743 (license license:expat)))
23744
23745(define-public python-pbkdf2
23746 (package
23747 (name "python-pbkdf2")
23748 (version "1.3")
23749 (source
23750 (origin
23751 (method url-fetch)
23752 (uri (pypi-uri "pbkdf2" version))
23753 (sha256
23754 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
23755 (build-system pyproject-build-system)
23756 (arguments
23757 (list
23758 #:test-backend #~'custom
23759 #:test-flags #~(list "test/test_pbkdf2.py")))
23760 (native-inputs (list python-setuptools))
23761 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
23762 (synopsis "Password-based key derivation")
23763 (description
23764 "This module implements the password-based key derivation function,
23765PBKDF2, specified in RSA PKCS#5 v2.0.
23766
23767PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
23768is part of the RSA Public Key Cryptography Standards series. The provided
23769implementation takes a password or a passphrase and a salt value (and
23770optionally a iteration count, a digest module, and a MAC module) and provides
23771a file-like object from which an arbitrarily-sized key can be read.")
23772 (license license:expat)))
23773
23774(define-public python-qrcode
23775 (package
23776 (name "python-qrcode")
23777 (version "8.2")
23778 (source
23779 (origin
23780 (method url-fetch)
23781 (uri (pypi-uri "qrcode" version))
23782 (sha256
23783 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
23784 (build-system pyproject-build-system)
23785 (native-inputs
23786 (list python-poetry-core
23787 python-pytest))
23788 (home-page "https://github.com/lincolnloop/python-qrcode")
23789 (synopsis "QR Code image generator")
23790 (description
23791 "This package provides a pure Python QR Code generator module. It uses
23792the Python Imaging Library (PIL) to allow for the generation of QR Codes.
23793
23794In addition this package provides a command line tool to generate QR codes and
23795either write these QR codes to a file or do the output as ascii art at the
23796console.")
23797 (license license:bsd-3)))
23798
23799(define-public python-rst2ansi
23800 (package
23801 (name "python-rst2ansi")
23802 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
23803 (revision . "0")))
23804 (version (git-version "0.1.5"
23805 (assoc-ref properties 'revision)
23806 (assoc-ref properties 'commit)))
23807 (source
23808 (origin
23809 (method git-fetch)
23810 (uri (git-reference
23811 (url "https://github.com/Snaipe/python-rst-to-ansi")
23812 (commit (assoc-ref properties 'commit))))
23813 (file-name (git-file-name name version))
23814 (sha256
23815 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
23816 (build-system pyproject-build-system)
23817 (arguments
23818 (list
23819 #:tests? #f ; 2 tests fail with additional line characters
23820 #:phases
23821 #~(modify-phases %standard-phases
23822 (replace 'check
23823 (lambda* (#:key tests? #:allow-other-keys)
23824 (when tests?
23825 (invoke "cram" "test" "-v")))))))
23826 (native-inputs (list python-cram python-setuptools))
23827 (propagated-inputs (list python-docutils))
23828 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
23829 (synopsis "Convert RST to ANSI-decorated console output")
23830 (description
23831 "Python module dedicated to rendering RST (reStructuredText) documents to
23832ansi-escaped strings suitable for display in a terminal.")
23833 (license license:expat)))
23834
23835(define-public python-ansi2html
23836 (package
23837 (name "python-ansi2html")
23838 (version "1.9.2")
23839 (source
23840 (origin
23841 (method url-fetch)
23842 (uri (pypi-uri "ansi2html" version))
23843 (sha256
23844 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
23845 (build-system pyproject-build-system)
23846 (native-inputs
23847 (list python-mock
23848 python-pytest
23849 python-setuptools
23850 python-wheel))
23851 (home-page "https://github.com/ralphbean/ansi2html")
23852 (synopsis "Convert ANSI-decorated console output to HTML")
23853 (description
23854 "@command{ansi2html} is a Python library and command line utility for
23855converting text with ANSI color codes to HTML or LaTeX.")
23856 (license license:gpl3+)))
23857
23858(define-public python-easy-ansi
23859 (package
23860 (name "python-easy-ansi")
23861 (version "2.1")
23862 (source
23863 (origin
23864 (method git-fetch)
23865 (uri (git-reference
23866 (url "https://gitlab.com/joeysbytes/easy-ansi")
23867 (commit (string-append "v" version))))
23868 (file-name (git-file-name name version))
23869 (sha256
23870 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
23871 (build-system pyproject-build-system)
23872 (arguments
23873 (list
23874 #:phases
23875 #~(modify-phases %standard-phases
23876 (add-after 'install 'remove-extra
23877 (lambda* (#:key inputs outputs #:allow-other-keys)
23878 (with-directory-excursion (site-packages inputs outputs)
23879 (delete-file-recursively "tests")
23880 (delete-file "setup.py")))))))
23881 (native-inputs (list python-pytest python-setuptools))
23882 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
23883 (synopsis "Terminal framework API")
23884 (description
23885 "Easy ANSI is a terminal framework API to give you an easy way to use
23886colors, cursor control movements, and line/box drawing. It is not meant as a
23887replacement to more full-featured frameworks (such as curses or urwid), but as
23888a tool to quickly create nice-looking screens in your terminal window. You
23889can even create animations with the cursor controls.")
23890 (license license:expat)))
23891
23892(define-public python-easy-ansi-0.3
23893 (package
23894 (inherit python-easy-ansi)
23895 (name "python-easy-ansi")
23896 (version "0.3")
23897 (source
23898 (origin
23899 (method git-fetch)
23900 (uri (git-reference
23901 (url "https://gitlab.com/joeysbytes/easy-ansi")
23902 (commit (string-append "v" version))))
23903 (file-name (git-file-name name version))
23904 (sha256
23905 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
23906 (arguments '())))
23907
23908(define-public python-pycosat
23909 (package
23910 (name "python-pycosat")
23911 (version "0.6.6")
23912 (source
23913 (origin
23914 (method git-fetch)
23915 (uri (git-reference
23916 (url "https://github.com/ContinuumIO/pycosat")
23917 (commit version)))
23918 (file-name (git-file-name name version))
23919 (sha256
23920 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
23921 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
23922 (build-system pyproject-build-system)
23923 (arguments (list #:test-backend #~'unittest))
23924 (native-inputs (list unzip python-setuptools))
23925 (home-page "https://github.com/ContinuumIO/pycosat")
23926 (synopsis "Bindings to picosat (a SAT solver)")
23927 (description
23928 "This package provides efficient Python bindings to @code{picosat} on the
23929C level. When importing pycosat, the @code{picosat} solver becomes part of
23930the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
23931Problem} (SAT) solver.")
23932 (license license:expat)))
23933
23934(define-public python-pypeg2
23935 (package
23936 (name "python-pypeg2")
23937 (version "2.15.2")
23938 (source
23939 (origin
23940 (method url-fetch)
23941 (uri (pypi-uri "pyPEG2" version))
23942 (sha256
23943 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
23944 (build-system pyproject-build-system)
23945 (native-inputs (list python-pytest python-setuptools))
23946 (propagated-inputs (list python-lxml))
23947 (home-page "https://fdik.org/pyPEG/")
23948 (synopsis "Parsing Expression Grammars in Python")
23949 (description
23950 "PyPEG is an intrinsic parser interpreter framework for Python. It is
23951based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
23952formal languages.")
23953 (license license:gpl2)))
23954
23955(define-public python-pyformlang
23956 (package
23957 (name "python-pyformlang")
23958 (version "1.0.10")
23959 (source
23960 (origin
23961 (method url-fetch)
23962 (uri (pypi-uri "pyformlang" version))
23963 (sha256
23964 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
23965 (build-system pyproject-build-system)
23966 (native-inputs
23967 (list python-pytest
23968 python-setuptools
23969 python-wheel))
23970 (propagated-inputs
23971 (list python-networkx
23972 python-numpy
23973 python-pydot))
23974 (home-page "https://github.com/Aunsiels/pyformlang")
23975 (synopsis "Framework for interacting with formal grammars")
23976 (description
23977 "This package provides a framework for working with formal
23978language grammars. The library was originally developed for educational
23979purposes and therefore implements many textbook algorithms regarding the
23980manipulation and interaction with formal grammars.")
23981 (license license:expat)))
23982
23983(define-public python-incremental
23984 (package
23985 (name "python-incremental")
23986 (version "24.7.2")
23987 (source
23988 (origin
23989 (method url-fetch)
23990 (uri (pypi-uri "incremental" version))
23991 (sha256
23992 (base32
23993 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
23994 (build-system pyproject-build-system)
23995 (arguments
23996 ;; Tests require twisted, which needs this package.
23997 (list #:tests? #false
23998 #:build-backend "setuptools.build_meta"))
23999 (native-inputs
24000 (list python-setuptools))
24001 (home-page "https://github.com/hawkowl/incremental")
24002 (synopsis "Library for versioning Python projects")
24003 (description "Incremental is a small library that versions your Python
24004 projects.")
24005 (license license:expat)))
24006
24007(define-public python-invoke
24008 (package
24009 (name "python-invoke")
24010 (version "2.2.1")
24011 (source
24012 (origin
24013 (method url-fetch)
24014 (uri (pypi-uri "invoke" version))
24015 (sha256
24016 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
24017 ;; TODO: invoke/vendor contains:
24018 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
24019 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
24020 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
24021 (build-system pyproject-build-system)
24022 (arguments
24023 (list
24024 ;; XXX: Requires many dependencies that are not yet in Guix.
24025 #:tests? #f
24026 #:phases
24027 #~(modify-phases %standard-phases
24028 (add-after 'unpack 'fix-bash-path
24029 (lambda _
24030 (let ((bash #$(this-package-input "bash-minimal")))
24031 (substitute* "invoke/config.py"
24032 (("shell = \"/bin/bash\"")
24033 (string-append "shell = \"" bash "/bin/bash\"")))))))))
24034 (native-inputs
24035 (list python-setuptools
24036 python-wheel))
24037 (inputs
24038 (list bash-minimal))
24039 (home-page "https://www.pyinvoke.org/")
24040 (synopsis "Pythonic task execution")
24041 (description
24042 "Invoke is a Python task execution tool and library, drawing inspiration
24043from various sources to arrive at a powerful and clean feature set. It is
24044evolved from the Fabric project, but focuses on local and abstract concerns
24045instead of servers and network commands.")
24046 (license license:bsd-3)))
24047
24048(define-public python-automat
24049 (package
24050 (name "python-automat")
24051 (version "24.8.1")
24052 (source (origin
24053 (method url-fetch)
24054 (uri (pypi-uri "Automat" version))
24055 (sha256
24056 (base32
24057 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
24058 (build-system pyproject-build-system)
24059 (arguments
24060 (list
24061 #:phases
24062 #~(modify-phases %standard-phases
24063 (replace 'check
24064 (lambda* (#:key tests? test-flags #:allow-other-keys)
24065 (with-directory-excursion #$output
24066 (apply invoke "pytest" "-vv" test-flags))))
24067 ;; Remove script, because it depends on python-twisted.
24068 (add-after 'unpack 'remove-entrypoint
24069 (lambda _
24070 (substitute* "pyproject.toml"
24071 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
24072 (native-inputs
24073 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
24074 (propagated-inputs
24075 (list python-graphviz python-typing-extensions))
24076 (home-page "https://github.com/glyph/Automat")
24077 (synopsis "Self-service finite-state machines")
24078 (description "Automat is a library for concise, idiomatic Python
24079 expression of finite-state automata (particularly deterministic finite-state
24080 transducers).")
24081 (license license:expat)))
24082
24083(define-public python-constantly
24084 (package
24085 (name "python-constantly")
24086 (version "23.10.4")
24087 (source
24088 (origin
24089 (method url-fetch)
24090 (uri (pypi-uri "constantly" version))
24091 (sha256
24092 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
24093 (build-system pyproject-build-system)
24094 (arguments
24095 (list #:tests? #f)) ;cycles with python-twisted
24096 (native-inputs
24097 (list python-setuptools
24098 python-versioneer))
24099 (home-page "https://github.com/twisted/constantly")
24100 (synopsis "Symbolic constants in Python")
24101 (description "Constantly is a Python library that provides symbolic
24102 constant support. It includes collections and constants with text, numeric,
24103 and bit flag values.")
24104 (license license:expat)))
24105
24106(define-public python-attrs
24107 (package
24108 (name "python-attrs")
24109 (version "25.3.0")
24110 (source
24111 (origin
24112 (method url-fetch)
24113 (uri (pypi-uri "attrs" version))
24114 (sha256
24115 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
24116 (build-system pyproject-build-system)
24117 (native-inputs
24118 (list python-hatch-fancy-pypi-readme
24119 python-hatch-vcs
24120 python-hatchling
24121 python-hypothesis
24122 python-pytest))
24123 (home-page "https://github.com/python-attrs/attrs/")
24124 (synopsis "Attributes without boilerplate")
24125 (description "@code{attrs} is a Python package with class decorators that
24126 ease the chores of implementing the most common attribute-related object
24127 protocols.")
24128 (license license:expat)))
24129
24130(define-public python-attrs-bootstrap
24131 (package
24132 (inherit python-attrs)
24133 (name "python-attrs-bootstrap")
24134 (native-inputs (list python-hatchling
24135 python-hatch-fancy-pypi-readme
24136 python-hatch-vcs))
24137 (arguments `(#:tests? #f))))
24138
24139(define-public python-astroid
24140 (package
24141 (name "python-astroid")
24142 (version "3.3.11")
24143 (source
24144 (origin
24145 (method git-fetch)
24146 (uri (git-reference
24147 (url "https://github.com/PyCQA/astroid")
24148 (commit (string-append "v" version))))
24149 (file-name (git-file-name name version))
24150 (sha256
24151 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
24152 (build-system pyproject-build-system)
24153 (arguments
24154 ;; UserWarning: pkg_resources is deprecated as an API. See
24155 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
24156 ;; pkg_resources package is slated for removal as early as
24157 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
24158 (list #:test-flags
24159 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
24160 (native-inputs
24161 (list python-mypy-minimal
24162 python-pytest
24163 python-setuptools
24164 python-wheel))
24165 (propagated-inputs
24166 (list python-lazy-object-proxy
24167 python-typing-extensions
24168 python-wrapt))
24169 (home-page "https://github.com/PyCQA/astroid")
24170 (synopsis "Python source code base representation")
24171 (description "@code{python-astroid} provides a common base representation
24172of Python source code for projects such as pychecker, pyreverse, pylint, etc.
24173It provides a compatible representation which comes from the _ast module. It
24174rebuilds the tree generated by the builtin _ast module by recursively walking
24175down the AST and building an extended ast. The new node classes have
24176additional methods and attributes for different usages. They include some
24177support for static inference and local name scopes. Furthermore, astroid
24178builds partial trees by inspecting living objects.")
24179 (license license:lgpl2.1+)))
24180
24181(define-public python-isbnlib
24182 (package
24183 (name "python-isbnlib")
24184 (version "3.10.14")
24185 (source
24186 (origin
24187 (method git-fetch)
24188 (uri (git-reference
24189 (url "https://github.com/xlcnd/isbnlib")
24190 (commit (string-append "v" version))))
24191 (file-name (git-file-name name version))
24192 (sha256
24193 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
24194 (build-system pyproject-build-system)
24195 (arguments
24196 (list
24197 #:test-flags #~(list "-m" "not network")))
24198 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
24199 (home-page "https://github.com/xlcnd/isbnlib")
24200 (synopsis "Python library to work with ISBN strings")
24201 (description
24202 "@code{python-isbnlib} is a (pure) python library that provides several
24203useful methods and functions to validate, clean, transform, hyphenate and get
24204metadata for ISBN strings. Its origin was as the core of isbntools. This
24205short version, is suitable to be include as a dependency in other projects.")
24206 (license license:lgpl3+)))
24207
24208(define-public python-isoduration
24209 (package
24210 (name "python-isoduration")
24211 (version "20.11.0")
24212 (source
24213 (origin
24214 (method url-fetch)
24215 (uri (pypi-uri "isoduration" version))
24216 (sha256
24217 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
24218 (build-system pyproject-build-system)
24219 (arguments '(#:tests? #f)) ;no tests in PyPI archive
24220 (propagated-inputs (list python-arrow))
24221 (native-inputs (list python-setuptools python-wheel))
24222 (home-page "https://github.com/bolsote/isoduration")
24223 (synopsis "Operations with ISO 8601 durations")
24224 (description "ISO 8601 is most commonly known as a way to exchange
24225datetimes in textual format. A lesser known aspect of the standard is the
24226representation of durations. The state of the art of ISO 8601 duration
24227handling in Python is more or less limited to what's offered by isodate. This
24228package attempts to address the shortcomings of @code{isodate}.")
24229 (license license:isc)))
24230
24231(define-public python-isort
24232 (package
24233 (name "python-isort")
24234 (version "6.0.1")
24235 (source
24236 (origin
24237 (method git-fetch) ;no tests in PyPI archive
24238 (uri (git-reference
24239 (url "https://github.com/timothycrosley/isort")
24240 (commit version)))
24241 (file-name (git-file-name name version))
24242 (modules '((guix build utils)))
24243 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
24244 (sha256
24245 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
24246 (build-system pyproject-build-system)
24247 (arguments
24248 (list
24249 #:test-flags
24250 ;; Ignore benchmark and integration to reduce closure size.
24251 #~(list "--ignore=tests/benchmark/"
24252 "--ignore=tests/integration/"
24253 "--ignore=tests/unit/profiles/test_black.py"
24254 "-k" (string-join
24255 (list "not test_gitignore"
24256 "test_isort_supports_shared_profiles_issue_970"
24257 "test_requirements_dir"
24258 "test_requirements_finder"
24259 "test_sort_configurable_sort_issue_1732"
24260 "test_sort_imports_error_handling")
24261 " and not "))))
24262 ;; TODO: Package example plugins separately, available in PyPI:
24263 ;; - example_isort_formatting_plugin
24264 ;; - example_isort_sorting_plugin
24265 ;; - example_shared_isort_profile
24266 (native-inputs
24267 (list python-colorama
24268 python-hatch-vcs
24269 python-hatchling
24270 python-hypothesis
24271 python-pylama
24272 python-pytest))
24273 (home-page "https://github.com/PyCQA/isort")
24274 (synopsis "Python utility/library to sort python imports")
24275 (description
24276 "@code{python-isort} is a python utility/library to sort imports
24277alphabetically, and automatically separated into sections. It provides a
24278command line utility, a python library and plugins for various editors.")
24279 (license license:expat)))
24280
24281(define-public python-configparser
24282 (package
24283 (name "python-configparser")
24284 (version "7.2.0")
24285 (source
24286 (origin
24287 (method url-fetch)
24288 (uri (pypi-uri "configparser" version))
24289 (sha256
24290 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
24291 (build-system pyproject-build-system)
24292 (native-inputs
24293 (list python-pytest
24294 python-setuptools
24295 python-setuptools-scm
24296 python-wheel))
24297 (home-page "https://github.com/jaraco/configparser/")
24298 (synopsis "Backport of configparser from python 3.5")
24299 (description "@code{python-configparser} is a backport of
24300 @code{configparser} from Python 3.5 so that it can be used directly
24301 in other versions.")
24302 (license license:expat)))
24303
24304(define-public python-mando
24305 (package
24306 (name "python-mando")
24307 (version "0.8.2")
24308 (source
24309 (origin
24310 (method url-fetch)
24311 (uri (pypi-uri "mando" version))
24312 (sha256
24313 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
24314 (build-system pyproject-build-system)
24315 (native-inputs
24316 (list python-pytest python-setuptools))
24317 (home-page "https://mando.readthedocs.org/")
24318 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
24319 (description
24320 "This package is a wrapper around argparse, allowing you to write complete CLI
24321applications in seconds while maintaining all the flexibility.")
24322 (license license:expat)))
24323
24324(define-public python-mwclient
24325 (package
24326 (name "python-mwclient")
24327 (version "0.11.0")
24328 (source
24329 (origin
24330 (method git-fetch)
24331 (uri (git-reference
24332 (url "https://github.com/mwclient/mwclient")
24333 (commit (string-append "v" version))))
24334 (file-name (git-file-name name version))
24335 (sha256
24336 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
24337 (build-system pyproject-build-system)
24338 (propagated-inputs
24339 (list python-requests-oauthlib))
24340 (native-inputs
24341 (list python-mock
24342 python-pytest
24343 python-pytest-cov
24344 python-responses
24345 python-setuptools))
24346 (home-page "https://github.com/btongminh/mwclient")
24347 (synopsis "MediaWiki API client")
24348 (description "This package provides a MediaWiki API client.")
24349 (license license:expat)))
24350
24351(define-public python-kneed
24352 (package
24353 (name "python-kneed")
24354 (version "0.8.5")
24355 (source
24356 (origin
24357 (method git-fetch)
24358 (uri (git-reference
24359 (url "https://github.com/arvkevi/kneed")
24360 (commit (string-append "v" version))))
24361 (file-name (git-file-name name version))
24362 (sha256
24363 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
24364 (build-system pyproject-build-system)
24365 (arguments
24366 (list
24367 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
24368 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
24369 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
24370 (home-page "https://github.com/arvkevi/kneed")
24371 (synopsis "Knee-point detection in Python")
24372 (description
24373 "This package implements the kneedle algorithm. Given a set of x and y
24374values, kneed will return the knee point of the function. The knee point is
24375the point of maximum curvature.")
24376 (license license:bsd-3)))
24377
24378(define-public python-diff-cover
24379 (package
24380 (name "python-diff-cover")
24381 (version "9.7.1")
24382 (source
24383 (origin
24384 (method url-fetch)
24385 (uri (pypi-uri "diff_cover" version))
24386 (sha256
24387 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
24388 (build-system pyproject-build-system)
24389 (arguments
24390 (list
24391 #:test-flags
24392 ;; Dropp check of flake8 in tests.
24393 #~(list "-k" "not test_file_does_not_exist")))
24394 (native-inputs
24395 (list python-pycodestyle
24396 python-poetry-core
24397 python-pyflakes
24398 python-pylint
24399 python-pytest
24400 python-pytest-datadir
24401 python-pytest-mock))
24402 (propagated-inputs
24403 (list python-chardet
24404 python-jinja2
24405 python-pluggy
24406 python-pygments
24407 python-setuptools ; For pkg_resources.
24408 python-tomli))
24409 (home-page "https://github.com/Bachmann1234/diff_cover")
24410 (synopsis "Run coverage and linting reports on diffs")
24411 (description
24412 "Automatically find diff lines that need test coverage. It also finds
24413diff lines that have violations (according to tools such as pycodestyle,
24414pyflakes, flake8, or pylint). This is used as a code quality metric during
24415code reviews.")
24416 (license license:asl2.0)))
24417
24418(define-public python-diff-match-patch
24419 (package
24420 (name "python-diff-match-patch")
24421 (version "20241021")
24422 (source
24423 (origin
24424 (method url-fetch)
24425 (uri (pypi-uri "diff_match_patch" version))
24426 (sha256
24427 (base32
24428 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
24429 (build-system pyproject-build-system)
24430 (native-inputs (list python-flit-core python-pytest))
24431 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
24432 (synopsis "Synchronize plain text")
24433 (description "Diff Match and Patch libraries offer robust algorithms to
24434 perform the operations required for synchronizing plain text.")
24435 (license license:asl2.0)))
24436
24437(define-public python-icdiff
24438 (package
24439 (name "python-icdiff")
24440 (version "2.0.7")
24441 (source (origin
24442 (method git-fetch)
24443 (uri (git-reference
24444 (url "https://github.com/jeffkaufman/icdiff")
24445 (commit (string-append "release-" version))))
24446 (file-name (git-file-name name version))
24447 (sha256
24448 (base32
24449 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
24450 (build-system pyproject-build-system)
24451 (arguments
24452 (list #:tests? #f)) ; there are no test scripts
24453 (native-inputs (list python-setuptools python-wheel))
24454 (home-page "https://www.jefftk.com/icdiff")
24455 (synopsis "Improved colored diff")
24456 (description "This package provides colored diff functions that highlight
24457parts of the lines that were modified.")
24458 (license license:psfl)))
24459
24460(define-public python-dirsync
24461 (package
24462 (name "python-dirsync")
24463 (version "2.2.6")
24464 (source
24465 (origin
24466 (method url-fetch)
24467 (uri (pypi-uri "dirsync" version))
24468 (sha256
24469 (base32
24470 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
24471 (build-system pyproject-build-system)
24472 (arguments
24473 ;; No tests in PyPI release and GitHub repository does not have the
24474 ;; latest release tag.
24475 (list #:tests? #f))
24476 (native-inputs (list python-setuptools python-wheel))
24477 (home-page "https://github.com/tkhyn/dirsync")
24478 (synopsis "Advanced directory tree synchronisation tool")
24479 (description
24480 "Dirsync is an advanced directory tree synchronisation tool.")
24481 (license license:expat)))
24482
24483(define-public python-levenshtein
24484 (package
24485 (name "python-levenshtein")
24486 (version "0.27.1")
24487 (source
24488 (origin
24489 (method git-fetch)
24490 (uri (git-reference
24491 (url "https://github.com/rapidfuzz/Levenshtein")
24492 (commit (string-append "v" version))))
24493 (file-name (git-file-name name version))
24494 (sha256
24495 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
24496 (build-system pyproject-build-system)
24497 (propagated-inputs (list python-rapidfuzz))
24498 (native-inputs
24499 (list cmake-minimal
24500 python-cython
24501 python-pytest
24502 python-scikit-build-core
24503 python-setuptools
24504 rapidfuzz-cpp))
24505 (home-page "https://github.com/rapidfuzz/Levenshtein")
24506 (synopsis "Fast computation of Levenshtein distance and string similarity")
24507 (description
24508 "The Levenshtein Python C extension module contains functions for fast computation of
24509@enumerate
24510@item Levenshtein (edit) distance, and edit operations
24511@item string similarity
24512@item approximate median strings, and generally string averaging
24513@item string sequence and set similarity
24514@end enumerate
24515It supports both normal and Unicode strings.")
24516 (license license:gpl2+)))
24517
24518(define-public python-factory-boy
24519 (package
24520 (name "python-factory-boy")
24521 (version "3.3.3")
24522 (source
24523 (origin
24524 (method url-fetch)
24525 (uri (pypi-uri "factory_boy" version))
24526 (sha256
24527 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
24528 (build-system pyproject-build-system)
24529 (arguments
24530 ;; Tests are not included in the tarball.
24531 `(#:tests? #f))
24532 (native-inputs (list python-setuptools))
24533 (propagated-inputs (list python-faker))
24534 (home-page "https://github.com/FactoryBoy/factory_boy")
24535 (synopsis "Versatile test fixtures replacement")
24536 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
24537factory_girl. As a fixtures replacement tool, it aims to replace static, hard
24538to maintain fixtures with easy-to-use factories for complex object. Instead
24539of building an exhaustive test setup with every possible combination of corner
24540cases, factory_boy allows you to use objects customized for the current test,
24541while only declaring the test-specific fields.")
24542 (license license:expat)))
24543
24544(define-public python-gtts
24545 (package
24546 (name "python-gtts")
24547 (version "2.3.1")
24548 (source (origin
24549 (method url-fetch)
24550 (uri (pypi-uri "gTTS" version))
24551 (sha256
24552 (base32
24553 "1jsg1prpzr7gj5sn385mkv2v1i8xfc83ycm87hvsi2j0y366plps"))))
24554 (build-system pyproject-build-system)
24555 (arguments
24556 ;; Disable tests that require internet.
24557 (list #:test-flags '(list "-k" "not net")))
24558 (native-inputs
24559 (list python-pytest python-testfixtures python-click python-requests
24560 python-setuptools python-wheel))
24561 (home-page "https://github.com/pndurette/gTTS")
24562 (synopsis "Google Translate text-to-speech interface")
24563 (description
24564 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
24565interface with the Google Translate text-to-speech API. It lets you write
24566spoken MP3 data to a file, a file-like object (bytestring) for further audio
24567manipulation, or @code{stdout}.")
24568 (license license:expat)))
24569
24570(define-public python-packaging-legacy
24571 (package
24572 (name "python-packaging-legacy")
24573 (version "23.0.post0")
24574 (source
24575 (origin
24576 (method url-fetch)
24577 (uri (pypi-uri "packaging_legacy" version))
24578 (sha256
24579 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
24580 (build-system pyproject-build-system)
24581 (propagated-inputs (list python-packaging))
24582 (native-inputs
24583 (list python-pretend
24584 python-pytest
24585 python-setuptools
24586 python-wheel))
24587 (home-page "https://pypi.org/project/packaging-legacy/")
24588 (synopsis "Core utilities for legacy Python packages")
24589 (description "This library provides support for legacy Python Packaging
24590functionality removed from @code{packaging}.")
24591 (license license:asl2.0)))
24592
24593(define-public python-relatorio
24594 (package
24595 (name "python-relatorio")
24596 (version "0.11.1")
24597 (source
24598 (origin
24599 (method url-fetch)
24600 (uri (pypi-uri "relatorio" version))
24601 (sha256
24602 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
24603 (build-system pyproject-build-system)
24604 (native-inputs
24605 (list python-pytest
24606 python-setuptools))
24607 (propagated-inputs
24608 (list python-genshi
24609 python-lxml
24610 python-magic))
24611 (home-page "https://relatorio.tryton.org/")
24612 (synopsis "Templating library able to output ODT and PDF files")
24613 (description
24614 "Relatorio is a templating library which provides a way to easily output
24615ODT, ODS, PNG, SVG and several other kinds of files. Support for more
24616filetypes can be easily added by creating plugins for them.")
24617 (license license:gpl3+)))
24618
24619(define-public python-radon
24620 (package
24621 (name "python-radon")
24622 (version "6.0.1")
24623 (source
24624 (origin
24625 (method git-fetch)
24626 (uri (git-reference
24627 (url "https://github.com/rubik/radon")
24628 (commit (string-append "v" version))))
24629 (file-name (git-file-name name version))
24630 (sha256
24631 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
24632 (build-system pyproject-build-system)
24633 (arguments
24634 (list
24635 #:phases
24636 #~(modify-phases %standard-phases
24637 (add-after 'unpack 'relax-requirements
24638 (lambda _
24639 (substitute* (list "pyproject.toml" "requirements.txt")
24640 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
24641 mando-lower-bound)))))))
24642 (propagated-inputs (list python-colorama python-mando))
24643 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
24644 python-setuptools))
24645 (home-page "https://radon.readthedocs.org/")
24646 (synopsis "Code Metrics in Python")
24647 (description
24648 "Radon is a Python tool which computes various code metrics. Supported
24649metrics are:
24650@itemize @bullet
24651@item raw metrics: SLOC, comment lines, blank lines, &c.
24652@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
24653@item Halstead metrics (all of them)
24654@item the Maintainability Index (a Visual Studio metric)
24655@end itemize")
24656 (license license:expat)))
24657
24658(define-public python-rgbxy
24659 (package
24660 (name "python-rgbxy")
24661 (version "0.5")
24662 (source
24663 (origin
24664 (method url-fetch)
24665 (uri (pypi-uri "rgbxy" version))
24666 (sha256
24667 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
24668 (build-system pyproject-build-system)
24669 (arguments
24670 (list #:tests? #f)) ;no tests in PyPI or Git
24671 (native-inputs
24672 (list python-setuptools))
24673 (home-page "https://github.com/benknight/hue-python-rgb-converter")
24674 (synopsis "RGB conversion tool in Python")
24675 (description
24676 "This package implements functionality of RGB/CIE1931 'xy' gammuts
24677conversion: Gamut A, B, and C.")
24678 (license license:expat)))
24679
24680(define-public python-jsonpointer
24681 (package
24682 (name "python-jsonpointer")
24683 (version "3.0.0")
24684 (source
24685 (origin
24686 (method url-fetch)
24687 (uri (pypi-uri "jsonpointer" version))
24688 (sha256
24689 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
24690 (build-system pyproject-build-system)
24691 (arguments (list #:test-backend #~'unittest))
24692 (native-inputs
24693 (list python-setuptools
24694 python-wheel))
24695 (home-page "https://github.com/stefankoegl/python-json-pointer")
24696 (synopsis "Identify specific nodes in a JSON document")
24697 (description "@code{jsonpointer} allows you to access specific nodes
24698 by path in a JSON document (see RFC 6901).")
24699 (license license:bsd-3)))
24700
24701(define-public python-jsonpatch
24702 (package
24703 (name "python-jsonpatch")
24704 (version "1.33")
24705 (source
24706 (origin
24707 (method git-fetch)
24708 ;; pypi version lacks tests.js
24709 (uri (git-reference
24710 (url "https://github.com/stefankoegl/python-json-patch")
24711 (commit (string-append "v" version))))
24712 (file-name (git-file-name name version))
24713 (sha256
24714 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
24715 (build-system pyproject-build-system)
24716 (arguments
24717 (list #:test-backend #~'custom
24718 #:test-flags #~(list "tests.py")))
24719 (native-inputs
24720 (list python-setuptools))
24721 (propagated-inputs
24722 (list python-jsonpointer))
24723 (home-page "https://github.com/stefankoegl/python-json-patch")
24724 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
24725 (description "@code{jsonpatch} is a library and program that allows
24726 applying JSON Patches according to RFC 6902.")
24727 (license license:bsd-3)))
24728
24729(define-public python-rfc3986
24730 (package
24731 (name "python-rfc3986")
24732 (version "2.0.0")
24733 (source
24734 (origin
24735 (method url-fetch)
24736 (uri (pypi-uri "rfc3986" version))
24737 (sha256
24738 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
24739 (build-system pyproject-build-system)
24740 (native-inputs
24741 (list python-pytest python-setuptools))
24742 (home-page "https://rfc3986.readthedocs.io/")
24743 (synopsis "Parse and validate URI references")
24744 (description
24745 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
24746validation and authority parsing. This module also supports RFC@tie{}6874
24747which adds support for zone identifiers to IPv6 addresses.")
24748 (license license:asl2.0)))
24749
24750(define-public python-rfc3986-validator
24751 (package
24752 (name "python-rfc3986-validator")
24753 (version "0.1.1")
24754 (source
24755 (origin
24756 (method url-fetch)
24757 (uri (pypi-uri "rfc3986_validator" version))
24758 (sha256
24759 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
24760 (build-system pyproject-build-system)
24761 (native-inputs
24762 (list python-pytest
24763 python-rfc3987
24764 python-setuptools))
24765 (home-page "https://github.com/naimetti/rfc3986-validator")
24766 (synopsis "Pure python rfc3986 validator")
24767 (description "This package implements a URI validator according to RFC3986
24768in pure Python.")
24769 (license license:expat)))
24770
24771(define-public python-rfc3987
24772 (package
24773 (name "python-rfc3987")
24774 (version "1.3.8")
24775 (source
24776 (origin
24777 (method url-fetch)
24778 (uri (pypi-uri "rfc3987" version))
24779 (sha256
24780 (base32
24781 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
24782 (build-system pyproject-build-system)
24783 (arguments
24784 (list #:test-backend #~'custom
24785 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
24786 (native-inputs
24787 (list python-setuptools))
24788 ;; Source: <https://codeberg.org/atufi/rfc3987>.
24789 (home-page "https://pypi.org/project/rfc3987/")
24790 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
24791 (description "@code{rfc3987} provides routines for parsing and
24792 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
24793 (license license:gpl3+)))
24794
24795;; The latest commit contains fixes for building with both python3 and python2.
24796(define-public python-rfc6555
24797 (package
24798 (name "python-rfc6555")
24799 (version "0.1.0")
24800 (source
24801 (origin
24802 (method git-fetch)
24803 (uri (git-reference
24804 (url "https://github.com/sethmlarson/rfc6555")
24805 (commit (string-append "v" version))))
24806 (file-name (git-file-name name version))
24807 (sha256
24808 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
24809 (build-system pyproject-build-system)
24810 (arguments
24811 (list
24812 ;; Other tests require network access.
24813 #:test-flags #~(list "tests/test_ipv6.py")))
24814 (native-inputs (list python-pytest python-setuptools))
24815 (home-page "https://pypi.org/project/rfc6555/")
24816 (synopsis "Python implementation of RFC 6555")
24817 (description
24818 "Python implementation of the Happy Eyeballs Algorithm described in RFC
248196555. Provided with a single file and dead-simple API to allow easy vendoring
24820and integration into other projects.")
24821 (license license:asl2.0)))
24822
24823(define-public python-sacn
24824 (package
24825 (name "python-sacn")
24826 (version "1.11.0")
24827 (source
24828 (origin
24829 (method url-fetch)
24830 (uri (pypi-uri "sacn" version))
24831 (sha256
24832 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
24833 (build-system pyproject-build-system)
24834 (native-inputs (list python-pytest python-setuptools python-wheel))
24835 (home-page "https://github.com/Hundemeier/sacn")
24836 (synopsis "Python library for sending and receiving sACN data")
24837 (description
24838 "This package provides a Python library for sending and receiving
24839 sACN (Streaming Architecture for Control Networks) data, a standard
24840 protocol used for controlling lighting and other devices over
24841 a network.")
24842 (license license:expat)))
24843
24844(define-public python-bagit
24845 (package
24846 (name "python-bagit")
24847 (version "1.9.0")
24848 (source
24849 (origin
24850 (method git-fetch) ; no tests in PyPI
24851 (uri (git-reference
24852 (url "https://github.com/LibraryOfCongress/bagit-python")
24853 (commit (string-append "v" version))))
24854 (file-name (git-file-name name version))
24855 (sha256
24856 (base32
24857 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
24858 (build-system pyproject-build-system)
24859 (arguments
24860 (list #:test-flags #~(list "test.py")))
24861 (native-inputs
24862 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
24863 (home-page "https://libraryofcongress.github.io/bagit-python/")
24864 (synopsis "Create and validate BagIt packages")
24865 (description "Bagit is a Python library and command line utility for working
24866 with BagIt style packages. BagIt is a minimalist packaging format for digital
24867 preservation.")
24868 (license license:cc0)))
24869
24870(define-public python-prov
24871 (package
24872 (name "python-prov")
24873 (version "2.1.1")
24874 (source
24875 (origin
24876 (method git-fetch)
24877 (uri (git-reference
24878 (url "https://github.com/trungdong/prov")
24879 (commit version)))
24880 (file-name (git-file-name name version))
24881 (sha256
24882 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
24883 (build-system pyproject-build-system)
24884 (arguments
24885 (list
24886 #:test-backend #~'unittest
24887 #:test-flags #~(list "discover" "-s" "src")
24888 #:phases
24889 #~(modify-phases %standard-phases
24890 (add-before 'check 'disable-tests
24891 (lambda _
24892 ;; prov.model.ProvException: The provided identifier
24893 ;; "http://www.example.org/bundle" is not valid
24894 (substitute* "src/prov/tests/qnames.py"
24895 (("test_namespace_inheritance")
24896 "disabled_test_namespace_inheritance")
24897 (("test_default_namespace_inheritance")
24898 "disabled_test_default_namespace_inheritance")))))))
24899 (native-inputs
24900 (list python-setuptools))
24901 (propagated-inputs
24902 (list graphviz
24903 python-dateutil
24904 python-networkx
24905 python-pydot
24906 ;; optional dependencies, also needed for tests
24907 python-lxml
24908 python-rdflib))
24909 (home-page "https://github.com/trungdong/prov")
24910 (synopsis
24911 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
24912 (description
24913 "This package provides a library for W3C Provenance Data Model supporting
24914 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
24915 (license license:expat)))
24916
24917(define-public python-arcp
24918 (package
24919 (name "python-arcp")
24920 (version "0.2.1")
24921 (source
24922 (origin
24923 (method git-fetch)
24924 (uri (git-reference
24925 (url "https://github.com/stain/arcp-py")
24926 (commit version)))
24927 (file-name (git-file-name name version))
24928 (sha256
24929 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
24930 (build-system pyproject-build-system)
24931 (native-inputs (list python-pytest python-setuptools))
24932 (home-page "https://arcp.readthedocs.io/")
24933 (synopsis "Archive and Package URI parser and generator")
24934 (description
24935 "@acronym{arcp, Archive and Package} provides functions for creating
24936@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
24937files packaged in an archive or package, like a ZIP file. arcp URIs can be
24938used to consume or reference hypermedia resources bundled inside a file
24939archive or an application package, as well as to resolve URIs for archive
24940resources within a programmatic framework. This URI scheme provides
24941mechanisms to generate a unique base URI to represent the root of the archive,
24942so that relative URI references in a bundled resource can be resolved within
24943the archive without having to extract the archive content on the local file
24944system. An arcp URI can be used for purposes of isolation (e.g. when
24945consuming multiple archives), security constraints (avoiding \"climb out\"
24946from the archive), or for externally identiyfing sub-resources referenced by
24947hypermedia formats.")
24948 (license license:asl2.0)))
24949
24950;; XXX: Project has no updates since 2019, consider to remove when nothing
24951;; depends on it in the next refresh cycle.
24952;; See: <https://github.com/pipermerriam/flex/issues/237>.
24953(define-public python-flex
24954 (package
24955 (name "python-flex")
24956 (version "6.14.1")
24957 (source
24958 (origin
24959 (method url-fetch)
24960 (uri (pypi-uri "flex" version))
24961 (sha256
24962 (base32
24963 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
24964 (build-system pyproject-build-system)
24965 (arguments (list #:tests? #f)) ;no tests in PyPI archive
24966 (native-inputs
24967 (list python-setuptools))
24968 (propagated-inputs
24969 (list python-click
24970 python-jsonpointer
24971 python-pyyaml
24972 python-requests
24973 python-rfc3987
24974 python-six
24975 python-strict-rfc3339
24976 python-validate-email))
24977 (home-page "https://github.com/pipermerriam/flex")
24978 (synopsis "Validates Swagger schemata")
24979 (description "@code{flex} can be used to validate Swagger schemata.")
24980 (license license:bsd-3)))
24981
24982(define-public python-marshmallow
24983 (package
24984 (name "python-marshmallow")
24985 (version "4.0.0")
24986 (source
24987 (origin
24988 (method url-fetch)
24989 (uri (pypi-uri "marshmallow" version))
24990 (sha256
24991 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
24992 (build-system pyproject-build-system)
24993 (arguments
24994 (list
24995 #:phases
24996 #~(modify-phases %standard-phases
24997 (add-before 'check 'set-check-environment
24998 (lambda* (#:key inputs #:allow-other-keys)
24999 (setenv "TZ" "UTC")
25000 (setenv "TZDIR"
25001 (search-input-directory inputs
25002 "share/zoneinfo")))))))
25003 (native-inputs
25004 (list python-flit-core
25005 python-pytest
25006 python-simplejson
25007 tzdata-for-tests))
25008 (home-page "https://github.com/marshmallow-code/marshmallow")
25009 (synopsis "Convert complex datatypes to and from native Python datatypes")
25010 (description
25011 "@code{marshmallow} provides a library for converting complex datatypes
25012to and from native Python datatypes.")
25013 (license license:expat)))
25014
25015(define-public python-marshmallow-3
25016 (package
25017 (inherit python-marshmallow)
25018 (version "3.22.0")
25019 (source
25020 (origin
25021 (method url-fetch)
25022 (uri (pypi-uri "marshmallow" version))
25023 (sha256
25024 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
25025 (arguments '())
25026 (native-inputs
25027 (list python-pytest
25028 python-pytz
25029 python-simplejson
25030 python-flit-core))
25031 (propagated-inputs
25032 (list python-packaging))))
25033
25034
25035(define-public python-apispec
25036 (package
25037 (name "python-apispec")
25038 (version "6.8.2")
25039 (source
25040 (origin
25041 (method url-fetch)
25042 (uri (pypi-uri "apispec" version))
25043 (sha256
25044 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
25045 (build-system pyproject-build-system)
25046 (native-inputs
25047 (list python-flit-core
25048 python-openapi-spec-validator
25049 python-pytest))
25050 (propagated-inputs
25051 (list python-marshmallow
25052 python-packaging
25053 python-pyyaml))
25054 (home-page "https://github.com/marshmallow-code/apispec")
25055 (synopsis "Swagger/OpenAPI specification generator")
25056 (description
25057 "@code{python-apispec} is a pluggable API specification generator. It
25058currently supports the OpenAPI specification, formerly known as Swagger.")
25059 (license license:expat)))
25060
25061(define-public python-apispec-webframeworks
25062 (package
25063 (name "python-apispec-webframeworks")
25064 (version "1.2.0")
25065 (source
25066 (origin
25067 (method url-fetch)
25068 (uri (pypi-uri "apispec_webframeworks" version))
25069 (sha256
25070 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
25071 (build-system pyproject-build-system)
25072 (native-inputs
25073 (list python-aiohttp
25074 python-flit-core
25075 python-bottle
25076 python-flask
25077 python-pytest
25078 python-pyyaml
25079 python-tornado
25080 python-wheel))
25081 (propagated-inputs
25082 (list python-apispec))
25083 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
25084 (synopsis "Web framework plugins for apispec")
25085 (description "This package provides plugins for using @code{apispec} with
25086web frameworks.")
25087 (license license:expat)))
25088
25089(define-public python-flasgger
25090 (package
25091 (name "python-flasgger")
25092 (version "0.9.7.1")
25093 (source
25094 (origin
25095 (method git-fetch)
25096 (uri (git-reference
25097 (url "https://github.com/rochacbruno/flasgger")
25098 (commit (string-append "v" version))))
25099 (file-name (git-file-name name version))
25100 (sha256
25101 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))))
25102 (build-system pyproject-build-system)
25103 (arguments
25104 (list
25105 #:test-flags
25106 #~(list "--ignore=tests/test_examples.py"
25107 "-k" "not test_swag")))
25108 (propagated-inputs
25109 (list python-flask
25110 python-pyyaml
25111 python-jsonschema
25112 python-mistune
25113 python-six))
25114 (native-inputs
25115 (list python-pytest
25116 python-setuptools))
25117 (home-page "https://github.com/rochacbruno/flasgger/")
25118 (synopsis "Extract Swagger specs from your Flask project")
25119 (description "@code{python-flasgger} allows extracting Swagger specs
25120 from your Flask project. It is a fork of Flask-Swagger.")
25121 (license license:expat)))
25122
25123(define-public python-apache-libcloud
25124 (package
25125 (name "python-apache-libcloud")
25126 (version "3.8.0")
25127 (source
25128 (origin
25129 (method url-fetch)
25130 (uri (pypi-uri "apache-libcloud" version))
25131 (sha256
25132 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
25133 (build-system pyproject-build-system)
25134 (arguments
25135 (list
25136 #:tests? #f ; XXX: all tests fail requiring additional credentials
25137 #:phases
25138 #~(modify-phases %standard-phases
25139 (add-after 'unpack 'patch-ssh
25140 (lambda* (#:key inputs #:allow-other-keys)
25141 (substitute* "libcloud/compute/ssh.py"
25142 (("'ssh'")
25143 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
25144 (add-after 'unpack 'patch-tests
25145 (lambda _
25146 (substitute* "libcloud/test/compute/test_ssh_client.py"
25147 (("^class ShellOutSSHClientTests")
25148 "@unittest.skip(\"Guix container doesn't have ssh service\")
25149class ShellOutSSHClientTests"))))
25150 (add-before 'check 'copy-secret
25151 (lambda _
25152 (copy-file "libcloud/test/secrets.py-dist"
25153 "libcloud/test/secrets.py"))))))
25154 (inputs
25155 (list openssh))
25156 (propagated-inputs
25157 (list python-requests))
25158 (native-inputs
25159 (list python-pytest python-requests-mock python-setuptools))
25160 (home-page "https://libcloud.apache.org/")
25161 (synopsis "Unified Cloud API")
25162 (description
25163 "@code{libcloud} is a Python library for interacting with many of the
25164popular cloud service providers using a unified API.")
25165 (license license:asl2.0)))
25166
25167(define-public python-smmap
25168 (package
25169 (name "python-smmap")
25170 (version "5.0.2")
25171 (source
25172 (origin
25173 (method url-fetch)
25174 (uri (pypi-uri "smmap" version))
25175 (sha256
25176 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
25177 (build-system pyproject-build-system)
25178 (native-inputs
25179 (list python-pytest
25180 python-setuptools
25181 python-wheel))
25182 (home-page "https://github.com/Byron/smmap")
25183 (synopsis "Python sliding window memory map manager")
25184 (description "@code{smmap} is a pure Python implementation of a sliding
25185 window memory map manager.")
25186 (license license:bsd-3)))
25187
25188(define-public python-regex
25189 (package
25190 (name "python-regex")
25191 (version "2024.11.6")
25192 (source
25193 (origin
25194 (method url-fetch)
25195 (uri (pypi-uri "regex" version))
25196 (sha256
25197 (base32 "06amb1sxhbab03cy73q7wcp131bsingngr44r0rh6an5cfq5kcbs"))))
25198 (build-system pyproject-build-system)
25199 (arguments
25200 (list #:test-backend #~'unittest))
25201 (native-inputs
25202 (list python-setuptools))
25203 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
25204 (synopsis "Alternative regular expression module")
25205 (description
25206 "This regular expression implementation is backwards-compatible with the
25207standard @code{re} module, but offers additional functionality like full
25208case-folding for case-insensitive matches in Unicode.")
25209 (license license:psfl)))
25210
25211(define-public python-pysocks
25212 (package
25213 (name "python-pysocks")
25214 (version "1.7.1")
25215 (source
25216 (origin
25217 (method url-fetch)
25218 (uri (pypi-uri "PySocks" version))
25219 (sha256
25220 (base32
25221 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
25222 (build-system pyproject-build-system)
25223 (arguments `(#:tests? #f))
25224 (native-inputs
25225 (list python-setuptools))
25226 (home-page "https://github.com/Anorov/PySocks")
25227 (synopsis "SOCKS client module")
25228 (description "@code{pysocks} is an updated and semi-actively maintained
25229version of @code{SocksiPy} with bug fixes and extra features.")
25230 (license license:bsd-3)))
25231
25232(define-public python-pydub
25233 (package
25234 (name "python-pydub")
25235 (version "0.25.1")
25236 (source
25237 (origin
25238 (method git-fetch)
25239 (uri (git-reference
25240 (url "https://github.com/jiaaro/pydub")
25241 (commit (string-append "v" version))))
25242 (file-name (git-file-name name version))
25243 (sha256
25244 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))))
25245 (build-system pyproject-build-system)
25246 (arguments
25247 (list
25248 #:test-backend ''unittest
25249 #:phases
25250 #~(modify-phases %standard-phases
25251 (add-after 'unpack 'fix-ffmpeg-path
25252 (lambda* (#:key inputs #:allow-other-keys)
25253 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
25254 (substitute* "pydub/utils.py"
25255 (("return \"ffmpeg\"")
25256 (string-append "return \"" bin "/ffmpeg\""))
25257 (("return \"ffplay\"")
25258 (string-append "return \"" bin "/ffplay\""))
25259 (("return \"ffprobe\"")
25260 (string-append "return \"" bin "/ffprobe\""))
25261 (("warn\\(\"Couldn't find ff")
25262 "# warn\\(\"Couldn't find ff"))))))))
25263 (native-inputs (list python-setuptools))
25264 (home-page "https://pydub.com")
25265 (inputs (list ffmpeg))
25266 (propagated-inputs (list python-scipy))
25267 (synopsis "Manipulate audio with a high level interface in Python")
25268 (description
25269 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
25270@code{ffmpeg} to open various audio formats.")
25271 (license license:expat))) ; MIT license
25272
25273(define-public python-pkginfo
25274 (package
25275 (name "python-pkginfo")
25276 (version "1.12.1.2")
25277 (source
25278 (origin
25279 (method url-fetch)
25280 (uri (pypi-uri "pkginfo" version))
25281 (sha256
25282 (base32
25283 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
25284 (build-system pyproject-build-system)
25285 (arguments
25286 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
25287 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
25288 (native-inputs
25289 (list python-pytest
25290 python-setuptools
25291 python-wheel))
25292 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
25293 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
25294 (description
25295 "API to query the distutils metadata written in @file{PKG-INFO} inside a
25296source distriubtion (an sdist) or a binary distribution (e.g., created by
25297running bdist_egg). It can also query the EGG-INFO directory of an installed
25298distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
25299created by running @code{python setup.py develop}).")
25300 (license license:expat)))
25301
25302;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
25303;; read-only. Consider to remvoe when nothing depends on it.
25304(define-public python-ratelimiter
25305 ;; From https://github.com/RazerM/ratelimiter/pull/11
25306 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
25307 (revision "0"))
25308 (package
25309 (name "python-ratelimiter")
25310 (version (git-version "1.2.0.post1" revision commit))
25311 (source
25312 (origin
25313 (method git-fetch)
25314 (uri (git-reference
25315 (url "https://github.com/RazerM/ratelimiter")
25316 (commit commit)))
25317 (sha256
25318 (base32
25319 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
25320 (build-system pyproject-build-system)
25321 (arguments
25322 (list #:phases
25323 '(modify-phases %standard-phases
25324 (add-after 'unpack 'pytest-compatibility
25325 (lambda _
25326 (substitute* "tests/conftest.py"
25327 (("pytest.collect.File") "pytest.File")))))))
25328 (native-inputs
25329 (list python-pytest-8
25330 python-pytest-asyncio-0.26
25331 python-setuptools))
25332 (home-page "https://github.com/RazerM/ratelimiter")
25333 (synopsis "Simple rate limiting object")
25334 (description
25335 "The @code{ratelimiter} module ensures that an operation will not be
25336executed more than a given number of times during a given period.")
25337 (license license:asl2.0))))
25338
25339(define-public python-rbfly
25340 (package
25341 (name "python-rbfly")
25342 (version "0.10.0")
25343 (source
25344 (origin
25345 (method url-fetch)
25346 (uri (pypi-uri "rbfly" version))
25347 (sha256
25348 (base32 "019fs94qzbxb43vahcm0va53m5d4nxrib5pkl29m4hx9adcccpf6"))))
25349 (build-system pyproject-build-system)
25350 (arguments
25351 (list
25352 #:test-flags #~(list "--pyargs" "rbfly")
25353 #:phases
25354 #~(modify-phases %standard-phases
25355 (add-after 'unpack 'fix-pytest-config
25356 (lambda _
25357 ;; Drop test coverage requirements.
25358 (substitute* "pyproject.toml"
25359 ((".*addopts.*") "")))))))
25360 (native-inputs
25361 (list python-cython
25362 python-pytest
25363 python-pytest-asyncio
25364 python-pytest-timeout
25365 python-setuptools
25366 python-wheel))
25367 (home-page "https://wrobell.dcmod.org/rbfly/")
25368 (synopsis "Work with RabbitMQ Streams in Python")
25369 (description
25370 "This package implements a functionality to deal with
25371@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
25372@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
25373
25374It is designed and implemented with the following qualities in mind:
25375@itemize
25376@item asynchronous Pythonic API with type annotations
25377@item use of
25378@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
253791.0 message format to enable interoperability between RabbitMQ Stream. clients
25380@item auto reconnection to RabbitMQ broker with lazily created connection
25381objects
25382@end itemize
25383
25384Support of many RabbitMQ Streams broker features:
25385@itemize
25386@item publishing single messages, or in batches, with confirmation
25387@item subscribing to a stream at a specific point in time, from a specific
25388offset, or using offset reference
25389@item stream message filtering
25390@item writing stream offset reference
25391@item message deduplication
25392@item integration with AMQP 1.0 ecosystem at message format level
25393@end itemize")
25394 (license license:gpl3+)))
25395
25396(define-public python-jsonrpclib-pelix
25397 (package
25398 (name "python-jsonrpclib-pelix")
25399 (version "0.3.2")
25400 (source
25401 (origin
25402 (method git-fetch)
25403 (uri (git-reference
25404 (url "https://github.com/tcalmant/jsonrpclib")
25405 (commit (string-append "v" version))))
25406 (file-name (git-file-name name version))
25407 (sha256
25408 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
25409 (build-system pyproject-build-system)
25410 (arguments
25411 (list
25412 #:test-flags #~(list "--deselect=\
25413tests/test_internal.py::InternalTests::test_multicall_success")))
25414 (native-inputs (list python-pytest python-setuptools))
25415 (home-page "https://github.com/tcalmant/jsonrpclib")
25416 (synopsis "JSON-RPC 2.0 client library for Python")
25417 (description
25418 "This library implements the JSON-RPC v2.0 specification
25419(backwards-compatible) as a client library for Python. This version is a fork
25420of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
25421 (license license:asl2.0)))
25422
25423(define-public python-setuptools-git
25424 ;; XXX: The project is abandoned since 2018, consider to remove in the next
25425 ;; refresh cycle.
25426 (package
25427 (name "python-setuptools-git")
25428 (version "1.2")
25429 (source
25430 (origin
25431 (method url-fetch)
25432 (uri (pypi-uri "setuptools-git" version))
25433 (sha256
25434 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
25435 (build-system pyproject-build-system)
25436 (arguments
25437 (list
25438 #:tests? #f ;no tests in PyPI
25439 #:phases
25440 #~(modify-phases %standard-phases
25441 ;; This is needed for tests.
25442 (add-after 'unpack 'configure-git
25443 (lambda _
25444 (setenv "HOME" "/tmp")
25445 (invoke "git" "config" "--global" "user.email" "guix")
25446 (invoke "git" "config" "--global" "user.name" "guix"))))))
25447 (native-inputs
25448 (list git-minimal/pinned python-setuptools python-wheel))
25449 (home-page "https://github.com/msabramo/setuptools-git")
25450 (synopsis "Setuptools revision control system plugin for Git")
25451 (description
25452 "This package provides a plugin for Setuptools for revision control with
25453Git.")
25454 (license license:bsd-3)))
25455
25456(define-public python-setuptools-rust
25457 (package
25458 (name "python-setuptools-rust")
25459 (version "1.11.1")
25460 (source
25461 (origin
25462 (method url-fetch)
25463 (uri (pypi-uri "setuptools_rust" version))
25464 (sha256
25465 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
25466 (build-system pyproject-build-system)
25467 (arguments
25468 (list #:tests? #f)) ;tests rquire Cargo
25469 (propagated-inputs
25470 (list python-semantic-version
25471 python-setuptools))
25472 (home-page "https://github.com/PyO3/setuptools-rust")
25473 (synopsis "Setuptools plugin for Rust extensions")
25474 (description
25475 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
25476Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
25477 (license license:expat)))
25478
25479(define-public python-setuptools-gettext
25480 (package
25481 (name "python-setuptools-gettext")
25482 (version "0.1.14")
25483 (source
25484 (origin
25485 (method git-fetch)
25486 (uri (git-reference
25487 (url "https://github.com/breezy-team/setuptools-gettext")
25488 (commit (string-append "v" version))))
25489 (file-name (git-file-name name version))
25490 (sha256
25491 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
25492 (build-system pyproject-build-system)
25493 (native-inputs (list python-pytest python-tomli python-setuptools))
25494 (home-page "https://github.com/breezy-team/setuptools-gettext")
25495 (synopsis "Setuptools plugin for gettext")
25496 (description "This package provides a plugin for Setuptools for gettext.")
25497 (license license:gpl2+)))
25498
25499(define-public python-pyclibrary
25500 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
25501 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
25502 (revision "0"))
25503 (package
25504 (name "python-pyclibrary")
25505 (version (git-version "0.2.2" revision commit))
25506 (source
25507 (origin
25508 (method git-fetch)
25509 (uri (git-reference
25510 (url "https://github.com/MatthieuDartiailh/pyclibrary")
25511 (commit commit)))
25512 (file-name (git-file-name name version))
25513 (sha256
25514 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
25515 (build-system pyproject-build-system)
25516 (native-inputs
25517 (list python-pytest
25518 python-setuptools
25519 python-setuptools-scm))
25520 (propagated-inputs
25521 (list python-pyparsing))
25522 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
25523 (synopsis "Wrap dynamic libraries in Python")
25524 (description
25525 "This package helps wrapping dynamic libraries in Python. It includes
25526a pure-Python C parser and an automation library that uses C header file
25527definitions to simplify the use of C bindings.")
25528 (license license:expat))))
25529
25530(define-public python-pyclipper
25531 (package
25532 (name "python-pyclipper")
25533 (version "1.3.0.post6")
25534 (source
25535 (origin
25536 (method git-fetch)
25537 (uri (git-reference
25538 (url "https://github.com/greginvm/pyclipper")
25539 (commit version)))
25540 (file-name (git-file-name name version))
25541 (sha256
25542 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
25543 (build-system pyproject-build-system)
25544 (arguments
25545 (list
25546 #:phases
25547 #~(modify-phases %standard-phases
25548 (add-before 'build 'cythonize-sources
25549 (lambda _
25550 (with-directory-excursion "src/pyclipper"
25551 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
25552 (native-inputs
25553 (list python-cython
25554 python-pytest
25555 python-setuptools
25556 python-setuptools-scm))
25557 (home-page "https://github.com/greginvm/pyclipper")
25558 (synopsis "Wrapper for Angus Johnson's Clipper library")
25559 (description
25560 "Pyclipper is a Cython wrapper for the C++ translation of the
25561Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
25562 (license license:expat)))
25563
25564(define-public python-semver
25565 (package
25566 (name "python-semver")
25567 (version "3.0.4")
25568 (source
25569 (origin
25570 (method url-fetch)
25571 (uri (pypi-uri "semver" version))
25572 (sha256
25573 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
25574 (build-system pyproject-build-system)
25575 (native-inputs (list python-pytest python-pytest-cov python-setuptools
25576 python-wheel))
25577 (home-page "https://github.com/k-bx/python-semver")
25578 (synopsis "Python helper for Semantic Versioning")
25579 (description
25580 "This package provides a Python library for @url{Semantic Versioning,
25581http://semver.org/}.")
25582 (license license:bsd-3)))
25583
25584(define-public python-phonenumbers
25585 (package
25586 (name "python-phonenumbers")
25587 (version "8.13.37")
25588 (source
25589 (origin
25590 (method git-fetch)
25591 (uri (git-reference
25592 (url "https://github.com/daviddrysdale/python-phonenumbers")
25593 (commit (string-append "v" version))))
25594 (file-name (git-file-name name version))
25595 (sha256
25596 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
25597 (build-system pyproject-build-system)
25598 (arguments
25599 (list
25600 #:test-backend #~'custom
25601 #:test-flags #~(list "-m" "testwrapper")
25602 #:phases
25603 #~(modify-phases %standard-phases
25604 (add-after 'unpack 'chdir
25605 (lambda _
25606 (chdir "python"))))))
25607 (propagated-inputs (list python-protobuf))
25608 (native-inputs (list python-setuptools))
25609 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
25610 (synopsis "Python library for dealing with international phone numbers")
25611 (description
25612 "This package provides a Python port of Google's libphonenumber library.")
25613 (license license:asl2.0)))
25614
25615(define-public python-heapdict
25616 (package
25617 (name "python-heapdict")
25618 (version "1.0.1")
25619 (source
25620 (origin
25621 (method url-fetch)
25622 (uri (pypi-uri "HeapDict" version))
25623 (sha256
25624 (base32
25625 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
25626 (build-system pyproject-build-system)
25627 (arguments (list #:test-backend #~'unittest))
25628 (native-inputs (list python-setuptools))
25629 (home-page "http://stutzbachenterprises.com/")
25630 (synopsis "Heap with decrease-key and increase-key operations")
25631 (description
25632 "heapdict implements the MutableMapping ABC, meaning it works pretty much
25633like a regular Python @code{dict}. It’s designed to be used as a priority
25634queue.")
25635 (license license:bsd-3)))
25636
25637(define-public python-send2trash
25638 (package
25639 (name "python-send2trash")
25640 (version "1.8.2")
25641 (source
25642 (origin (method git-fetch)
25643 ;; Source tarball on PyPI doesn't include tests.
25644 (uri (git-reference
25645 (url "https://github.com/arsenetar/send2trash")
25646 (commit version)))
25647 (file-name (git-file-name name version))
25648 (sha256
25649 (base32
25650 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
25651 (build-system pyproject-build-system)
25652 (arguments
25653 (list
25654 #:phases
25655 '(modify-phases %standard-phases
25656 (add-before 'check 'pre-check
25657 (lambda _ (setenv "HOME" "/tmp"))))))
25658 (native-inputs (list python-pytest python-setuptools python-wheel))
25659 (home-page "https://github.com/arsenetar/send2trash")
25660 (synopsis "Send files to the user's @file{~/Trash} directory")
25661 (description "This package provides a Python library to send files to the
25662user's @file{~/Trash} directory.")
25663 (license license:bsd-3)))
25664
25665(define-public python-pyfavicon
25666 (package
25667 (name "python-pyfavicon")
25668 (version "0.1.1")
25669 (source
25670 (origin
25671 (method git-fetch)
25672 (uri (git-reference
25673 (url "https://github.com/bilelmoussaoui/pyfavicon")
25674 (commit version)))
25675 (file-name (git-file-name name version))
25676 (sha256
25677 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
25678 (build-system pyproject-build-system)
25679 (arguments
25680 (list
25681 #:test-flags
25682 #~(list "-k" (string-join (list
25683 ;; Socket name resolution fails.
25684 "not test_url_icon_link_type"
25685 "test_icon_sizes"
25686 ;; Tuples differ.
25687 "test_largest_icon")
25688 " and not "))))
25689 (native-inputs (list python-pytest python-setuptools))
25690 (propagated-inputs
25691 (list python-aiohttp python-beautifulsoup4 python-pillow))
25692 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
25693 (synopsis "Async favicon fetcher")
25694 (description
25695 "@code{pyfavicon} is an async favicon fetcher.")
25696 (license license:expat)))
25697
25698(define-public python-gyp
25699 ;; Google does not release versions.
25700 (let ((commit "1615ec326858f8c2bd8f30b3a86ea71830409ce4")
25701 (revision "2"))
25702 (package
25703 (name "python-gyp")
25704 (version (git-version "0.0.0" revision commit))
25705 (source
25706 (origin
25707 (method git-fetch)
25708 (uri (git-reference
25709 (url "https://chromium.googlesource.com/external/gyp")
25710 (commit commit)))
25711 (file-name (git-file-name name version))
25712 (sha256
25713 (base32 "02rnmw7k2r33x5nbb5xb8kk170hk0s1wmwfqpsx4cij1wbi4bqhk"))))
25714 (build-system pyproject-build-system)
25715 (arguments
25716 (list
25717 #:test-flags
25718 #~(list "--ignore-glob=test/win/**/*.py")
25719 #:phases
25720 #~(modify-phases %standard-phases
25721 (add-after 'unpack 'remove-six-requirements
25722 (lambda _
25723 (substitute* "pylib/gyp/generator/ninja.py"
25724 (("six\\.ensure_binary\\(outputs\\[0\\]\\)")
25725 "outputs[0].encode('utf-8')")
25726 (("import six")
25727 ""))
25728 (substitute* '("pylib/gyp/common.py"
25729 "pylib/gyp/msvs_emulation.py"
25730 "test/lib/TestGyp.py")
25731 (("from six\\.moves import collections_abc")
25732 "import collections")
25733 (("collections_abc")
25734 "collections.abc"))))
25735 (add-before 'check 'configure-tests
25736 (lambda _
25737 (setenv "PYTHONPATH"
25738 (string-append (getcwd) "/test/lib:"
25739 (getenv "GUIX_PYTHONPATH"))))))))
25740 (native-inputs (list python-pytest python-setuptools))
25741 (home-page "https://gyp.gsrc.io/")
25742 (synopsis "GYP is a Meta-Build system")
25743 (description
25744 "GYP builds build systems for large, cross platform applications.
25745It can be used to generate XCode projects, Visual Studio projects, Ninja build
25746files, and Makefiles.")
25747 (license license:bsd-3))))
25748
25749(define-public python-funcy
25750 (package
25751 (name "python-funcy")
25752 (version "1.11")
25753 (source
25754 (origin
25755 (method git-fetch)
25756 (uri (git-reference
25757 (url "https://github.com/Suor/funcy")
25758 (commit version)))
25759 (sha256
25760 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
25761 (file-name (git-file-name name version))))
25762 (build-system pyproject-build-system)
25763 (native-inputs
25764 (list python-pytest python-whatever python-setuptools python-wheel))
25765 (home-page "https://github.com/Suor/funcy")
25766 (synopsis "Functional tools")
25767 (description "@code{funcy} is a library that provides functional tools.
25768Examples are:
25769@enumerate
25770@item merge - Merges collections of the same type
25771@item walk - Type-preserving map
25772@item select - Selects a part of a collection
25773@item take - Takes the first n items of a collection
25774@item first - Takes the first item of a collection
25775@item remove - Predicated-removes items of a collection
25776@item concat - Concatenates two collections
25777@item flatten - Flattens a collection with subcollections
25778@item distinct - Returns only distinct items
25779@item split - Predicated-splits a collection
25780@item split_at - Splits a collection at a given item
25781@item group_by - Groups items by group
25782@item pairwise - Pairs off adjacent items
25783@item partial - Partially-applies a function
25784@item curry - Curries a function
25785@item compose - Composes functions
25786@item complement - Complements a predicate
25787@item all_fn - \"all\" with predicate
25788@end enumerate")
25789 (license license:bsd-3)))
25790
25791(define-public python-funcy-1.14
25792 (package/inherit python-funcy
25793 (name "python-funcy")
25794 (version "1.14")
25795 (source
25796 (origin
25797 (method git-fetch)
25798 (uri (git-reference
25799 (url "https://github.com/Suor/funcy")
25800 (commit version)))
25801 (sha256
25802 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
25803 (file-name (git-file-name name version))))))
25804
25805(define-public python-isoweek
25806 (package
25807 (name "python-isoweek")
25808 (version "1.3.3")
25809 (source
25810 (origin
25811 (method url-fetch)
25812 (uri (pypi-uri "isoweek" version))
25813 (sha256
25814 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
25815 (build-system pyproject-build-system)
25816 (arguments (list #:test-backend #~'unittest))
25817 (native-inputs (list python-setuptools))
25818 (home-page "https://github.com/gisle/isoweek")
25819 (synopsis "Objects representing a week")
25820 (description "The @code{isoweek} module provide the class Week that
25821implements the week definition of ISO 8601. This standard also defines
25822a notation for identifying weeks; yyyyWww (where the W is a literal).
25823Week instances stringify to this form.")
25824 (license license:bsd-3)))
25825
25826(define-public bpython
25827 (package
25828 (name "bpython")
25829 (version "0.25")
25830 (source
25831 (origin
25832 (method url-fetch)
25833 (uri (pypi-uri "bpython" version))
25834 (sha256
25835 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
25836 (build-system pyproject-build-system)
25837 (arguments
25838 (list
25839 #:test-flags
25840 ;; Tests can't import curtsies, pygments and urwid.
25841 #~(list "-k" (string-join
25842 (list "not test_issue108"
25843 "test_issue133")
25844 " and not " ))
25845 #:phases
25846 #~(modify-phases %standard-phases
25847 (add-after 'wrap 'add-aliases
25848 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
25849 (lambda _
25850 (for-each
25851 (lambda (old new)
25852 (symlink old (string-append #$output "/bin/" new)))
25853 '("bpython" "bpython-urwid" "bpdb")
25854 '("bpython3" "bpython3-urwid" "bpdb3")))))))
25855 (native-inputs
25856 (list python-mock
25857 python-pytest
25858 python-setuptools))
25859 (propagated-inputs
25860 (list python-curtsies
25861 python-cwcwidth
25862 python-greenlet
25863 python-pygments
25864 python-pyxdg
25865 python-requests
25866 ;; [optional]
25867 python-pyperclip
25868 python-jedi
25869 python-urwid-2
25870 python-watchdog))
25871 (home-page "https://bpython-interpreter.org/")
25872 (synopsis "Fancy interface to the Python interpreter")
25873 (description "Bpython is a fancy interface to the Python
25874interpreter. bpython's main features are
25875
25876@enumerate
25877@item in-line syntax highlighting,
25878@item readline-like autocomplete with suggestions displayed as you type,
25879@item expected parameter list for any Python function,
25880@item \"rewind\" function to pop the last line of code from memory and
25881 re-evaluate,
25882@item send the code you've entered off to a pastebin,
25883@item save the code you've entered to a file, and
25884@item auto-indentation.
25885@end enumerate")
25886 (license license:expat)))
25887
25888(define-public python-pyinotify
25889 (package
25890 (name "python-pyinotify")
25891 (version "0.9.6")
25892 (source
25893 (origin
25894 (method git-fetch)
25895 (uri (git-reference
25896 (url "https://github.com/seb-m/pyinotify")
25897 (commit version)))
25898 (file-name (git-file-name name version))
25899 (sha256
25900 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
25901 (build-system pyproject-build-system)
25902 (arguments
25903 (list
25904 #:tests? #f ;no tests
25905 #:phases
25906 #~(modify-phases %standard-phases
25907 (add-after 'unpack 'drop-shebang
25908 (lambda _
25909 ;; Dropping this shebang prevents the build system from adding
25910 ;; python-wrapper as an input, reducing package closure size from
25911 ;; ~200 MiB to ~0.2 MiB.
25912 (substitute* "python3/pyinotify.py"
25913 (("#!/usr/bin/env python") "")))))))
25914 (native-inputs
25915 (list python-setuptools))
25916 (home-page "https://github.com/seb-m/pyinotify")
25917 (synopsis "Python library for monitoring inotify events")
25918 (description
25919 "@code{pyinotify} provides a Python interface for monitoring file system
25920events on Linux.")
25921 (license license:expat)))
25922
25923(define-public python-pyinotify-cli
25924 (package
25925 (inherit python-pyinotify)
25926 (name "python-pyinotify-cli")
25927 (arguments
25928 (substitute-keyword-arguments (package-arguments python-pyinotify)
25929 ((#:phases phases #~%standard-phases)
25930 #~(modify-phases #$phases
25931 (delete 'drop-shebang)
25932 (add-after 'install 'install-entrypoint
25933 (lambda _
25934 (let ((entrypoint
25935 (string-append #$output "/lib/python"
25936 (python-version (which "python"))
25937 "/site-packages/pyinotify.py"))
25938 (bin (string-append #$output "/bin")))
25939 (mkdir-p bin)
25940 (invoke "chmod" "+x" entrypoint)
25941 (symlink
25942 entrypoint (string-append #$output "/bin/pyinotify")))))))))
25943 (description
25944 "This package provides, in addition to the @code{pyinotify} Python library,
25945a command line application exposing the same functionality.")))
25946
25947(define-public python-latex2pydata
25948 (package
25949 (name "python-latex2pydata")
25950 (version "0.5.0")
25951 (source
25952 (origin
25953 (method url-fetch)
25954 (uri (pypi-uri "latex2pydata" version))
25955 (sha256
25956 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
25957 (build-system pyproject-build-system)
25958 (native-inputs (list python-setuptools python-wheel python-pytest))
25959 (home-page "https://github.com/gpoore/latex2pydata")
25960 (synopsis "Load data from LaTeX in Python literal format")
25961 (description
25962 "This package is designed to load data in Python literal format that was
25963saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
25964passed from LaTeX to Python.")
25965 (license license:bsd-3)))
25966
25967(define-public python-latexcodec
25968 (package
25969 (name "python-latexcodec")
25970 (version "3.0.1")
25971 (source
25972 (origin
25973 (method git-fetch)
25974 (uri (git-reference
25975 (url "https://github.com/mcmtroffaes/latexcodec/")
25976 (commit version)))
25977 (file-name (git-file-name name version))
25978 (sha256
25979 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
25980 (build-system pyproject-build-system)
25981 (native-inputs (list python-pytest python-setuptools))
25982 (home-page "https://readthedocs.org/projects/latexcodec/")
25983 (synopsis "Work with LaTeX code in Python")
25984 (description "Lexer and codec to work with LaTeX code in Python.")
25985 (license license:expat)))
25986
25987(define-public python-latexminted
25988 (package
25989 (name "python-latexminted")
25990 ;; Version 0.6.0 is not compatible with our packaged python-pygments.
25991 (version "0.5.1")
25992 (source
25993 (origin
25994 (method url-fetch)
25995 (uri (pypi-uri "latexminted" version))
25996 (sha256
25997 (base32 "12pj51nw7k3h6pv8r7k7382jwvs5wsd80cpkv222nkv07gnfg390"))))
25998 (build-system pyproject-build-system)
25999 (propagated-inputs (list python-latex2pydata
26000 python-latexrestricted
26001 python-pygments))
26002 (native-inputs (list texlive-kpathsea python-setuptools python-wheel))
26003 (home-page "https://github.com/gpoore/minted")
26004 (synopsis "Python library for the LaTeX minted package")
26005 (description "This Python package provides the Python side of the
26006@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
26007@code{python-pygments} library. It also provides several code formatting and
26008manipulation features implemented in Python that would be difficult to perform
26009in LaTeX, such as dedenting code and extracting code snippets from source files
26010using regular expressions.")
26011 (license license:lppl1.3c+)))
26012
26013(define-public python-latexrestricted
26014 (package
26015 (name "python-latexrestricted")
26016 (version "0.6.2")
26017 (source
26018 (origin
26019 (method url-fetch)
26020 (uri (pypi-uri "latexrestricted" version))
26021 (sha256
26022 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
26023 (build-system pyproject-build-system)
26024 (arguments
26025 (list
26026 #:phases
26027 #~(modify-phases %standard-phases
26028 (add-after 'unpack 'fix-paths
26029 (lambda* (#:key inputs #:allow-other-keys)
26030 (let ((pystr (lambda (s) (string-append "'" s "'")))
26031 (kpse (search-input-file inputs "/bin/kpsewhich")))
26032 (substitute* "latexrestricted/_latex_config.py"
26033 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
26034 ;; this variable is bogus in Guix because binaries are scattered
26035 ;; across multiple directories. This phase sets SELFAUTOLOC to
26036 ;; the specific directory containing `kpsewhich'.
26037 (("os\\.getenv\\('SELFAUTOLOC'\\)")
26038 (pystr (dirname kpse)))
26039 ;; Refer to kpse by store path instead of looking it upein $PATH.
26040 (("shutil.which\\('kpse'.*$")
26041 (string-append (pystr kpse) "\n")))))))))
26042 (native-inputs (list python-setuptools python-wheel))
26043 (inputs (list texlive-kpathsea))
26044 (home-page "https://github.com/gpoore/latexrestricted")
26045 (synopsis
26046 "Library for creating executables compatible with LaTeX's shell escape")
26047 (description
26048 "This Python package is designed to simplify the process of creating Python
26049executables compatible with LaTeX restricted shell escape. Restricted shell
26050escape allows LaTeX to run trusted executables as part of compiling documents.
26051These executables have restricted access to the file system and restricted
26052ability to launch subprocesses.")
26053 (license license:lppl1.3+)))
26054
26055(define-public python-pybloom-live
26056 (package
26057 (name "python-pybloom-live")
26058 (version "4.0.0")
26059 (source (origin
26060 (method url-fetch)
26061 (uri (pypi-uri "pybloom_live" version))
26062 (sha256
26063 (base32
26064 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
26065 (build-system pyproject-build-system)
26066 (propagated-inputs (list python-bitarray python-xxhash))
26067 (native-inputs (list python-pytest python-setuptools python-wheel))
26068 (home-page "https://github.com/joseph-fox/python-bloomfilter")
26069 (synopsis "Bloom filter")
26070 (description "This package provides a scalable Bloom filter implemented in
26071Python.")
26072 (license license:expat)))
26073
26074;; XXX: Not maintained since 2020.
26075(define-public python-pybktree
26076 (package
26077 (name "python-pybktree")
26078 (version "1.1")
26079 (source
26080 (origin
26081 (method url-fetch)
26082 (uri (pypi-uri "pybktree" version))
26083 (sha256
26084 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
26085 (build-system pyproject-build-system)
26086 (arguments
26087 (list #:tests? #f)) ;no tests provided
26088 (native-inputs (list python-setuptools))
26089 (home-page "https://github.com/Jetsetter/pybktree")
26090 (synopsis "Pythonic BK-tree data structure")
26091 (description
26092 "This package provides a BK-tree data structure to allow fast querying of
26093close matches in Python.")
26094 (license license:expat)))
26095
26096(define-public python-pybtex
26097 (package
26098 (name "python-pybtex")
26099 (version "0.25.0")
26100 (source
26101 (origin
26102 (method git-fetch)
26103 (uri (git-reference
26104 (url "https://codeberg.org/pybtex/pybtex")
26105 (commit version)))
26106 (file-name (git-file-name name version))
26107 (sha256
26108 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
26109 (build-system pyproject-build-system)
26110 (native-inputs (list python-pytest python-setuptools))
26111 (propagated-inputs (list python-latexcodec python-pyyaml))
26112 (home-page "https://pybtex.org/")
26113 (synopsis "BibTeX-compatible bibliography processor")
26114 (description
26115 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
26116You can simply type pybtex instead of bibtex.")
26117 (license license:expat)))
26118
26119(define-public python-pybtex-apa-style
26120 (package
26121 (name "python-pybtex-apa-style")
26122 (version "1.3")
26123 (source
26124 (origin
26125 (method url-fetch)
26126 (uri (pypi-uri "pybtex-apa-style" version))
26127 (sha256
26128 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
26129 (build-system pyproject-build-system)
26130 (arguments
26131 (list
26132 #:test-backend #~'custom
26133 #:test-flags
26134 #~(list "-c" (string-append "import sys, pybtex.plugin;"
26135 " sys.exit('apa' not"
26136 " in pybtex.plugin.enumerate_plugin_names"
26137 "('pybtex.style.labels'))"))))
26138 (native-inputs (list python-pybtex python-setuptools))
26139 (home-page "https://github.com/naeka/pybtex-apa-style")
26140 (synopsis "APA style for pybtex")
26141 (description
26142 "This package provides support for the APA style within pybtex.")
26143 (license license:expat)))
26144
26145(define-public python-pybtex-docutils
26146 (package
26147 (name "python-pybtex-docutils")
26148 (version "1.0.3")
26149 (source
26150 (origin
26151 (method git-fetch)
26152 (uri (git-reference
26153 (url "https://github.com/mcmtroffaes/pybtex-docutils")
26154 (commit version)))
26155 (file-name (git-file-name name version))
26156 (sha256
26157 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
26158 (build-system pyproject-build-system)
26159 (propagated-inputs (list python-docutils python-pybtex))
26160 (native-inputs (list python-setuptools python-pytest))
26161 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
26162 (synopsis "Docutils backend for pybtex")
26163 (description "The pybtex docutils backend allows bibtex citations to be
26164inserted into documentation generated by docutils.")
26165 (license license:expat)))
26166
26167(define-public python-onetimepass
26168 (package
26169 (name "python-onetimepass")
26170 (version "1.0.1")
26171 (source
26172 (origin
26173 (method git-fetch)
26174 (uri (git-reference
26175 (url "https://github.com/tadeck/onetimepass/")
26176 (commit (string-append "v" version))))
26177 (file-name (git-file-name name version))
26178 (sha256
26179 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
26180 (build-system pyproject-build-system)
26181 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
26182 (native-inputs (list python-setuptools))
26183 (propagated-inputs (list python-six))
26184 (home-page "https://github.com/tadeck/onetimepass/")
26185 (synopsis "One-time password library")
26186 (description
26187 "Python one-time password library for HMAC-based (HOTP) and time-based
26188(TOTP) passwords.")
26189 (license license:expat)))
26190
26191(define-public python-online-judge-api-client
26192 (package
26193 (name "python-online-judge-api-client")
26194 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
26195 (revision . "0")))
26196 (version (git-version "10.10.1"
26197 (assoc-ref properties 'revision)
26198 (assoc-ref properties 'commit)))
26199 (source
26200 (origin
26201 (method git-fetch)
26202 (uri (git-reference
26203 (url "https://github.com/online-judge-tools/api-client")
26204 (commit (assoc-ref properties 'commit))))
26205 (file-name (git-file-name name version))
26206 (sha256
26207 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
26208 (patches
26209 (search-patches "python-online-judge-api-client-tests.patch"))
26210 ))
26211 (build-system pyproject-build-system)
26212 (arguments
26213 (list
26214 #:test-flags
26215 #~(list "--ignore-glob=tests/get_contest_*.py"
26216 "--ignore-glob=tests/get_problem_*.py")
26217 #:phases
26218 #~(modify-phases %standard-phases
26219 (add-before 'check 'configure-tests
26220 (lambda* (#:key inputs outputs #:allow-other-keys)
26221 (delete-file-recursively
26222 (string-append (site-packages inputs outputs)
26223 "/tests"))
26224 (call-with-output-file "pytest.ini"
26225 (lambda (port)
26226 (format port "\
26227[pytest]
26228python_files = tests/*.py"))))))))
26229 (native-inputs (list python-pytest python-setuptools))
26230 (propagated-inputs
26231 (list python-appdirs
26232 python-beautifulsoup4
26233 python-colorlog
26234 python-lxml
26235 python-requests
26236 python-toml
26237 python-jsonschema))
26238 (home-page "https://github.com/online-judge-tools/api-client")
26239 (synopsis "API client for various online judges")
26240 (description
26241 "This is an API client for various online judges, used as the backend
26242library of @code{oj} command. You can use the Python library
26243(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
26244command) which talks JSON compatible with jmerle/competitive-companion.")
26245 (license license:expat)))
26246
26247(define-public online-judge-tools
26248 (package
26249 (name "online-judge-tools")
26250 (version "11.5.1")
26251 ;; Source distributions are not uploaded to PyPI.
26252 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
26253 (source
26254 (origin
26255 (method git-fetch)
26256 (uri (git-reference
26257 (url "https://github.com/online-judge-tools/oj")
26258 (commit (string-append "v" version))))
26259 (file-name (git-file-name name version))
26260 (sha256
26261 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
26262 (patches (search-patches "online-judge-tools.patch"))))
26263 (build-system pyproject-build-system)
26264 (arguments
26265 (list
26266 #:test-flags
26267 ;; These tests require network connections
26268 #~(list "--ignore=tests/command_version.py")))
26269 (native-inputs (list python-pytest python-setuptools))
26270 (inputs (list time))
26271 (propagated-inputs (list python-online-judge-api-client python-colorama
26272 python-requests))
26273 (home-page "https://github.com/online-judge-tools/oj")
26274 (synopsis "Command to help solving problems on various online judges")
26275 (description
26276 "@command{oj} is a command line tool to help solving problems on
26277various online judges. This command automates downloading sample
26278cases, generating additional test cases, testing for your code, and
26279submitting it.")
26280 (license license:expat)))
26281
26282(define-public python-mpv-jsonipc
26283 (package
26284 (name "python-mpv-jsonipc")
26285 (version "1.2.0")
26286 (source
26287 (origin
26288 (method url-fetch)
26289 (uri (pypi-uri "python-mpv-jsonipc" version))
26290 (sha256
26291 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
26292 (build-system pyproject-build-system)
26293 (arguments (list #:tests? #f)) ;No test suite.
26294 (native-inputs (list python-setuptools python-wheel))
26295 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
26296 (synopsis "Python API to control MPV using JSON IPC")
26297 (description "Python MPV JSONIPC implements an interface similar to
26298python-mpv, but it uses the JSON IPC protocol instead of the C API.")
26299 (license license:asl2.0)))
26300
26301(define-public python-jellyfin-apiclient
26302 (package
26303 (name "python-jellyfin-apiclient")
26304 (version "1.11.0")
26305 (source
26306 (origin
26307 (method git-fetch)
26308 (uri
26309 (git-reference
26310 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
26311 (commit (string-append "v" version))))
26312 (sha256
26313 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
26314 (build-system pyproject-build-system)
26315 (native-inputs (list python-setuptools python-pytest python-wheel))
26316 (propagated-inputs (list python-certifi python-requests python-urllib3
26317 python-websocket-client))
26318 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
26319 (synopsis "Python API client for Jellyfin")
26320 (description "The Jellyfin ApiClient Python package makes it possible
26321to use the Jellyfin API from Python. It was extracted from the Jellyfin
26322Kodi plugin.")
26323 (license license:gpl3+)))
26324
26325(define-public python-parso
26326 (package
26327 (name "python-parso")
26328 (version "0.8.5")
26329 (source
26330 (origin
26331 (method url-fetch)
26332 (uri (pypi-uri "parso" version))
26333 (sha256
26334 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
26335 (build-system pyproject-build-system)
26336 (native-inputs
26337 (list python-pytest
26338 python-setuptools))
26339 (home-page "https://github.com/davidhalter/parso")
26340 (synopsis "Python Parser")
26341 (description "Parso is a Python parser that supports error recovery and
26342round-trip parsing for different Python versions (in multiple Python versions).
26343Parso is also able to list multiple syntax errors in your Python file.")
26344 (license license:expat)))
26345
26346(define-public python-async-generator
26347 (package
26348 (name "python-async-generator")
26349 (version "1.10")
26350 (source
26351 (origin
26352 (method url-fetch)
26353 (uri (pypi-uri "async_generator" version))
26354 (sha256
26355 (base32
26356 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
26357 (build-system pyproject-build-system)
26358 (native-inputs
26359 (list python-pytest python-setuptools))
26360 (home-page "https://github.com/python-trio/async_generator")
26361 (synopsis "Async generators and context managers for Python 3.5+")
26362 (description "@code{async_generator} back-ports Python 3.6's native async
26363generators and Python 3.7's context managers into Python 3.5.")
26364 ;; Dual licensed.
26365 (license (list license:expat license:asl2.0))))
26366
26367(define-public python-async-timeout
26368 (package
26369 (name "python-async-timeout")
26370 (version "5.0.1")
26371 (source
26372 (origin
26373 (method url-fetch)
26374 (uri (pypi-uri "async_timeout" version))
26375 (sha256
26376 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
26377 (build-system pyproject-build-system)
26378 (arguments
26379 (list
26380 #:phases
26381 #~(modify-phases %standard-phases
26382 (add-after 'unpack 'fix-pytest-config
26383 (lambda _
26384 ;; Drop test coverage requirements
26385 (substitute* "setup.cfg"
26386 ((".*--cov.*") "")))))))
26387 (native-inputs
26388 (list python-pytest
26389 python-pytest-asyncio
26390 python-setuptools
26391 python-wheel))
26392 (home-page "https://github.com/aio-libs/async-timeout")
26393 (synopsis "Timeout context manager for asyncio programs")
26394 (description
26395 "@code{async-timeout} provides a timeout timeout context manager
26396compatible with @code{asyncio}.")
26397 (license license:asl2.0)))
26398
26399(define-public python-async-timeout-4
26400 (package
26401 (inherit python-async-timeout)
26402 (name "python-async-timeout")
26403 (version "4.0.3")
26404 (source
26405 (origin
26406 (method url-fetch)
26407 (uri (pypi-uri "async-timeout" version))
26408 (sha256
26409 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
26410
26411(define-public python-glob2
26412 (package
26413 (name "python-glob2")
26414 (version "0.7")
26415 (source
26416 (origin
26417 (method git-fetch)
26418 (uri (git-reference
26419 (url "https://github.com/miracle2k/python-glob2")
26420 (commit (string-append "v" version))))
26421 (file-name (git-file-name name version))
26422 (sha256
26423 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
26424 (build-system pyproject-build-system)
26425 (arguments
26426 (list
26427 #:phases
26428 #~(modify-phases %standard-phases
26429 (add-after 'unpack 'patch-tests-for-pytest8
26430 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
26431 (lambda _
26432 (substitute* "test.py"
26433 (("setup\\(") "setup_method(")
26434 (("teardown\\(") "teardown_method("))
26435 (rename-file "test.py" "glob2_test.py"))))))
26436 (native-inputs (list python-pytest python-setuptools))
26437 (home-page "https://github.com/miracle2k/python-glob2/")
26438 (synopsis "Extended Version of the python buildin glob module")
26439 (description "This is an extended version of the Python
26440@url{http://docs.python.org/library/glob.html, built-in glob module} which
26441adds:
26442
26443@itemize
26444@item The ability to capture the text matched by glob patterns, and return
26445those matches alongside the file names.
26446@item A recursive @code{**} globbing syntax, akin for example to the
26447@code{globstar} option of Bash.
26448@item The ability to replace the file system functions used, in order to glob
26449on virtual file systems.
26450@item Compatible with Python 2 and Python 3 (tested with 3.3).
26451@end itemize
26452
26453Glob2 currently based on the glob code from Python 3.3.1.")
26454 (license license:bsd-2)))
26455
26456(define-public python-gipc
26457 (package
26458 (name "python-gipc")
26459 (version "1.8.0")
26460 (source
26461 (origin
26462 (method git-fetch)
26463 (uri (git-reference
26464 (url "https://github.com/jgehrcke/gipc")
26465 (commit version)))
26466 (file-name (git-file-name name version))
26467 (sha256
26468 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
26469 (build-system pyproject-build-system)
26470 (arguments
26471 (list
26472 #:phases
26473 #~(modify-phases %standard-phases
26474 (add-after 'unpack 'adjust-for-pytest-8
26475 (lambda _
26476 (substitute* "test/test_gipc.py"
26477 (("def setup") "def setup_method")
26478 (("def teardown") "def teardown_method")))))))
26479 (native-inputs
26480 (list python-pytest
26481 python-setuptools))
26482 (propagated-inputs
26483 (list python-gevent))
26484 (home-page "https://gehrcke.de/gipc/")
26485 (synopsis "Child process management in the context of gevent")
26486 (description
26487 "Usage of Python's multiprocessing package in a gevent-powered
26488application may raise problems. With @code{gipc}, process-based child
26489processes can safely be created anywhere within a gevent-powered
26490application.")
26491 (license license:expat)))
26492
26493(define-public python-beautifultable
26494 (package
26495 (name "python-beautifultable")
26496 (version "1.1.0")
26497 (source
26498 (origin
26499 (method git-fetch)
26500 (uri (git-reference
26501 (url "https://github.com/pri22296/beautifultable")
26502 (commit (string-append "v" version))))
26503 (file-name (git-file-name name version))
26504 (sha256
26505 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
26506 (build-system pyproject-build-system)
26507 (arguments (list #:test-backend #~'unittest))
26508 (native-inputs (list python-pandas python-setuptools))
26509 (propagated-inputs (list python-wcwidth))
26510 (home-page "https://github.com/pri22296/beautifultable")
26511 (synopsis "Print ASCII tables for terminals")
26512 (description
26513 "@code{python-beautifultable} provides a class for easily printing
26514tabular data in a visually appealing ASCII format to a terminal.
26515
26516Features include, but are not limited to:
26517@itemize
26518@item Full customization of the look and feel of the table
26519@item Row and column accessors.
26520@item Full support for colors using ANSI sequences or any library.
26521@item Plenty of predefined styles and option to create custom ones.
26522@item Support for Unicode characters.
26523@item Supports streaming table when data is slow to retrieve.
26524@end itemize")
26525 (license license:expat)))
26526
26527(define-public python-globber
26528 (package
26529 (name "python-globber")
26530 (version "0.2.1")
26531 (source
26532 (origin
26533 (method git-fetch)
26534 (uri (git-reference
26535 (url "https://github.com/asharov/globber")
26536 (commit version)))
26537 (file-name (git-file-name name version))
26538 (sha256
26539 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
26540 (build-system pyproject-build-system)
26541 (native-inputs (list python-pytest python-setuptools))
26542 (home-page "https://github.com/asharov/globber")
26543 (synopsis "Library for string matching with glob patterns")
26544 (description
26545 "Globber is a Python library for matching file names against glob patterns.
26546In contrast to other glob-matching libraries, it matches arbitrary strings and
26547doesn't require the matched names to be existing files. In addition, it
26548supports the globstar @code{**} operator to match an arbitrary number of
26549path components.")
26550 (license license:asl2.0)))
26551
26552;; XXX: Not maintained since 2021.
26553(define-public python-git-hammer
26554 (package
26555 (name "python-git-hammer")
26556 (version "0.3.2")
26557 (source
26558 (origin
26559 (method git-fetch)
26560 (uri (git-reference
26561 (url "https://github.com/asharov/git-hammer")
26562 (commit version)))
26563 (file-name (git-file-name name version))
26564 (sha256
26565 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
26566 (build-system pyproject-build-system)
26567 (arguments
26568 (list
26569 #:phases
26570 #~(modify-phases %standard-phases
26571 (add-after 'unpack 'relax-requirements
26572 (lambda _
26573 (substitute* "setup.py"
26574 (("matplotlib <3.1") "matplotlib")))))))
26575 (native-inputs
26576 (list python-pytest
26577 python-setuptools))
26578 (propagated-inputs
26579 (list python-beautifultable
26580 python-dateutil
26581 python-gitpython
26582 python-globber
26583 python-matplotlib
26584 python-sqlalchemy
26585 python-sqlalchemy-utils))
26586 (home-page "https://github.com/asharov/git-hammer")
26587 (synopsis "Provide statistics for git repositories")
26588 (description
26589 "Git Hammer is a statistics tool for projects in git repositories. Its major
26590feature is tracking the number of lines authored by each person for every
26591commit, but it also includes some other useful statistics.")
26592 (license license:asl2.0)))
26593
26594(define-public python-gitignore-parser
26595 (package
26596 (name "python-gitignore-parser")
26597 (version "0.1.13")
26598 (source
26599 (origin
26600 (method git-fetch)
26601 (uri (git-reference
26602 (url "https://github.com/mherrmann/gitignore_parser")
26603 (commit (string-append "v" version))))
26604 (file-name (git-file-name name version))
26605 (sha256
26606 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
26607 (build-system pyproject-build-system)
26608 (arguments (list #:test-backend #~'unittest))
26609 (native-inputs (list python-setuptools))
26610 (home-page "https://github.com/mherrmann/gitignore_parser")
26611 (synopsis "Spec-compliant gitignore parser for Python")
26612 (description
26613 "This package provides a spec-compliant gitignore parser for Python.")
26614 (license license:expat)))
26615
26616(define-public python-fusepy
26617 (package
26618 (name "python-fusepy")
26619 (version "2.0.4")
26620 (source
26621 (origin
26622 (method git-fetch)
26623 (uri (git-reference
26624 (url "https://github.com/fusepy/fusepy")
26625 (commit (string-append "v" version))))
26626 (file-name (git-file-name name version))
26627 (sha256
26628 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
26629 (build-system pyproject-build-system)
26630 (arguments
26631 (list
26632 #:tests? #f ; No formalized tests.
26633 #:phases
26634 #~(modify-phases %standard-phases
26635 (add-before 'build 'set-library-file-name
26636 (lambda* (#:key inputs #:allow-other-keys)
26637 (substitute* "fuse.py"
26638 (("find_library\\('fuse'\\)")
26639 (format #f "~s"
26640 (search-input-file inputs "lib/libfuse.so")))))))))
26641 (native-inputs (list python-setuptools))
26642 (propagated-inputs (list fuse-2))
26643 (home-page "https://github.com/fusepy/fusepy")
26644 (synopsis "Simple ctypes bindings for FUSE")
26645 (description
26646 "Python module that provides a simple interface to FUSE and MacFUSE. The
26647binding is created using the standard @code{ctypes} library.")
26648 (license license:isc)))
26649
26650(define-public pybind11-2
26651 (package
26652 (name "pybind11")
26653 (version "2.13.6")
26654 (source (origin
26655 (method git-fetch)
26656 (uri (git-reference
26657 (url "https://github.com/pybind/pybind11")
26658 (commit (string-append "v" version))))
26659 (sha256
26660 (base32
26661 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
26662 (file-name (git-file-name name version))))
26663 (build-system cmake-build-system)
26664 (arguments
26665 (list
26666 #:configure-flags
26667 #~(list (string-append "-DCATCH_INCLUDE_DIR="
26668 (assoc-ref %build-inputs "catch2")
26669 "/include/catch"))
26670 #:modules '((guix build cmake-build-system)
26671 ((guix build gnu-build-system) #:prefix gnu:)
26672 (guix build utils))
26673 #:phases
26674 #~(modify-phases %standard-phases
26675 (replace 'check
26676 (lambda args
26677 (apply (assoc-ref gnu:%standard-phases 'check) args)))
26678 (add-after 'install 'install-python
26679 (lambda _
26680 (with-directory-excursion "../source"
26681 (setenv "PYBIND11_USE_CMAKE" "yes")
26682 (invoke "python" "setup.py" "install"
26683 "--single-version-externally-managed"
26684 "--root=/"
26685 (string-append "--prefix=" #$output))))))))
26686 (native-inputs
26687 (list catch2-1
26688 eigen
26689 python-pytest
26690 python-setuptools
26691 python-wrapper))
26692 (home-page "https://github.com/pybind/pybind11/")
26693 (synopsis "Seamless operability between C++11 and Python")
26694 (description
26695 "@code{pybind11} is a lightweight header-only library that exposes C++
26696types in Python and vice versa, mainly to create Python bindings of existing
26697C++ code. Its goals and syntax are similar to the @code{Boost.Python}
26698library: to minimize boilerplate code in traditional extension modules by
26699inferring type information using compile-time introspection.")
26700 (license license:bsd-3)))
26701
26702(define-public pybind11
26703 (package
26704 (name "pybind11")
26705 (version "3.0.2")
26706 (source (origin
26707 (method git-fetch)
26708 (uri (git-reference
26709 (url "https://github.com/pybind/pybind11")
26710 (commit (string-append "v" version))))
26711 (sha256
26712 (base32
26713 "1ad4fnn4p2m3sradxxd9wfnll3pa44aw081b6ssh3pq95xqpwksg"))
26714 (file-name (git-file-name name version))))
26715 (build-system cmake-build-system)
26716 (arguments
26717 (list
26718 #:configure-flags
26719 #~(list (string-append "-DCATCH_INCLUDE_DIR="
26720 (assoc-ref %build-inputs "catch2")
26721 "/include/catch"))
26722 #:modules '((guix build cmake-build-system)
26723 ((guix build gnu-build-system) #:prefix gnu:)
26724 (guix build utils))
26725 #:phases
26726 #~(modify-phases %standard-phases
26727 (replace 'check
26728 (lambda args
26729 (apply (assoc-ref gnu:%standard-phases 'check) args)))
26730 (add-after 'install 'build-python-library
26731 (lambda _
26732 (with-directory-excursion "../source"
26733 (setenv "PYBIND11_USE_CMAKE" "yes")
26734 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
26735 "--prefix" #$output ".")))))))
26736 (inputs (list boost))
26737 (native-inputs
26738 (list catch2-1
26739 eigen
26740 python-pytest
26741 python-setuptools
26742 python-wrapper
26743 python-scikit-build-core))
26744 (home-page "https://github.com/pybind/pybind11/")
26745 (synopsis "Seamless operability between C++11 and Python")
26746 (description
26747 "@code{pybind11} is a lightweight header-only library that exposes C++
26748types in Python and vice versa, mainly to create Python bindings of existing
26749C++ code. Its goals and syntax are similar to the @code{Boost.Python}
26750library: to minimize boilerplate code in traditional extension modules by
26751inferring type information using compile-time introspection.")
26752 (license license:bsd-3)))
26753
26754(define-public python-pooch
26755 (package
26756 (name "python-pooch")
26757 (version "1.8.1")
26758 (source
26759 (origin
26760 (method url-fetch)
26761 (uri (pypi-uri "pooch" version))
26762 (sha256
26763 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
26764 (build-system pyproject-build-system)
26765 (arguments
26766 (list
26767 #:test-flags
26768 '(list "-k"
26769 (string-append
26770 ;; We don't have the test archives
26771 "not test_decompress"
26772 " and not test_multiple_unpacking"
26773 " and not test_unpack_members_with_leading_dot"
26774 " and not test_unpacking"
26775 " and not test_unpacking_members_then_no_members"
26776 " and not test_unpacking_wrong_members_then_no_members"
26777 ;; These all require access to the internet
26778 " and not test_check_availability"
26779 " and not test_check_availability_invalid_downloader"
26780 " and not test_check_availability_on_ftp"
26781 " and not test_create_and_fetch"
26782 " and not test_downloader_arbitrary_progressbar"
26783 " and not test_fetch_with_downloader"
26784 " and not test_figshare_data_repository_versions"
26785 " and not test_load_registry_from_doi"
26786 " and not test_pooch_corrupted"
26787 " and not test_pooch_custom_url"
26788 " and not test_pooch_download"
26789 " and not test_pooch_download_retry"
26790 " and not test_pooch_download_retry_fails_eventually"
26791 " and not test_pooch_download_retry_off_by_default"
26792 " and not test_pooch_logging_level"
26793 " and not test_pooch_update"
26794 " and not test_retrieve"
26795 " and not test_retrieve_default_path"
26796 " and not test_retrieve_fname"
26797 " and not test_stream_download")
26798 "--ignore=pooch/tests/test_downloaders.py")))
26799 (native-inputs
26800 (list python-pytest
26801 python-setuptools-scm
26802 python-setuptools
26803 python-wheel))
26804 (propagated-inputs
26805 (list python-packaging python-platformdirs python-requests))
26806 (home-page "https://github.com/fatiando/pooch")
26807 (synopsis "Manage your Python library's sample data files")
26808 (description
26809 "Pooch manages your Python library's sample data files: it automatically
26810downloads and stores them in a local directory, with support for versioning
26811and corruption checks.")
26812 (license license:bsd-3)))
26813
26814(define-public python-fasteners
26815 (package
26816 (name "python-fasteners")
26817 (version "0.17.3")
26818 (source (origin
26819 ;; No tests in the pypi tarball
26820 (method git-fetch)
26821 (uri (git-reference
26822 (url "https://github.com/harlowja/fasteners")
26823 (commit version)))
26824 (file-name (git-file-name name version))
26825 (sha256
26826 (base32
26827 "0m0dxv8ljpkq99s3d1mib1zfb0ppx3h74h5yr8809zsrq2klfn0m"))))
26828 (build-system pyproject-build-system)
26829 (arguments
26830 `(#:phases (modify-phases %standard-phases
26831 (replace 'check
26832 (lambda* (#:key tests? #:allow-other-keys)
26833 (when tests?
26834 (invoke "pytest")))))))
26835 (native-inputs (list python-diskcache python-more-itertools
26836 python-setuptools python-pytest python-wheel))
26837 (home-page "https://github.com/harlowja/fasteners")
26838 (synopsis "Python package that provides useful locks")
26839 (description
26840 "This package provides a Python program that provides following locks:
26841
26842@itemize
26843@item Locking decorator
26844@item Reader-writer locks
26845@item Inter-process locks
26846@item Generic helpers
26847@end itemize\n")
26848 (license license:asl2.0)))
26849
26850(define-public python-requests-file
26851 (package
26852 (name "python-requests-file")
26853 (version "3.0.1")
26854 (source
26855 (origin
26856 (method git-fetch)
26857 (uri (git-reference
26858 (url "https://codeberg.org/dashea/requests-file")
26859 (commit version)))
26860 (file-name (git-file-name name version))
26861 (sha256
26862 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
26863 (build-system pyproject-build-system)
26864 (native-inputs (list python-pytest python-setuptools))
26865 (propagated-inputs (list python-requests))
26866 (home-page "https://codeberg.org/dashea/requests-file")
26867 (synopsis "File transport adapter for Requests")
26868 (description
26869 "Requests-File is a transport adapter for use with the Requests Python
26870library to allow local file system access via @code{file://} URLs.")
26871 (license license:asl2.0)))
26872
26873(define-public python-identify
26874 (package
26875 (name "python-identify")
26876 (version "2.6.14")
26877 (source
26878 (origin
26879 ;; There are no tests in the PyPI tarball.
26880 (method git-fetch)
26881 (uri (git-reference
26882 (url "https://github.com/chriskuehl/identify")
26883 (commit (string-append "v" version))))
26884 (file-name (git-file-name name version))
26885 (sha256
26886 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
26887 (build-system pyproject-build-system)
26888 (native-inputs
26889 (list python-pytest
26890 python-setuptools
26891 python-ukkonen))
26892 (home-page "https://github.com/chriskuehl/identify")
26893 (synopsis "File identification library for Python")
26894 (description
26895 "@code{identify} is a file identification library for Python. Given
26896a file (or some information about a file), return a set of standardized tags
26897identifying what the file is.")
26898 (license license:expat)))
26899
26900(define-public python-nodeenv
26901 (package
26902 (name "python-nodeenv")
26903 (version "1.8.0")
26904 (source
26905 (origin
26906 ;; There's no tarball in PyPI.
26907 (method git-fetch)
26908 (uri (git-reference
26909 (url "https://github.com/ekalinin/nodeenv")
26910 (commit version)))
26911 (file-name (git-file-name name version))
26912 (sha256
26913 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
26914 (build-system pyproject-build-system)
26915 (arguments
26916 (list #:test-flags
26917 #~(list "-k" (string-append
26918 "not test_smoke"
26919 " and not test_smoke_n_system_special_chars"))))
26920 (native-inputs
26921 (list python-mock
26922 python-pytest
26923 python-setuptools
26924 python-wheel))
26925 (home-page "https://ekalinin.github.io/nodeenv/")
26926 (synopsis "Create isolated node.js environments")
26927 (description
26928 "Nodeenv (node.js virtual environment) is a tool to create isolated
26929node.js environments. It creates an environment that has its own installation
26930directories, that doesn't share libraries with other node.js virtual
26931environments.")
26932 (license license:bsd-3)))
26933
26934(define-public python-pynamecheap
26935 (package
26936 (name "python-pynamecheap")
26937 (version "0.0.3")
26938 (source
26939 (origin
26940 (method url-fetch)
26941 (uri (pypi-uri "PyNamecheap" version))
26942 (sha256
26943 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
26944 (build-system pyproject-build-system)
26945 (arguments (list #:tests? #f)) ; No tests.
26946 (native-inputs (list python-setuptools))
26947 (propagated-inputs (list python-requests))
26948 (home-page "https://github.com/Bemmu/PyNamecheap")
26949 (synopsis "Namecheap API client in Python")
26950 (description
26951 "PyNamecheap is a Namecheap API client in Python.")
26952 (license license:expat)))
26953
26954(define-public python-pynput
26955 (package
26956 (name "python-pynput")
26957 (version "1.8.1")
26958 (source
26959 (origin
26960 (method git-fetch)
26961 (uri (git-reference
26962 (url "https://github.com/moses-palmer/pynput")
26963 (commit (string-append "v" version))))
26964 (file-name (git-file-name name version))
26965 (sha256
26966 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
26967 (build-system pyproject-build-system)
26968 (arguments
26969 (list
26970 #:test-backend #~'unittest
26971 #:phases
26972 #~(modify-phases %standard-phases
26973 (add-after 'unpack 'relax-requirements
26974 (lambda _
26975 (substitute* "setup.py"
26976 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
26977 "RUNTIME_PACKAGES"))))
26978 (add-before 'sanity-check 'start-xserver
26979 (lambda* (#:key inputs #:allow-other-keys)
26980 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
26981 (system (format #f "~a :1 -screen 0 640x480x24 &"
26982 Xvfb))
26983 (setenv "DISPLAY" ":1")))))))
26984 (propagated-inputs
26985 (list python-evdev python-xlib))
26986 (native-inputs
26987 (list python-setuptools xorg-server-for-tests))
26988 (home-page "https://github.com/moses-palmer/pynput")
26989 (synopsis "Send virtual input commands")
26990 (description
26991 "This package provides tools to monitor and control user input devices in
26992Python.")
26993 (license license:lgpl3)))
26994
26995(define-public python-pynixutil
26996 (package
26997 (name "python-pynixutil")
26998 (version "0.5.0")
26999 (source
27000 (origin
27001 (method git-fetch)
27002 (uri (git-reference
27003 (url "https://github.com/nix-community/pynixutil")
27004 (commit version)))
27005 (file-name (git-file-name name version))
27006 (sha256
27007 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
27008 (build-system pyproject-build-system)
27009 (arguments
27010 (list
27011 #:test-flags
27012 ;; Tests require nix in the PATH.
27013 #~(list "--ignore=tests/test_drv.py")
27014 #:phases
27015 #~(modify-phases %standard-phases
27016 (add-after 'unpack 'use-poetry-core
27017 (lambda _
27018 ;; Patch to use the core poetry API.
27019 (substitute* "pyproject.toml"
27020 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
27021 (native-inputs
27022 (list python-poetry-core
27023 python-pytest))
27024 (home-page "https://github.com/nix-community/pynixutil")
27025 (synopsis "Utility functions for working with data from Nix in Python")
27026 (description
27027 "@code{pynixutil} provides functions for base32 encoding/decoding and
27028derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
27029@code{drvparse()}.")
27030 (license license:expat)))
27031
27032(define-public python-dns-lexicon
27033 (package
27034 (name "python-dns-lexicon")
27035 (version "3.21.1")
27036 (source
27037 (origin
27038 (method git-fetch)
27039 (uri (git-reference
27040 (url "https://github.com/dns-lexicon/dns-lexicon")
27041 (commit (string-append "v" version))))
27042 (file-name (git-file-name name version))
27043 (sha256
27044 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
27045 (build-system pyproject-build-system)
27046 (arguments
27047 (list
27048 ;; Integration tests require network access.
27049 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
27050 #:phases
27051 #~(modify-phases %standard-phases
27052 (add-before 'check 'configure-tests
27053 (lambda _
27054 (setenv "HOME" (getcwd)))))))
27055 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
27056 (propagated-inputs
27057 (list python-beautifulsoup4
27058 python-cryptography
27059 python-dnspython
27060 python-pyotp
27061 python-pyyaml
27062 python-requests
27063 python-tldextract))
27064 (home-page "https://github.com/dns-lexicon/dns-lexicon")
27065 (synopsis "Manipulate DNS records on various DNS providers")
27066 (description
27067 "Lexicon provides a way to manipulate DNS records on multiple DNS
27068providers in a standardized way. It has a CLI but it can also be used as a
27069Python library. It was designed to be used in automation, specifically with
27070Let's Encrypt.")
27071 (license license:expat)))
27072
27073(define-public python-cfgv
27074 (package
27075 (name "python-cfgv")
27076 (version "3.4.0")
27077 (source
27078 (origin
27079 ;; There are no tests in the PyPI tarball.
27080 (method git-fetch)
27081 (uri (git-reference
27082 (url "https://github.com/asottile/cfgv")
27083 (commit (string-append "v" version))))
27084 (file-name (git-file-name name version))
27085 (sha256
27086 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
27087 (build-system pyproject-build-system)
27088 (native-inputs
27089 (list python-pytest python-setuptools python-wheel))
27090 (home-page "https://github.com/asottile/cfgv")
27091 (synopsis "Configuration validation library")
27092 (description
27093 "This library helps to validate configuration files and produce human
27094readable error messages.")
27095 (license license:expat)))
27096
27097(define-public python-commandlines
27098 (package
27099 (name "python-commandlines")
27100 (version "0.4.1")
27101 (source
27102 (origin
27103 (method git-fetch)
27104 (uri (git-reference
27105 (url "https://github.com/chrissimpkins/commandlines")
27106 (commit (string-append "v" version))))
27107 (file-name (git-file-name name version))
27108 (sha256
27109 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
27110 (build-system pyproject-build-system)
27111 (native-inputs (list python-pytest python-setuptools))
27112 (home-page "https://github.com/chrissimpkins/commandlines")
27113 (synopsis "Command line argument to object parsing library")
27114 (description
27115 "@code{Commandlines} is a Python library for command line application
27116development that supports command line argument parsing, command string
27117validation testing and application logic.")
27118 (license license:expat)))
27119
27120;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
27121;; python-numba. They have a very unflexible relationship.
27122(define-public python-numba
27123 (package
27124 (name "python-numba")
27125 (version "0.62.1")
27126 (source
27127 (origin
27128 (method url-fetch)
27129 (uri (pypi-uri "numba" version))
27130 (sha256
27131 (base32
27132 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
27133 (build-system pyproject-build-system)
27134 (arguments
27135 (list
27136 ;; tests: 10723 tests (skipped=708, expected failures=23)
27137 #:test-backend #~'custom
27138 #:test-flags
27139 ;; Check <buildscripts> directory for more build/tests examples.
27140 #~(list "-m" "numba.runtests"
27141 "--exclude-tags='long_running'"
27142 "--multiprocess" (number->string (min 8 (parallel-job-count)))
27143 "-b"
27144 "-v"
27145 "--"
27146 "numba.tests")
27147 #:phases
27148 #~(modify-phases %standard-phases
27149 (add-after 'unpack 'disable-failing-tests
27150 (lambda _
27151 ;; This expects to be able to run pip.
27152 (delete-file "numba/tests/test_sysinfo.py")
27153 ;; This fails nondeterministically, possibly depending on CPU.
27154 ;; https://github.com/numba/numba/issues/8282.
27155 (substitute* "numba/tests/test_function_type.py"
27156 (("def test_wrapper_address_protocol_libm")
27157 "def disabled_test_wrapper_address_protocol_libm"))
27158 (substitute* "numba/tests/test_caching.py"
27159 ;; RuntimeError: cannot cache function 'simple_usecase': no
27160 ;; locator available for file
27161 (("def test_non_creatable_pycache")
27162 "def __off_test_non_creatable_pycache")
27163 (("def test_non_writable_pycache")
27164 "def __off_test_non_writable_pycache")
27165 ;; AssertionError: None is not an instance of <class
27166 ;; 'numba.core.caching.UserWideCacheLocator'>
27167 (("def test_frozen")
27168 "def __off_test_frozen"))))
27169 (add-before 'build 'disable-proprietary-features
27170 (lambda _
27171 (setenv "NUMBA_DISABLE_HSA" "1")
27172 (setenv "NUMBA_DISABLE_CUDA" "1")))
27173 (add-before 'check 'pre-check
27174 (lambda _
27175 (setenv "HOME" "/tmp")
27176 ;; XXX: Something is wrong with the PYTHONPATH when running the
27177 ;; tests from the build directory, as it complains about not
27178 ;; being able to import certain modules.
27179 (delete-file-recursively "numba"))))))
27180 (native-inputs
27181 (list python-setuptools))
27182 (propagated-inputs
27183 (list python-llvmlite
27184 python-numpy))
27185 (home-page "https://numba.pydata.org")
27186 (synopsis "Compile Python code using LLVM")
27187 (description "Numba gives you the power to speed up your applications with
27188high performance functions written directly in Python. With a few
27189annotations, array-oriented and math-heavy Python code can be just-in-time
27190compiled to native machine instructions, similar in performance to C, C++ and
27191Fortran, without having to switch languages or Python interpreters.
27192
27193Numba works by generating optimized machine code using the LLVM compiler
27194infrastructure at import time, runtime, or statically (using the included pycc
27195tool).")
27196 (license license:bsd-3)))
27197
27198(define-public python-numcodecs
27199 (package
27200 (name "python-numcodecs")
27201 (version "0.13.1")
27202 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
27203 ;;(version "0.14.1")
27204 (source
27205 (origin
27206 (method url-fetch)
27207 (uri (pypi-uri "numcodecs" version))
27208 (sha256
27209 (base32
27210 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
27211 (modules '((guix build utils)))
27212 (snippet
27213 '(begin
27214 ;; Only add CFLAGS on architectures where they are supported
27215 (substitute* "setup.py"
27216 (("import sys")
27217 "import sys\nimport platform")
27218 (("os\\.name == 'posix'")
27219 (string-append "os.name + platform.machine() == 'posixx86_64' or"
27220 " os.name + platform.machine() == 'posixx86'")))
27221 (delete-file-recursively "c-blosc")))))
27222 (build-system pyproject-build-system)
27223 (arguments
27224 (list
27225 #:test-flags
27226 ;; zarr isn't available, because it dependes on this package.
27227 '(list "-k" "not test_zarr3_import")
27228 #:phases
27229 '(modify-phases %standard-phases
27230 (add-after 'unpack 'disable-avx2
27231 (lambda _
27232 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
27233 (add-after 'unpack 'unbundle
27234 (lambda _
27235 (substitute* "setup.py"
27236 (("sources=sources \\+ blosc_sources,")
27237 "sources=sources,")
27238 (("extra_compile_args=extra_compile_args")
27239 "extra_compile_args=list(base_compile_args)")
27240 (("'numcodecs.zstd',")
27241 "'numcodecs.zstd', libraries=['zstd'], ")
27242 (("'numcodecs.lz4',")
27243 "'numcodecs.lz4', libraries=['lz4'], ")
27244 (("'numcodecs.blosc',")
27245 "'numcodecs.blosc', libraries=['blosc'], "))))
27246 (add-before 'check 'build-extensions
27247 (lambda _
27248 ;; Cython extensions have to be built before running the tests.
27249 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
27250 (inputs
27251 (list c-blosc lz4 zlib
27252 `(,zstd "lib")))
27253 (propagated-inputs
27254 (list python-google-crc32c
27255 python-importlib-metadata
27256 python-msgpack
27257 python-numpy))
27258 (native-inputs
27259 (list python-cython
27260 python-py-cpuinfo
27261 python-pydata-sphinx-theme
27262 python-pytest
27263 python-pytest-cov
27264 python-setuptools
27265 python-setuptools-scm ;for correct version
27266 python-sphinx
27267 python-sphinx-issues
27268 python-wheel))
27269 (home-page "https://github.com/zarr-developers/numcodecs")
27270 (synopsis "Buffer compression and transformation codecs")
27271 (description
27272 "This Python package provides buffer compression and transformation
27273codecs for use in data storage and communication applications.")
27274 (license license:expat)))
27275
27276(define-public python-asciitree
27277 (package
27278 (name "python-asciitree")
27279 (version "0.3.3")
27280 (source
27281 (origin
27282 (method git-fetch)
27283 (uri (git-reference
27284 (url "https://github.com/mbr/asciitree")
27285 (commit version)))
27286 (file-name (git-file-name name version))
27287 (sha256
27288 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
27289 (build-system pyproject-build-system)
27290 (native-inputs (list python-pytest python-setuptools))
27291 (home-page "https://github.com/mbr/asciitree")
27292 (synopsis "Draws ASCII trees")
27293 (description "This package draws tree structures using characters.")
27294 (license license:expat)))
27295
27296(define-public python-dill
27297 (package
27298 (name "python-dill")
27299 (version "0.4.0")
27300 (source
27301 (origin
27302 (method url-fetch)
27303 (uri (pypi-uri "dill" version))
27304 (sha256
27305 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
27306 (build-system pyproject-build-system)
27307 (arguments
27308 (list
27309 #:phases #~(modify-phases %standard-phases
27310 (replace 'check
27311 (lambda* (#:key tests? #:allow-other-keys)
27312 (if tests?
27313 ;; Extracted from tox.ini
27314 (invoke "python" "dill/tests/__main__.py")
27315 (format #t "test suite not run~%")))))))
27316 (native-inputs
27317 (list python-setuptools python-wheel))
27318 (home-page "https://pypi.org/project/dill/")
27319 (synopsis "Serialize all of Python")
27320 (description "Dill extends Python's @code{pickle} module for serializing
27321and de-serializing Python objects to the majority of the built-in Python
27322types. Dill provides the user the same interface as the @code{pickle} module,
27323and also includes some additional features. In addition to pickling Python
27324objects, @code{dill} provides the ability to save the state of an interpreter
27325session in a single command. Hence, it would be feasible to save a
27326interpreter session, close the interpreter, ship the pickled file to another
27327computer, open a new interpreter, unpickle the session and thus continue from
27328the saved state of the original interpreter session.")
27329 (license license:bsd-3)))
27330
27331(define-public python-multiprocess
27332 (package
27333 (name "python-multiprocess")
27334 (version "0.70.18")
27335 (source
27336 (origin
27337 (method url-fetch)
27338 (uri (pypi-uri "multiprocess" version))
27339 (sha256
27340 (base32
27341 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
27342 (build-system pyproject-build-system)
27343 (arguments
27344 (list
27345 #:phases
27346 #~(modify-phases %standard-phases
27347 (add-after 'unpack 'disable-broken-tests
27348 (lambda* (#:key inputs #:allow-other-keys)
27349 ;; The "wait_result" and "shared_memory..." tests are broken as
27350 ;; there is no keyboard interrupt.
27351 ;;
27352 ;; The "preload_resources" test fails as it cannot find
27353 ;; mp_preload.py.
27354 (substitute*
27355 (string-append "py" (python-version
27356 (assoc-ref inputs "python"))
27357 "/multiprocess/tests/__init__.py")
27358 (("^(.*)def test_(\
27359wait_result|\
27360shared_memory_SharedMemoryServer_ignores_sigint|\
27361preload_resources\
27362)" line indent)
27363 (string-append indent
27364 "@unittest.skip(\"Disabled by Guix\")\n"
27365 line)))))
27366 (replace 'check
27367 (lambda* (#:key tests? #:allow-other-keys)
27368 (if tests?
27369 (invoke "python" "-m" "multiprocess.tests")
27370 (format #t "test suite not run~%")))))))
27371 (propagated-inputs
27372 (list python-dill))
27373 (native-inputs (list python-setuptools))
27374 (home-page "https://pypi.org/project/multiprocess/")
27375 (synopsis "Multiprocessing and multithreading in Python")
27376 (description
27377 "This package is a fork of the multiprocessing Python package, a package
27378which supports the spawning of processes using the API of the standard
27379library's @code{threading} module.")
27380 (license license:bsd-3)))
27381
27382(define-public python-multiprocessing-on-dill
27383 (package
27384 (name "python-multiprocessing-on-dill")
27385 (version "3.5.0a4")
27386 (source (origin
27387 (method url-fetch)
27388 (uri (pypi-uri "multiprocessing_on_dill" version))
27389 (sha256
27390 (base32
27391 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
27392 (build-system pyproject-build-system)
27393 (propagated-inputs (list python-dill))
27394 (native-inputs (list python-pytest python-setuptools python-wheel))
27395 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
27396 (synopsis "Multiprocessing using dill instead of pickle")
27397 (description
27398 "This package provides a friendly fork of multiprocessing which uses dill
27399instead of pickle.")
27400 (license license:psfl)))
27401
27402(define-public python-cytoolz
27403 (package
27404 (name "python-cytoolz")
27405 (version "1.0.1")
27406 (source
27407 (origin
27408 (method url-fetch)
27409 (uri (pypi-uri "cytoolz" version))
27410 (sha256
27411 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
27412 (modules '((guix build utils)))
27413 (snippet
27414 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
27415 (build-system pyproject-build-system)
27416 (arguments
27417 (list #:test-flags #~(list "--pyargs" "cytoolz")))
27418 (native-inputs
27419 (list python-cython
27420 python-pytest
27421 python-setuptools
27422 python-wheel))
27423 (propagated-inputs
27424 (list python-toolz))
27425 (home-page "https://github.com/pytoolz/cytoolz")
27426 (synopsis "High performance functional utilities")
27427 (description
27428 "The cytoolz package implements the same API as provided by toolz. The
27429main differences are that @code{cytoolz} is faster and cytoolz offers a C API
27430that is accessible to other projects developed in Cython.")
27431 (license license:bsd-3)))
27432
27433(define-public python-sortedcollections
27434 (package
27435 (name "python-sortedcollections")
27436 (version "2.1.0")
27437 (source
27438 (origin
27439 (method git-fetch)
27440 (uri (git-reference
27441 (url "https://github.com/grantjenks/python-sortedcollections")
27442 (commit (string-append "v" version))))
27443 (file-name (git-file-name name version))
27444 (sha256
27445 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
27446 (build-system pyproject-build-system)
27447 (native-inputs (list python-setuptools
27448 python-pytest
27449 python-pytest-cov
27450 python-wheel))
27451 (propagated-inputs (list python-sortedcontainers))
27452 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
27453 (synopsis "Python Sorted Collections")
27454 (description "Sorted Collections is a Python sorted collections library.")
27455 (license license:asl2.0)))
27456
27457(define-public python-sortedcontainers
27458 (package
27459 (name "python-sortedcontainers")
27460 (version "2.4.0")
27461 (source
27462 (origin
27463 (method git-fetch) ;no tests in PyPI archive
27464 (uri (git-reference
27465 (url "https://github.com/grantjenks/python-sortedcontainers")
27466 (commit (string-append "v" version))))
27467 (file-name (git-file-name name version))
27468 (sha256
27469 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
27470 (build-system pyproject-build-system)
27471 (arguments
27472 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
27473 (native-inputs
27474 (list python-pytest-bootstrap python-setuptools))
27475 (home-page "https://grantjenks.com/docs/sortedcontainers/")
27476 (synopsis "Sorted List, Sorted Dict, Sorted Set")
27477 (description
27478 "This package provides a sorted collections library, written in
27479pure-Python.")
27480 (license license:asl2.0)))
27481
27482(define-public python-cloudpickle
27483 (package
27484 (name "python-cloudpickle")
27485 (version "3.1.0")
27486 (source
27487 (origin
27488 ;; Archive on pypi does not include test infrastructure.
27489 (method git-fetch)
27490 (uri (git-reference
27491 (url "https://github.com/cloudpipe/cloudpickle")
27492 (commit (string-append "v" version))))
27493 (file-name (git-file-name name version))
27494 (sha256
27495 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
27496 (build-system pyproject-build-system)
27497 (native-inputs
27498 (list python-flit-core
27499 python-psutil
27500 python-pytest))
27501 (home-page "https://github.com/cloudpipe/cloudpickle")
27502 (synopsis "Extended pickling support for Python objects")
27503 (description
27504 "Cloudpickle makes it possible to serialize Python constructs not
27505supported by the default pickle module from the Python standard library. It
27506is especially useful for cluster computing where Python expressions are
27507shipped over the network to execute on remote hosts, possibly close to the
27508data.")
27509 (license license:bsd-3)))
27510
27511(define-public python-locket
27512 (package
27513 (name "python-locket")
27514 (version "1.0.0")
27515 (source
27516 (origin
27517 (method git-fetch)
27518 (uri (git-reference
27519 (url "https://github.com/mwilliamson/locket.py")
27520 (commit version)))
27521 (file-name (git-file-name name version))
27522 (sha256
27523 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
27524 (build-system pyproject-build-system)
27525 ;; XXX: Requires python-spur, which requires another version of
27526 ;; python-paramiko.
27527 (arguments (list #:tests? #f))
27528 (native-inputs (list python-setuptools))
27529 (home-page "https://github.com/mwilliamson/locket.py")
27530 (synopsis "File-based locks for Python")
27531 (description
27532 "Locket implements a lock that can be used by multiple processes provided
27533they use the same path.")
27534 (license license:bsd-2)))
27535
27536(define-public python-partd
27537 (package
27538 (name "python-partd")
27539 (version "1.4.2")
27540 (source
27541 (origin
27542 (method url-fetch)
27543 (uri (pypi-uri "partd" version))
27544 (sha256
27545 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
27546 (build-system pyproject-build-system)
27547 (native-inputs
27548 (list python-pytest
27549 python-setuptools
27550 python-versioneer))
27551 (propagated-inputs
27552 (list python-locket
27553 python-toolz
27554 ;; [complete]
27555 python-blosc
27556 python-numpy
27557 python-pandas
27558 python-pyzmq))
27559 (home-page "https://github.com/dask/partd/")
27560 (synopsis "Appendable key-value storage")
27561 (description
27562 "Partd stores key-value pairs. Values are raw bytes. We append on old
27563values. Partd excels at shuffling operations.")
27564 (license license:bsd-3)))
27565
27566(define-public python-fsspec
27567 (package
27568 (name "python-fsspec")
27569 (version "2026.1.0")
27570 (source
27571 (origin
27572 (method git-fetch)
27573 (uri (git-reference
27574 (url "https://github.com/fsspec/filesystem_spec")
27575 (commit version)))
27576 (file-name (git-file-name name version))
27577 (sha256
27578 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
27579 (build-system pyproject-build-system)
27580 (arguments
27581 (list
27582 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
27583 #:test-flags
27584 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
27585 "-k" (string-join
27586 ;; Test requirs nentwork access
27587 (list "not test_async_cat_file_ranges"
27588 "test_gist_public_all_files"
27589 "test_gist_public_missing_file"
27590 "test_gist_public_one_file"
27591 ;; Test hangs
27592 "test_processes")
27593 " and not "))))
27594 ;; The most of the inputs are optional, project does not force to include
27595 ;; any dependencies according to pyproject.toml.
27596 (propagated-inputs
27597 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
27598 (native-inputs
27599 (list nss-certs-for-test
27600 python-hatch-vcs
27601 python-hatchling
27602 python-numpy
27603 python-pytest
27604 python-pytest-asyncio
27605 python-pytest-mock
27606 python-pytest-rerunfailures))
27607 (home-page "https://github.com/fsspec/filesystem_spec")
27608 (synopsis "File-system specification")
27609 (description "The purpose of this package is to produce a template or
27610specification for a file-system interface, that specific implementations
27611should follow, so that applications making use of them can rely on a common
27612behavior and not have to worry about the specific internal implementation
27613decisions with any given backend.")
27614 (license license:bsd-3)))
27615
27616(define-public python-ilinkedlist
27617 (package
27618 (name "python-ilinkedlist")
27619 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
27620 (revision . "0")))
27621 (version (git-version "0.4.0"
27622 (assoc-ref properties 'revision)
27623 (assoc-ref properties 'commit)))
27624 (home-page "https://github.com/luther9/ilinkedlist-py")
27625 (source
27626 (origin
27627 (method git-fetch)
27628 (uri (git-reference
27629 (url home-page)
27630 (commit (assoc-ref properties 'commit))))
27631 (file-name (git-file-name name version))
27632 (sha256
27633 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
27634 (build-system pyproject-build-system)
27635 (native-inputs (list python-pytest python-setuptools))
27636 (synopsis "Immutable linked list library")
27637 (description
27638 "This is a implementation of immutable linked lists for Python. It
27639contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
27640Since a linked list is treated as immutable, it is hashable, and its length
27641can be retrieved in constant time. Some of the terminology is inspired by
27642LISP. It is possible to create an improper list by creating a @code{Pair}
27643with a non-list @code{cdr}.")
27644 (license license:gpl3+)))
27645
27646(define-public python-readlike
27647 (package
27648 (name "python-readlike")
27649 (version "0.1.3")
27650 (source
27651 (origin
27652 (method git-fetch)
27653 (uri (git-reference
27654 (url "https://github.com/jangler/readlike")
27655 (commit version)))
27656 (file-name (git-file-name name version))
27657 (sha256
27658 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
27659 (build-system pyproject-build-system)
27660 (native-inputs (list python-pytest python-setuptools))
27661 (home-page "https://github.com/jangler/readlike")
27662 (synopsis "GNU Readline-like line editing module")
27663 (description
27664 "This Python module provides line editing functions similar to the default
27665Emacs-style ones of GNU Readline. Unlike the Python standard library's
27666@code{readline} package, this one allows access to those capabilities in settings
27667outside of a standard command-line interface. It is especially well-suited to
27668interfacing with Urwid, due to a shared syntax for describing key inputs.
27669
27670Currently, all stateless Readline commands are implemented. Yanking and history
27671are not supported.")
27672 (license license:expat)))
27673
27674(define-public python-reparser
27675 (package
27676 (name "python-reparser")
27677 (version "1.4.3")
27678 (source
27679 (origin
27680 (method git-fetch)
27681 (uri (git-reference
27682 (url "https://github.com/xmikos/reparser")
27683 (commit (string-append "v" version))))
27684 (file-name (git-file-name name version))
27685 (sha256
27686 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
27687 (build-system pyproject-build-system)
27688 (arguments (list #:tests? #f)) ; No tests.
27689 (native-inputs (list python-setuptools))
27690 (home-page "https://github.com/xmikos/reparser")
27691 (synopsis "Lexer/parser for inline markup based on regular expressions")
27692 (description
27693 "This Python library provides a simple lexer/parser for inline markup based
27694on regular expressions.")
27695 (license license:expat)))
27696
27697(define-public python-retrying
27698 (package
27699 (name "python-retrying")
27700 (version "1.4.1")
27701 (source
27702 (origin
27703 (method git-fetch)
27704 (uri (git-reference
27705 (url "https://github.com/groodt/retrying")
27706 (commit (string-append "v" version))))
27707 (file-name (git-file-name name version))
27708 (sha256
27709 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
27710 (build-system pyproject-build-system)
27711 (native-inputs (list python-pytest python-setuptools))
27712 (home-page "https://github.com/groodt/retrying")
27713 (synopsis "Library for adding retry behavior")
27714 (description "Retrying is a general-purpose retrying library to simplify
27715the task of adding retry behavior to just about anything.
27716
27717Features:
27718
27719@itemize
27720@item Generic Decorator API.
27721@item Specify stop condition (i.e. limit by number of attempts).
27722@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
27723@item Customize retrying on Exceptions.
27724@item Customize retrying on expected returned result.
27725@end itemize")
27726 (license license:asl2.0)))
27727
27728(define-public python-precis-i18n
27729 (package
27730 (name "python-precis-i18n")
27731 (version "1.1.1")
27732 (source
27733 (origin
27734 (method url-fetch)
27735 (uri (pypi-uri "precis_i18n" version))
27736 (sha256
27737 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
27738 (build-system pyproject-build-system)
27739 (native-inputs
27740 (list python-pytest
27741 python-setuptools
27742 python-wheel))
27743 (home-page "https://github.com/byllyfish/precis_i18n")
27744 (synopsis "Implementation of the PRECIS framework")
27745 (description
27746 "This module implements the PRECIS Framework as described in RFC 8264,
27747RFC 8265 and RFC 8266.")
27748 (license license:expat)))
27749
27750(define-public python-absl-py
27751 (package
27752 (name "python-absl-py")
27753 (version "2.3.1")
27754 (source
27755 (origin
27756 (method url-fetch)
27757 (uri (pypi-uri "absl_py" version))
27758 (sha256
27759 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
27760 (build-system pyproject-build-system)
27761 (arguments
27762 (list #:tests? #f)) ;tests require bazel
27763 (native-inputs
27764 (list python-hatchling))
27765 (home-page "https://github.com/abseil/abseil-py")
27766 (synopsis "Abseil Python common libraries")
27767 (description
27768 "This package provides the Abseil Python Common Libraries, a collection
27769of Python libraries for building Python applications.")
27770 (license license:asl2.0)))
27771
27772(define-public python-astor
27773 (package
27774 (name "python-astor")
27775 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
27776 (revision . "0")))
27777 (version (git-version "0.8.1"
27778 (assoc-ref properties 'revision)
27779 (assoc-ref properties 'commit)))
27780 (source
27781 (origin
27782 (method git-fetch)
27783 (uri (git-reference
27784 (url "https://github.com/berkerpeksag/astor")
27785 (commit (assoc-ref properties 'commit))))
27786 (file-name (git-file-name name version))
27787 (sha256
27788 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
27789 (build-system pyproject-build-system)
27790 (arguments
27791 (list
27792 ;; FIXME: Unclear why this test fails.
27793 #:test-flags #~(list "--deselect=\
27794tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
27795 (native-inputs (list python-pytest python-setuptools))
27796 (home-page "https://github.com/berkerpeksag/astor")
27797 (synopsis "Read and write Python ASTs")
27798 (description
27799 "Astor is designed to allow easy manipulation of Python source via the
27800Abstract Syntax Tree.")
27801 (license license:bsd-3)))
27802
27803(define-public python-astunparse
27804 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
27805 ;; updated.
27806 (package
27807 (name "python-astunparse")
27808 (version "1.6.3")
27809 (source
27810 (origin
27811 (method url-fetch)
27812 (uri (pypi-uri "astunparse" version))
27813 (sha256
27814 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
27815 (build-system pyproject-build-system)
27816 (arguments '(#:tests? #f)) ; there are none
27817 (native-inputs
27818 (list python-setuptools))
27819 (propagated-inputs
27820 (list python-six))
27821 (home-page "https://github.com/simonpercivall/astunparse")
27822 (synopsis "AST unparser for Python")
27823 (description "This package provides an AST unparser for Python. It is a
27824factored out version of @code{unparse} found in the Python source
27825distribution.")
27826 (license license:bsd-3)))
27827
27828(define-public python-gast
27829 (package
27830 (name "python-gast")
27831 (version "0.6.0")
27832 (source
27833 (origin
27834 (method url-fetch)
27835 (uri (pypi-uri "gast" version))
27836 (sha256
27837 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
27838 (build-system pyproject-build-system)
27839 (native-inputs
27840 (list python-pytest python-setuptools python-wheel))
27841 (home-page "https://github.com/serge-sans-paille/gast/")
27842 (synopsis "Generic Python AST that abstracts the underlying Python version")
27843 (description
27844 "GAST provides a compatibility layer between the AST of various Python
27845versions, as produced by @code{ast.parse} from the standard @code{ast}
27846module.")
27847 (license license:bsd-3)))
27848
27849;; XXX: Not maintained since 2022, leaf package.
27850(define-public python-attr
27851 (package
27852 (name "python-attr")
27853 (version "0.3.2")
27854 (source
27855 (origin
27856 (method url-fetch)
27857 (uri (pypi-uri "attr" version))
27858 (sha256
27859 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
27860 (build-system pyproject-build-system)
27861 (arguments
27862 (list #:test-backend #~'custom
27863 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
27864 (native-inputs
27865 (list python-setuptools))
27866 (home-page "https://github.com/denis-ryzhkov/attr")
27867 (synopsis "Decorator for attributes of target function or class")
27868 (description "Simple decorator to set attributes of target function or
27869class in a @acronym{DRY, Don't Repeat Yourself} way.")
27870 (license license:expat)))
27871
27872(define-public python-construct
27873 ;; Fixes not in a release yet.
27874 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
27875 (revision "1"))
27876 (package
27877 (name "python-construct")
27878 (version (git-version "2.10.70" revision commit))
27879 (source
27880 (origin
27881 (method git-fetch)
27882 (uri (git-reference
27883 (url "https://github.com/construct/construct")
27884 (commit commit)))
27885 (file-name (git-file-name name version))
27886 (sha256
27887 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
27888 (build-system pyproject-build-system)
27889 (arguments
27890 (list
27891 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
27892 (native-inputs
27893 (list python-pytest python-setuptools))
27894 (propagated-inputs
27895 (list python-arrow
27896 python-cloudpickle
27897 python-cryptography
27898 python-lz4
27899 python-numpy
27900 python-ruamel.yaml))
27901 (home-page "https://construct.readthedocs.io")
27902 (synopsis "Declarative and symmetrical parser and builder for binary data")
27903 (description
27904 "This package provides both simple, atomic constructs (such as
27905integers of various sizes), as well as composite ones which allow you
27906form hierarchical and sequential structures of increasing complexity.
27907It features bit and byte granularity, easy debugging and testing, an
27908easy-to-extend subclass system, and lots of primitive constructs to
27909make your work easier.")
27910 (license license:expat))))
27911
27912(define-public python-outcome
27913 (package
27914 (name "python-outcome")
27915 (version "1.3.0.post0")
27916 (source
27917 (origin
27918 (method url-fetch)
27919 (uri (pypi-uri "outcome" version))
27920 (sha256
27921 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
27922 (build-system pyproject-build-system)
27923 (native-inputs
27924 (list python-pytest
27925 python-pytest-asyncio
27926 python-setuptools))
27927 (propagated-inputs
27928 (list python-attrs))
27929 (home-page "https://github.com/python-trio/outcome")
27930 (synopsis "Capture the outcome of Python function calls")
27931 (description
27932 "Capture the outcome of Python function calls. Extracted from the Trio
27933project.")
27934 ;; Either license applies.
27935 (license (list license:expat license:asl2.0))))
27936
27937(define-public python-humanize
27938 (package
27939 (name "python-humanize")
27940 (version "4.14.0")
27941 (source
27942 (origin
27943 (method url-fetch)
27944 (uri (pypi-uri "humanize" version))
27945 (sha256
27946 (base32
27947 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
27948 (build-system pyproject-build-system)
27949 (native-inputs
27950 (list python-freezegun
27951 python-hatch-vcs
27952 python-hatchling
27953 python-pytest))
27954 (home-page "https://github.com/jmoiron/humanize")
27955 (synopsis "Print numerical information in a human-readable form")
27956 (description "This package provides a Python module that displays numbers
27957and dates in \"human readable\" forms. For example, it would display
27958\"12345591313\" as \"12.3 billion\".")
27959 (license license:expat)))
27960
27961(define-public python-annoy
27962 (package
27963 (name "python-annoy")
27964 (version "1.17.3")
27965 (source
27966 (origin
27967 (method git-fetch)
27968 (uri (git-reference
27969 (url "https://github.com/spotify/annoy")
27970 (commit (string-append "v" version))))
27971 (file-name (git-file-name name version))
27972 (sha256
27973 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
27974 (build-system pyproject-build-system)
27975 (arguments
27976 (list
27977 #:test-flags
27978 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
27979 ;; name resolution>
27980 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
27981 "--deselect=test/accuracy_test.py::test_nytimes_16"
27982 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
27983 (native-inputs
27984 (list python-h5py
27985 python-numpy
27986 python-pytest
27987 python-setuptools))
27988 (home-page "https://github.com/spotify/annoy/")
27989 (synopsis "Approximate nearest neighbors library")
27990 (description
27991 "Annoy is a C++ library with Python bindings to search for points in
27992space that are close to a given query point. It also creates large read-only
27993file-based data structures that are @code{mmap}ped into memory so that many
27994processes may share the same data.")
27995 (license license:asl2.0)))
27996
27997(define-public python-croniter
27998 (package
27999 (name "python-croniter")
28000 (version "5.0.1")
28001 (source
28002 (origin
28003 (method git-fetch)
28004 (uri (git-reference
28005 (url "https://github.com/kiorky/croniter")
28006 (commit version)))
28007 (file-name (git-file-name name version))
28008 (sha256
28009 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
28010 (build-system pyproject-build-system)
28011 (native-inputs (list python-pytest python-setuptools))
28012 (propagated-inputs (list python-dateutil python-pytz))
28013 (home-page "https://github.com/kiorky/croniter")
28014 (synopsis "Iterate datetime objects with cron-like syntax")
28015 (description
28016 "@code{croniter} provides iteration for datetime object with cron-like
28017format.")
28018 (license license:expat)))
28019
28020(define-public python-crontab
28021 (package
28022 (name "python-crontab")
28023 (version "3.3.0")
28024 (source
28025 (origin
28026 (method url-fetch)
28027 (uri (pypi-uri "python_crontab" version))
28028 (sha256
28029 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
28030 (build-system pyproject-build-system)
28031 (arguments
28032 (list #:test-flags
28033 ;; This test is made for Windows.
28034 #~(list "-k" "not test_07_non_posix_shell")
28035 #:phases
28036 #~(modify-phases %standard-phases
28037 (add-after 'unpack 'defaults-to-mcron
28038 (lambda* (#:key inputs #:allow-other-keys)
28039 (substitute* "crontab.py"
28040 (("/usr/bin/crontab")
28041 (search-input-file inputs "bin/crontab"))))))))
28042 (inputs
28043 (list mcron python-dateutil))
28044 (native-inputs
28045 (list python-pytest python-setuptools))
28046 (home-page "https://gitlab.com/doctormo/python-crontab/")
28047 (synopsis "Module for reading and writing crontab files")
28048 (description "This Python module can read, write crontab files, and
28049access the system cron automatically and simply using a direct API.")
28050 (license license:lgpl3+)))
28051
28052(define-public python-apscheduler
28053 (package
28054 (name "python-apscheduler")
28055 (version "3.11.2")
28056 (source (origin
28057 (method url-fetch)
28058 (uri (pypi-uri "apscheduler" version))
28059 (sha256
28060 (base32
28061 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
28062 (build-system pyproject-build-system)
28063 (arguments
28064 (list
28065 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
28066 #:test-flags
28067 ;; XXX: Some tests hang or fail with verity of errors:
28068 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
28069 #~(list #$@(map (lambda (test) (string-append "--deselect="
28070 "tests/test_executors.py::"
28071 test))
28072 (list "test_broken_pool"
28073 "test_max_instances[processpool-pytz]"
28074 "test_max_instances[processpool-zoneinfo]"
28075 "test_run_coroutine_job_tornado"
28076 "test_run_job_error[processpool-pytz]"
28077 "test_run_job_error[processpool-zoneinfo]"
28078 "test_submit_job[processpool-pytz-error]"
28079 "test_submit_job[processpool-pytz-executed]"
28080 "test_submit_job[processpool-pytz-missed]"
28081 "test_submit_job[processpool-zoneinfo-error]"
28082 "test_submit_job[processpool-zoneinfo-executed]"
28083 "test_submit_job[processpool-zoneinfo-missed]")))))
28084 (native-inputs
28085 (list python-anyio
28086 python-gevent
28087 python-pyside-6
28088 python-pytest
28089 python-pytest-asyncio
28090 python-pytz
28091 python-setuptools
28092 python-setuptools-scm
28093 python-sqlalchemy
28094 python-tornado
28095 python-twisted))
28096 (propagated-inputs
28097 (list python-tzlocal))
28098 (home-page "https://github.com/agronholm/apscheduler")
28099 (synopsis "Task scheduling library for Python")
28100 (description "Advanced Python Scheduler (APScheduler) is a Python library
28101that lets you schedule your Python code to be executed later, either just once
28102or periodically.
28103
28104You can add new jobs or remove old ones on the fly as you please. If you store
28105your jobs in a database, they will also survive scheduler restarts and maintain
28106their state. When the scheduler is restarted, it will then run all the jobs it
28107should have run while it was offline.")
28108 (license license:expat)))
28109
28110(define-public python-ifaddr
28111 (package
28112 (name "python-ifaddr")
28113 (version "0.2.0")
28114 (source
28115 (origin
28116 (method url-fetch)
28117 (uri (pypi-uri "ifaddr" version))
28118 (sha256
28119 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
28120 (snippet #~(delete-file "ifaddr/_win32.py"))))
28121 (build-system pyproject-build-system)
28122 (native-inputs
28123 (list python-pytest python-setuptools python-wheel))
28124 (home-page "https://github.com/pydron/ifaddr")
28125 (synopsis "Network interface and IP address enumeration library")
28126 (description
28127 "This package provides a network interface and IP address enumeration
28128library in Python.")
28129 (license license:expat)))
28130
28131(define-public python-berkeleydb
28132 (package
28133 (name "python-berkeleydb")
28134 (version "18.1.15")
28135 (source
28136 (origin
28137 (method url-fetch)
28138 (uri (pypi-uri "berkeleydb" version))
28139 (sha256
28140 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
28141 (build-system pyproject-build-system)
28142 (arguments
28143 (list
28144 #:test-backend #~'custom
28145 #:test-flags #~(list "test.py" "-v")
28146 #:phases
28147 #~(modify-phases %standard-phases
28148 (add-after 'unpack 'configure-locations
28149 (lambda* (#:key inputs #:allow-other-keys)
28150 (setenv "BERKELEYDB_DIR"
28151 (assoc-ref inputs "bdb"))
28152 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
28153 "1")))
28154 (add-after 'unpack 'remove-legacy
28155 (lambda _
28156 (substitute* "pyproject.toml"
28157 ((":__legacy__") "")))))))
28158 (native-inputs (list python-setuptools))
28159 (inputs (list bdb))
28160 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
28161 (synopsis "Python bindings for Oracle Berkeley DB")
28162 (description
28163 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
28164C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
28165Transaction objects, and each of these is exposed as a Python type in the
28166bsddb3.db module. The database objects can use various access methods: btree,
28167hash, recno, and queue. Complete support of Berkeley DB distributed
28168transactions. Complete support for Berkeley DB Replication Manager.
28169Complete support for Berkeley DB Base Replication. Support for RPC.")
28170 (license license:bsd-3)))
28171
28172;; Last version before rename to python-berkeleydb.
28173(define-public python-bsddb3
28174 (package
28175 (inherit python-berkeleydb)
28176 (name "python-bsddb3")
28177 (version "6.2.9")
28178 (source
28179 (origin
28180 (method url-fetch)
28181 (uri (pypi-uri "bsddb3" version))
28182 (sha256
28183 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
28184 (arguments
28185 (substitute-keyword-arguments (package-arguments python-berkeleydb)
28186 ((#:phases phases #~%standard-phases)
28187 #~(modify-phases #$phases
28188 (delete 'remove-legacy)))
28189 ((#:test-flags test-flags #~(list))
28190 #~(list "test3.py" "-v"))))))
28191
28192(define-public python-dbfread
28193 (package
28194 (name "python-dbfread")
28195 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
28196 (revision . "0")))
28197 (version (git-version "2.0.7"
28198 (assoc-ref properties 'revision)
28199 (assoc-ref properties 'commit)))
28200 (source
28201 (origin
28202 (method git-fetch)
28203 (uri (git-reference
28204 (url "https://github.com/olemb/dbfread")
28205 (commit (assoc-ref properties 'commit))))
28206 (file-name (git-file-name name version))
28207 (sha256
28208 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
28209 (build-system pyproject-build-system)
28210 (arguments
28211 (list
28212 #:phases
28213 #~(modify-phases %standard-phases
28214 (add-after 'unpack 'relax-setup.py
28215 (lambda _
28216 (substitute* "setup.py"
28217 (("python_requires.*")
28218 "")))))))
28219 (native-inputs (list python-pytest python-setuptools))
28220 (home-page "https://dbfread.readthedocs.io")
28221 (synopsis "Read DBF Files with Python")
28222 (description
28223 "This library reads DBF files and returns the data as native Python data
28224types for further processing. It is primarily intended for batch jobs and
28225one-off scripts.")
28226 (license license:expat)))
28227
28228(define-public python-cached-property
28229 (package
28230 (name "python-cached-property")
28231 (version "2.0.1")
28232 (source
28233 (origin
28234 (method url-fetch)
28235 (uri (pypi-uri "cached_property" version))
28236 (sha256
28237 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
28238 (build-system pyproject-build-system)
28239 (native-inputs
28240 (list python-freezegun
28241 python-pytest
28242 python-setuptools
28243 python-wheel))
28244 (home-page "https://github.com/pydanny/cached-property")
28245 (synopsis "Decorator for caching properties in classes")
28246 (description
28247 "This package provides a decorator which makes caching
28248time-or-computationally-expensive properties quick and easy and works in
28249Python 2 or 3.")
28250 (license license:bsd-3)))
28251
28252(define-public python-folium
28253 (package
28254 (name "python-folium")
28255 (version "0.19.4")
28256 (source
28257 (origin
28258 ;; PyPI has a ".whl" file but not a proper source release.
28259 ;; Thus, fetch code from Git.
28260 (method git-fetch)
28261 (uri (git-reference
28262 (url "https://github.com/python-visualization/folium")
28263 (commit (string-append "v" version))))
28264 (file-name (git-file-name name version))
28265 (sha256
28266 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
28267 (build-system pyproject-build-system)
28268 (arguments
28269 (list #:test-flags
28270 ;; This file requires Selenium.
28271 #~(list "--ignore" "tests/selenium/test_selenium.py"
28272 "-k" (string-append
28273 ;; The tests below also require Selenium.
28274 "not test__repr_png_is_bytes"
28275 " and not test_valid_png"
28276 " and not test_valid_png_size"
28277 " and not test_geojson"
28278 " and not test_heat_map_with_weights"
28279 ;; This performs an online request.
28280 " and not test_json_request"
28281 ;; Requires geodatasets package.
28282 " and not test_timedynamic_geo_json"
28283 ;; AssertionError.
28284 " and not test_minimap"))))
28285 (propagated-inputs
28286 (list python-branca
28287 python-jinja2
28288 python-numpy
28289 python-requests
28290 python-xyzservices))
28291 (native-inputs
28292 (list python-geopandas
28293 python-nbconvert
28294 python-pandas
28295 python-pillow
28296 python-pytest
28297 python-selenium
28298 python-setuptools
28299 python-setuptools-scm
28300 python-wheel))
28301 (home-page "https://github.com/python-visualization/folium")
28302 (synopsis "Make beautiful maps with Leaflet.js & Python")
28303 (description "@code{folium} makes it easy to visualize data that’s been
28304manipulated in Python on an interactive leaflet map. It enables both the
28305binding of data to a map for @code{choropleth} visualizations as well as
28306passing rich vector/raster/HTML visualizations as markers on the map.
28307
28308The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
28309Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
28310supports Image, Video, GeoJSON and TopoJSON overlays.")
28311 (license license:expat)))
28312
28313(define-public python-mercantile
28314 (package
28315 (name "python-mercantile")
28316 (version "1.2.1")
28317 (source
28318 (origin
28319 (method git-fetch)
28320 (uri (git-reference
28321 (url "https://github.com/mapbox/mercantile")
28322 (commit version)))
28323 (file-name (git-file-name name version))
28324 (sha256
28325 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
28326 (build-system pyproject-build-system)
28327 (propagated-inputs (list python-click))
28328 (native-inputs (list python-check-manifest python-hypothesis python-pytest
28329 python-setuptools))
28330 (home-page "https://github.com/mapbox/mercantile")
28331 (synopsis "Web mercator XYZ tile utilities")
28332 (description
28333 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
28334@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
28335left corner and bounding longitudes and latitudes for XYZ tiles, a
28336@code{xy(lng, lat)} function that returns spherical mercator x and y
28337coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
28338containing a given point, and quadkey conversion functions
28339@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
28340translating between quadkey and tile coordinates.")
28341 (license license:bsd-3)))
28342
28343(define-public jube
28344 (package
28345 ;; This is a command-line tool, so no "python-" prefix.
28346 (name "jube")
28347 (version "2.6.1")
28348 (source
28349 (origin
28350 (method url-fetch)
28351 (uri (string-append
28352 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
28353 version))
28354 (sha256
28355 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
28356 (file-name (string-append "jube-" version ".tar.gz"))))
28357 (build-system pyproject-build-system)
28358 (arguments
28359 (list
28360 #:tests? #f)) ; No tests.
28361 (propagated-inputs (list python-pyyaml))
28362 (native-inputs (list python-setuptools))
28363 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
28364 (synopsis "Benchmarking environment")
28365 (description
28366 "JUBE helps perform and analyze benchmarks in a systematic way. For each
28367benchmarked application, benchmark data is stored in a format that allows JUBE
28368to deduct the desired information. This data can be parsed by automatic pre-
28369and post-processing scripts that draw information and store it more densely
28370for manual interpretation.")
28371 (license license:gpl3+)))
28372
28373(define-public python-pyroutelib3
28374 (package
28375 (name "python-pyroutelib3")
28376 (version "2.0.0")
28377 (source
28378 (origin
28379 (method git-fetch)
28380 (uri (git-reference
28381 (url "https://github.com/MKuranowski/pyroutelib3")
28382 (commit (string-append "v" version))))
28383 (file-name (git-file-name name version))
28384 (sha256
28385 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
28386 (build-system pyproject-build-system)
28387 (propagated-inputs (list python-dateutil python-protobuf-5))
28388 (native-inputs (list python-filelock python-flit-core python-pytest))
28389 (home-page "https://github.com/MKuranowski/pyroutelib3")
28390 (synopsis "Library for simple routing on OSM data")
28391 (description "Library for simple routing on OSM data")
28392 (license license:gpl3+)))
28393
28394(define-public python-bibtexparser
28395 (package
28396 (name "python-bibtexparser")
28397 (version "2.0.0b8")
28398 (source
28399 (origin
28400 (method git-fetch)
28401 (uri (git-reference
28402 (url "https://github.com/sciunto-org/python-bibtexparser")
28403 (commit (string-append "v" version))))
28404 (file-name (git-file-name name version))
28405 (sha256
28406 (base32 "065b6267ygphacfc9aawckv0yz9x3pzd4ivdbsr8cla3zs3lqzg7"))))
28407 (build-system pyproject-build-system)
28408 (propagated-inputs (list python-pyparsing))
28409 (native-inputs
28410 (list python-pylatexenc python-pytest python-setuptools))
28411 (home-page "https://github.com/sciunto-org/python-bibtexparser")
28412 (synopsis "Python library to parse BibTeX files")
28413 (description "BibtexParser is a Python library to parse BibTeX files.")
28414 (license (list license:bsd-3 license:lgpl3))))
28415
28416(define-public python-bibtexparser-for-cobib
28417 (hidden-package
28418 (package
28419 (inherit python-bibtexparser)
28420 (name "python-bibtexparser")
28421 (version "1.4.0")
28422 (source
28423 (origin
28424 (method git-fetch)
28425 (uri (git-reference
28426 (url "https://github.com/sciunto-org/python-bibtexparser")
28427 (commit (string-append "v" version))))
28428 (file-name (git-file-name name version))
28429 (sha256
28430 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
28431
28432(define-public python-distro
28433 (package
28434 (name "python-distro")
28435 (version "1.9.0")
28436 (source
28437 (origin
28438 (method url-fetch)
28439 (uri (pypi-uri "distro" version))
28440 (sha256
28441 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
28442 (build-system pyproject-build-system)
28443 (arguments
28444 (list
28445 #:test-flags
28446 #~(list "-k" (string-join
28447 ;; We are not on Ubunto distro:
28448 ;; AssertionError: assert '' == 'ubuntu'.
28449 (list "not test_ubuntu14normal_lsb_release"
28450 "test_trailingblanks_lsb_release"
28451 "test_ubuntu14nomodules_lsb_release")
28452 " and not "))))
28453 (native-inputs
28454 (list python-pytest
28455 python-setuptools))
28456 (home-page "https://github.com/python-distro/distro")
28457 (synopsis "OS platform information API")
28458 (description
28459 "@code{distro} provides information about the OS distribution it runs on,
28460such as a reliable machine-readable ID, or version information.
28461
28462It is the recommended replacement for Python's original
28463`platform.linux_distribution` function (which will be removed in Python 3.8).
28464@code{distro} also provides a command-line interface to output the platform
28465information in various formats.")
28466 (license license:asl2.0)))
28467
28468(define-public python-cairosvg
28469 (package
28470 (name "python-cairosvg")
28471 (version "2.8.2")
28472 (source
28473 (origin
28474 (method url-fetch)
28475 (uri (pypi-uri "cairosvg" version))
28476 (sha256
28477 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
28478 (build-system pyproject-build-system)
28479 (arguments
28480 (list #:test-flags #~(list "cairosvg/test_api.py")))
28481 (native-inputs
28482 (list python-pytest
28483 python-setuptools))
28484 (propagated-inputs
28485 (list python-cairocffi
28486 python-cssselect2
28487 python-defusedxml
28488 python-pillow
28489 python-tinycss2))
28490 (home-page "https://cairosvg.org/")
28491 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
28492 (description "CairoSVG is a SVG converter based on Cairo. It can export
28493SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
28494SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
28495parsed, the result is drawn to a Cairo surface that can be exported to
28496qvarious formats: PDF, PostScript, PNG and even SVG.")
28497 (license license:lgpl3+)))
28498
28499(define-public python-pyphen
28500 (package
28501 (name "python-pyphen")
28502 (version "0.17.2")
28503 (source
28504 (origin
28505 (method git-fetch)
28506 (uri (git-reference
28507 (url "https://github.com/Kozea/Pyphen")
28508 (commit version)))
28509 (file-name (git-file-name name version))
28510 (sha256
28511 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
28512 (build-system pyproject-build-system)
28513 (native-inputs (list python-flit-core python-pytest))
28514 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
28515 ;; embedded set provided by upstream - like Debian does.
28516 (home-page "https://github.com/Kozea/Pyphen")
28517 (synopsis "Pure Python module to hyphenate text")
28518 (description "Pyphen is a pure Python module to hyphenate text using
28519existing Hunspell hyphenation dictionaries.")
28520 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
28521
28522(define-public python-intelhex
28523 (package
28524 (name "python-intelhex")
28525 (version "2.3.0")
28526 (source
28527 (origin
28528 (method git-fetch)
28529 (uri (git-reference
28530 (url "https://github.com/python-intelhex/intelhex")
28531 (commit version)))
28532 (file-name (git-file-name name version))
28533 (sha256
28534 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
28535 (build-system pyproject-build-system)
28536 (arguments (list #:test-backend #~'unittest))
28537 (native-inputs (list python-setuptools))
28538 (home-page "https://github.com/python-intelhex/intelhex")
28539 (synopsis "Python library for Intel HEX files manipulations")
28540 (description
28541 "The Intel HEX file format is widely used in microprocessors and
28542microcontrollers area (embedded systems etc.) as the de facto standard for
28543representation of code to be programmed into microelectronic devices. This
28544package provides an intelhex Python library to read, write, create from
28545scratch and manipulate data from Intel HEX file format. It also includes
28546several convenience Python scripts, including \"classic\" hex2bin and bin2hex
28547converters and more, those based on the library itself.")
28548 (license license:bsd-3)))
28549
28550(define-public python-interlap
28551 (package
28552 (name "python-interlap")
28553 (version "0.2.7")
28554 (source
28555 (origin
28556 (method git-fetch)
28557 (uri (git-reference
28558 (url "https://github.com/brentp/interlap")
28559 (commit (string-append "v" version))))
28560 (file-name (git-file-name name version))
28561 (sha256
28562 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
28563 (build-system pyproject-build-system)
28564 (arguments
28565 (list
28566 #:test-backend #~'custom
28567 #:test-flags #~(list "interlap.py")))
28568 (native-inputs (list python-setuptools))
28569 (home-page "https://brentp.github.io/interlap")
28570 (synopsis "Fast, simple interval overlap testing")
28571 (description
28572 "InterLap does fast interval overlap testing with a simple Python data
28573structure.")
28574 (license license:expat)))
28575
28576(define-public python-pykwalify
28577 (package
28578 (name "python-pykwalify")
28579 (version "1.8.0")
28580 (source
28581 (origin
28582 (method git-fetch)
28583 (uri (git-reference
28584 (url "https://github.com/grokzen/pykwalify")
28585 (commit version)))
28586 (file-name (git-file-name name version))
28587 (sha256
28588 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
28589 (build-system pyproject-build-system)
28590 (arguments
28591 (list
28592 #:test-flags
28593 ;; XXX: yaml safe_dump() has been removed.
28594 #~(list "--ignore=tests/test_unicode.py"
28595 "--deselect=tests/test_core.py::TestCore::test_core_files")))
28596 (native-inputs
28597 (list python-pytest python-setuptools python-testfixtures))
28598 (propagated-inputs
28599 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
28600 (home-page "https://github.com/grokzen/pykwalify")
28601 (synopsis "Python lib/cli for JSON/YAML schema validation")
28602 (description
28603 "This package provides a parser, schema validator, and data binding tool
28604for YAML and JSON.")
28605 (license license:expat)))
28606
28607(define-public python-pykakasi
28608 (package
28609 (name "python-pykakasi")
28610 (version "2.3.0")
28611 (source
28612 (origin
28613 (method url-fetch)
28614 (uri (pypi-uri "pykakasi" version))
28615 (sha256
28616 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
28617 (build-system pyproject-build-system)
28618 (arguments (list #:test-flags ''("-k" "not test_aozora")))
28619 (propagated-inputs (list python-deprecated python-importlib-resources
28620 python-jaconv))
28621 (native-inputs (list python-coverage
28622 python-py-cpuinfo
28623 python-pytest
28624 python-pytest-benchmark
28625 python-setuptools
28626 python-setuptools-scm
28627 python-wheel))
28628 (home-page "https://codeberg.org/miurahr/pykakasi")
28629 (synopsis "Kana kanji simple inversion library")
28630 (description
28631 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
28632Language Processing} library to transliterate hiragana, katakana and
28633kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
28634characters in NFC form.
28635
28636Its algorithms are based on the kakasi library, which is written in C.")
28637 (license license:gpl3+)))
28638
28639(define-public python-dbus
28640 (package
28641 (name "python-dbus")
28642 (version "1.3.2")
28643 (source
28644 (origin
28645 (method url-fetch)
28646 (uri (pypi-uri "dbus-python" version))
28647 (sha256
28648 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
28649 (build-system pyproject-build-system)
28650 (arguments
28651 (list
28652 #:tests? #f ;XXX: Tests require setup
28653 #:phases
28654 #~(modify-phases %standard-phases
28655 (add-after 'unpack 'patch-requirements
28656 (lambda _
28657 (substitute* (list "pyproject.toml" "setup.py")
28658 (("'(ninja|patchelf)',?") ""))
28659 (substitute* "setup.cfg"
28660 (("(ninja|patchelf)") "")))))))
28661 (native-inputs
28662 (list pkg-config
28663 meson
28664 ninja/pinned
28665 patchelf
28666 python-meson
28667 python-setuptools
28668 python-tappy))
28669 (inputs
28670 (list dbus glib))
28671 (propagated-inputs
28672 (list python-pygobject))
28673 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
28674 (synopsis "Python bindings for libdbus")
28675 (description
28676 "This package provides Python bindings to libdbus, the reference
28677implementation of the D-Bus protocol.")
28678 (license license:expat)))
28679
28680;; Added on 2026-01-05
28681(define-deprecated-package python-dbus-python python-dbus)
28682
28683(define python-dbusmock-patch-paths-phase
28684 #~(lambda* (#:key inputs #:allow-other-keys)
28685 (substitute* "tests/test_api.py"
28686 (("/usr/bin/python3")
28687 (which "python3")))
28688 (substitute* "dbusmock/testcase.py"
28689 (("\"dbus-daemon\"")
28690 (object->string
28691 (search-input-file inputs "/bin/dbus-daemon"))))))
28692
28693(define-public python-dbusmock
28694 (package
28695 (name "python-dbusmock")
28696 (version "0.37.2")
28697 (source
28698 (origin
28699 (method git-fetch)
28700 (uri (git-reference
28701 (url "https://github.com/martinpitt/python-dbusmock")
28702 (commit version)))
28703 (file-name (git-file-name name version))
28704 (sha256
28705 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
28706 (build-system pyproject-build-system)
28707 (arguments
28708 (list
28709 #:modules `((guix build pyproject-build-system)
28710 (guix build utils)
28711 (ice-9 match))
28712 #:phases
28713 #~(modify-phases %standard-phases
28714 (add-after 'unpack 'patch-paths
28715 #$python-dbusmock-patch-paths-phase)
28716 (replace 'check
28717 (lambda* (#:key tests? #:allow-other-keys)
28718 (when tests?
28719 (match (primitive-fork)
28720 (0 ;child process
28721 (execlp "pytest" "pytest" "-vv"))
28722 (pytest-pid
28723 (let loop ()
28724 ;; Reap child processes; otherwise, python-dbusmock
28725 ;; would waste time polling for the dbus processes
28726 ;; it spawns to be reaped, in vain.
28727 (match (waitpid WAIT_ANY)
28728 ((pid . status)
28729 (if (= pid pytest-pid)
28730 (unless (zero? status)
28731 (error "`pytest' exited with status"
28732 status))
28733 (loop)))))))))))))
28734 (native-inputs (list python-pytest python-setuptools upower which))
28735 (inputs (list dbus))
28736 (propagated-inputs (list python-dbus python-pygobject))
28737 (home-page "https://github.com/martinpitt/python-dbusmock")
28738 (synopsis "Python library for mock D-Bus objects")
28739 (description
28740 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
28741This is useful for writing tests for software which talks to D-Bus services
28742such as upower, systemd, logind, gnome-session or others, and it is hard (or
28743impossible without root privileges) to set the state of the real services to
28744what you expect in your tests.")
28745 (license license:lgpl3+)))
28746
28747(define-public python-dbusmock-for-tests
28748 (package
28749 (inherit python-dbusmock)
28750 (name "python-dbusmock-for-tests")
28751 (version "0.37.2")
28752 (source
28753 (origin
28754 (method git-fetch)
28755 (uri (git-reference
28756 (url "https://github.com/martinpitt/python-dbusmock")
28757 (commit version)))
28758 (file-name (git-file-name name version))
28759 (sha256
28760 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
28761 (arguments
28762 (list
28763 #:tests? #f
28764 #:phases
28765 #~(modify-phases %standard-phases
28766 (add-after 'unpack 'patch-paths
28767 #$python-dbusmock-patch-paths-phase))))
28768 (native-inputs (list python-setuptools which))
28769 (properties '((hidden? . #t)))))
28770
28771;; XXX: Deprecated on <2026-01-21>.
28772(define-deprecated/public-alias python-dbusmock-minimal
28773 python-dbusmock-for-tests)
28774
28775(define-public python-jsonplus
28776 (package
28777 (name "python-jsonplus")
28778 (home-page "https://github.com/randomir/jsonplus")
28779 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
28780 (revision . "0")))
28781 (version (git-version "0.8.0"
28782 (assoc-ref properties 'revision)
28783 (assoc-ref properties 'commit)))
28784 (source
28785 (origin
28786 (method git-fetch)
28787 (uri (git-reference
28788 (url home-page)
28789 (commit (assoc-ref properties 'commit))))
28790 (file-name (git-file-name name version))
28791 (sha256
28792 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
28793 (build-system pyproject-build-system)
28794 (arguments
28795 (list
28796 ;; XXX: Tests require the additional package moneyed.
28797 #:tests? #f
28798 #:phases
28799 #~(modify-phases %standard-phases
28800 (add-after 'unpack 'chdir
28801 (lambda _
28802 (chdir "python"))))))
28803 (native-inputs (list python-setuptools))
28804 (propagated-inputs
28805 (list python-dateutil python-simplejson python-sortedcontainers))
28806 (synopsis "Serialize Python types to/from JSON")
28807 (description
28808 "This package provides functionality to serialize arbitrary data types
28809to and from JSON. Common data types are implemented and it is easy to
28810register custom encoders and decoders.")
28811 (license license:expat)))
28812
28813(define-public python-ioctl-opt
28814 (package
28815 (name "python-ioctl-opt")
28816 (version "1.3")
28817 (source
28818 (origin
28819 (method url-fetch)
28820 (uri (pypi-uri "ioctl-opt" version))
28821 (sha256
28822 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
28823 (build-system pyproject-build-system)
28824 (arguments
28825 (list #:tests? #f)) ;no tests
28826 (native-inputs (list python-setuptools))
28827 (home-page "http://github.com/vpelletier/python-ioctl-opt")
28828 (synopsis "Functions to compute fnctl.ioctl's opt argument")
28829 (description
28830 "This package provides functions to compute fnctl.ioctl's opt argument.")
28831 (license license:gpl2+)))
28832
28833(define-public python-anyio
28834 (package
28835 (name "python-anyio")
28836 (version "4.12.1")
28837 (source
28838 (origin
28839 (method url-fetch)
28840 (uri (pypi-uri "anyio" version))
28841 (sha256
28842 (base32
28843 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
28844 (patches
28845 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
28846 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
28847 (build-system pyproject-build-system)
28848 (arguments
28849 (list
28850 ;; tests:
28851 ;; - x86_64-linux: 1580 passed, 67 skipped, 700 deselected, 4 xfailed
28852 ;; - aarch64-linux: 1342 passed, 67 skipped, 56 deselected, 4 xfailed
28853 #:test-flags
28854 #~(list "-p" "no:asyncio"
28855 "-m" "not network"
28856 ;; TODO: Set as global on the next python-team iteration, tests
28857 ;; are not stable, see:
28858 ;; <https://codeberg.org/guix/guix/issues/6649>.
28859 #$@(if (target-aarch64?)
28860 '("--ignore=tests/test_sockets.py")
28861 '())
28862 "-k"
28863 (string-join
28864 (list
28865 "not test_is_block_device"
28866 #$@(if (target-aarch64?)
28867 ;; Assertion Errors
28868 '("test_shielded_cancel_sleep_time"
28869 "test_run_in_custom_limiter")
28870 '())
28871 #$@(cond
28872 ((or (target-aarch64?)
28873 (target-riscv64?))
28874 #~("test_keyboardinterrupt_during_test"))
28875 (#t #~()))
28876
28877 ;; These fail because of network (or specifically IPv6
28878 ;; network) access (see:
28879 ;; https://github.com/agronholm/anyio/issues/417).
28880 "test_accept"
28881 "test_accept_after_close"
28882 "test_close_during_receive"
28883 "test_close_from_other_task"
28884 "test_concurrent_receive"
28885 "test_concurrent_send"
28886 "test_connect_tcp_with_tls"
28887 "test_connect_tcp_with_tls_cert_check_fail"
28888 "test_connection_refused"
28889 "test_extra_attributes"
28890 "test_getaddrinfo"
28891 "test_getnameinfo"
28892 "test_happy_eyeballs"
28893 "test_iterate"
28894 "test_receive_after_close"
28895 "test_receive_timeout"
28896 "test_reuse_port"
28897 "test_run_process"
28898 "test_send_after_close"
28899 "test_send_after_eof"
28900 "test_send_after_peer_closed"
28901 "test_send_eof"
28902 "test_send_large_buffer"
28903 "test_send_receive"
28904 "test_socket_options"
28905 "test_unretrieved_future_exception_server_crash")
28906 " and not "))))
28907 (propagated-inputs
28908 (list python-idna
28909 python-sniffio
28910 python-typing-extensions))
28911 (native-inputs
28912 (list python-blockbuster
28913 python-psutil
28914 python-pytest
28915 python-pytest-mock
28916 python-setuptools
28917 python-setuptools-scm
28918 python-trio
28919 python-trustme
28920 python-truststore
28921 python-uvloop))
28922 (home-page "https://anyio.readthedocs.io")
28923 (synopsis "Compatibility layer for multiple asynchronous event loops")
28924 (description
28925 "AnyIO is an asynchronous networking and concurrency library that works
28926on top of either asyncio or trio. It implements trio-like structured
28927concurrency on top of asyncio, and works in harmony with the native SC of trio
28928itself.")
28929 (license license:expat)))
28930
28931(define-public python-argh
28932 (package
28933 (name "python-argh")
28934 (version "0.31.3")
28935 (source
28936 (origin
28937 (method url-fetch)
28938 (uri (pypi-uri "argh" version))
28939 (sha256
28940 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
28941 (build-system pyproject-build-system)
28942 (native-inputs (list python-flit-core python-pytest))
28943 (home-page "https://github.com/neithere/argh/")
28944 (synopsis "Argparse wrapper with natural syntax")
28945 (description
28946 "Argh is a small library that provides several layers of abstraction
28947on top of @code{python-argparse}. The layers can be mixed. It is always
28948possible to declare a command with the highest possible (and least flexible)
28949layer and then tune the behaviour with any of the lower layers including the
28950native API of @code{python-argparse}.")
28951 (license license:lgpl3+)))
28952
28953(define-public python-pox
28954 (package
28955 (name "python-pox")
28956 (version "0.3.6")
28957 (source
28958 (origin
28959 (method url-fetch)
28960 (uri (pypi-uri "pox" version))
28961 (sha256
28962 (base32
28963 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
28964 (build-system pyproject-build-system)
28965 (arguments
28966 (list
28967 #:phases
28968 #~(modify-phases %standard-phases
28969 (replace 'check
28970 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28971 (when tests?
28972 (mkdir-p "/tmp/guix")
28973 (setenv "SHELL" "bash")
28974 (setenv "USERNAME" "guix")
28975 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
28976 (invoke "python" "./pox/tests/__main__.py")))))))
28977 (native-inputs
28978 (list python-setuptools
28979 which)) ;pox/tests/test_shutils.py
28980 (home-page "https://pypi.org/project/pox/")
28981 (synopsis "Python utilities for file system exploration and automated builds")
28982 (description
28983 "Pox provides a collection of utilities for navigating and manipulating
28984file systems. This module is designed to facilitate some of the low-level
28985operating system interactions that are useful when exploring a file system on a
28986remote host. Pox provides Python equivalents of several shell commands such
28987as @command{which} and @command{find}. These commands allow automated
28988discovery of what has been installed on an operating system, and where the
28989essential tools are located.")
28990 (license license:bsd-3)))
28991
28992(define-public python-flit
28993 (package
28994 (name "python-flit")
28995 (version "3.12.0") ;same as python-flit-core
28996 (source
28997 (origin
28998 (method url-fetch)
28999 (uri (pypi-uri "flit" version))
29000 (sha256
29001 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
29002 (build-system pyproject-build-system)
29003 (arguments
29004 (list
29005 #:test-flags
29006 ;; These tests fail when FLIT_NO_NETWORK is set
29007 '(list "-k" "not test_invalid_classifier \
29008and not test_install_requires \
29009and not test_install_requires_extra \
29010and not test_validate_classifiers_private")
29011 #:phases
29012 #~(modify-phases %standard-phases
29013 (add-after 'unpack 'relax-pip-requirement
29014 ;; python -m pip is available by default, no need to
29015 ;; propagate pip.
29016 (lambda _
29017 (substitute* "pyproject.toml"
29018 (("\"pip\",")
29019 ""))))
29020 (add-before 'check 'pre-check
29021 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29022 (when tests?
29023 (setenv "HOME" "/tmp")
29024 (setenv "FLIT_NO_NETWORK" "1")))))))
29025 (propagated-inputs
29026 (list python-tomli-w
29027 python-flit-core
29028 python-docutils
29029 python-requests))
29030 (native-inputs
29031 (list python-responses
29032 python-pytest
29033 python-testpath))
29034 (home-page "https://flit.readthedocs.io/")
29035 (synopsis "Simple packaging tool for simple packages")
29036 (description "Flit is a simple way to put Python packages and modules on
29037PyPI. Flit packages a single importable module or package at a time, using
29038the import name as the name on PyPI. All subpackages and data files within a
29039package are included automatically.")
29040 (license license:bsd-3)))
29041
29042(define-public python-fastentrypoints
29043 (package
29044 (name "python-fastentrypoints")
29045 (home-page "https://github.com/ninjaaron/fast-entry_points")
29046 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
29047 (revision . "0")))
29048 (version (git-version "0.12"
29049 (assoc-ref properties 'revision)
29050 (assoc-ref properties 'commit)))
29051 (source
29052 (origin
29053 (method git-fetch)
29054 (uri (git-reference
29055 (url home-page)
29056 (commit (assoc-ref properties 'commit))))
29057 (file-name (git-file-name name version))
29058 (sha256
29059 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
29060 (build-system pyproject-build-system)
29061 (arguments
29062 (list
29063 ;; XXX: Testing is non-standard and hardly configurable.
29064 #:tests? #f
29065 #:test-backend #~'custom
29066 #:test-flags #~(list "test/runtest.py")))
29067 (native-inputs (list python-setuptools))
29068 (synopsis "Makes entry_points specified in setup.py load more quickly")
29069 (description
29070 "Using entry_points in your setup.py makes scripts that start really
29071slowly because it imports pkg_resources. This package allows such setup
29072scripts to load entry points more quickly.")
29073 (license license:bsd-3)))
29074
29075(define-public python-funcparserlib
29076 (package
29077 (name "python-funcparserlib")
29078 (version "1.0.1")
29079 (source
29080 (origin
29081 ;; Source tarball on PyPi lacks tests.
29082 (method git-fetch)
29083 (uri (git-reference
29084 (url "https://github.com/vlasovskikh/funcparserlib")
29085 (commit version)))
29086 (file-name (git-file-name name version))
29087 (sha256
29088 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
29089 (build-system pyproject-build-system)
29090 (arguments
29091 '(#:phases
29092 (modify-phases %standard-phases
29093 (replace 'check
29094 (lambda* (#:key tests? #:allow-other-keys)
29095 (when tests?
29096 (invoke "python" "-m" "unittest" "discover" "-v")))))))
29097 ;; ModuleNotFoundError: No module named 'poetry'
29098 (native-inputs (list python-poetry-core python-six))
29099 (home-page "https://github.com/vlasovskikh/funcparserlib")
29100 (synopsis
29101 "Recursive descent parsing library based on functional combinators")
29102 (description
29103 "This package is a recursive descent parsing library for Python based on
29104functional combinators. Parser combinators are just higher-order functions
29105that take parsers as their arguments and return them as result values.")
29106 (license license:expat)))
29107
29108(define-public python-cson
29109 (package
29110 (name "python-cson")
29111 (version "0.8")
29112 (source
29113 (origin
29114 (method git-fetch)
29115 (uri (git-reference
29116 (url "https://github.com/avakar/pycson")
29117 (commit version)))
29118 (file-name (git-file-name name version))
29119 (sha256
29120 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
29121 (build-system pyproject-build-system)
29122 (native-inputs (list python-pytest python-setuptools python-wheel))
29123 (propagated-inputs (list python-speg))
29124 (home-page "https://github.com/avakar/pycson")
29125 (synopsis "Parser for Coffeescript Object Notation (CSON)")
29126 (description
29127 "This package is a parser for Coffeescript Object Notation (CSON).")
29128 (license license:expat)))
29129
29130(define-public python-aionotify
29131 (package
29132 (name "python-aionotify")
29133 (version "0.3.1")
29134 (source
29135 (origin
29136 ;; Source tarball on PyPi lacks tests
29137 (method git-fetch)
29138 (uri (git-reference
29139 (url "https://github.com/rbarrois/aionotify")
29140 (commit version)))
29141 (file-name (git-file-name name version))
29142 (sha256
29143 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
29144 (build-system pyproject-build-system)
29145 (native-inputs
29146 (list python-pytest
29147 python-setuptools
29148 python-wheel))
29149 (home-page "https://github.com/rbarrois/aionotify")
29150 (synopsis "inotify library for Python")
29151 (description
29152 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
29153 (license license:bsd-3)))
29154
29155(define-public python-forbiddenfruit
29156 (package
29157 (name "python-forbiddenfruit")
29158 (version "0.1.4")
29159 (source
29160 (origin
29161 (method git-fetch)
29162 (uri (git-reference
29163 (url "https://github.com/clarete/forbiddenfruit")
29164 (commit version)))
29165 (file-name (git-file-name name version))
29166 (sha256
29167 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
29168 (build-system pyproject-build-system)
29169 (arguments
29170 (list
29171 #:phases
29172 #~(modify-phases %standard-phases
29173 (replace 'check
29174 (lambda* (#:key tests? #:allow-other-keys)
29175 (when tests?
29176 (invoke "make" "prepare" "SKIP_DEPS=1")
29177 (invoke "nosetests")))))))
29178 (native-inputs (list python-pynose python-setuptools))
29179 (home-page "https://github.com/clarete/forbiddenfruit")
29180 (synopsis "Patch python built-in objects")
29181 (description "This project allows Python code to extend built-in types.")
29182 (license (list license:gpl3+ license:expat))))
29183
29184(define-public python-k5test
29185 (package
29186 (name "python-k5test")
29187 (version "0.10.4")
29188 (source
29189 (origin
29190 (method url-fetch)
29191 (uri (pypi-uri "k5test" version))
29192 (sha256
29193 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
29194 (build-system pyproject-build-system)
29195 (arguments
29196 (list #:tests? #f)) ;no tests
29197 (native-inputs
29198 (list python-setuptools))
29199 (inputs
29200 (list mit-krb5))
29201 (home-page "https://github.com/pythongssapi/k5test")
29202 (synopsis "Library for setting up self-contained Kerberos 5 environments")
29203 (description
29204 "@code{k5test} is a library for setting up self-contained Kerberos 5
29205environments, and running Python unit tests inside those environments. It is
29206based on the file of the same name found alongside the MIT Kerberos 5 unit
29207tests.")
29208 (license license:isc)))
29209
29210(define-public python-gssapi
29211 (package
29212 (name "python-gssapi")
29213 (version "1.10.0")
29214 (source
29215 (origin
29216 (method url-fetch)
29217 (uri (pypi-uri "gssapi" version))
29218 (sha256
29219 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
29220 (build-system pyproject-build-system)
29221 (arguments
29222 (list #:test-flags #~(list "--pyargs" "gssapi")))
29223 (native-inputs
29224 (list python-cython
29225 python-k5test
29226 python-parameterized
29227 python-pytest
29228 python-setuptools))
29229 (inputs
29230 (list mit-krb5))
29231 (propagated-inputs
29232 (list python-decorator))
29233 (home-page "https://github.com/pythongssapi/python-gssapi")
29234 (synopsis "Python GSSAPI Wrapper")
29235 (description
29236 "Python-GSSAPI provides both low-level and high level wrappers around the
29237GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
29238also be usable with other GSSAPI mechanisms.")
29239 (license license:isc)))
29240
29241(define-public python-check-manifest
29242 (package
29243 (name "python-check-manifest")
29244 (version "0.51")
29245 (source
29246 (origin
29247 (method url-fetch)
29248 (uri (pypi-uri "check_manifest" version))
29249 (sha256
29250 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
29251 (build-system pyproject-build-system)
29252 (arguments
29253 (list
29254 ;; tests: 127 passed, 20 skipped, 2 deselected
29255 #:test-flags
29256 ;; This tests requires setting up a venv which does not work
29257 ;; properly in the build environment.
29258 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
29259 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
29260 (native-inputs
29261 (list git-minimal/pinned python-pytest))
29262 (propagated-inputs
29263 (list python-pypa-build python-setuptools))
29264 (home-page "https://github.com/mgedmin/check-manifest")
29265 (synopsis "Check MANIFEST.in in a Python source package for completeness")
29266 (description "Python package can include a MANIFEST.in file to help with
29267sending package files to the Python Package Index. This package checks that
29268file to ensure it completely and accurately describes your project.")
29269 (license license:expat)))
29270
29271(define-public python-android-stringslib
29272 (package
29273 (name "python-android-stringslib")
29274 (version "0.1.2")
29275 (source
29276 (origin
29277 (method git-fetch)
29278 (uri (git-reference
29279 (url "https://framagit.org/tyreunom/python-android-strings-lib")
29280 (commit (string-append "v" version))))
29281 (file-name (git-file-name name version))
29282 (sha256
29283 (base32
29284 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
29285 (build-system pyproject-build-system)
29286 (arguments (list #:tests? #f)) ; No tests.
29287 (native-inputs (list python-setuptools))
29288 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
29289 (synopsis "Android strings.xml support")
29290 (description
29291 "Android Strings Lib provides support for android's strings.xml files.
29292These files are used to translate strings in android apps.")
29293 (license license:expat)))
29294
29295(define-public offlate
29296 (package
29297 (name "offlate")
29298 (version "0.6.1")
29299 (source
29300 (origin
29301 (method git-fetch)
29302 (uri (git-reference
29303 (url "https://framagit.org/tyreunom/offlate")
29304 (commit version)))
29305 (file-name (git-file-name name version))
29306 (sha256
29307 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
29308 (build-system pyproject-build-system)
29309 (arguments
29310 (list
29311 #:tests? #f ; No tests.
29312 #:phases
29313 #~(modify-phases %standard-phases
29314 (add-before 'build 'generate-fonts
29315 (lambda _
29316 (invoke "make" "fonts")))
29317 (add-before 'build 'generate-translations
29318 (lambda _
29319 (invoke "make" "update-langs"))))))
29320 (propagated-inputs
29321 (list python-android-stringslib
29322 python-dateutil
29323 python-gitlab
29324 python-lxml
29325 python-polib
29326 python-pycountry
29327 python-pyenchant
29328 python-pygit2
29329 python-pygithub
29330 python-pyqt
29331 python-requests
29332 python-ruamel.yaml
29333 python-translate-toolkit-for-offlate
29334 python-translation-finder
29335 python-watchdog))
29336 (native-inputs (list qttools-5 fontforge python-setuptools))
29337 (home-page "https://framagit.org/tyreunom/offlate")
29338 (synopsis "Offline translation interface for online translation tools")
29339 (description
29340 "Offlate offers a unified interface for different translation file
29341formats, as well as many different online translation platforms. You can use
29342it to get work from online platforms, specialized such as the Translation
29343Project, or not such a gitlab instance when your upstream doesn't use any
29344dedicated platform. The tool proposes a unified interface for any format and
29345an upload option to send your work back to the platform.")
29346 (license license:gpl3+)))
29347
29348(define-public python-pypng
29349 (package
29350 (name "python-pypng")
29351 (version "0.20220715.0")
29352 (source
29353 (origin
29354 (method url-fetch)
29355 (uri (pypi-uri "pypng" version))
29356 (sha256
29357 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
29358 (build-system pyproject-build-system)
29359 (arguments
29360 (list
29361 #:phases
29362 '(modify-phases %standard-phases
29363 (add-before 'check 'pre-check
29364 (lambda _
29365 (setenv "PYTHONPATH"
29366 (string-append (getcwd) "/code:"
29367 (getenv "GUIX_PYTHONPATH"))))))))
29368 (native-inputs (list python-pytest python-setuptools python-wheel))
29369 (home-page "https://github.com/drj11/pypng")
29370 (synopsis "Pure Python PNG image encoder/decoder")
29371 (description
29372 "The PyPNG module implements support for PNG images. It reads and writes
29373PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
29374pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
29375LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
29376images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
29377A number of optional chunks can be specified (when writing) and
29378understood (when reading): tRNS, bKGD, gAMA.
29379
29380PyPNG is not a high level toolkit for image processing (like PIL) and does not
29381aim at being a replacement or competitor. Its strength lies in fine-grained
29382extensive support of PNG features. It can also read and write Netpbm PAM
29383files, with a focus on its use as an intermediate format for implementing
29384custom PNG processing.")
29385 (license license:expat)))
29386
29387(define-public python-fuzzywuzzy
29388 (package
29389 (name "python-fuzzywuzzy")
29390 (version "0.18.0")
29391 (source
29392 (origin
29393 (method git-fetch)
29394 (uri (git-reference
29395 (url "https://github.com/seatgeek/fuzzywuzzy")
29396 (commit version)))
29397 (file-name (git-file-name name version))
29398 (sha256
29399 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
29400 (build-system pyproject-build-system)
29401 (arguments
29402 (list
29403 #:test-flags
29404 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
29405 (native-inputs
29406 (list python-hypothesis
29407 python-pycodestyle
29408 python-pytest
29409 python-setuptools))
29410 (propagated-inputs (list python-levenshtein))
29411 (home-page "https://github.com/seatgeek/fuzzywuzzy")
29412 (synopsis "Fuzzy string matching in Python")
29413 (description
29414 "Approximate string matching using @emph{Levenshtein Distance} to
29415calculate the differences between sequences.")
29416 (license license:gpl2)))
29417
29418(define-public python-block-tracing
29419 (package
29420 (name "python-block-tracing")
29421 (version "1.0.1")
29422 (source
29423 (origin
29424 (method url-fetch)
29425 (uri (pypi-uri "block_tracing" version))
29426 (sha256
29427 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
29428 (build-system pyproject-build-system)
29429 (arguments (list #:tests? #f)) ; No tests.
29430 (native-inputs (list python-setuptools))
29431 (home-page "https://github.com/rianhunter/block_tracing")
29432 (synopsis "Protect process memory")
29433 (description
29434 "@code{block_tracing} is a tiny Python library that can be used to
29435prevent debuggers and other applications from inspecting the memory within
29436your process.")
29437 (license license:expat)))
29438
29439(define-public python-json-e
29440 (package
29441 (name "python-json-e")
29442 (version "4.8.0")
29443 (source
29444 (origin
29445 (method git-fetch) ; no tests in PyPI release
29446 (uri (git-reference
29447 (url "https://github.com/json-e/json-e")
29448 (commit (string-append "v" version))))
29449 (file-name (git-file-name name version))
29450 (sha256
29451 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
29452 (build-system pyproject-build-system)
29453 (arguments
29454 (list
29455 #:phases
29456 #~(modify-phases %standard-phases
29457 ;; Git repository provides implementations for JavaScript, Golang,
29458 ;; Python and Rust, pick "py".
29459 (add-before 'build 'chdir-to-py
29460 (lambda _
29461 (chdir "py"))))))
29462 (native-inputs
29463 (list python-freezegun
29464 python-pytest
29465 python-pyyaml
29466 python-setuptools
29467 python-wheel))
29468 (home-page "https://json-e.js.org")
29469 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
29470 (description
29471 "This package provides a data-structure parameterization system written
29472for embedding context in JSON objects.")
29473 (license license:mpl2.0)))
29474
29475(define-public python-json-logger
29476 (package
29477 (name "python-json-logger")
29478 (version "2.0.7")
29479 (source
29480 (origin
29481 (method url-fetch)
29482 (uri (pypi-uri "python-json-logger" version))
29483 (sha256
29484 (base32
29485 "071f9d62ds1xdp88yzsfpf1pba2f78cp18193smcads2sc1frrr3"))))
29486 (build-system pyproject-build-system)
29487 (native-inputs (list python-pytest python-setuptools python-wheel))
29488 (home-page "https://github.com/madzak/python-json-logger")
29489 (synopsis "JSON log formatter in Python")
29490 (description "This library allows standard Python logging to output log data
29491as JSON objects. With JSON we can make our logs more readable by machines and
29492we can stop writing custom parsers for syslog-type records.")
29493 (license license:bsd-3)))
29494
29495(define-public python-daiquiri
29496 (package
29497 (name "python-daiquiri")
29498 (version "3.0.1")
29499 (source
29500 (origin
29501 (method git-fetch)
29502 (uri (git-reference
29503 (url "https://github.com/jd/daiquiri")
29504 (commit version)))
29505 (file-name (git-file-name name version))
29506 (sha256
29507 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
29508 (build-system pyproject-build-system)
29509 (propagated-inputs (list python-json-logger))
29510 (native-inputs (list python-mock python-pytest python-setuptools
29511 python-setuptools-scm))
29512 (home-page "https://github.com/jd/daiquiri")
29513 (synopsis "Library to configure Python logging easily")
29514 (description
29515 "The daiquiri library provides an easy way to configure logging in
29516Python. It also provides some custom formatters and handlers.")
29517 (license license:asl2.0)))
29518
29519(define-public python-pifpaf
29520 (package
29521 (name "python-pifpaf")
29522 (version "3.4.0")
29523 (source
29524 (origin
29525 (method git-fetch)
29526 (uri (git-reference
29527 (url "https://github.com/jd/pifpaf")
29528 (commit version)))
29529 (file-name (git-file-name name version))
29530 (sha256
29531 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
29532 (build-system pyproject-build-system)
29533 (arguments
29534 (list
29535 #:phases
29536 #~(modify-phases %standard-phases
29537 (add-after 'install 'install-drivers
29538 (lambda* (#:key inputs outputs #:allow-other-keys)
29539 (let ((site (site-packages inputs outputs)))
29540 (copy-recursively "pifpaf/drivers"
29541 (string-append site "/pifpaf/drivers/"))))))))
29542 (propagated-inputs
29543 (list python-click
29544 python-daiquiri
29545 python-fixtures
29546 python-jinja2
29547 python-pbr
29548 python-psutil
29549 python-xattr))
29550 (native-inputs
29551 (list python-mock
29552 python-stestr
29553 python-packaging
29554 python-requests
29555 python-testrepository
29556 python-testtools
29557 python-setuptools))
29558 (home-page "https://github.com/jd/pifpaf")
29559 (synopsis "Tools and fixtures to manage daemons for testing in Python")
29560 (description
29561 "Pifpaf is a suite of fixtures and a command-line tool that starts and
29562stops daemons for a quick throw-away usage. This is typically useful when
29563needing these daemons to run integration testing. It originally evolved from
29564its precursor @code{overtest}.")
29565 (license license:asl2.0)))
29566
29567(define-public python-pytest-check-links
29568 (package
29569 (name "python-pytest-check-links")
29570 (version "0.10.1")
29571 (source
29572 (origin
29573 (method url-fetch)
29574 (uri (pypi-uri "pytest_check_links" version))
29575 (sha256
29576 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
29577 (build-system pyproject-build-system)
29578 (arguments
29579 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
29580 (native-inputs
29581 (list python-hatchling))
29582 (propagated-inputs
29583 (list python-docutils
29584 python-html5lib
29585 python-nbconvert
29586 python-nbformat
29587 python-requests))
29588 (home-page "https://github.com/jupyterlab/pytest-check-links")
29589 (synopsis "Check links in files")
29590 (description "This package provides a pytest plugin that checks URLs for
29591HTML-containing files.")
29592 (license license:bsd-3)))
29593
29594(define-public python-json5
29595 (package
29596 (name "python-json5")
29597 (version "0.9.25")
29598 (source
29599 (origin
29600 ;; sample.json5 is missing from PyPi source tarball
29601 (method git-fetch)
29602 (uri (git-reference
29603 (url "https://github.com/dpranke/pyjson5")
29604 (commit (string-append "v" version))))
29605 (file-name (git-file-name name version))
29606 (sha256
29607 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
29608 (build-system pyproject-build-system)
29609 (native-inputs (list python-pytest python-setuptools python-wheel))
29610 (home-page "https://github.com/dpranke/pyjson5")
29611 (synopsis "Python implementation of the JSON5 data format")
29612 (description
29613 "JSON5 extends the JSON data interchange format to make it slightly more
29614usable as a configuration language. This Python package implements parsing and
29615dumping of JSON5 data structures.")
29616 (license license:asl2.0)))
29617
29618(define-public python-farama-notifications
29619 (package
29620 (name "python-farama-notifications")
29621 (version "0.0.4")
29622 (source
29623 ;; The version on pypi does not include tests.
29624 (origin
29625 (method git-fetch)
29626 (uri (git-reference
29627 (url "https://github.com/Farama-Foundation/Farama-Notifications")
29628 (commit version)))
29629 (file-name (git-file-name name version))
29630 (sha256
29631 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
29632 (build-system pyproject-build-system)
29633 (arguments
29634 (list
29635 #:phases
29636 '(modify-phases %standard-phases
29637 (replace 'check
29638 (lambda* (#:key tests? #:allow-other-keys)
29639 (when tests?
29640 (invoke "python3" "tests/ci-test.py")))))))
29641 (native-inputs (list python-pytest python-setuptools python-wheel))
29642 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
29643 (synopsis "Notifications for all Farama Foundation maintained libraries")
29644 (description
29645 "This package allows for providing notifications for all Farama
29646Foundation maintained libraries.")
29647 (license license:expat)))
29648
29649(define-public python-frozendict
29650 (package
29651 (name "python-frozendict")
29652 (version "2.4.6")
29653 (source
29654 (origin
29655 (method url-fetch)
29656 (uri (pypi-uri "frozendict" version))
29657 (sha256
29658 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
29659 (build-system pyproject-build-system)
29660 (native-inputs
29661 (list python-pytest
29662 python-setuptools
29663 python-wheel))
29664 (home-page "https://github.com/Marco-Sulla/python-frozendict")
29665 (synopsis "Simple immutable mapping for Python")
29666 (description
29667 "@dfn{frozendict} is an immutable wrapper around dictionaries that
29668implements the complete mapping interface. It can be used as a drop-in
29669replacement for dictionaries where immutability is desired.")
29670 (license license:expat)))
29671
29672(define-public python-py-cpuinfo
29673 (package
29674 (name "python-py-cpuinfo")
29675 (version "9.0.0")
29676 (source
29677 (origin
29678 (method git-fetch)
29679 (uri (git-reference
29680 (url "https://github.com/workhorsy/py-cpuinfo")
29681 (commit (string-append "v" version))))
29682 (file-name (git-file-name name version))
29683 (sha256
29684 (base32
29685 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
29686 (build-system pyproject-build-system)
29687 (arguments
29688 (list #:test-backend #~'custom
29689 #:test-flags #~(list "test_suite.py")))
29690 (native-inputs
29691 (list python-setuptools))
29692 (home-page "https://github.com/workhorsy/py-cpuinfo")
29693 (synopsis "Get CPU info with Python")
29694 (description
29695 "This Python module returns the CPU info by using the best sources of
29696information for your operating system.")
29697 (license license:expat)))
29698
29699(define-public python-canonicaljson
29700 (package
29701 (name "python-canonicaljson")
29702 (version "2.0.0")
29703 (source
29704 (origin
29705 (method url-fetch)
29706 (uri (pypi-uri "canonicaljson" version))
29707 (sha256
29708 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
29709 (build-system pyproject-build-system)
29710 (arguments
29711 (list #:test-backend #~'unittest))
29712 (native-inputs
29713 (list python-setuptools))
29714 (home-page "https://github.com/matrix-org/python-canonicaljson")
29715 (synopsis "Canonical JSON")
29716 (description
29717 "Deterministically encode JSON.
29718
29719@itemize
29720@item Encodes objects and arrays as RFC 7159 JSON.
29721@item Sorts object keys so that you get the same result each time.
29722@item Has no insignificant whitespace to make the output as small as possible.
29723@item Escapes only the characters that must be escaped, U+0000 to
29724 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
29725@item Uses the shortest escape sequence for each escaped character.
29726@item Encodes the JSON as UTF-8.
29727@item Can encode frozendict immutable dictionaries.
29728@end itemize")
29729 (license license:asl2.0)))
29730
29731(define-public python-signedjson
29732 (package
29733 (name "python-signedjson")
29734 (version "1.1.4")
29735 (source
29736 (origin
29737 (method git-fetch)
29738 (uri (git-reference
29739 (url "https://github.com/matrix-org/python-signedjson")
29740 (commit (string-append "v" version))))
29741 (file-name (git-file-name name version))
29742 (sha256
29743 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
29744 (build-system pyproject-build-system)
29745 (propagated-inputs
29746 (list python-canonicaljson
29747 python-pynacl
29748 python-typing-extensions
29749 python-unpaddedbase64))
29750 (native-inputs
29751 (list python-pytest python-setuptools-scm python-setuptools))
29752 (home-page "https://github.com/matrix-org/python-signedjson")
29753 (synopsis "Sign JSON objects with ED25519 signatures")
29754 (description
29755 "Sign JSON objects with ED25519 signatures.
29756
29757@itemize
29758@item More than one entity can sign the same object.
29759@item Each entity can sign the object with more than one key making it easier to
29760rotate keys
29761@item ED25519 can be replaced with a different algorithm.
29762@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
29763key.
29764@end itemize")
29765 (license license:asl2.0)))
29766
29767(define-public python-daemonize
29768 (package
29769 (name "python-daemonize")
29770 (version "2.5.0")
29771 (source
29772 (origin
29773 (method git-fetch)
29774 (uri (git-reference
29775 (url "https://github.com/thesharp/daemonize")
29776 (commit (string-append "v" version))))
29777 (file-name (git-file-name name version))
29778 (sha256
29779 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
29780 (build-system pyproject-build-system)
29781 (arguments
29782 (list
29783 #:test-backend #~'custom
29784 #:test-flags #~(list "tests/test.py")
29785 #:phases
29786 #~(modify-phases %standard-phases
29787 (add-before 'check 'fix-tests
29788 (lambda _
29789 ;; XXX: nobody has group nogroup on Guix.
29790 (substitute* "tests/test.py"
29791 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
29792 (number->string (passwd:gid (getpw "nobody"))))))))))
29793 (native-inputs (list coreutils-minimal procps python-setuptools))
29794 (home-page "https://github.com/thesharp/daemonize")
29795 (synopsis "Library for writing system daemons in Python")
29796 (description
29797 "Daemonize is a library for writing system daemons in Python.")
29798 (license license:expat)))
29799
29800(define-public python-pymacaroons
29801 (package
29802 (name "python-pymacaroons")
29803 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
29804 (revision . "0")))
29805 (version (git-version "0.13.0"
29806 (assoc-ref properties 'revision)
29807 (assoc-ref properties 'commit)))
29808 (source
29809 (origin
29810 (method git-fetch)
29811 (uri (git-reference
29812 (url "https://github.com/ecordell/pymacaroons")
29813 (commit (assoc-ref properties 'commit))))
29814 (file-name (git-file-name name version))
29815 (sha256
29816 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
29817 (build-system pyproject-build-system)
29818 (arguments
29819 (list
29820 #:test-flags
29821 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
29822 ;; No module named 'hypothesis.specifiers'
29823 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
29824 (native-inputs
29825 (list python-hypothesis
29826 python-mock
29827 python-pytest
29828 python-setuptools))
29829 (propagated-inputs (list python-pynacl))
29830 (home-page "https://github.com/ecordell/pymacaroons")
29831 (synopsis "Python Macaroon Library")
29832 (description
29833 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
29834tokens, macaroons embed caveats that define specific authorization
29835requirements for the target service, the service that issued the root macaroon
29836and which is capable of verifying the integrity of macaroons it receives.
29837
29838Macaroons allow for delegation and attenuation of authorization. They are
29839simple and fast to verify, and decouple authorization policy from the
29840enforcement of that policy.")
29841 (license license:expat)))
29842
29843(define-public python-ldap3
29844 (package
29845 (name "python-ldap3")
29846 (version "2.9.1")
29847 (home-page "https://github.com/cannatag/ldap3")
29848 (source
29849 (origin
29850 (method git-fetch)
29851 (uri (git-reference (url home-page)
29852 (commit (string-append "v" version))))
29853 (file-name (git-file-name name version))
29854 (sha256
29855 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
29856 (build-system pyproject-build-system)
29857 (arguments
29858 (list
29859 #:tests? #f ;TODO: Tests need a real LDAP server to run
29860 #:test-backend #~'nose))
29861 (native-inputs
29862 (list python-pynose python-setuptools))
29863 (propagated-inputs
29864 (list python-gssapi python-pyasn1))
29865 (synopsis "Python LDAP client")
29866 (description
29867 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
29868library.")
29869 (license license:lgpl3+)))
29870
29871(define-public python-boltons
29872 (package
29873 (name "python-boltons")
29874 (version "25.0.0")
29875 (source
29876 (origin
29877 (method git-fetch)
29878 (uri (git-reference
29879 (url "https://github.com/mahmoud/boltons")
29880 (commit version)))
29881 (file-name (git-file-name name version))
29882 (sha256
29883 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
29884 (build-system pyproject-build-system)
29885 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
29886 (home-page "https://github.com/mahmoud/boltons")
29887 (synopsis "Extensions to the Python standard library")
29888 (description
29889 "Boltons is a set of over 230 pure-Python utilities in the same spirit
29890as — and yet conspicuously missing from — the standard library, including:
29891
29892@itemize
29893@item Atomic file saving, bolted on with fileutils
29894@item A highly-optimized OrderedMultiDict, in dictutils
29895@item Two types of PriorityQueue, in queueutils
29896@item Chunked and windowed iteration, in iterutils
29897@item Recursive data structure iteration and merging, with iterutils.remap
29898@item Exponential backoff functionality, including jitter, through
29899iterutils.backoff
29900@item A full-featured TracebackInfo type, for representing stack traces, in
29901tbutils
29902@end itemize")
29903 (license license:bsd-3)))
29904
29905(define-public python-eliot
29906 (package
29907 (name "python-eliot")
29908 (version "1.17.5")
29909 (source
29910 (origin
29911 (method url-fetch)
29912 (uri (pypi-uri "eliot" version))
29913 (sha256
29914 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
29915 (build-system pyproject-build-system)
29916 (arguments
29917 (list
29918 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
29919 ;; Two tests fail with error: TypeError: Unsupported type.
29920 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
29921 #:phases
29922 #~(modify-phases %standard-phases
29923 (add-after 'unpack 'remove-journald-support
29924 (lambda _
29925 (for-each delete-file
29926 '("eliot/tests/test_journald.py"
29927 "eliot/journald.py")))))))
29928 (native-inputs
29929 (list python-pytest
29930 python-setuptools
29931 python-testtools))
29932 (propagated-inputs
29933 (list python-boltons
29934 python-orjson
29935 python-pyrsistent
29936 python-zope-interface))
29937 (home-page "https://github.com/itamarst/eliot/")
29938 (synopsis "Eliot: the logging system that tells you why it happened")
29939 (description
29940 "@dfn{eliot} is a Python logging system that outputs causal chains of
29941actions: actions can spawn other actions, and eventually they either succeed
29942or fail. The resulting logs tell you the story of what your software did: what
29943happened, and what caused it.")
29944 (license license:asl2.0)))
29945
29946(define-public python-pem
29947 (package
29948 (name "python-pem")
29949 (version "23.1.0")
29950 (source
29951 (origin
29952 (method git-fetch)
29953 (uri (git-reference
29954 (url "https://github.com/hynek/pem")
29955 (commit version)))
29956 (file-name (git-file-name name version))
29957 (sha256
29958 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
29959 (build-system pyproject-build-system)
29960 (native-inputs
29961 (list nss-certs-for-test
29962 python-certifi
29963 python-hatch-fancy-pypi-readme
29964 python-hatch-vcs
29965 python-hatchling
29966 python-pretend
29967 python-pyopenssl
29968 python-pytest
29969 python-twisted))
29970 (home-page "https://pem.readthedocs.io/")
29971 (synopsis "Easy PEM file parsing in Python")
29972 (description
29973 "This package provides a Python module for parsing and splitting PEM files.")
29974 (license license:expat)))
29975
29976(define-public python-pysaml2
29977 (package
29978 (name "python-pysaml2")
29979 (version "7.5.4")
29980 (source
29981 (origin
29982 (method git-fetch)
29983 (uri (git-reference
29984 (url "https://github.com/IdentityPython/pysaml2")
29985 (commit (string-append "v" version))))
29986 (file-name (git-file-name name version))
29987 (sha256
29988 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
29989 (build-system pyproject-build-system)
29990 (arguments
29991 (list
29992 #:test-flags
29993 #~(list "-k"
29994 (string-join
29995 ;; XXX: encryption failures
29996 (list "not test_encrypted_response_6"
29997 "test_validate_cert_chains"
29998 "test_validate_with_root_cert"
29999 ;; XXX: xml parsing error
30000 "test_namespace_processing") " and not "))
30001 #:phases
30002 #~(modify-phases %standard-phases
30003 (add-after 'unpack 'relax-requirements
30004 (lambda _
30005 (substitute* "pyproject.toml"
30006 (("\"(pyopenssl|xmlschema).*\"" _ dep)
30007 (format #f "~s" dep))))))))
30008 (native-inputs (list python-poetry-core python-pytest))
30009 (propagated-inputs
30010 (list python-cryptography
30011 python-dateutil
30012 python-defusedxml
30013 python-pymongo
30014 python-pyopenssl
30015 python-responses
30016 python-requests
30017 python-xmlschema
30018 python-xmlsec))
30019 (home-page "https://idpy.org")
30020 (synopsis "Python implementation of SAML Version 2 Standard")
30021 (description
30022 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
30023It contains all necessary pieces for building a SAML2 service provider or
30024an identity provider. The distribution contains examples of both.
30025
30026This package was originally written to work in a WSGI environment, but
30027there are extensions that allow you to use it with other frameworks.")
30028 (license license:asl2.0)))
30029
30030(define-public python-click-plugins
30031 (package
30032 (name "python-click-plugins")
30033 (version "2.0")
30034 (source
30035 (origin
30036 (method git-fetch)
30037 (uri (git-reference
30038 (url "https://github.com/click-contrib/click-plugins")
30039 (commit version)))
30040 (file-name (git-file-name name version))
30041 (sha256
30042 (base32 "1fgfb4pv9chry7jwigc5ax66njk1w0kcj75q4kz0b8bb3nh52z2i"))))
30043 (build-system pyproject-build-system)
30044 (arguments
30045 (list
30046 #:test-backend #~'custom
30047 #:test-flags #~(list "tests/click_plugins_tests.py")
30048 #:phases
30049 #~(modify-phases %standard-phases
30050 (add-before 'build 'mkdir-tests
30051 (lambda _
30052 (mkdir "tests")
30053 (rename-file "click_plugins_tests.py"
30054 (string-append "tests/click_plugins_tests.py")))))))
30055 (native-inputs (list python-pytest python-setuptools))
30056 (propagated-inputs (list python-click))
30057 (synopsis "Extension for Click to register external CLI commands")
30058 (description
30059 "This package provides n extension module for Click to register external
30060CLI commands via setuptools entry-points.")
30061 (home-page "https://github.com/click-contrib/click-plugins")
30062 (license license:bsd-3)))
30063
30064;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
30065;; This PyPI package is no longer actively maintained, but the underlying
30066;; library can be vendored.
30067;;
30068;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
30069;; pyproject.toml) and can't be used as a common input.
30070(define-public python-click-plugins-1
30071 (package
30072 (inherit python-click-plugins)
30073 (name "python-click-plugins")
30074 (version "1.1.1.2")
30075 (source
30076 (origin
30077 (method git-fetch)
30078 (uri (git-reference
30079 (url "https://github.com/click-contrib/click-plugins")
30080 (commit version)))
30081 (file-name (git-file-name name version))
30082 (sha256
30083 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
30084 (arguments (list))))
30085
30086(define-public python-diceware
30087 (package
30088 (name "python-diceware")
30089 (version "1.0.1")
30090 (source
30091 (origin
30092 (method url-fetch)
30093 (uri (pypi-uri "diceware" version))
30094 (sha256
30095 (base32
30096 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
30097 (build-system pyproject-build-system)
30098 (native-inputs
30099 (list python-pytest python-setuptools python-wheel))
30100 (home-page "https://github.com/ulif/diceware/")
30101 (synopsis "Generates memorable passphrases")
30102 (description "This package generates passphrases by concatenating words
30103randomly picked from wordlists. It supports several sources of
30104randomness (including real life dice) and different wordlists (including
30105cryptographically signed ones).")
30106 (license license:gpl3+)))
30107
30108(define-public python-dictdiffer
30109 (package
30110 (name "python-dictdiffer")
30111 (version "0.9.0")
30112 (source
30113 (origin
30114 (method git-fetch)
30115 (uri (git-reference
30116 (url "https://github.com/inveniosoftware/dictdiffer")
30117 (commit (string-append "v" version))))
30118 (file-name (git-file-name name version))
30119 (sha256
30120 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
30121 (build-system pyproject-build-system)
30122 (arguments
30123 (list
30124 #:phases
30125 #~(modify-phases %standard-phases
30126 (add-after 'unpack 'relax-requirements
30127 (lambda _
30128 (delete-file "pytest.ini")
30129 (substitute* "setup.py"
30130 (("'pytest-runner.*',")
30131 "'pytest',")))))))
30132 (native-inputs
30133 (list python-pytest python-setuptools python-setuptools-scm))
30134 (home-page "https://github.com/inveniosoftware/dictdiffer")
30135 (synopsis "Diff and patch Python dictionary objects")
30136 (description
30137 "Dictdiffer is a Python module that helps you to diff and patch
30138dictionaries.")
30139 (license license:expat)))
30140
30141(define-public python-osc
30142 (package
30143 (name "python-osc")
30144 (version "1.9.3")
30145 (source
30146 (origin
30147 (method git-fetch)
30148 (uri (git-reference
30149 (url "https://github.com/attwad/python-osc")
30150 (commit (string-append "v" version))))
30151 (file-name (git-file-name name version))
30152 (sha256
30153 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
30154 (build-system pyproject-build-system)
30155 (native-inputs (list python-setuptools))
30156 (home-page "https://github.com/attwad/python-osc")
30157 (synopsis "Open Sound Control server and client implementations")
30158 (description
30159 "@code{python-osc} is a pure Python library with no external
30160dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
30161Open Sound Control 1.0} specification.")
30162 (license license:unlicense)))
30163
30164(define-public python-cmd2
30165 (package
30166 (name "python-cmd2")
30167 (version "2.5.11")
30168 (source
30169 (origin
30170 (method url-fetch)
30171 (uri (pypi-uri "cmd2" version))
30172 (sha256
30173 (base32
30174 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
30175 (build-system pyproject-build-system)
30176 (arguments
30177 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
30178and not test_transcript")))
30179 (propagated-inputs
30180 (list python-pyperclip python-wcwidth))
30181 (native-inputs
30182 (list python-pytest
30183 python-pytest-cov
30184 python-pytest-mock
30185 python-setuptools
30186 python-setuptools-scm
30187 python-wheel))
30188 (home-page "https://github.com/python-cmd2/cmd2")
30189 (synopsis "Tool for building interactive command line applications")
30190 (description
30191 "Cmd2 is a tool for building interactive command line applications in
30192Python. Its goal is to make it quick and easy for developers to build
30193feature-rich and user-friendly interactive command line applications. It
30194provides a simple API which is an extension of Python's built-in @code{cmd}
30195module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
30196make your life easier and eliminates much of the boilerplate code which would
30197be necessary when using @code{cmd}.")
30198 (license license:expat)))
30199
30200(define-public python-pytidylib
30201 (package
30202 (name "python-pytidylib")
30203 (version "0.3.2")
30204 (source
30205 (origin
30206 (method git-fetch)
30207 (uri (git-reference
30208 (url "https://github.com/countergram/pytidylib")
30209 (commit version)))
30210 (file-name (git-file-name name version))
30211 (sha256
30212 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
30213 (build-system pyproject-build-system)
30214 (arguments
30215 (list
30216 #:phases
30217 #~(modify-phases %standard-phases
30218 (add-after 'unpack 'fix-queue-import
30219 (lambda _
30220 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
30221 (substitute* "tests/threadsafety.py"
30222 (("from Queue import Queue")
30223 "from queue import Queue"))))
30224 (add-before 'build 'qualify-libtidy
30225 (lambda* (#:key inputs #:allow-other-keys)
30226 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
30227 (substitute* "tidylib/tidy.py"
30228 (("ctypes\\.util\\.find_library\\('tidy'\\)")
30229 (format #f "'~a'" libtidy)))))))))
30230 (native-inputs (list python-pytest python-setuptools))
30231 (inputs (list tidy-html))
30232 (home-page "https://github.com/countergram/pytidylib")
30233 (synopsis "Python wrapper for HTML Tidy library")
30234 (description
30235 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
30236allows you, from Python code, to “fix” invalid (X)HTML markup.")
30237 (license license:expat)))
30238
30239(define-public python-mujson
30240 (package
30241 (name "python-mujson")
30242 (version "1.4")
30243 (source
30244 (origin
30245 (method git-fetch)
30246 (uri (git-reference
30247 (url "https://github.com/mattgiles/mujson")
30248 (commit version)))
30249 (file-name (git-file-name name version))
30250 (sha256
30251 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
30252 (build-system pyproject-build-system)
30253 (arguments (list #:tests? #f)) ;No tests.
30254 (native-inputs (list python-setuptools))
30255 (home-page "https://github.com/mattgiles/mujson")
30256 (synopsis "Use the fastest JSON functions available at import time")
30257 (description
30258 "This module selects the fastest JSON functions available at import time
30259in Python.")
30260 (license license:expat)))
30261
30262(define-public python-bashlex
30263 (package
30264 (name "python-bashlex")
30265 (version "0.18")
30266 (source
30267 (origin
30268 (method git-fetch)
30269 (uri (git-reference
30270 (url "https://github.com/idank/bashlex")
30271 (commit version)))
30272 (file-name (git-file-name name version))
30273 (sha256
30274 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
30275 (build-system pyproject-build-system)
30276 (arguments
30277 (list
30278 #:phases
30279 #~(modify-phases %standard-phases
30280 (add-before 'build 'pregenerate-yacc-tables
30281 (lambda _
30282 ;; parser.py caches tables, which attempts to write to site lib
30283 ;; see https://github.com/idank/bashlex/issues/51
30284 (invoke "python" "-c" "import bashlex"))))))
30285 (native-inputs (list python-pytest python-setuptools))
30286 (home-page "https://github.com/idank/bashlex")
30287 (synopsis "Python parser for bash")
30288 (description
30289 "@code{bashlex} is a Python port of the parser used internally by GNU
30290bash.
30291
30292For the most part it's transliterated from C, the major differences are:
30293
30294@itemize
30295@item it does not execute anything
30296@item it is reentrant
30297@item it generates a complete AST
30298@end itemize
30299")
30300 (license license:gpl3+)))
30301
30302(define-public python-jinxed
30303 (package
30304 (name "python-jinxed")
30305 (version "1.3.0")
30306 (source
30307 (origin
30308 (method git-fetch)
30309 (uri (git-reference
30310 (url "https://github.com/Rockhopper-Technologies/jinxed")
30311 (commit version)))
30312 (file-name (git-file-name name version))
30313 (sha256
30314 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
30315 (build-system pyproject-build-system)
30316 (arguments
30317 (list
30318 #:tests? #f ;_curses.error: setupterm: could not find terminal
30319 #:phases
30320 #~(modify-phases %standard-phases
30321 (add-before 'check 'set-environment-variables
30322 (lambda* (#:key inputs #:allow-other-keys)
30323 (setenv "TERM" "LINUX")
30324 (setenv "TERMINFO"
30325 (search-input-directory inputs "share/terminfo")))))))
30326 (native-inputs (list ncurses python-setuptools))
30327 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
30328 (synopsis "Jinxed Terminal Library")
30329 (description
30330 "Jinxed is an implementation of a subset of the Python curses library.")
30331 (license license:mpl2.0)))
30332
30333(define-public python-blessed
30334 (package
30335 (name "python-blessed")
30336 (version "1.20.0")
30337 (source
30338 (origin
30339 (method url-fetch)
30340 (uri (pypi-uri "blessed" version))
30341 (sha256
30342 (base32
30343 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
30344 (snippet
30345 ;; Don't get hung up on Windows test failures.
30346 '(delete-file "blessed/win_terminal.py"))))
30347 (build-system pyproject-build-system)
30348 (arguments
30349 (list
30350 ;; Avoid python-pytest-coverage
30351 #:test-flags '(list "-c /dev/null")))
30352 (propagated-inputs (list python-six python-wcwidth))
30353 (native-inputs (list python-pytest python-setuptools python-wheel))
30354 (home-page "https://github.com/jquast/blessed")
30355 (synopsis "Wrapper around terminal capabilities")
30356 (description
30357 "Blessed is a thin, practical wrapper around terminal styling, screen
30358positioning, and keyboard input.")
30359 (license license:expat)))
30360
30361(define-public python-readme-renderer
30362 (package
30363 (name "python-readme-renderer")
30364 (version "44.0")
30365 (source
30366 (origin
30367 (method url-fetch)
30368 (uri (pypi-uri "readme_renderer" version))
30369 (sha256
30370 (base32
30371 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
30372 (build-system pyproject-build-system)
30373 (arguments
30374 (list
30375 #:test-flags
30376 '(list "-k"
30377 (string-append
30378 ;; These tests fail due to slight differences in the generated
30379 ;; vs expected HTML, e.g. because of difference in whitespace or
30380 ;; line breaks. (See also
30381 ;; https://github.com/pypa/readme_renderer/issues/234).
30382 "not test_md_fixtures[test_CommonMark_008.md]"
30383 " and not test_rst_fixtures[test_rst_008.rst]"
30384 " and not GFM"))))
30385 (propagated-inputs
30386 (list python-cmarkgfm
30387 python-docutils
30388 python-nh3
30389 python-pygments))
30390 (native-inputs
30391 (list python-pytest
30392 python-setuptools
30393 python-wheel))
30394 (home-page "https://github.com/pypa/readme_renderer")
30395 (synopsis "Render README files in Warehouse")
30396 (description
30397 "Readme Renderer is a library that will safely render arbitrary README
30398files into HTML. It is designed to be used in Warehouse to render the
30399@code{long_description} for packages. It can handle Markdown,
30400reStructuredText, and plain text.")
30401 (license license:asl2.0)))
30402
30403(define-public python-lazr-delegates
30404 (package
30405 (name "python-lazr-delegates")
30406 (version "2.1.1")
30407 (source
30408 (origin
30409 (method url-fetch)
30410 (uri (pypi-uri "lazr_delegates" version))
30411 (sha256
30412 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
30413 (build-system pyproject-build-system)
30414 (arguments
30415 (list
30416 #:test-flags #~(list "-v" #$output)
30417 #:phases
30418 #~(modify-phases %standard-phases
30419 (add-after 'check 'check-cleanup
30420 (lambda* (#:key tests? #:allow-other-keys)
30421 (when tests?
30422 (for-each
30423 delete-file-recursively
30424 (find-files #$output
30425 (lambda (file stat)
30426 (or (member (basename file)
30427 '("tests" ".pytest_cache"))))
30428 #:directories? #t))))))))
30429 (native-inputs
30430 (list python-pytest python-setuptools python-wheel))
30431 (propagated-inputs
30432 (list python-zope-interface))
30433 (home-page "https://launchpad.net/lazr.delegates")
30434 (synopsis "Easily write objects that delegate behavior")
30435 (description
30436 "The @code{lazr.delegates} package makes it easy to write objects that
30437delegate behavior to another object. The new object adds some property or
30438behavior on to the other object, while still providing the underlying interface,
30439and delegating behavior.")
30440 (license license:lgpl3)))
30441
30442(define-public python-lazr-config
30443 (package
30444 (name "python-lazr-config")
30445 (version "3.1")
30446 (source
30447 (origin
30448 (method url-fetch)
30449 (uri (pypi-uri "lazr_config" version))
30450 (sha256
30451 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
30452 (build-system pyproject-build-system)
30453 (arguments
30454 (list
30455 #:test-flags #~(list "-v" #$output)
30456 #:phases
30457 #~(modify-phases %standard-phases
30458 (add-after 'check 'check-cleanup
30459 (lambda* (#:key tests? #:allow-other-keys)
30460 (when tests?
30461 (for-each
30462 delete-file-recursively
30463 (find-files #$output
30464 (lambda (file stat)
30465 (or (member (basename file)
30466 '("tests" ".pytest_cache"))))
30467 #:directories? #t))))))))
30468 (native-inputs
30469 (list python-pytest python-setuptools python-wheel))
30470 (propagated-inputs
30471 (list python-lazr-delegates python-zope-interface))
30472 (home-page "https://launchpad.net/lazr.config")
30473 (synopsis "Create configuration schemas and process and validate configurations")
30474 (description
30475 "The LAZR config system is typically used to manage process configuration.
30476Process configuration is for saying how things change when we run systems on
30477different machines, or under different circumstances. This system uses ini-like
30478file format of section, keys, and values. The config file supports inheritance
30479to minimize duplication of information across files. The format supports schema
30480validation.")
30481 (license license:lgpl3)))
30482
30483;; XXX: Not maintained since 2021, there is no git available as seen in
30484;; <https://pypi.org/project/flufl.bounce>.
30485(define-public python-flufl-bounce
30486 (package
30487 (name "python-flufl-bounce")
30488 (version "4.0")
30489 (source
30490 (origin
30491 (method url-fetch)
30492 (uri (pypi-uri "flufl.bounce" version))
30493 (sha256
30494 (base32
30495 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
30496 (build-system pyproject-build-system)
30497 (arguments
30498 (list #:phases
30499 #~(modify-phases %standard-phases
30500 (replace 'check
30501 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30502 (when tests?
30503 (with-directory-excursion
30504 (string-append (site-packages inputs outputs) "/flufl")
30505 (invoke "python" "-m" "nose2" "-v"))))))))
30506 (propagated-inputs
30507 (list python-atpublic python-zope-interface))
30508 (native-inputs
30509 (list python-flufl-testing python-nose2 python-setuptools))
30510 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
30511 (synopsis "Email bounce detectors")
30512 (description "The @code{flufl.bounce} library provides a set of heuristics
30513and an API for detecting the original bouncing email addresses from a bounce
30514message. Many formats found in the wild are supported, as are VERP and
30515RFC 3464.")
30516 (license (list license:asl2.0
30517 license:lgpl3)))) ; only for setup_headers.py
30518
30519(define-public python-flufl-i18n
30520 (package
30521 (name "python-flufl-i18n")
30522 (version "5.1.0")
30523 (source
30524 (origin
30525 (method url-fetch)
30526 (uri (pypi-uri "flufl_i18n" version))
30527 (sha256
30528 (base32
30529 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
30530 (build-system pyproject-build-system)
30531 (arguments
30532 (list #:test-flags
30533 #~(list "--no-cov" "--ignore-glob=docs/*")
30534 #:phases
30535 #~(modify-phases %standard-phases
30536 ;; This phase add a symlink of dist-info dir for packages
30537 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
30538 (add-after 'install 'add-custom-dist-info
30539 (lambda _
30540 (for-each
30541 (lambda (dir)
30542 (with-directory-excursion (dirname dir)
30543 (let ((base (basename dir)))
30544 (symlink base
30545 (string-join (string-split base #\_) ".")))))
30546 (find-files #$output
30547 (lambda (file stat)
30548 (string-suffix? ".dist-info" file))
30549 #:directories? #t)))))))
30550 (propagated-inputs
30551 (list python-atpublic))
30552 (native-inputs
30553 (list python-hatchling
30554 python-pytest
30555 python-pytest-cov
30556 python-sybil))
30557 (home-page "https://flufli18n.readthedocs.io")
30558 (synopsis "API for Python internationalization")
30559 (description
30560 "This package provides a high-level, convenient API for managing
30561internationalization/translation contexts in Python applications. There is a
30562simple API for single-context applications, such as command line scripts which
30563only need to translate into one language during the entire course of their
30564execution. There is a more flexible, but still convenient API for multi-context
30565applications, such as servers, which may need to switch language contexts for
30566different tasks.")
30567 (license license:asl2.0)))
30568
30569(define-public python-flufl-lock
30570 (package
30571 (name "python-flufl-lock")
30572 (version "8.1.0")
30573 (source
30574 (origin
30575 (method url-fetch)
30576 (uri (pypi-uri "flufl.lock" version))
30577 (sha256
30578 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
30579 (build-system pyproject-build-system)
30580 (arguments
30581 (list #:test-flags
30582 #~(list "--no-cov" "--ignore-glob=docs/*")
30583 #:phases
30584 #~(modify-phases %standard-phases
30585 ;; This phase add a symlink of dist-info dir for packages
30586 ;; expecting flufl.lock rather than flufl_lock (mailman).
30587 (add-after 'install 'add-custom-dist-info
30588 (lambda _
30589 (for-each
30590 (lambda (dir)
30591 (with-directory-excursion (dirname dir)
30592 (let ((base (basename dir)))
30593 (symlink base
30594 (string-join (string-split base #\_) ".")))))
30595 (find-files #$output
30596 (lambda (file stat)
30597 (string-suffix? ".dist-info" file))
30598 #:directories? #t)))))))
30599 (native-inputs
30600 (list python-hatchling
30601 python-pytest
30602 python-pytest-cov
30603 python-sybil))
30604 (propagated-inputs
30605 (list python-atpublic python-psutil))
30606 (home-page "https://flufllock.readthedocs.io")
30607 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
30608 (description
30609 "The @dfn{flufl.lock} package provides NFS-safe file locking with
30610timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
30611@code{open} system call but uses a lockfile. Lock objects support lock-breaking
30612and have a maximum lifetime built-in.")
30613 (license (list license:asl2.0
30614 license:lgpl3)))) ; only for setup_helpers.py
30615
30616(define-public python-flufl-testing
30617 (package
30618 (name "python-flufl-testing")
30619 (version "0.8")
30620 (source
30621 (origin
30622 (method git-fetch)
30623 (uri (git-reference
30624 (url "https://gitlab.com/warsaw/flufl.testing")
30625 (commit version)))
30626 (file-name (git-file-name name version))
30627 (sha256
30628 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
30629 (build-system pyproject-build-system)
30630 (arguments (list #:tests? #f)) ;no tests
30631 (native-inputs (list python-setuptools))
30632 (home-page "https://gitlab.com/warsaw/flufl.testing")
30633 (synopsis "Collection of test tool plugins")
30634 (description
30635 "This package contains a small collection of test tool plugins for
30636@code{nose2} and @code{flake8}.")
30637 (license license:asl2.0)))
30638
30639(define-public python-devtools
30640 (package
30641 (name "python-devtools")
30642 (version "0.12.2")
30643 (source
30644 (origin
30645 (method git-fetch)
30646 (uri (git-reference
30647 (url "https://github.com/samuelcolvin/python-devtools")
30648 (commit (string-append "v" version))))
30649 (file-name (git-file-name name version))
30650 (sha256
30651 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
30652 (build-system pyproject-build-system)
30653 (arguments
30654 (list
30655 #:test-flags
30656 ;; Disable some failing tests.
30657 ;;
30658 ;; test_print_subprocess seems to inherit wrong environment, fails with
30659 ;; E + ModuleNotFoundError: No module named 'executing'
30660 ;; Test runs fine from local clone.
30661 ;;
30662 ;; test_executing_failure fails with
30663 ;; E - [1, 2] (list) len=2
30664 ;; E + [x, y]: [1, 2] (list) len=2
30665 ;; unclear why, probably due to a dependency.
30666 '(list "-k" "not test_print_subprocess and not test_executing_failure"
30667 ;; test_insert_assert.py also seems to inherit a bad environment:
30668 ;; E fixture 'pytester_pretty' not found
30669 ;; Test runs fine from local clone.
30670 "--ignore=tests/test_insert_assert.py")))
30671 (native-inputs
30672 (list python-hatchling python-pytest python-pytest-mock))
30673 (propagated-inputs
30674 (list python-asttokens python-executing python-pygments))
30675 (home-page "https://github.com/samuelcolvin/python-devtools")
30676 (synopsis "Debug command and development tools")
30677 (description
30678 "This package provides a debug print command and other development tools.
30679It adds a simple and readable way to print stuff during development.")
30680 (license license:expat)))
30681
30682(define-public python-dateparser
30683 (package
30684 (name "python-dateparser")
30685 (version "1.2.2")
30686 (source
30687 (origin
30688 (method url-fetch)
30689 (uri (pypi-uri "dateparser" version))
30690 (sha256
30691 (base32
30692 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
30693 (build-system pyproject-build-system)
30694 (arguments
30695 (list
30696 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
30697 #:test-flags
30698 #~(list (string-join '("--deselect=tests/test_search.py"
30699 "TestTranslateSearch"
30700 "test_search_dates_with_prepositions")
30701 "::"))))
30702 (propagated-inputs
30703 (list python-dateutil
30704 python-pytz
30705 python-regex
30706 python-tzlocal))
30707 (native-inputs
30708 (list python-parameterized
30709 python-pytest
30710 python-setuptools
30711 tzdata-for-tests))
30712 (home-page "https://github.com/scrapinghub/dateparser")
30713 (synopsis
30714 "Date parsing library designed to parse dates from HTML pages")
30715 (description
30716 "@code{python-dateparser} provides modules to easily parse localized
30717dates in almost any string formats commonly found on web pages.")
30718 (license license:bsd-3)))
30719
30720(define-public python-dparse
30721 (package
30722 (name "python-dparse")
30723 (version "0.6.4")
30724 (source
30725 (origin
30726 (method url-fetch)
30727 (uri (pypi-uri "dparse" version))
30728 (sha256
30729 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
30730 (build-system pyproject-build-system)
30731 (native-inputs (list python-hatchling python-pytest))
30732 (propagated-inputs (list python-packaging python-toml))
30733 (home-page "https://github.com/pyupio/dparse")
30734 (synopsis "Parser for Python dependency files")
30735 (description "This package provides a parser for Python dependency files.")
30736 (license license:expat)))
30737
30738(define-public python-dpath
30739 (package
30740 (name "python-dpath")
30741 (version "2.2.0")
30742 (source
30743 (origin
30744 (method url-fetch)
30745 (uri (pypi-uri "dpath" version))
30746 (sha256
30747 (base32
30748 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
30749 (build-system pyproject-build-system)
30750 (native-inputs
30751 (list python-hypothesis python-nose2 python-setuptools python-wheel))
30752 (home-page "https://github.com/akesterson/dpath-python")
30753 (synopsis "File-system-like pathing and searching for dictionaries")
30754 (description
30755 "@code{python-dpath} is a library for accessing and searching
30756dictionaries via /slashed/paths ala xpath.
30757
30758Basically it lets you glob over a dictionary as if it were a file system. It
30759allows you to specify globs (ala the bash eglob syntax, through some advanced
30760fnmatch.fnmatch magic) to access dictionary elements, and provides some
30761facility for filtering those results.")
30762 (license license:expat)))
30763
30764(define-public python-safety
30765 (package
30766 (name "python-safety")
30767 (version "3.6.2")
30768 (source
30769 (origin
30770 (method url-fetch)
30771 (uri (pypi-uri "safety" version))
30772 (sha256
30773 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
30774 (build-system pyproject-build-system)
30775 (arguments
30776 (list
30777 #:test-flags
30778 #~(list "-k" (string-join
30779 ;; test_announcements fails with AssertionError.
30780 (list "not test_announcements_if_is_not_tty"
30781 ;; Tests below need a network connection.
30782 "test_check_live"
30783 "test_check_live_cached"
30784 "test_get_packages_licenses_without_api_key"
30785 ;; AttributeError: 'PackageInstalledPayload' object
30786 ;; has no attribute 'tool_path'
30787 "test_emit_diff_operations_with_multiple_operations"
30788 "test_emit_diff_operations_with_empty_locations"
30789 "test_emit_diff_operations_with_different_tools"
30790 "test_emit_diff_operations_creates_correct_payload_structure")
30791 " and not "))
30792 #:phases #~(modify-phases %standard-phases
30793 (add-after 'unpack 'disable-telemetry
30794 (lambda _
30795 (substitute* (find-files "." "\\.py$")
30796 (("telemetry: bool = True")
30797 "telemetry: bool = False")
30798 (("telemetry=True")
30799 "telemetry=False"))))
30800 (add-before 'check 'set-home ; some tests run mkdir
30801 (lambda _
30802 (setenv "HOME" "/tmp"))))))
30803 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
30804 (propagated-inputs (list python-authlib
30805 python-click
30806 python-dparse
30807 python-filelock
30808 python-httpx
30809 python-jinja2
30810 python-marshmallow
30811 python-nltk
30812 python-packaging
30813 python-psutil
30814 python-pydantic
30815 python-requests
30816 python-ruamel.yaml
30817 python-safety-schemas
30818 python-tenacity
30819 python-tomli
30820 python-tomlkit
30821 python-typer
30822 python-typing-extensions))
30823 (home-page "https://github.com/pyupio/safety")
30824 (synopsis "Check installed dependencies for known vulnerabilities")
30825 (description
30826 "Safety checks installed dependencies for known vulnerabilities.
30827By default it uses the open Python vulnerability database Safety DB.")
30828 (license license:expat)))
30829
30830(define-public python-pypandoc
30831 (package
30832 (name "python-pypandoc")
30833 (version "1.15")
30834 (source
30835 (origin
30836 (method git-fetch)
30837 (uri (git-reference
30838 (url "https://github.com/JessicaTegner/pypandoc")
30839 (commit (string-append "v" version))))
30840 (file-name (git-file-name name version))
30841 (sha256
30842 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
30843 (build-system pyproject-build-system)
30844 (arguments
30845 (list
30846 #:test-backend #~'unittest
30847 #:phases
30848 #~(modify-phases %standard-phases
30849 (add-before 'check 'disable-tests
30850 (lambda _
30851 (substitute* "tests.py"
30852 ;; Disable test requiring network access
30853 (("test_basic_conversion_from_http_url")
30854 "skip_test_basic_conversion_from_http_url")
30855 ;; Disable tests with missing files
30856 (("test_basic_conversion_from_file_pattern")
30857 "skip_test_basic_conversion_from_file_pattern")
30858 (("test_conversion_with_data_files")
30859 "skip_test_conversion_with_data_files")))))))
30860 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
30861 ;; the missing etoolbox.sty file is added
30862 (native-inputs
30863 (list (texlive-local-tree
30864 (list texlive-etoolbox
30865 texlive-lm
30866 texlive-regexpatch
30867 texlive-xcolor))
30868 python-poetry-core
30869 python-setuptools))
30870 (inputs (list pandoc python-pandocfilters))
30871 (propagated-inputs (list python-wheel))
30872 (home-page "https://github.com/JessicaTegner/pypandoc")
30873 (synopsis "Python wrapper for pandoc")
30874 (description
30875 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
30876 (license license:expat)))
30877
30878(define-public python-rnc2rng
30879 (package
30880 (name "python-rnc2rng")
30881 (version "2.7.0")
30882 (source
30883 (origin
30884 (method git-fetch)
30885 (uri (git-reference
30886 (url "https://github.com/djc/rnc2rng")
30887 (commit version)))
30888 (file-name (git-file-name name version))
30889 (sha256
30890 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
30891 (build-system pyproject-build-system)
30892 (arguments
30893 (list
30894 #:test-backend #~'custom
30895 #:test-flags #~(list "test.py")))
30896 (native-inputs (list python-setuptools))
30897 (propagated-inputs (list python-rply))
30898 (home-page "https://github.com/djc/rnc2rng")
30899 (synopsis "Convert RELAX NG Compact to regular syntax")
30900 (description
30901 "This package provides the @command{rnc2rng} command-line tool as well as
30902a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
30903equivalent schemata in the XML-based default RELAX NG syntax.")
30904 (license license:expat)))
30905
30906(define-public python-citeproc-py
30907 (package
30908 (name "python-citeproc-py")
30909 (version "0.9.0")
30910 (source
30911 (origin
30912 (method git-fetch)
30913 (uri (git-reference
30914 (url "https://github.com/brechtm/citeproc-py")
30915 (commit (string-append "v" version))
30916 (recursive? #t))) ; TODO Unbundle.
30917 (file-name (git-file-name name version))
30918 (sha256
30919 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
30920 (build-system pyproject-build-system)
30921 (arguments
30922 (list
30923 #:phases
30924 #~(modify-phases %standard-phases
30925 (add-after 'unpack 'set-version
30926 (lambda _
30927 (delete-file "citeproc/_version.py")
30928 (substitute* "citeproc/__init__.py"
30929 (("from \\. import version")
30930 "")
30931 (("__version__ =.*")
30932 (format #f "__version__ = ~s" #$version))))))))
30933 (native-inputs (list python-pytest python-setuptools))
30934 (propagated-inputs (list python-lxml python-rnc2rng))
30935 (home-page "https://github.com/brechtm/citeproc-py")
30936 (synopsis "Citations and bibliography formatter")
30937 (description
30938 "Citeproc-py is a CSL processor for Python. It aims to implement the
30939CSL 1.0.1 specification. citeproc-py can output styled citations and
30940bibliographies in a number of different output formats. Currently supported
30941are plain text, reStructuredText and HTML.")
30942 (license license:bsd-2)))
30943
30944(define-public python-inform
30945 (package
30946 (name "python-inform")
30947 (version "1.34")
30948 (source
30949 (origin
30950 (method git-fetch) ; no tests in PyPI release
30951 (uri (git-reference
30952 (url "https://github.com/kenkundert/inform")
30953 (commit (string-append "v" version))))
30954 (file-name (git-file-name name version))
30955 (sha256
30956 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
30957 (build-system pyproject-build-system)
30958 (arguments
30959 (list
30960 #:test-flags #~(list "-k" (string-append
30961 ;; Test below needs the num2words package
30962 "not test_plural_words"
30963 ;; These last two failed with AssertionError
30964 " and not test_inform"
30965 " and not test_manual"))))
30966 (native-inputs
30967 (list python-flit-core python-pytest))
30968 (propagated-inputs
30969 (list python-arrow))
30970 (home-page "https://inform.readthedocs.io")
30971 (synopsis "Print & logging utilities for communicating with user")
30972 (description
30973 "Inform is designed to display messages from programs that are typically run from
30974a console. It provides a collection of ‘print’ functions that allow you to simply and
30975cleanly print different types of messages.")
30976 (license license:gpl3+)))
30977
30978(define-public python-nestedtext
30979 (package
30980 (name "python-nestedtext")
30981 (version "3.7")
30982 (source
30983 (origin
30984 (method git-fetch) ; no tests in PyPI release
30985 (uri (git-reference
30986 (url "https://github.com/KenKundert/nestedtext")
30987 (commit (string-append "v" version))))
30988 (file-name (git-file-name name version))
30989 (sha256
30990 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
30991 (build-system pyproject-build-system)
30992 (arguments
30993 (list
30994 ;; XXX: Tests below need some not yet packaged Python libraries.
30995 #:test-flags #~(list "--ignore" "examples/"
30996 "--ignore" "tests/test_nestedtext.py"
30997 "-k" (string-append
30998 "not techniques.rst"
30999 " and not nestedtext.nestedtext.dumps"))))
31000 (native-inputs (list python-flit-core python-pytest))
31001 (propagated-inputs
31002 (list python-inform))
31003 (home-page "https://nestedtext.org")
31004 (synopsis "Human readable and writable data interchange format")
31005 (description
31006 "NestedText is a file format for holding data that is to be entered, edited, or
31007viewed by people. It allows data to be organized into a nested collection of
31008dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
31009without the complexity and risk of YAML and without the syntactic clutter of JSON.
31010NestedText is both simple and natural. Only a small number of concepts and rules must
31011be kept in mind when creating it. It is easily created, modified, or viewed with
31012a text editor and easily understood and used by both programmers and non-programmers.")
31013 (license license:expat))) ; MIT license
31014
31015(define-public python-nest-asyncio
31016 (package
31017 (name "python-nest-asyncio")
31018 (version "1.6.0")
31019 (source
31020 (origin
31021 (method url-fetch)
31022 (uri (pypi-uri "nest_asyncio" version))
31023 (sha256
31024 (base32
31025 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
31026 (build-system pyproject-build-system)
31027 (native-inputs
31028 (list python-pytest python-setuptools))
31029 (home-page "https://github.com/erdewit/nest_asyncio")
31030 (synopsis "Patch asyncio to allow nested event loops")
31031 (description
31032 "By design @code{asyncio} does not allow its event loop to be nested.
31033This presents a practical problem: when in an environment where the event loop
31034is already running it's impossible to run tasks and wait for the result. This
31035module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
31036@code{loop.run_until_complete}.")
31037 (license license:bsd-3)))
31038
31039(define-public python-simpervisor
31040 (package
31041 (name "python-simpervisor")
31042 (version "1.0.0")
31043 (source
31044 (origin
31045 ;; Tests not included in release.
31046 (method git-fetch)
31047 (uri (git-reference
31048 (url "https://github.com/yuvipanda/simpervisor")
31049 (commit (string-append "v" version))))
31050 (file-name (git-file-name name version))
31051 (sha256
31052 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
31053 (build-system pyproject-build-system)
31054 (arguments
31055 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
31056 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
31057 (native-inputs
31058 (list python-aiohttp
31059 python-hatchling
31060 python-psutil
31061 python-pytest
31062 python-pytest-asyncio))
31063 (home-page "https://github.com/yuvipanda/simpervisor")
31064 (synopsis "Simple async process supervisor")
31065 (description
31066 "This package provides a simple async process supervisor in Python.")
31067 (license license:bsd-3)))
31068
31069(define-public python-parallel
31070 (package
31071 (name "python-parallel")
31072 (version "1.6.4.4")
31073 (source
31074 (origin
31075 (method url-fetch)
31076 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
31077 version ".zip"))
31078 (sha256
31079 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
31080 (build-system pyproject-build-system)
31081 (arguments (list #:tests? #f)) ;No test suite.
31082 (native-inputs (list python-setuptools unzip))
31083 (propagated-inputs (list python-six))
31084 (home-page "https://www.parallelpython.com")
31085 (synopsis "Parallel and distributed programming for Python")
31086 (description
31087 "Parallel Python module (PP) provides an easy and efficient way to create
31088parallel-enabled applications for SMP computers and clusters. PP module
31089features cross-platform portability and dynamic load balancing. Thus
31090applications written with PP will parallelize efficiently even on
31091heterogeneous and multi-platform clusters (including clusters running other
31092applications with variable CPU loads).")
31093 (license license:bsd-3)))
31094
31095(define-public python-param
31096 (package
31097 (name "python-param")
31098 (version "2.1.0")
31099 (source
31100 (origin
31101 (method url-fetch)
31102 (uri (pypi-uri "param" version))
31103 (sha256
31104 (base32 "07z7az7xg8pzjrmaf928is7n6siw9v9nxfmf0a5vgqj7nl40pcx7"))))
31105 (build-system pyproject-build-system)
31106 (native-inputs
31107 (list python-cloudpickle
31108 python-hatchling
31109 python-hatch-vcs
31110 python-ipython
31111 python-jsonschema
31112 python-nbval
31113 python-nest-asyncio
31114 python-numpy
31115 python-odfpy
31116 python-openpyxl
31117 python-pandas
31118 python-pyarrow
31119 python-pytest
31120 python-pytest-asyncio
31121 python-pytest-xdist
31122 python-tables
31123 python-xlrd))
31124 (home-page "https://param.holoviz.org/")
31125 (synopsis
31126 "Make your Python code clearer and more reliable by declaring Parameters")
31127 (description
31128 "Param is a library for handling all the user-modifiable parameters,
31129arguments, and attributes that control your code. It provides automatic,
31130robust error-checking while dramatically reducing boilerplate code, letting
31131you focus on what you want your code to do rather than on checking for all the
31132possible ways users could supply inappropriate values to a function or
31133class.")
31134 (license license:bsd-3)))
31135
31136(define-public python-djitellopy
31137 (package
31138 (name "python-djitellopy")
31139 (version "2.5.0")
31140 (source
31141 (origin
31142 (method url-fetch)
31143 (uri (pypi-uri "djitellopy" version))
31144 (sha256
31145 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
31146 (build-system pyproject-build-system)
31147 (arguments
31148 (list
31149 #:tests? #f ;no test suite
31150 #:phases
31151 #~(modify-phases %standard-phases
31152 ;; OpenCV does not ship metadata files for its Python library, which
31153 ;; makes it invisible to the sanity_check script (see:
31154 ;; https://github.com/opencv/opencv/issues/24810).
31155 (delete 'sanity-check))))
31156 (propagated-inputs
31157 (list opencv ;for opencv-python
31158 python-av
31159 python-numpy
31160 python-pillow))
31161 (native-inputs (list python-setuptools python-wheel))
31162 (home-page "https://github.com/damiafuentes/DJITelloPy")
31163 (synopsis
31164 "DJI Tello drone video streaming, swarms and state packets library")
31165 (description
31166 "DJI Tello drone Python interface using the official Tello SDK and Tello
31167EDU SDK. This library has the following features:
31168@itemize
31169@item Implementation of all tello commands
31170@item Retrieve a video stream easily
31171@item Receive and parse state packets
31172@item Control a swarm of drones.
31173@end itemize")
31174 (license license:expat)))
31175
31176(define-public python-djvulibre
31177 ;; The original git repository of python-djvulibre is hosted at
31178 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
31179 ;; has been archived by its owner in 2022. The most active fork is
31180 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
31181 ;; version packaged here (its "python3" branch, the default).
31182 ;;
31183 ;; However, the python-djvulibre PyPI project still refers to the old
31184 ;; repository. The new repository is published as djvulibre-python on PyPI;
31185 ;; that is, with the name in reversed order.The original package name is
31186 ;; used in Guix because it best adheres to the Guix naming scheme.
31187 (package
31188 (name "python-djvulibre")
31189 (version "0.9.3")
31190 (source
31191 (origin
31192 (method git-fetch)
31193 (uri (git-reference
31194 (url "https://github.com/FriedrichFroebel/python-djvulibre")
31195 (commit version)))
31196 (file-name (git-file-name name version))
31197 (sha256
31198 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
31199 (build-system pyproject-build-system)
31200 (arguments
31201 (list
31202 #:phases
31203 #~(modify-phases %standard-phases
31204 (replace 'check
31205 (lambda* (#:key tests? #:allow-other-keys)
31206 (when tests?
31207 ;; The tests get confused by the djvu directory.
31208 (delete-file-recursively "djvu")
31209 ;; Tests can't find tools.py otherwise.
31210 (with-directory-excursion "tests"
31211 (invoke "python" "-m" "pytest"))))))))
31212 (native-inputs
31213 (list ghostscript
31214 pkg-config
31215 python-cython
31216 python-pytest
31217 python-setuptools))
31218 (inputs
31219 (list djvulibre))
31220 (synopsis "Python bindings for DjVuLibre")
31221 (description "This is a set of Python bindings for the DjVuLibre library.")
31222 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
31223 (license license:gpl2)))
31224
31225(define-public python-gamera
31226 (package
31227 (name "python-gamera")
31228 (version "4.1.0")
31229 (source
31230 (origin
31231 (method git-fetch)
31232 (uri (git-reference
31233 (url "https://github.com/hsnr-gamera/gamera-4")
31234 (commit (string-append "v" version))))
31235 (file-name (git-file-name name version))
31236 (sha256
31237 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
31238 (build-system pyproject-build-system)
31239 (arguments
31240 (list
31241 #:phases
31242 #~(modify-phases %standard-phases
31243 (add-after 'unpack 'fix-build
31244 (lambda _
31245 ;; The script to make daily build artifacts fails to compile,
31246 ;; but users don't need that, so ignore it.
31247 (delete-file "misc/daily_build.py")
31248 ;; Prepare tests
31249 (mkdir-p "tmp")
31250 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
31251 (native-inputs (list python-docutils python-pytest python-setuptools))
31252 (inputs (list libpng libtiff zlib))
31253 (synopsis "Framework for building document analysis applications")
31254 (description
31255 "Gamera is a toolkit for building document image recognition systems.")
31256 (home-page "https://gamera.informatik.hsnr.de/")
31257 (license license:gpl2+)))
31258
31259(define-public python-aiofiles
31260 (package
31261 (name "python-aiofiles")
31262 (version "24.1.0")
31263 (source
31264 (origin
31265 (method url-fetch)
31266 (uri (pypi-uri "aiofiles" version))
31267 (sha256
31268 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
31269 (build-system pyproject-build-system)
31270 (native-inputs
31271 (list python-hatch-vcs
31272 python-hatchling
31273 python-pytest
31274 python-pytest-asyncio))
31275 (home-page "https://github.com/Tinche/aiofiles")
31276 (synopsis "File support for @code{asyncio}")
31277 (description
31278 "@code{python-aiofiles} is a library for handling local disk files in
31279asyncio applications.")
31280 (license license:asl2.0)))
31281
31282(define-public python-pyre-extensions
31283 (package
31284 (name "python-pyre-extensions")
31285 (version "0.0.32")
31286 (source
31287 (origin
31288 (method url-fetch)
31289 (uri (pypi-uri "pyre_extensions" version))
31290 (sha256
31291 (base32
31292 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
31293 (build-system pyproject-build-system)
31294 (native-inputs (list python-pytest python-setuptools python-wheel))
31295 (propagated-inputs
31296 (list python-typing-extensions python-typing-inspect))
31297 (home-page "https://pyre-check.org")
31298 (synopsis
31299 "Type system extensions for use with @code{python-pyre}")
31300 (description
31301 "@code{python-pyre-extensions} defines extensions to the standard
31302@code{typing} module that are supported by the Pyre typechecker.")
31303 (license license:expat)))
31304
31305(define-public python-pywatchman
31306 (package
31307 (name "python-pywatchman")
31308 (version "3.0.0")
31309 (source
31310 (origin
31311 (method url-fetch)
31312 (uri (pypi-uri "pywatchman" version))
31313 (sha256
31314 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
31315 (build-system pyproject-build-system)
31316 (arguments
31317 (list
31318 #:test-backend #~'custom
31319 #:test-flags #~(list "tests/tests.py")))
31320 (native-inputs (list python-setuptools))
31321 (home-page "https://facebook.github.io/watchman/")
31322 (synopsis "Watchman client for python")
31323 (description
31324 "@code{python-pywatchman} is a library to connect and query Watchman to
31325discover file changes.")
31326 (license license:bsd-3)))
31327
31328(define-public python-roundrobin
31329 (package
31330 (name "python-roundrobin")
31331 (version "0.0.4")
31332 (source
31333 (origin
31334 (method git-fetch)
31335 (uri (git-reference
31336 (url "https://github.com/linnik/roundrobin")
31337 (commit version)))
31338 (file-name (git-file-name name version))
31339 (sha256
31340 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
31341 (build-system pyproject-build-system)
31342 (arguments
31343 (list #:test-backend #~'unittest))
31344 (native-inputs (list python-setuptools))
31345 (home-page "https://github.com/linnik/roundrobin")
31346 (synopsis "Collection of roundrobin utilities")
31347 (description
31348 "This package provides a collection of utilities for round-robin
31349distribution in Python.")
31350 (license license:expat)))
31351
31352(define-public python-helpdev
31353 (package
31354 (name "python-helpdev")
31355 (version "0.7.1")
31356 (source
31357 (origin
31358 (method git-fetch)
31359 (uri (git-reference
31360 (url "https://gitlab.com/dpizetta/helpdev")
31361 (commit (string-append "v" version))))
31362 (file-name (git-file-name name version))
31363 (sha256
31364 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
31365 (build-system pyproject-build-system)
31366 (native-inputs (list python-pip python-pytest python-setuptools))
31367 (home-page "https://gitlab.com/dpizetta/helpdev")
31368 (synopsis "Extract information about the Python environment easily")
31369 (description
31370 "Helpdev is a library to easily extract information about the Python
31371environment.")
31372 (license license:expat)))
31373
31374(define-public python-logutils
31375 (package
31376 (name "python-logutils")
31377 (version "0.3.5")
31378 (source
31379 (origin
31380 (method url-fetch)
31381 (uri (pypi-uri "logutils" version))
31382 (sha256
31383 (base32
31384 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
31385 (build-system pyproject-build-system)
31386 (arguments
31387 (list
31388 #:test-flags
31389 ;; XXX: Unclear why this test fails.
31390 #~(list "--deselect=tests/test_adapter.py::AdapterTest::test_hashandlers"
31391 "--ignore=tests/test_redis.py")))
31392 (native-inputs (list python-pytest python-setuptools))
31393 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
31394 (synopsis "Logging utilities")
31395 (description "This package provides a set of handlers for the Python
31396standard library logging package. Some of these handlers are out-of-scope
31397for the standard library, and so they are packaged here. Others are updated
31398versions which have appeared in recent Python releases, but are usable with
31399older versions of Python and so are packaged here.")
31400 (license license:bsd-3)))
31401
31402(define-public python-loguru
31403 (package
31404 (name "python-loguru")
31405 (version "0.7.2")
31406 (source
31407 (origin
31408 (method url-fetch)
31409 (uri (pypi-uri "loguru" version))
31410 (sha256
31411 (base32 "1b2ipp8di3y10gd7kiin9fyazv5rijbfwh3383yk8psi48ssawg6"))))
31412 (build-system pyproject-build-system)
31413 (arguments
31414 (list
31415 #:test-flags
31416 #~(list"--numprocesses" (number->string (parallel-job-count))
31417 ;; All of these fail with: error: Cannot find implementation or
31418 ;; library stub for module named "loguru"
31419 "--ignore=tests/typesafety/test_logger.yml")))
31420 (native-inputs
31421 (list python-freezegun
31422 python-pytest
31423 python-pytest-mypy-plugins
31424 python-pytest-xdist
31425 python-setuptools
31426 python-wheel))
31427 (propagated-inputs
31428 (list python-colorama))
31429 (home-page "https://github.com/Delgan/loguru")
31430 (synopsis "Python logging made (stupidly) simple")
31431 (description "Python logging made (stupidly) simple")
31432 (license license:expat)))
31433
31434(define-public python-helper
31435 (package
31436 (name "python-helper")
31437 (version "2.5.0")
31438 (source
31439 (origin
31440 (method git-fetch)
31441 (uri (git-reference
31442 (url "https://github.com/gmr/helper")
31443 (commit version)))
31444 (file-name (git-file-name name version))
31445 (sha256
31446 (base32 "0zypjv8rncvrsgl200v7d3bn08gs48dwqvgamfqv71h07cj6zngp"))))
31447 (build-system pyproject-build-system)
31448 (arguments (list #:test-backend #~'unittest))
31449 (native-inputs (list python-mock python-setuptools))
31450 (propagated-inputs (list python-logutils python-pyyaml))
31451 (home-page "https://github.com/gmr/helper")
31452 (synopsis "Library for writing configurable applications and daemons")
31453 (description
31454 "This package provides procedures for quickly writing configurable
31455applications and daemons.")
31456 (license license:bsd-3)))
31457
31458(define-public python-qtsass
31459 (package
31460 (name "python-qtsass")
31461 (version "0.4.0")
31462 (source
31463 (origin
31464 ;; There are no tests in the PyPI tarball.
31465 (method git-fetch)
31466 (uri (git-reference
31467 (url "https://github.com/spyder-ide/qtsass/")
31468 (commit (string-append "v" version))))
31469 (file-name (git-file-name name version))
31470 (sha256
31471 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
31472 (build-system pyproject-build-system)
31473 (native-inputs
31474 (list python-flaky python-pytest python-setuptools python-wheel))
31475 (propagated-inputs
31476 (list python-libsass))
31477 (home-page "https://github.com/spyder-ide/qtsass")
31478 (synopsis "Compile SCSS files to valid Qt stylesheets")
31479 (description
31480 "Besides being used in web development, CSS is also the way to stylize
31481Qt-based desktop applications. However, Qt's CSS has a few variations that
31482prevent the direct use of SASS compiler.
31483
31484The purpose of this tool is to fill the gap between SASS and Qt-CSS by
31485handling those variations.")
31486 (license license:expat)))
31487
31488(define-public python-qdarkstyle
31489 (package
31490 (name "python-qdarkstyle")
31491 (version "3.2.3")
31492 (source
31493 (origin
31494 (method url-fetch)
31495 (uri (pypi-uri "QDarkStyle" version))
31496 (sha256
31497 (base32
31498 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
31499 (build-system pyproject-build-system)
31500 (native-inputs (list python-pytest
31501 python-qtsass
31502 python-setuptools
31503 python-watchdog
31504 python-wheel))
31505 (propagated-inputs
31506 (list python-qtpy python-pyqt-6))
31507 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
31508 (synopsis
31509 "Complete dark stylesheet for Python and Qt applications")
31510 (description "QDarkStyle is the most complete dark stylesheet for Python and
31511Qt applications.")
31512 (license license:expat)))
31513
31514(define-public python-pystray
31515 (package
31516 (name "python-pystray")
31517 (version "0.19.5")
31518 (source
31519 (origin
31520 (method git-fetch)
31521 (uri (git-reference
31522 (url "https://github.com/moses-palmer/pystray")
31523 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
31524 (file-name (git-file-name name version))
31525 (sha256
31526 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
31527 (build-system pyproject-build-system)
31528 (arguments
31529 (list
31530 ;; The test suite requires user interaction, there are no automated
31531 ;; tests.
31532 #:tests? #false
31533 #:phases #~(modify-phases %standard-phases
31534 (add-before 'sanity-check 'use-dummy-backend
31535 (lambda _
31536 ;; Without setting this, pystray tries to connect to
31537 ;; X11 on import.
31538 (setenv "PYSTRAY_BACKEND" "dummy"))))))
31539 (native-inputs (list python-sphinx python-setuptools))
31540 (propagated-inputs (list python-pillow python-six python-xlib))
31541 (home-page "https://github.com/moses-palmer/pystray")
31542 (synopsis "Create a system tray icon")
31543 (description "This library allows you to create a system tray icon.
31544It makes it possible to specify an icon, a title and a callback for when
31545the icon is activated. The icon and title can be changed after the icon
31546has been created, and the visibility of the icon can be toggled.")
31547 (license license:lgpl3+)))
31548
31549(define-public python-bitstring
31550 (package
31551 (name "python-bitstring")
31552 (version "4.3.1")
31553 (source
31554 (origin
31555 (method url-fetch)
31556 (uri (pypi-uri "bitstring" version))
31557 (sha256
31558 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
31559 (build-system pyproject-build-system)
31560 (arguments
31561 (list
31562 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
31563 "--ignore=tests/test_fp8.py"
31564 "--ignore=tests/test_mxfp.py")))
31565 (native-inputs
31566 (list python-gfloat python-pytest python-setuptools python-wheel))
31567 (propagated-inputs
31568 (list python-bitarray))
31569 (home-page "https://github.com/scott-griffiths/bitstring")
31570 (synopsis
31571 "Simple construction, analysis and modification of binary data")
31572 (description
31573 "Bitstring is a library for simple construction, analysis and modification
31574 of binary data.")
31575 (license license:expat)))
31576
31577(define-public python-confuse
31578 (package
31579 (name "python-confuse")
31580 (version "2.0.1")
31581 (source
31582 (origin
31583 (method url-fetch)
31584 (uri (pypi-uri "confuse" version))
31585 (sha256
31586 (base32
31587 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
31588 (build-system pyproject-build-system)
31589 (native-inputs (list python-flit-core python-pytest))
31590 (propagated-inputs (list python-pyyaml))
31591 (home-page "https://github.com/beetbox/confuse")
31592 (synopsis "Painless YAML configuration")
31593 (description "Confuse is a configuration library for Python that uses
31594YAML. It takes care of defaults, overrides, type checking, command-line
31595integration, human-readable errors, and standard OS-specific locations.")
31596 (license license:expat)))
31597
31598(define-public python-referencing
31599 (package
31600 (name "python-referencing")
31601 (version "0.35.1")
31602 (source
31603 (origin
31604 (method url-fetch)
31605 (uri (pypi-uri "referencing" version))
31606 (sha256
31607 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
31608 (build-system pyproject-build-system)
31609 (arguments
31610 (list
31611 #:test-flags
31612 '(list "--pyargs" "referencing/tests")
31613 #:phases
31614 '(modify-phases %standard-phases
31615 (add-after 'unpack 'patch-pyproject
31616 (lambda _
31617 ;; The build system does not like this.
31618 (substitute* "pyproject.toml"
31619 ((" \"Topic :: File Formats.*") "")))))))
31620 (propagated-inputs (list python-attrs python-rpds-py))
31621 (native-inputs
31622 (list python-hatchling
31623 python-hatch-vcs
31624 python-jsonschema
31625 python-pytest
31626 python-pytest-subtests))
31627 (home-page "https://github.com/python-jsonschema/referencing")
31628 (synopsis "JSON Referencing + Python")
31629 (description "This package provides an implementation-agnostic
31630implementation of JSON reference resolution.")
31631 (license license:expat)))
31632
31633(define-public python-referencing-bootstrap
31634 (package
31635 (inherit python-referencing)
31636 (name "python-referencing-bootstrap")
31637 (arguments
31638 (list
31639 #:tests? #false
31640 #:phases
31641 '(modify-phases %standard-phases
31642 (add-after 'unpack 'patch-pyproject
31643 (lambda _
31644 ;; The build system does not like this.
31645 (substitute* "pyproject.toml"
31646 ((" \"Topic :: File Formats.*") "")))))))
31647 (native-inputs (list python-hatchling python-hatch-vcs))))
31648
31649(define-public python-reflink
31650 (package
31651 (name "python-reflink")
31652 (version "0.2.2")
31653 (source
31654 (origin
31655 (method git-fetch)
31656 (uri (git-reference
31657 (url "https://gitlab.com/rubdos/pyreflink")
31658 (commit version)))
31659 (file-name (git-file-name name version))
31660 (sha256
31661 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
31662 (build-system pyproject-build-system)
31663 (arguments
31664 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
31665 (propagated-inputs (list python-cffi))
31666 (native-inputs (list python-pytest python-setuptools))
31667 (home-page "https://gitlab.com/rubdos/pyreflink")
31668 (synopsis "Python wrapper around reflink system call")
31669 (description
31670 "Python reflink wraps around platform specific @code{reflink}
31671implementations.")
31672 (license license:expat)))
31673
31674(define-public python-retry
31675 (package
31676 (name "python-retry")
31677 (version "0.9.2")
31678 (source
31679 (origin
31680 (method git-fetch)
31681 (uri (git-reference
31682 (url "https://github.com/invl/retry")
31683 (commit version)))
31684 (file-name (git-file-name name version))
31685 (sha256
31686 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
31687 (build-system pyproject-build-system)
31688 (arguments
31689 (list
31690 #:phases
31691 #~(modify-phases %standard-phases
31692 (add-before 'build 'set-version
31693 (lambda _
31694 (setenv "PBR_VERSION" #$version))))))
31695 (native-inputs (list python-pbr python-pytest))
31696 (propagated-inputs (list python-decorator python-py))
31697 (home-page "https://github.com/invl/retry")
31698 (synopsis "Retry decorator")
31699 (description
31700 "@code{retry} is an easy to use retry decorator for Python. It can be
31701used to retry a function a given number of times.")
31702 (license license:asl2.0)))
31703
31704(define-public python-crayons
31705 (package
31706 (name "python-crayons")
31707 (version "0.4.0")
31708 (source
31709 (origin
31710 (method git-fetch)
31711 (uri (git-reference
31712 (url "https://github.com/MasterOdin/crayons")
31713 (commit (string-append "v" version))))
31714 (file-name (git-file-name name version))
31715 (sha256
31716 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
31717 (build-system pyproject-build-system)
31718 (arguments
31719 (list
31720 #:test-backend #~'custom
31721 #:test-flags #~(list "test_crayons.py")))
31722 (native-inputs (list python-setuptools))
31723 (propagated-inputs (list python-colorama))
31724 (home-page "https://github.com/MasterOdin/crayons")
31725 (synopsis "TextUI colors for Python")
31726 (description
31727 "This package gives you colored strings for the terminal. Crayons
31728automatically wraps a given string in the foreground color and restores the
31729original state after the string is printed.")
31730 (license license:expat)))
31731
31732(define-public python-sane
31733 (package
31734 (name "python-sane")
31735 (version "2.9.2")
31736 (source
31737 (origin
31738 (method git-fetch)
31739 (uri (git-reference
31740 (url "https://github.com/python-pillow/Sane")
31741 (commit (string-append "v" version))))
31742 (file-name (git-file-name name version))
31743 (sha256
31744 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
31745 (build-system pyproject-build-system)
31746 (arguments (list #:tests? #f)) ; No tests.
31747 (native-inputs (list python-setuptools))
31748 (inputs (list sane))
31749 (home-page "https://github.com/python-pillow/Sane")
31750 (synopsis "Python interface to the SANE scanner")
31751 (description
31752 "This package provides Python interface to the SANE scanner and frame
31753grabber interface.")
31754 (license (license:non-copyleft
31755 ;; Yet another variant of the X/MIT license.
31756 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
31757
31758(define-public python-scikit-build
31759 (package
31760 (name "python-scikit-build")
31761 (version "0.18.1")
31762 (source
31763 (origin
31764 (method url-fetch)
31765 (uri (pypi-uri "scikit_build" version))
31766 (sha256
31767 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
31768 (patches
31769 (search-patches "python-scikit-build-setuptools-compat.patch"))))
31770 (build-system pyproject-build-system)
31771 (arguments
31772 (list
31773 #:phases
31774 #~(modify-phases %standard-phases
31775 (add-after 'unpack 'patch-cmake-executable
31776 (lambda* (#:key inputs #:allow-other-keys)
31777 (substitute* "skbuild/constants.py"
31778 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
31779 (format #f "~a ~s~%" head
31780 (search-input-file inputs "bin/cmake"))))))
31781 (add-before 'check 'pre-check
31782 (lambda _
31783 ;; Some tests try to access the network before being skipped.
31784 ;; Skip them by default.
31785 (substitute* "tests/test_setup.py"
31786 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
31787 "pytest.mark.isolated()\n"))))
31788 (replace 'check
31789 (lambda* (#:key tests? #:allow-other-keys)
31790 (when tests?
31791 ;; These tests attempt to pull dependencies from the Internet.
31792 (delete-file "tests/test_distribution.py")
31793 (delete-file "tests/test_pep518.py")
31794 ;; The tests marked as "isolate" are tests that require access
31795 ;; to the network.
31796 (invoke "pytest" "-vv" "-m" "not isolated"
31797 "-n" (number->string (parallel-job-count))
31798 "-k" (string-append
31799 ;; These tests attempt to write to read-only
31800 ;; Python install directory.
31801 "not test_install_command "
31802 "and not test_test_command "
31803 "and not test_hello_develop "
31804 ;; These sdist-related tests fail for unknown
31805 ;; reasons (see:
31806 ;; https://github.com/scikit-build/scikit-build/issues/689).
31807 "and not test_hello_sdist_with_base "
31808 "and not test_manifest_in_sdist "
31809 "and not test_hello_sdist "
31810 "and not test_sdist_with_symlinks "
31811 ;; These are not parallel safe and fail
31812 ;; nondeterministically (see:
31813 ;; https://github.com/scikit-build/scikit-build/issues/711).
31814 "and not test_generator_cleanup "
31815 "and not test_generator_selection "
31816 ;; … and there's more of them
31817 "and not test_cxx_compiler "
31818 "and not test_fortran_compiler ")))))
31819 (add-after 'install 'install-cmake
31820 (lambda* (#:key outputs #:allow-other-keys)
31821 (let ((lib (string-append (assoc-ref outputs "out")
31822 "/lib/cmake/modules")))
31823 (mkdir-p lib)
31824 (with-directory-excursion "skbuild/resources/cmake"
31825 (for-each (lambda (file) (install-file file lib))
31826 (find-files "." "\\.cmake")))))))))
31827 (native-inputs
31828 (list cmake-minimal
31829 gfortran
31830 git-minimal/pinned ;for tests
31831 ninja/pinned
31832 python-cython
31833 python-hatch-fancy-pypi-readme
31834 python-hatch-vcs
31835 python-hatchling
31836 python-pytest
31837 python-pytest-mock
31838 python-pytest-xdist
31839 python-requests
31840 python-virtualenv))
31841 (propagated-inputs
31842 (list python-distro
31843 python-packaging
31844 python-wheel))
31845 (home-page "https://github.com/scikit-build/scikit-build")
31846 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
31847 (description "Scikit-build is an improved build system generator for
31848CPython C/C++/Fortran/Cython extensions. It has support for additional
31849compilers, build systems, cross compilation, and locating dependencies and
31850determining their build requirements. The scikit-build package is
31851fundamentally just glue between the @code{setuptools} Python module and
31852CMake.")
31853 (license license:expat)))
31854
31855(define-public python-screenkey
31856 (package
31857 (name "python-screenkey")
31858 (version "1.5")
31859 (source
31860 (origin
31861 (method git-fetch)
31862 (uri (git-reference
31863 (url "https://gitlab.com/screenkey/screenkey")
31864 (commit (string-append "v" version))))
31865 (file-name (git-file-name name version))
31866 (sha256
31867 (base32 "0j719kld4dr85d9lxn0d0b6156mcy09jm7arssfp2n3j6hmjssci"))))
31868 (build-system pyproject-build-system)
31869 (arguments
31870 (list
31871 #:tests? #f ; No tests.
31872 #:phases
31873 #~(modify-phases %standard-phases
31874 (add-after 'unpack 'fix-dlopen-paths
31875 (lambda* (#:key inputs #:allow-other-keys)
31876 (substitute* "Screenkey/xlib.py"
31877 (("(libXtst.so.6|libX11.so.6)" lib)
31878 (search-input-file inputs (string-append "/lib/" lib))))))
31879 (add-after 'install 'wrap-screenkey
31880 (lambda _
31881 (wrap-program (string-append #$output "/bin/screenkey")
31882 `("GUIX_PYTHONPATH" ":" prefix
31883 (,(getenv "GUIX_PYTHONPATH")))
31884 `("GI_TYPELIB_PATH" ":" prefix
31885 (,(getenv "GI_TYPELIB_PATH")))))))))
31886 (inputs (list bash-minimal
31887 gtk+
31888 libx11
31889 libxtst
31890 python-babel
31891 python-dbus
31892 python-pycairo
31893 python-pygobject
31894 slop))
31895 (native-inputs (list python-setuptools))
31896 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
31897 (synopsis "Screencast tool to display pressed keys")
31898 (description
31899 "Screenkey is a screencast tool to display your keys inspired by
31900Screenflick.")
31901 (license license:gpl3+)))
31902
31903(define-public python-jinja2-cli
31904 (package
31905 (name "python-jinja2-cli")
31906 (version "0.8.2")
31907 (source
31908 (origin
31909 (method git-fetch)
31910 (uri (git-reference
31911 (url "https://github.com/mattrobenolt/jinja2-cli")
31912 (commit version)))
31913 (file-name (git-file-name name version))
31914 (sha256
31915 (base32
31916 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
31917 (build-system pyproject-build-system)
31918 (propagated-inputs
31919 (list python-jinja2))
31920 (native-inputs
31921 (list python-jinja2
31922 python-pytest
31923 python-setuptools
31924 python-wheel))
31925 (home-page "https://github.com/mattrobenolt/jinja2-cli")
31926 (synopsis "Command-line interface to Jinja2")
31927 (description
31928 "This package provides a command-line interface (CLI) to the Jinja2
31929template engine.")
31930 (license license:bsd-3)))
31931
31932(define-public python-readability
31933 (package
31934 (name "python-readability")
31935 (version "0.3.1")
31936 (source
31937 (origin
31938 (method git-fetch)
31939 (uri (git-reference
31940 (url "https://github.com/andreasvc/readability/")
31941 (commit (string-append "v" version))))
31942 (file-name (git-file-name name version))
31943 (sha256
31944 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
31945 (build-system pyproject-build-system)
31946 (arguments (list #:tests? #f)) ; No tests.
31947 (native-inputs (list python-setuptools))
31948 (home-page "https://github.com/andreasvc/readability/")
31949 (synopsis "Measure text readability using surface characteristics")
31950 (description
31951 "This package provides a Python library that is an implementation of
31952traditional readability measures based on simple surface characteristics.
31953These measures are basically linear regressions based on the number of words,
31954syllables, and sentences.")
31955 (license license:asl2.0)))
31956
31957(define-public python-readability-lxml
31958 ;; No releases since 2020, see:
31959 ;; <https://github.com/buriy/python-readability/issues/196>.
31960 (package
31961 (name "python-readability-lxml")
31962 (version "0.8.4.1")
31963 (source
31964 (origin
31965 (method git-fetch)
31966 (uri (git-reference
31967 (url "http://github.com/buriy/python-readability")
31968 (commit version)))
31969 (file-name (git-file-name name version))
31970 (sha256
31971 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
31972 (build-system pyproject-build-system)
31973 (native-inputs
31974 (list python-poetry-core
31975 python-pytest))
31976 (propagated-inputs
31977 (list python-chardet
31978 python-cssselect
31979 python-lxml
31980 python-lxml-html-clean)) ;XXX: it sould be part of python-lxml lib
31981 (home-page "http://github.com/buriy/python-readability")
31982 (synopsis "HTML to text parser")
31983 (description
31984 "This package provides classes and function that strip gratuitous markup
31985from web pages to make them easier to read.")
31986 (license license:asl2.0)))
31987
31988(define-public python-listparser
31989 (package
31990 (name "python-listparser")
31991 (version "0.20")
31992 (source
31993 (origin
31994 (method git-fetch)
31995 (uri (git-reference
31996 (url "https://github.com/kurtmckee/listparser")
31997 (commit (string-append "v" version))))
31998 (file-name (git-file-name name version))
31999 (sha256
32000 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
32001 (build-system pyproject-build-system)
32002 (native-inputs (list python-pytest python-poetry-core))
32003 (home-page "https://github.com/kurtmckee/listparser")
32004 (synopsis "Parse subscription lists in Python")
32005 (description
32006 "This package provides a Python library that can parse OPML, FOAF, and
32007iGoogle subscription lists.")
32008 (license license:expat)))
32009
32010(define-public python-smartypants
32011 (package
32012 (name "python-smartypants")
32013 (version "2.0.2")
32014 (source
32015 (origin
32016 (method url-fetch)
32017 (uri (pypi-uri "smartypants" version))
32018 (sha256
32019 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
32020 (build-system pyproject-build-system)
32021 (native-inputs
32022 (list python-docutils python-pygments python-setuptools))
32023 (home-page "https://github.com/justinmayer/smartypants.py")
32024 (synopsis "Translate punctuation characters into smart quotes")
32025 (description
32026 "@command{smartpants} can perform the following transformations:
32027@enumerate
32028@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
32029@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
32030entities
32031@item Dashes (-- and ---) into en- and em-dash entities
32032@item Three consecutive dots (... or . . .) into an ellipsis entity
32033@end enumerate")
32034 (license license:bsd-3)))
32035
32036(define-public python-ld
32037 (package
32038 (name "python-ld")
32039 (version "1.9.0")
32040 (source
32041 (origin
32042 (method git-fetch)
32043 (uri (git-reference
32044 (url "https://github.com/nir0s/ld")
32045 (commit (string-append "v" version))))
32046 (file-name (git-file-name name version))
32047 (sha256
32048 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
32049 (build-system pyproject-build-system)
32050 (arguments
32051 (list
32052 ;; XXX: These tests expect ubuntu distro.
32053 #:test-flags
32054 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
32055 "test_ubuntu14nomodules_lsb_release"
32056 "test_trailingblanks_lsb_release")
32057 " and not "))))
32058 (native-inputs (list python-pytest python-setuptools))
32059 (home-page "https://github.com/nir0s/ld")
32060 (synopsis "OS platform information API")
32061 (description
32062 "The ld package provides information about the GNU/Linux distribution it
32063runs on, such as a reliable machine-readable ID, or version information.")
32064 (license license:asl2.0)))
32065
32066(define-public python-quicktions
32067 (package
32068 (name "python-quicktions")
32069 (version "1.22")
32070 (source
32071 (origin
32072 (method git-fetch)
32073 (uri (git-reference
32074 (url "https://github.com/scoder/quicktions")
32075 (commit version)))
32076 (file-name (git-file-name name version))
32077 (sha256
32078 (base32
32079 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
32080 (build-system pyproject-build-system)
32081 (native-inputs
32082 (list python-cython python-pytest python-setuptools))
32083 (home-page "https://github.com/scoder/quicktions")
32084 (synopsis "Fast fractions data type for rational numbers")
32085 (description
32086 "This package provides fast fractions data type for rational numbers. It
32087is the cythonized version of @code{fractions.Fraction}.")
32088 (license license:psfl)))
32089
32090(define-public python-pathvalidate
32091 (package
32092 (name "python-pathvalidate")
32093 (version "2.4.1")
32094 (source
32095 (origin
32096 (method git-fetch)
32097 (uri (git-reference
32098 (url "https://github.com/thombashi/pathvalidate")
32099 (commit (string-append "v" version))))
32100 (file-name (git-file-name name version))
32101 (sha256
32102 (base32 "17s9vqmws4sfji4bw6qd4rn7ahzkpj6yp2ia5p6vd8kva8n05h37"))))
32103 (build-system pyproject-build-system)
32104 (native-inputs (list python-allpairspy python-click python-faker
32105 python-pytest python-setuptools))
32106 (home-page "https://github.com/thombashi/pathvalidate")
32107 (synopsis "Sanitize strings representing paths")
32108 (description
32109 "@code{pathvalidate} is a Python library to sanitize/validate strings
32110representing paths or filenames.")
32111 (license license:expat)))
32112
32113(define-public python-escapism
32114 (package
32115 (name "python-escapism")
32116 (version "1.0.1")
32117 (source
32118 (origin
32119 (method git-fetch)
32120 (uri (git-reference
32121 (url "https://github.com/jupyterhub/escapism")
32122 (commit version)))
32123 (file-name (git-file-name name version))
32124 (sha256
32125 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
32126 (build-system pyproject-build-system)
32127 (native-inputs (list python-pytest python-setuptools))
32128 (home-page "https://github.com/jupyterhub/escapism")
32129 (synopsis "Simple, generic library for escaping strings")
32130 (description
32131 "This Python library provides a programming interface to, given a set of
32132safe characters and an escape character, escape safe strings and unescape the
32133result.")
32134 (license license:expat)))
32135
32136(define-public python-recommonmark
32137 (package
32138 (name "python-recommonmark")
32139 (version "0.7.1")
32140 (source
32141 (origin
32142 (method url-fetch)
32143 (uri (pypi-uri "recommonmark" version))
32144 (sha256
32145 (base32
32146 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
32147 (build-system pyproject-build-system)
32148 (arguments
32149 (list
32150 ;; XXX: Some of those fail for no good reason.
32151 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
32152 (native-inputs (list python-pytest python-setuptools python-wheel))
32153 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
32154 (home-page "https://github.com/readthedocs/recommonmark")
32155 (synopsis "Docutils-compatibility bridge to CommonMark")
32156 (description
32157 "This package provides a docutils-compatibility bridge to CommonMark that
32158lets you write CommonMark inside of Docutils & Sphinx projects.")
32159 (license license:expat)))
32160
32161(define-public python-redo
32162 (package
32163 (name "python-redo")
32164 (version "3.0.0")
32165 (source
32166 (origin
32167 (method git-fetch)
32168 (uri (git-reference
32169 (url "https://github.com/mozilla-releng/redo")
32170 (commit version)))
32171 (file-name (git-file-name name version))
32172 (sha256
32173 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
32174 (build-system pyproject-build-system)
32175 (native-inputs
32176 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
32177 (home-page "https://github.com/mozilla-releng/redo")
32178 (synopsis "Utilities to retry Python callables")
32179 (description "Redo provides various means to add seamless ability to
32180retry to any Python callable.")
32181 (license license:mpl2.0)))
32182
32183(define-public python-opcodes
32184 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
32185 ;; version number, which is what we use here.
32186 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
32187 (package
32188 (name "python-opcodes")
32189 (version "0.3.14") ;from 'opcodes/__init__.py'
32190 (home-page "https://github.com/Maratyszcza/Opcodes")
32191 (source
32192 (origin
32193 (method git-fetch)
32194 (uri (git-reference (url home-page) (commit commit)))
32195 (file-name (git-file-name name version))
32196 (sha256
32197 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
32198 (build-system pyproject-build-system)
32199 (native-inputs (list python-pytest python-setuptools))
32200 (synopsis "Database of processor instructions and opcodes")
32201 (description
32202 "This project documents instruction sets in a format convenient for
32203tools development. An instruction set is represented by three files:
32204
32205@itemize
32206@item an XML file that describes instructions;
32207@item an XSD file that describes the structure of the XML file;
32208@item a Python module that reads the XML file and represents it as a set of
32209Python objects;
32210@end itemize
32211
32212It currently provides descriptions for most user-mode x86, x86_64, and k1om
32213instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
32214and BMI2).")
32215 (license license:bsd-2))))
32216
32217(define-public python-cart
32218 (package
32219 (name "python-cart")
32220 (version "1.2.3")
32221 (source
32222 (origin
32223 (method git-fetch)
32224 (uri (git-reference
32225 (url "https://github.com/CybercentreCanada/cart")
32226 (commit (string-append "v" version))))
32227 (file-name (git-file-name name version))
32228 (sha256
32229 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
32230 (build-system pyproject-build-system)
32231 (arguments
32232 (list
32233 #:test-backend #~'unittest))
32234 (native-inputs
32235 (list python-setuptools))
32236 (propagated-inputs
32237 (list python-pycryptodome))
32238 (home-page "https://github.com/CybercentreCanada/cart")
32239 (synopsis "Library for interacting with the CaRT file format")
32240 (description
32241 "This Python library implements the CaRT file format which is commonly
32242used to store and transmit information about computer malware and associated
32243metadata.")
32244 (license license:bsd-2)))
32245
32246(define-public python-ailment
32247 (package
32248 (name "python-ailment")
32249 ;; Must be the same version as python-angr.
32250 (version "9.2.112")
32251 (source
32252 (origin
32253 (method url-fetch)
32254 (uri (pypi-uri "ailment" version))
32255 (sha256
32256 (base32 "1rv8rwvdm7fc9mf8z5hqb54dsj0n7jlnwghd12ll0b2jmh2ix8mn"))))
32257 (build-system pyproject-build-system)
32258 (arguments
32259 `(#:phases (modify-phases %standard-phases
32260 (replace 'check
32261 ;; Many tests are skipped due to cyclic dependencies.
32262 (lambda* (#:key tests? #:allow-other-keys)
32263 (when tests?
32264 (with-directory-excursion "tests"
32265 (invoke "python" "-m" "unittest"))))))))
32266 (native-inputs (list python-setuptools python-wheel))
32267 (home-page "https://github.com/angr/ailment")
32268 (synopsis "The angr intermediate language")
32269 (description
32270 "This Python module implements an @acronym{IL, Intermediate Language},
32271also known as @acronym{IR, Intermediate Representation}, used by the angr
32272binary analysis platform.")
32273 (license license:bsd-2)))
32274
32275(define-public python-cle
32276 (package
32277 (name "python-cle")
32278 ;; Must be the same version as python-angr.
32279 (version "9.2.112")
32280 (source
32281 (origin
32282 (method url-fetch)
32283 (uri (pypi-uri "cle" version))
32284 (sha256
32285 (base32 "11jbvg12wqxz74iy83ax0q8k156xrw6iqv75dix5cpqgacds3gdj"))))
32286 (build-system pyproject-build-system)
32287 (arguments
32288 (list
32289 #:tests? #f))
32290 (propagated-inputs (list python-pefile python-pyelftools python-pyvex
32291 python-sortedcontainers python-cart))
32292 (native-inputs (list python-cffi python-setuptools python-wheel))
32293 (home-page "https://github.com/angr/cle")
32294 (synopsis "Python loader for binaries and their associated libraries")
32295 (description
32296 "CLE loads binaries and their associated libraries, resolves
32297imports and provides an abstraction of process memory the same way as if
32298it was loader by the operating system's loader.")
32299 (license license:bsd-2)))
32300
32301(define-public python-pyvex
32302 (package
32303 (name "python-pyvex")
32304 ;; Must be the same version as python-angr.
32305 (version "9.2.112")
32306 (source
32307 (origin
32308 (method url-fetch)
32309 (uri (pypi-uri "pyvex" version))
32310 (sha256
32311 (base32 "0z1jiflp7h07mfc26am3v7v5z2n6mw9hkfylbs86qgpm93qcf6i3"))))
32312 (build-system pyproject-build-system)
32313 (arguments
32314 (list
32315 #:phases #~(modify-phases %standard-phases
32316 (replace 'check
32317 (lambda* (#:key tests? #:allow-other-keys)
32318 (when tests?
32319 (with-directory-excursion "tests"
32320 (invoke "python" "-m" "unittest")))))
32321
32322 (add-before 'build 'set-cc
32323 (lambda _
32324 (setenv "CC" #$(cc-for-target))
32325 (setenv "CC_NATIVE" "gcc"))))))
32326 (propagated-inputs (list python-archinfo python-bitstring python-cffi))
32327 (native-inputs (list python-setuptools python-wheel))
32328 (home-page "https://github.com/angr/pyvex")
32329 (synopsis "Python interface to libVEX and VEX IR")
32330 (description
32331 "This package provides a Python interface the libVEX and VEX IR.
32332VEX is the intermediate representation (also known as intermediate
32333language) used by the Valgrind analysis tool. As such, VEX is designed
32334to enable all kinds of binary analysis tasks.")
32335 (license license:bsd-2)))
32336
32337(define-public python-claripy
32338 (package
32339 (name "python-claripy")
32340 ;; Must be the same version as python-angr.
32341 (version "9.2.112")
32342 (source
32343 (origin
32344 ;; Fetching from Git as pypi release doesn't include all test files.
32345 (method git-fetch)
32346 (uri (git-reference
32347 (url "https://github.com/angr/claripy")
32348 (commit (string-append "v" version))))
32349 (file-name (git-file-name name version))
32350 (sha256
32351 (base32 "0c6q6imxjwhxn87d9yz8zvyrszk94r25w8x0g1lr6mrpa9bx7wai"))
32352 (modules '((guix build utils)))
32353 (snippet '(begin
32354 (substitute* "setup.cfg"
32355 ;; Relax the z3 version constraint.
32356 ;; See https://github.com/angr/claripy/commit/d1fe2df
32357 (("z3-solver==4.13.0.0")
32358 ""))))))
32359 (build-system pyproject-build-system)
32360 (arguments
32361 `(#:phases (modify-phases %standard-phases
32362 (replace 'check
32363 (lambda* (#:key tests? #:allow-other-keys)
32364 (when tests?
32365 (with-directory-excursion "tests"
32366 (invoke "python" "-m" "unittest"))))))))
32367 (propagated-inputs (list python-cachetools python-decorator python-pysmt
32368 z3))
32369 (native-inputs (list python-setuptools python-wheel))
32370 (home-page "https://github.com/angr/claripy")
32371 (synopsis "Abstraction layer for constraint solvers")
32372 (description
32373 "This Python module provides an abstraction layer for interacting
32374with constraint solvers. Specifically, it is intended to be used with
32375SMT solvers and is built on top of the Z3 solver.")
32376 (license license:bsd-2)))
32377
32378(define-public python-pysmt
32379 (package
32380 (name "python-pysmt")
32381 (version "0.9.6")
32382 (source
32383 (origin
32384 ;; Fetching from Git as pypi release doesn't include all test files.
32385 (method git-fetch)
32386 (uri (git-reference
32387 (url "https://github.com/pysmt/pysmt")
32388 (commit (string-append "v" version))))
32389 (file-name (git-file-name name version))
32390 (sha256
32391 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
32392 (build-system pyproject-build-system)
32393 (arguments
32394 `(#:phases (modify-phases %standard-phases
32395 (add-before 'check 'set-pysmt-solver
32396 (lambda _
32397 (setenv "PYSMT_SOLVER" "z3"))))))
32398 (native-inputs (list python-pytest python-setuptools python-wheel))
32399 (propagated-inputs (list z3))
32400 (home-page "https://github.com/pysmt/pysmt")
32401 (synopsis
32402 "Solver-agnostic library for SMT formula manipulation and solving")
32403 (description
32404 "This Python module provides a solver-agnostic abstraction for
32405working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
32406it allows manipulation and solving such formulas.")
32407 (license license:asl2.0)))
32408
32409(define-public python-rpyc
32410 (package
32411 (name "python-rpyc")
32412 (version "5.3.1")
32413 (source
32414 (origin
32415 ;; Fetching from Git as pypi release doesn't include all test files.
32416 (method git-fetch)
32417 (uri (git-reference
32418 (url "https://github.com/tomerfiliba-org/rpyc")
32419 (commit version)))
32420 (file-name (git-file-name name version))
32421 (sha256
32422 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
32423 (snippet '(begin
32424 ;; Disable deploy tests, these rely on OpenSSH and require
32425 ;; configuring the SSH client manually to accept the host key.
32426 (delete-file "tests/test_deploy.py")
32427 ;; Disable tests requiring network access. These tests
32428 ;; presently fail with the error "Network is unreachable".
32429 (delete-file "tests/test_registry.py")))))
32430 (build-system pyproject-build-system)
32431 (arguments
32432 `(#:phases (modify-phases %standard-phases
32433 (replace 'check
32434 (lambda* (#:key tests? #:allow-other-keys)
32435 (when tests?
32436 (with-directory-excursion "tests"
32437 (invoke "python" "-m" "unittest"))))))))
32438 (propagated-inputs (list python-hatchling python-plumbum))
32439 (home-page "https://github.com/tomerfiliba-org/rpyc")
32440 (synopsis
32441 "Remote Python Call (RPyC) is a symmetric distributed computing library")
32442 (description
32443 "This Python module enables remote procedure calls, clustering, and
32444distributed-computing. For this purpose, it makes use of object-proxying, a technique
32445that employs python's dynamic nature, to overcome the physical boundaries between
32446processes and computers, so that remote objects can be manipulated as if they
32447were local.")
32448 (license license:expat)))
32449
32450(define-public python-nampa
32451 (package
32452 (name "python-nampa")
32453 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
32454 ;; has 0.1.1 as version. Latest commit is from 2024.
32455 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
32456 (revision . "0")))
32457 (version (git-version "1.0.0"
32458 (assoc-ref properties 'revision)
32459 (assoc-ref properties 'commit)))
32460 (source
32461 (origin
32462 (method git-fetch)
32463 (uri (git-reference
32464 (url "https://github.com/thebabush/nampa")
32465 (commit (assoc-ref properties 'commit))))
32466 (file-name (git-file-name name version))
32467 (sha256
32468 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
32469 (build-system pyproject-build-system)
32470 (arguments
32471 (list
32472 #:test-flags
32473 #~(list "-k test_random_values")
32474 #:phases
32475 #~(modify-phases %standard-phases
32476 (add-after 'unpack 'patch-tests
32477 (lambda _
32478 ;; Unclear why this top-level __init__.py is here. It seems to
32479 ;; setup a plugin for binaryninja, which Guix does not package.
32480 (delete-file "__init__.py")
32481 ;; Yields tests, which is not allowed anymore.
32482 (substitute* "tests/test_crc.py"
32483 (("yield") "#yield")))))))
32484 (propagated-inputs (list python-future))
32485 (native-inputs (list python-pytest python-setuptools))
32486 (home-page "https://github.com/thebabush/nampa")
32487 (synopsis "Python implementation of IDA Pro's FLIRT technology")
32488 (description
32489 "This Python module implements the @acronym{FLIRT, Fast Library Identification
32490and Recognition Technology}. This technology is useful for identifying
32491common library subroutines in disassembled binaries.")
32492 (license license:lgpl3)))
32493
32494(define-public python-mulpyplexer
32495 (package
32496 (name "python-mulpyplexer")
32497 (version "0.09")
32498 (source
32499 (origin
32500 (method url-fetch)
32501 (uri (pypi-uri "mulpyplexer" version))
32502 (sha256
32503 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
32504 (build-system pyproject-build-system)
32505 (arguments
32506 (list
32507 #:phases
32508 '(modify-phases %standard-phases
32509 (replace 'check
32510 (lambda* (#:key tests? #:allow-other-keys)
32511 (when tests?
32512 (invoke "python" "mulpyplexer.py")))))))
32513 (native-inputs (list python-setuptools python-wheel))
32514 (home-page "https://github.com/zardus/mulpyplexer/")
32515 (synopsis "Multiplexes interactions with lists of Python objects")
32516 (description "This module provides utilities for multiplexing
32517interactions with lists of Python objects.")
32518 (license license:bsd-2)))
32519
32520(define-public python-itanium-demangler
32521 (package
32522 (name "python-itanium-demangler")
32523 (version "1.1")
32524 (source
32525 (origin
32526 (method git-fetch)
32527 (uri (git-reference
32528 ;; PyPI only provides wheels and no source code.
32529 (url "https://github.com/whitequark/python-itanium_demangler")
32530 (commit (string-append "v" version))))
32531 (file-name (git-file-name name version))
32532 (sha256
32533 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
32534 (build-system pyproject-build-system)
32535 (arguments
32536 (list
32537 #:phases
32538 #~(modify-phases %standard-phases
32539 (replace 'check
32540 (lambda* (#:key tests? #:allow-other-keys)
32541 (when tests?
32542 (with-directory-excursion "tests"
32543 (invoke "python" "-m" "unittest"))))))))
32544 (native-inputs (list python-setuptools python-wheel))
32545 (home-page "https://github.com/whitequark/python-itanium_demangler/")
32546 (synopsis "Pure Python Itanium C++ ABI demangler")
32547 (description
32548"This Python module provides an implementation of the Itanium C++ ABI symbol
32549mangling language. The demangler generates an abstract syntax tree from
32550mangled symbols, which can be used for directly extracting type information.")
32551 (license license:bsd-0)))
32552
32553(define-public python-angr
32554 (package
32555 (name "python-angr")
32556 (version "9.2.112")
32557 (source
32558 (origin
32559 ;; Fetching from Git as pypi release doesn't include all test files.
32560 (method git-fetch)
32561 (patches (search-patches "python-angr-check-exec-deps.patch"))
32562 (uri (git-reference
32563 (url "https://github.com/angr/angr")
32564 (commit (string-append "v" version))))
32565 (file-name (git-file-name name version))
32566 (sha256
32567 (base32 "1179926xbfh2930laz33p90vj532jk7g2qylzzpw1185yhlf9cis"))))
32568 (build-system pyproject-build-system)
32569 (arguments
32570 (list
32571 #:test-flags
32572 #~(list "-x"
32573 "--dist" "load"
32574 "-n" (number->string (parallel-job-count))
32575 "-k"
32576 ;; test_mips32_missing_offset_in_instructions fails
32577 ;; with capstone 5 and passes with capstone 4. Might
32578 ;; be a capstone regressions, needs investigation.
32579 ;;
32580 ;; test_concrete_memset is a non-deterministic benchmark.
32581 ;; test_similarity_fauxware is flaky.
32582 (string-append
32583 "not test_mips32_missing_offset_in_instructions"
32584 " and not test_concrete_memset"
32585 " and not test_similarity_fauxware"))
32586 #:phases #~(modify-phases %standard-phases
32587 (add-after 'unpack 'patch-tests
32588 (lambda* (#:key inputs #:allow-other-keys)
32589 (let ((coreutils (assoc-ref inputs "coreutils")))
32590 ;; The constraint exists because of a capstone bug for which
32591 ;; we backport a patch, hence we can relax the constraint.
32592 ;;
32593 ;; See https://github.com/angr/angr/issues/4656
32594 (substitute* "setup.cfg"
32595 (("capstone==5.0.0.post1")
32596 "capstone"))
32597 ;; Relax constraint on python-rich, the constraint is too strict,
32598 ;; angr work well with our packaged version of python-rich.
32599 (substitute* "setup.cfg"
32600 (("rich>=13.1.0")
32601 "rich"))
32602 (substitute* "tests/common.py"
32603 (("\\[\"cc\"\\]")
32604 "[\"gcc\"]")))))
32605 (add-before 'check 'check-setup
32606 (lambda _
32607 (copy-recursively
32608 #$(this-package-native-input "binaries")
32609 "../binaries")))
32610 (add-before 'build 'set-cc
32611 (lambda _
32612 (setenv "CC" "gcc"))))))
32613 (propagated-inputs (list python-ailment
32614 python-archinfo
32615 python-cachetools
32616 python-cffi
32617 python-claripy
32618 python-cle
32619 python-colorama
32620 python-cppheaderparser
32621 python-dpkt
32622 python-gitpython
32623 python-mulpyplexer
32624 python-nampa
32625 python-networkx
32626 python-protobuf
32627 python-psutil
32628 python-itanium-demangler
32629 python-pycparser
32630 python-pyvex
32631 python-pyformlang
32632 python-rich
32633 python-rpyc
32634 python-sortedcontainers
32635 python-sqlalchemy
32636 python-sympy
32637 python-unique-log-filter
32638 unicorn-2.0))
32639 (native-inputs `(("python-pytest" ,python-pytest)
32640 ("python-pytest-xdist" ,python-pytest-xdist)
32641 ("python-setuptools" ,python-setuptools)
32642 ("python-wheel" ,python-wheel)
32643 ("binaries"
32644 ;; This repository ships several binaries used only for testing
32645 ;; purpose. The binaries are not executed and not part of the
32646 ;; angr distribution, they are only used to test angr's binary
32647 ;; analysis capabilities. In the context of the GNU FSDG, these
32648 ;; files should be considered non-functional data.
32649 ,(origin
32650 (method git-fetch)
32651 (uri (git-reference (url
32652 "https://github.com/angr/binaries")
32653 (commit (string-append "v"
32654 version))))
32655 (file-name (git-file-name "angr-binaries" version))
32656 (sha256 (base32
32657 "0bxzf6alkczv9r0151ksvcwyksnw8077acz1wd8drbxw0zl0qnmr"))))))
32658 (home-page "https://github.com/angr/angr")
32659 (synopsis "Multi-architecture binary analysis toolkit")
32660 (description
32661 "This package provides a versatile binary analysis platform with the
32662ability to perform dynamic symbolic execution as well as various
32663static analyses directly on binaries. As such, it can be used for all
32664kinds of reverse engineering, vulnerability discovery, exploit
32665generation, and software testing purposes.")
32666 (license license:bsd-2)))
32667
32668(define-public python-peachpy
32669 ;; There is no tag in this repo.
32670 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
32671 (version "0.2.0") ;from 'peachpy/__init__.py'
32672 (revision "3"))
32673 (package
32674 (name "python-peachpy")
32675 (version (git-version version revision commit))
32676 (home-page "https://github.com/Maratyszcza/PeachPy")
32677 (source (origin
32678 (method git-fetch)
32679 (uri (git-reference (url home-page) (commit commit)))
32680 (file-name (git-file-name name version))
32681 (sha256
32682 (base32
32683 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
32684 (patches (search-patches "python-peachpy-determinism.patch"))))
32685 (build-system pyproject-build-system)
32686 (arguments
32687 ;; The issue is known and the test will probably never be fixed.
32688 ;; https://github.com/Maratyszcza/PeachPy/issues/131
32689 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
32690 (native-inputs
32691 (list python-pytest python-setuptools python-wheel))
32692 (propagated-inputs
32693 (list python-six python-opcodes))
32694 (synopsis "Efficient assembly code generation in Python")
32695 (description
32696 "PeachPy is a Python framework for writing high-performance assembly kernels.
32697PeachPy aims to simplify writing optimized assembly kernels while preserving
32698all optimization opportunities of traditional assembly.
32699
32700PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
32701for the Go language tool chain; it adapts to different calling conventions and
32702application binary interfaces (ABIs); it takes care of register allocation; it
32703supports x86_64 instructions up to AVX-512 and SHA.")
32704 (supported-systems '("x86_64-linux"))
32705 (license license:bsd-2))))
32706
32707(define-public python-sgmllib3k
32708 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
32709 (revision "1"))
32710 (package
32711 (name "python-sgmllib3k")
32712 (version
32713 (git-version "1.0.0" revision commit))
32714 (source
32715 (origin
32716 (method git-fetch)
32717 (uri (git-reference
32718 (url "https://github.com/hsoft/sgmllib")
32719 (commit commit)))
32720 (file-name (git-file-name name version))
32721 (sha256
32722 (base32
32723 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
32724 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
32725 (build-system pyproject-build-system)
32726 (native-inputs (list python-pytest python-setuptools))
32727 (home-page "https://github.com/hsoft/sgmllib")
32728 (synopsis "Python 3 port of sgmllib")
32729 (description "This package provides an unmaintained port of sgmllib to
32730Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
32731Generalized Mark-up Language}.")
32732 (license license:bsd-3))))
32733
32734(define-public python-cwcwidth
32735 (package
32736 (name "python-cwcwidth")
32737 (version "0.1.10")
32738 (source
32739 (origin
32740 (method url-fetch)
32741 (uri (pypi-uri "cwcwidth" version))
32742 (sha256
32743 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
32744 (build-system pyproject-build-system)
32745 (arguments
32746 (list
32747 #:phases
32748 #~(modify-phases %standard-phases
32749 (add-before 'check 'remove-local-cwcwidth
32750 (lambda _
32751 ;; This would otherwise interfere with finding the installed
32752 ;; cwcwidth when running tests.
32753 (delete-file-recursively "cwcwidth"))))))
32754 (native-inputs
32755 (list python-cython
32756 python-pytest
32757 python-setuptools
32758 python-setuptools-scm))
32759 (home-page "https://github.com/sebastinas/cwcwidth")
32760 (synopsis "Python bindings for wc(s)width")
32761 (description
32762 "This package provides bindings for wcwidth and wcswidth functions
32763defined in POSIX.1-2001 and POSIX.1-2008.")
32764 (license license:expat)))
32765
32766(define-public python-pyan3
32767 (package
32768 (name "python-pyan3")
32769 (version "1.2.0")
32770 (source
32771 (origin
32772 ;; Source tarball on PyPI lacks tests.
32773 (method git-fetch)
32774 (uri (git-reference
32775 (url "https://github.com/Technologicat/pyan")
32776 (commit (string-append "v" version))))
32777 (file-name (git-file-name name version))
32778 (sha256
32779 (base32
32780 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
32781 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
32782 "python-pyan3-fix-absolute-path-bug.patch"))))
32783 (build-system pyproject-build-system)
32784 (native-inputs
32785 (list python-pytest python-pytest-cov python-setuptools python-wheel))
32786 (propagated-inputs
32787 (list python-jinja2))
32788 (home-page "https://github.com/Technologicat/pyan")
32789 (synopsis "Offline call graph generator for Python 3")
32790 (description "Pyan takes one or more Python source files, performs
32791a (rather superficial) static analysis, and constructs a directed graph of the
32792objects in the combined source, and how they define or use each other. The
32793graph can be output for rendering by GraphViz or yEd.")
32794 (license license:gpl2)))
32795
32796(define-public python-multipledispatch
32797 (package
32798 (name "python-multipledispatch")
32799 (version "1.0.0")
32800 (source
32801 (origin
32802 (method git-fetch) ;no tests in PyPI archive
32803 (uri (git-reference
32804 (url "https://github.com/mrocklin/multipledispatch")
32805 (commit version)))
32806 (file-name (git-file-name name version))
32807 (sha256
32808 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
32809 (build-system pyproject-build-system)
32810 (native-inputs
32811 (list python-pytest
32812 python-pytest-benchmark
32813 python-setuptools))
32814 (home-page "https://github.com/mrocklin/multipledispatch/")
32815 (synopsis "Multiple dispatch for Python based on pattern matching")
32816 (description
32817 "This library provides an efficient mechanism for overloading function
32818implementations based on the types of the arguments.")
32819 (license license:bsd-3)))
32820
32821(define-public python-multimethod
32822 (package
32823 (name "python-multimethod")
32824 (version "1.10")
32825 (source
32826 (origin
32827 ;; No tests in the PyPI tarball.
32828 (method git-fetch)
32829 (uri (git-reference
32830 (url "https://github.com/coady/multimethod")
32831 (commit (string-append "v" version))))
32832 (file-name (git-file-name name version))
32833 (sha256
32834 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
32835 (build-system pyproject-build-system)
32836 (native-inputs (list python-pytest python-setuptools python-wheel))
32837 (home-page "https://github.com/coady/multimethod")
32838 (synopsis "Python support for multiple argument dispatching")
32839 (description
32840 "This package provides a decorator for adding multiple argument
32841dispatching to functions. The decorator creates a multimethod object as
32842needed and registers the function with its annotations.")
32843 (license license:asl2.0)))
32844
32845(define-public python-logical-unification
32846 (package
32847 (name "python-logical-unification")
32848 (version "0.4.6")
32849 (source
32850 (origin
32851 (method git-fetch)
32852 (uri (git-reference
32853 (url "https://github.com/pythological/unification")
32854 (commit (string-append "v" version))))
32855 (file-name (git-file-name name version))
32856 (sha256
32857 (base32 "1pciaw3vd7awcnszkqda7l17y3gdzb8ca2cr4p5j0x3b8r28izx8"))))
32858 (build-system pyproject-build-system)
32859 (arguments
32860 (list
32861 #:phases
32862 #~(modify-phases %standard-phases
32863 (add-after 'unpack 'versioneer
32864 (lambda _
32865 (invoke "versioneer" "install")
32866 (substitute* "setup.py"
32867 (("version=versioneer.get_version\\(),")
32868 (format #f "version=~s," #$version))))))))
32869 (native-inputs
32870 (list python-pytest
32871 python-pytest-benchmark
32872 python-setuptools
32873 python-versioneer
32874 python-wheel))
32875 (propagated-inputs
32876 (list python-multipledispatch
32877 python-toolz))
32878 (home-page "https://github.com/pythological/unification/")
32879 (synopsis "Logical unification in Python for solving symbolic expressions")
32880 (description "This library provides algorithms and data types for solving
32881symbolic expressions in pure Python using the technique of logical unification.")
32882 (license license:bsd-3)))
32883
32884(define-public python-looseversion
32885 (package
32886 (name "python-looseversion")
32887 (version "1.3.0")
32888 (source
32889 (origin
32890 (method url-fetch)
32891 (uri (pypi-uri "looseversion" version))
32892 (sha256
32893 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
32894 (build-system pyproject-build-system)
32895 (arguments
32896 (list
32897 ;; No tests provided.
32898 #:tests? #f))
32899 (native-inputs
32900 (list python-hatchling))
32901 (home-page "https://github.com/effigies/looseversion")
32902 (synopsis "Version numbering for anarchists and software realists")
32903 (description
32904 "This package provides a drop-in replacement for the original
32905@code{LooseVersion}. It implements an identical interface and comparison
32906logic to @code{LooseVersion}. The only major change is that a
32907@code{looseversion.LooseVersion} is comparable to a
32908@code{distutils.version.LooseVersion}, which means tools should not need to
32909worry whether all dependencies that use LooseVersion have migrated.")
32910 (license license:psfl)))
32911
32912(define-public python-cons
32913 (package
32914 (name "python-cons")
32915 (version "0.4.7")
32916 (source
32917 (origin
32918 (method git-fetch) ;no tests in PyPI archive
32919 (uri (git-reference
32920 (url "https://github.com/pythological/python-cons")
32921 (commit (string-append "v" version))))
32922 (file-name (git-file-name name version))
32923 (sha256
32924 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
32925 (build-system pyproject-build-system)
32926 (native-inputs
32927 (list python-pytest
32928 python-setuptools
32929 python-setuptools-scm
32930 python-wheel))
32931 (propagated-inputs
32932 (list python-logical-unification))
32933 (home-page "https://github.com/pythological/python-cons")
32934 (synopsis "Cons cell data structures and related algorithms for Python")
32935 (description
32936 "This library implements algorithms and data structures for Lisp-style
32937cons cells in Python.")
32938 (license license:lgpl3+)))
32939
32940(define-public python-etuples
32941 (package
32942 (name "python-etuples")
32943 (version "0.3.10")
32944 (source
32945 (origin
32946 (method url-fetch)
32947 (uri (pypi-uri "etuples" version))
32948 (sha256
32949 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
32950 (build-system pyproject-build-system)
32951 (arguments
32952 (list
32953 #:test-flags
32954 ;; assert False == {~_1: <built-in function add>}
32955 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
32956 (native-inputs
32957 (list python-pytest
32958 python-setuptools
32959 python-setuptools-scm))
32960 (propagated-inputs
32961 (list python-cons
32962 python-multipledispatch))
32963 (home-page "https://github.com/pythological/etuples")
32964 (synopsis "S-expressions in Python")
32965 (description
32966 "This library implements eval'able S-expression in Python using tuple-like objects.")
32967 (license license:asl2.0)))
32968
32969(define-public python-minikanren
32970 (package
32971 (name "python-minikanren")
32972 (version "1.0.5")
32973 (source
32974 (origin
32975 (method git-fetch)
32976 (uri (git-reference
32977 (url "https://github.com/pythological/kanren")
32978 (commit (string-append "v" version))))
32979 (file-name (git-file-name name version))
32980 (sha256
32981 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
32982 (build-system pyproject-build-system)
32983 (arguments
32984 (list
32985 ;; 60 passed, 3 skipped, 23 deselected
32986 #:test-flags
32987 #~(list "-k" (string-join
32988 ;; XXX: 16 tests fail with assertion not equal, check why.
32989 (list "not test_basics"
32990 "test_eq_assoc"
32991 "test_eq_assoccomm"
32992 "test_eq_comm"
32993 "test_map_anyo"
32994 "test_map_anyo_misc"
32995 "test_map_anyo_reverse"
32996 "test_reduceo"
32997 "test_walko"
32998 "test_walko_reverse")
32999 " and not "))))
33000 (native-inputs
33001 (list python-pytest
33002 python-setuptools))
33003 (propagated-inputs
33004 (list python-cons
33005 python-etuples
33006 python-logical-unification
33007 python-multipledispatch
33008 python-toolz
33009 python-typing-extensions))
33010 (home-page "https://github.com/pythological/kanren")
33011 (synopsis "Relational logic programming in pure Python")
33012 (description
33013 "The minikanren library provides an algorithmic core for computer algebra
33014systems in Python.")
33015 (license license:bsd-3)))
33016
33017(define-public python-dotenv
33018 (package
33019 (name "python-dotenv")
33020 (version "1.1.1")
33021 (source
33022 (origin
33023 (method url-fetch)
33024 (uri (pypi-uri "python_dotenv" version))
33025 (sha256
33026 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
33027 (build-system pyproject-build-system)
33028 (native-inputs
33029 (list python-pytest
33030 python-setuptools
33031 python-sh))
33032 (propagated-inputs
33033 (list python-click))
33034 (home-page "https://saurabh-kumar.com/python-dotenv/")
33035 (synopsis "Setup environment variables according to .env files")
33036 (description
33037 "This package provides the @code{python-dotenv} Python module to read
33038key-value pairs from a @code{.env} file and set them as environment variables.")
33039 (license license:bsd-3)))
33040
33041;; Old version just for docker-compose; remove once that is updated.
33042(define-public python-dotenv-0.13.0
33043 (package (inherit python-dotenv)
33044 (name "python-dotenv")
33045 (version "0.13.0")
33046 (source
33047 (origin
33048 (method url-fetch)
33049 (uri (pypi-uri "python-dotenv" version))
33050 (sha256
33051 (base32
33052 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
33053 (arguments
33054 `(#:phases
33055 (modify-phases %standard-phases
33056 (replace 'check
33057 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
33058 (when tests?
33059 (add-installed-pythonpath inputs outputs)
33060 (setenv "PATH" (string-append (getenv "PATH") ":"
33061 (assoc-ref outputs "out") "/bin"))
33062 ;; Skip the ipython tests.
33063 (delete-file "tests/test_ipython.py")
33064 (invoke "python" "-m" "pytest")))))))
33065 (native-inputs
33066 (modify-inputs (package-native-inputs python-dotenv)
33067 (append python-mock)
33068 (replace "python-sh" python-sh-1)))))
33069
33070(define-public python-braintree
33071 (package
33072 (name "python-braintree")
33073 (version "4.40.0")
33074 (source
33075 (origin
33076 (method url-fetch)
33077 (uri (pypi-uri "braintree" version))
33078 (sha256
33079 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
33080 (build-system pyproject-build-system)
33081 (arguments (list #:tests? #f)) ; No tests.
33082 (native-inputs (list python-setuptools))
33083 (propagated-inputs (list python-requests))
33084 (home-page
33085 "https://developers.braintreepayments.com/python/sdk/server/overview")
33086 (synopsis "Braintree Python Library")
33087 (description
33088 "The Braintree Python SDK provides integration access to the Braintree
33089Gateway. Braintree is a US-based payments service provider.")
33090 (license license:expat)))
33091
33092(define-public python-markuppy
33093 (package
33094 (name "python-markuppy")
33095 (version "1.18")
33096 (source
33097 (origin
33098 (method git-fetch)
33099 (uri (git-reference
33100 (url "https://github.com/tylerbakke/MarkupPy")
33101 (commit (string-append "v" version))))
33102 (file-name (git-file-name name version))
33103 (sha256
33104 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
33105 (build-system pyproject-build-system)
33106 (native-inputs (list python-pytest python-setuptools))
33107 (home-page "https://github.com/tylerbakke/MarkupPy")
33108 (synopsis "Pythonic HTML/XML generator")
33109 (description
33110 "This Python module attempts to make it easier to generate HTML/XML from
33111a Python program in an customizable and pythonic way.")
33112 (license license:expat)))
33113
33114(define-public python-csb43
33115 (package
33116 (name "python-csb43")
33117 (version "1.0.0")
33118 (source
33119 (origin
33120 (method git-fetch)
33121 (uri (git-reference
33122 (url "https://bitbucket.org/wmj/csb43")
33123 (commit version)))
33124 (file-name (git-file-name name version))
33125 (sha256
33126 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
33127 (build-system pyproject-build-system)
33128 ;; tests: 15102 passed, 36 skipped, 5489 warnings
33129 (arguments
33130 (list
33131 #:phases
33132 #~(modify-phases %standard-phases
33133 (add-after 'unpack 'relax-requirements
33134 (lambda _
33135 (substitute* "pyproject.toml"
33136 (("\"deprecated ~=.*\",")
33137 "\"deprecated\",")))))))
33138 (native-inputs
33139 (list python-lxml
33140 python-pytest
33141 python-setuptools
33142 python-setuptools-scm))
33143 (propagated-inputs
33144 (list python-deprecated
33145 python-pycountry
33146 python-pyyaml
33147 python-tablib))
33148 (home-page "https://bitbucket.org/wmj/csb43")
33149 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3315043 (CSB43)")
33151 (description
33152 "This package provides tools to convert files in the format used by
33153multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
33154Spanish Banking Association [AEB43]) to other formats.
33155
33156Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
33157spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
33158 (license license:lgpl3)))
33159
33160(define-public python-csb43-0.10
33161 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
33162 ;; homebank, i18n, ofx, and utils.
33163 (package
33164 (inherit python-csb43)
33165 (name "python-csb43")
33166 (version "0.10.1")
33167 ;; tests: 15493 passed, 37 skipped, 7447 warnings
33168 (source
33169 (origin
33170 (method git-fetch)
33171 (uri (git-reference
33172 (url "https://bitbucket.org/wmj/csb43")
33173 (commit version)))
33174 (file-name (git-file-name name version))
33175 (sha256
33176 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
33177
33178(define-public python-febelfin-coda
33179 (package
33180 (name "python-febelfin-coda")
33181 (version "0.3.0")
33182 (source
33183 (origin
33184 (method hg-fetch)
33185 (uri (hg-reference
33186 (url "https://foss.heptapod.net/tryton/coda")
33187 (changeset version)))
33188 (file-name (string-append name "-" version "-checkout"))
33189 (sha256
33190 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
33191 (build-system pyproject-build-system)
33192 (arguments
33193 (list
33194 #:test-backend #~'unittest
33195 #:phases
33196 #~(modify-phases %standard-phases
33197 (add-after 'install 'remove-installed-tests
33198 (lambda* (#:key inputs outputs #:allow-other-keys)
33199 (with-directory-excursion (site-packages inputs outputs)
33200 (for-each delete-file
33201 (list "coda/test.py"
33202 "coda/test_readme.py"))))))))
33203 (native-inputs (list python-setuptools))
33204 (home-page "https://coda.b2ck.com/")
33205 (synopsis "Module to parse Belgian CODA files")
33206 (description
33207 "This package provides a module to parse Coded statement of account
33208(CODA) files as defined be the Belgian Febelfin bank standard.")
33209 (license license:bsd-3)))
33210
33211(define-public python-ofxparse
33212 (package
33213 (name "python-ofxparse")
33214 (version "0.21")
33215 (source
33216 (origin
33217 (method url-fetch)
33218 (uri (pypi-uri "ofxparse" version))
33219 (sha256
33220 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
33221 (build-system pyproject-build-system)
33222 (native-inputs (list python-pynose python-setuptools))
33223 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
33224 (home-page "http://sites.google.com/site/ofxparse")
33225 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
33226format")
33227 (description "@code{ofxparse} is a parser for Open Financial
33228Exchange (.ofx) format files. OFX files are available from almost any online
33229banking site, so they work well if you want to pull together your finances
33230from multiple sources. Online trading accounts also often provide account
33231statements in OFX files.")
33232 (license license:expat)))
33233
33234(define-public python-rfc3339-validator
33235 (package
33236 (name "python-rfc3339-validator")
33237 (version "0.1.4")
33238 (source
33239 (origin
33240 (method url-fetch)
33241 (uri (pypi-uri "rfc3339_validator" version))
33242 (sha256
33243 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
33244 (build-system pyproject-build-system)
33245 (native-inputs
33246 (list python-pytest
33247 python-setuptools
33248 python-strict-rfc3339))
33249 (propagated-inputs
33250 (list python-six))
33251 (home-page "https://github.com/naimetti/rfc3339-validator")
33252 (synopsis "Python RFC3339 validator")
33253 (description "This package provides a pure Python RFC3339 validator.")
33254 (license license:expat)))
33255
33256(define-public python-platformdirs
33257 ;; Try to update simultaneously with the bootstrap version in
33258 ;; (gnu packages python-build).
33259 (package
33260 (name "python-platformdirs")
33261 (version "4.3.6")
33262 (source
33263 (origin
33264 (method url-fetch)
33265 (uri (pypi-uri "platformdirs" version))
33266 (sha256
33267 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
33268 (build-system pyproject-build-system)
33269 (native-inputs
33270 (list python-appdirs
33271 python-hatchling
33272 python-hatch-vcs
33273 python-pytest
33274 python-pytest-mock))
33275 (home-page "https://github.com/platformdirs/platformdirs")
33276 (synopsis "Determine the appropriate platform-specific directories")
33277 (description "When writing applications, finding the right location to
33278store user data and configuration varies per platform. Even for
33279single-platform apps, there may by plenty of nuances in figuring out the right
33280location. This small Python module determines the appropriate
33281platform-specific directories, e.g. the ``user data dir''.")
33282 (license license:expat)))
33283
33284(define-public python-json2html
33285 (package
33286 (name "python-json2html")
33287 (version "1.3.0")
33288 (source
33289 (origin
33290 (method git-fetch)
33291 (uri (git-reference
33292 (url "https://github.com/softvar/json2html")
33293 (commit (string-append "v" version))))
33294 (file-name (git-file-name name version))
33295 (sha256
33296 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
33297 (build-system pyproject-build-system)
33298 (arguments
33299 (list
33300 #:test-backend #~'custom
33301 #:test-flags #~(list "test/run_tests.py")))
33302 (native-inputs (list python-setuptools))
33303 (home-page "https://github.com/softvar/json2html")
33304 (synopsis "Convert JSON to HTML table")
33305 (description
33306 "@code{python-json2html} is a python module to convert JSON into a human
33307readable HTML table representation.")
33308 (license license:expat)))
33309
33310(define-public python-face
33311 (package
33312 (name "python-face")
33313 (version "24.0.0")
33314 (source
33315 (origin
33316 (method git-fetch)
33317 (uri (git-reference
33318 (url "https://github.com/mahmoud/face")
33319 (commit (string-append "v" version))))
33320 (file-name (git-file-name name version))
33321 (sha256
33322 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
33323 (build-system pyproject-build-system)
33324 (native-inputs (list python-pytest python-setuptools))
33325 (propagated-inputs (list python-boltons))
33326 (home-page "https://github.com/mahmoud/face")
33327 (synopsis "CLI parsing and dispatching microframework")
33328 (description "@code{python-face} is a Pythonic microframework for building
33329command-line applications.
33330
33331@itemize
33332@item First-class subcommand support
33333@item Powerful middleware architecture
33334@item Separate parser layer
33335@item Built-in flagfile support
33336@item Handy testing utilities
33337@item Themeable help display
33338@end itemize")
33339 (license license:bsd-3)))
33340
33341(define-public python-glom
33342 (package
33343 (name "python-glom")
33344 (version "24.11.0")
33345 (source
33346 (origin
33347 (method git-fetch)
33348 (uri (git-reference
33349 (url "https://github.com/mahmoud/glom")
33350 (commit (string-append "v" version))))
33351 (file-name (git-file-name name version))
33352 (sha256
33353 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
33354 (build-system pyproject-build-system)
33355 (native-inputs
33356 (list python-pytest
33357 python-pyyaml
33358 python-setuptools))
33359 (propagated-inputs
33360 (list python-attrs
33361 python-boltons
33362 python-face))
33363 (home-page "https://github.com/mahmoud/glom")
33364 (synopsis "Declaratively restructure data")
33365 (description "Real applications have real data, and real data
33366nests---objects inside of objects inside of lists of objects. glom is a new
33367and powerful way to handle real-world data, featuring:
33368
33369@itemize
33370@item Path-based access to nested data structures
33371@item Readable, meaningful error messages
33372@item Declarative data transformation, using lightweight, Pythonic specifications
33373@item Built-in data exploration and debugging features
33374@end itemize")
33375 (license license:bsd-3)))
33376
33377(define-public python-box
33378 (package
33379 (name "python-box")
33380 (version "7.3.2")
33381 (source
33382 (origin
33383 (method git-fetch)
33384 (uri
33385 (git-reference
33386 (url "https://github.com/cdgriffith/Box")
33387 (commit version)))
33388 (file-name (git-file-name name version))
33389 (sha256
33390 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
33391 (build-system pyproject-build-system)
33392 (arguments
33393 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
33394 (native-inputs
33395 (list python-pytest
33396 python-setuptools))
33397 (propagated-inputs
33398 (list python-msgpack
33399 python-ruamel.yaml
33400 python-tomli-w))
33401 (home-page "https://github.com/cdgriffith/Box")
33402 (synopsis "Advanced Python dictionaries with dot notation access")
33403 (description
33404 "This package provides the @code{python-box} Python module.
33405It implements advanced Python dictionaries with dot notation access.")
33406 (license license:expat)))
33407
33408(define-public python-fields
33409 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
33410 (revision "0"))
33411 (package
33412 (name "python-fields")
33413 (version (git-version "5.0.0" revision commit))
33414 (source
33415 (origin
33416 (method git-fetch)
33417 (uri (git-reference
33418 (url "https://github.com/ionelmc/python-fields")
33419 (commit commit)))
33420 (file-name (git-file-name name version))
33421 (sha256
33422 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
33423 (build-system pyproject-build-system)
33424 (arguments
33425 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
33426 (native-inputs (list python-pytest-8
33427 python-pytest-benchmark
33428 python-setuptools
33429 python-wheel))
33430 (home-page "https://python-fields.readthedocs.io/")
33431 (synopsis "Python container class boilerplate killer")
33432 (description "Avoid repetetive boilerplate code in Python classes.")
33433 (license license:bsd-3))))
33434
33435(define-public python-aspectlib
33436 (package
33437 (name "python-aspectlib")
33438 (version "2.0.0")
33439 (source
33440 (origin
33441 (method git-fetch)
33442 (uri (git-reference
33443 (url "https://github.com/ionelmc/python-aspectlib")
33444 (commit (string-append "v" version))))
33445 (file-name (git-file-name name version))
33446 (sha256
33447 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
33448 (build-system pyproject-build-system)
33449 (arguments
33450 (list
33451 #:test-flags
33452 #~(list ;; XXX: Require more dependencies.
33453 "--ignore=tests/test_integrations.py"
33454 "--ignore=tests/test_integrations_py3.py")
33455 #:phases
33456 #~(modify-phases %standard-phases
33457 (add-after 'unpack 'fix-pytest-config
33458 (lambda _
33459 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
33460 ;; The (path: py.path.local) argument is deprecated, please
33461 ;; use (collection_path: pathlib.Path).
33462 (delete-file "pytest.ini"))))))
33463 (native-inputs
33464 (list python-pytest-8
33465 python-setuptools
33466 python-tornado))
33467 (propagated-inputs
33468 (list python-fields))
33469 (home-page "https://github.com/ionelmc/python-aspectlib")
33470 (synopsis "Python monkey-patching and decorators")
33471 (description
33472 "This package provides an aspect-oriented programming, monkey-patch
33473and decorators library. It is useful when changing behavior in existing
33474code is desired. It includes tools for debugging and testing:
33475simple mock/record and a complete capture/replay framework.")
33476 (license license:bsd-2)))
33477
33478(define-public python-ijson
33479 (package
33480 (name "python-ijson")
33481 (version "3.1.4")
33482 (source
33483 (origin
33484 (method url-fetch)
33485 (uri (pypi-uri "ijson" version))
33486 (sha256
33487 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
33488 (inputs
33489 ;; yajl is optional, but compiling with it makes faster
33490 ;; backends available to ijson:
33491 (list yajl))
33492 (native-inputs
33493 (list python-pytest
33494 python-setuptools
33495 python-wheel))
33496 (build-system pyproject-build-system)
33497 (home-page "https://github.com/ICRAR/ijson")
33498 (synopsis "Iterative JSON parser with Python iterator interfaces")
33499 (description
33500 "Ijson is an iterative JSON parser with standard Python iterator
33501interfaces.")
33502 (license license:bsd-3)))
33503
33504(define-public python-ordered-set
33505 (package
33506 (name "python-ordered-set")
33507 (version "4.1.0")
33508 (source
33509 (origin
33510 (method url-fetch)
33511 (uri (pypi-uri "ordered-set" version))
33512 (sha256
33513 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
33514 (build-system pyproject-build-system)
33515 (native-inputs (list python-cython python-flit-core python-pytest))
33516 (home-page "https://github.com/simonpercivall/orderedset")
33517 (synopsis "Ordered Set implementation in Cython")
33518 (description "This library provides an @code{OrderedSet} data type that
33519works like a regular set, but remembers insertion order. It supports the full
33520Python @code{set} interface.")
33521 (license license:asl2.0)))
33522
33523(define-public python-orgparse
33524 (package
33525 (name "python-orgparse")
33526 (version "0.4.20251020")
33527 (source
33528 (origin
33529 (method git-fetch)
33530 (uri (git-reference
33531 (url "https://github.com/karlicoss/orgparse")
33532 (commit (string-append "v" version))))
33533 (file-name (git-file-name name version))
33534 (sha256
33535 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
33536 (build-system pyproject-build-system)
33537 (arguments
33538 (list
33539 #:test-flags
33540 #~(list "--ignore-glob=doc/*"
33541 ;; XXX: Unclear why those tests fail.
33542 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
33543 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
33544 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
33545 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
33546 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
33547 (home-page "https://github.com/karlicoss/orgparse")
33548 (synopsis "Emacs Org mode parser in Python")
33549 (description
33550 "This package is a Python module for reading Emacs Org mode files.")
33551 (license license:bsd-3)))
33552
33553(define-public dynaconf
33554 (package
33555 (name "dynaconf")
33556 (version "3.2.11")
33557 (source
33558 (origin
33559 (method git-fetch)
33560 (uri
33561 (git-reference
33562 (url "https://github.com/dynaconf/dynaconf")
33563 (commit version)))
33564 (file-name (git-file-name name version))
33565 (sha256
33566 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
33567 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
33568 (modules '((guix build utils)))
33569 ;; Remove vendored dependencies
33570 (snippet
33571 #~(let ((unvendor '("click" "ruamel" "toml")))
33572 (with-directory-excursion "dynaconf/vendor"
33573 (for-each delete-file-recursively unvendor))
33574 (substitute* (find-files "." "\\.py$")
33575 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
33576 _ target rest)
33577 (string-append "import " target rest))
33578 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
33579 target))))))
33580 (build-system pyproject-build-system)
33581 (arguments
33582 (list
33583 #:test-flags
33584 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
33585 "-k" #$(let ((click-tests '("test_negative_get"
33586 "test_not_found_key_exit_error[get]"
33587 "test_inspect_invalid_format")))
33588 ;; Disable integration tests
33589 (string-append "not integration and not "
33590 ;; These tests fail because we use
33591 ;; Click 8.* instead of Click 7
33592 (string-join click-tests " and not ")))
33593 "tests")
33594 #:phases
33595 #~(modify-phases %standard-phases
33596 (add-after 'unpack 'patch-for-click-8
33597 (lambda _
33598 (substitute* "dynaconf/cli.py"
33599 (("click.get_os_args\\()") ;deprecated from Click 8.1+
33600 "sys.argv[1:]")))))))
33601 (propagated-inputs
33602 (list python-click python-configobj python-ruamel.yaml-0.16
33603 python-toml python-tomli))
33604 (native-inputs
33605 (list python-django python-flask python-pytest python-pytest-cov
33606 python-pytest-mock python-setuptools))
33607 (home-page "https://www.dynaconf.com/")
33608 (synopsis "The dynamic configurator for your Python project")
33609 (description
33610 "This package provides @code{dynaconf} the dynamic configurator manager for
33611your Python project. It provides features such as:
33612
33613@itemize
33614@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
33615@item Settings management (default values, validation, parsing, templating);
33616@item Protection of sensitive information (passwords/tokens);
33617@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
33618loaders;
33619@item Full support for environment variables to override existing settings
33620(dotenv support included);
33621@item Optional layered system for multiple environments @code{[default,
33622development, testing, production]};
33623@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
33624@item Built-in extensions for Django and Flask web frameworks;
33625@item CLI for common operations such as @code{init, list, write, validate, export}.
33626@end itemize")
33627 (license license:expat)))
33628
33629(define-public python-pudb
33630 ;; TODO: Rename to pudb as it's a final program.
33631 (package
33632 (name "python-pudb")
33633 (version "2025.1.3")
33634 (source
33635 (origin
33636 (method url-fetch)
33637 (uri (pypi-uri "pudb" version))
33638 (sha256
33639 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
33640 (build-system pyproject-build-system)
33641 (arguments
33642 (list
33643 #:phases
33644 #~(modify-phases %standard-phases
33645 (add-before 'check 'pre-check
33646 (lambda _
33647 (setenv "HOME" "/tmp"))))))
33648 (native-inputs
33649 (list python-hatchling
33650 python-pytest
33651 python-pytest-mock
33652 python-numpy))
33653 (propagated-inputs
33654 (list python-jedi
33655 python-packaging
33656 python-pygments
33657 python-typing-extensions
33658 python-urwid
33659 python-urwid-readline))
33660 (home-page "https://documen.tician.de/pudb/")
33661 (synopsis "Console-based Python debugger")
33662 (description
33663 "@command{pudb} is a full-screen, console-based Python debugger providing
33664all the niceties of modern GUI-based debuggers in a more lightweight and
33665keyboard-friendly package.")
33666 (license license:expat)))
33667
33668(define-public python-iwlib
33669 (package
33670 (name "python-iwlib")
33671 (version "1.7.0")
33672 (source
33673 (origin
33674 (method git-fetch)
33675 (uri (git-reference
33676 (url "https://github.com/nhoad/python-iwlib")
33677 (commit version)))
33678 (file-name (git-file-name name version))
33679 (sha256
33680 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
33681 (build-system pyproject-build-system)
33682 (arguments
33683 (list
33684 #:phases
33685 #~(modify-phases %standard-phases
33686 (add-before 'check 'cleanup
33687 (lambda _
33688 (delete-file-recursively "iwlib"))))))
33689 (native-inputs (list python-pytest python-setuptools))
33690 (inputs (list wireless-tools))
33691 (propagated-inputs (list python-cffi))
33692 (home-page "https://github.com/nhoad/python-iwlib")
33693 (synopsis "Python module to interface with iwlib")
33694 (description
33695 "This package provides a Python interface to iw wireless tools.")
33696 (license license:gpl2)))
33697
33698(define-public python-pdoc3
33699 (package
33700 (name "python-pdoc3")
33701 (version "0.11.6")
33702 (source
33703 (origin
33704 (method url-fetch)
33705 (uri (pypi-uri "pdoc3" version))
33706 (sha256
33707 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
33708 (build-system pyproject-build-system)
33709 (arguments
33710 (list #:test-backend #~'unittest
33711 #:test-flags #~(list "-v" "pdoc.test")))
33712 (native-inputs
33713 (list python-setuptools-git
33714 python-setuptools
33715 python-setuptools-scm))
33716 (propagated-inputs
33717 (list python-mako
33718 python-markdown))
33719 (home-page "https://pdoc3.github.io/pdoc/")
33720 (synopsis "Auto-generate API documentation for Python projects")
33721 (description
33722 "This package auto-generates API documentation from Python projects
33723already existing modules and objects docstrings.")
33724 (license license:agpl3+)))
33725
33726(define-public python-piexif
33727 (package
33728 (name "python-piexif")
33729 (version "1.1.3")
33730 (source
33731 (origin
33732 (method git-fetch)
33733 (uri (git-reference
33734 (url "https://github.com/hMatoba/Piexif")
33735 (commit version)))
33736 (file-name (git-file-name name version))
33737 (sha256
33738 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
33739 (patches
33740 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
33741 (build-system pyproject-build-system)
33742 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
33743 (home-page "https://github.com/hMatoba/Piexif")
33744 (synopsis "Simplify exif manipulations with Python")
33745 (description
33746 "Piexif simplifies interacting with EXIF data in Python. It includes the
33747tools necessary for extracting, creating, manipulating, converting and writing
33748EXIF data to JPEG, WebP and TIFF files.")
33749 (license license:expat)))
33750
33751(define-public python-pyrss2gen
33752 (package
33753 (name "python-pyrss2gen")
33754 (version "1.1")
33755 (source
33756 (origin
33757 (method url-fetch)
33758 (uri (pypi-uri "PyRSS2Gen" version))
33759 (sha256
33760 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
33761 (build-system pyproject-build-system)
33762 (arguments (list #:tests? #f)) ; No tests.
33763 (native-inputs (list python-setuptools))
33764 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
33765 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
33766 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
33767PyRSS2Gen builds the feed up by using a XML generator.")
33768 (license license:bsd-3)))
33769
33770(define-public python-doit
33771 (package
33772 (name "python-doit")
33773 (version "0.36.0")
33774 (source
33775 (origin
33776 (method url-fetch)
33777 (uri (pypi-uri "doit" version))
33778 (sha256
33779 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
33780 (build-system pyproject-build-system)
33781 ;; This is not a serious test failure. It's probably due to the load path
33782 ;; at test time.
33783 (arguments (list #:test-flags '(list "-k" "not test_execute")))
33784 (propagated-inputs
33785 (list python-cloudpickle python-importlib-metadata))
33786 (native-inputs (list python-pytest python-setuptools python-wheel))
33787 (home-page "https://pydoit.org")
33788 (synopsis "Automation tool to execute any kind of task in a build-tools
33789fashion")
33790 (description "doit is an automation tool that brings the power of
33791build-tools to execute any kind of task.
33792
33793A task describes some computation to be done (actions), and contains some
33794extra meta-data. The actions can be external programs or Python functions. A
33795single task may define more than one action. doit uses the task’s meta-data
33796to:
33797
33798@itemize
33799@item cache task results
33800@item correct execution order
33801@item parallel execution
33802@item powerful dependency system
33803@end itemize")
33804 (license license:expat)))
33805
33806(define-public python-phpserialize
33807 (package
33808 (name "python-phpserialize")
33809 (version "1.3")
33810 (source
33811 (origin
33812 (method git-fetch)
33813 (uri (git-reference
33814 (url "https://github.com/mitsuhiko/phpserialize")
33815 (commit version)))
33816 (file-name (git-file-name name version))
33817 (sha256
33818 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
33819 (build-system pyproject-build-system)
33820 (arguments
33821 (list
33822 ;; XXX: Unclear why this test fails.
33823 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")))
33824 (native-inputs (list python-pytest python-setuptools))
33825 (home-page "https://github.com/mitsuhiko/phpserialize")
33826 (synopsis "Python port of the serialize and unserialize functions of PHP")
33827 (description
33828 "This package provides a port of the @code{serialize} and
33829@code{unserialize} functions of PHP for Python.")
33830 (license license:bsd-3)))
33831
33832(define-public python-pydevtool
33833 (package
33834 (name "python-pydevtool")
33835 (version "0.3.0")
33836 (source
33837 (origin
33838 (method url-fetch)
33839 (uri (pypi-uri "pydevtool" version))
33840 (sha256
33841 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
33842 (build-system pyproject-build-system)
33843 (arguments (list #:tests? #false)) ;no tests
33844 (propagated-inputs (list python-doit python-rich-click))
33845 (native-inputs (list python-setuptools python-wheel))
33846 (home-page "https://github.com/pydoit/pydevtool")
33847 (synopsis "CLI dev tools powered by pydoit")
33848 (description "This package provides command line tools, powered by pydoit.
33849It offers integration with @code{click} and @code{rich} for custom CLI and
33850these linters: @code{pycodestlye}, @code{pyflakes}")
33851 (license license:expat)))
33852
33853(define-public nikola
33854 (package
33855 (name "nikola")
33856 (version "8.3.3")
33857 (source
33858 (origin
33859 (method url-fetch)
33860 (uri (pypi-uri "nikola" version))
33861 (sha256
33862 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
33863 (build-system pyproject-build-system)
33864 (arguments
33865 (list
33866 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
33867 #:test-flags
33868 #~(list "--durations=10"
33869 "--ignore=tests/integration/test_dev_server.py"
33870 "-k" (string-join
33871 ;; Some time difference in example tests.
33872 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
33873 "test_serves_root_dir[https://example.org:1234/blog]"
33874 "test_serves_root_dir[https://example.org:3456/blog/]"
33875 "test_serves_root_dir[https://example.org]"
33876 ;; AssertionError: Calls not found.
33877 "test_write_content_does_not_detroy_text"
33878 ;; AssertionError: assert 'January 10, 2006,
33879 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
33880 ;; 12:34:56\u202fPM EST'
33881 "test_format_date_timezone")
33882 " and not "))
33883 #:phases
33884 #~(modify-phases %standard-phases
33885 (add-after 'unpack 'fix-pytest-config
33886 (lambda _
33887 ;; Drop test coverage requirements.
33888 (substitute* "pyproject.toml"
33889 (("addopts.*") "")))))))
33890 (native-inputs
33891 (list nss-certs-for-test
33892 python-feedparser
33893 python-freezegun
33894 python-pytest
33895 python-setuptools))
33896 (inputs
33897 (list python-babel
33898 python-blinker
33899 python-dateutil
33900 python-docutils
33901 python-doit
33902 python-jinja2 ;; for themes
33903 python-lxml
33904 python-mako
33905 python-markdown
33906 python-natsort
33907 python-notebook ;; for ipynb
33908 python-phpserialize ;; for wordpress import
33909 python-piexif
33910 python-pillow
33911 python-pygments
33912 python-pyrss2gen
33913 python-requests
33914 python-ruamel.yaml ;; for YAML metadata
33915 python-toml
33916 python-unidecode
33917 python-yapsy))
33918 (home-page "https://getnikola.com/")
33919 (synopsis "Modular, fast and simple static website and blog generator")
33920 (description "Nikola generates static websites and blogs. Out of the box,
33921it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
33922and has plugins for many other formats.")
33923 (license license:expat)))
33924
33925(define-public nbss-upload
33926 (package
33927 (name "nbss-upload")
33928 (version "0.1")
33929 (source
33930 (origin
33931 (method git-fetch)
33932 (uri (git-reference
33933 (url "https://github.com/notebook-sharing-space/nbss-upload")
33934 (commit (string-append "v" version))))
33935 (file-name (git-file-name name version))
33936 (sha256
33937 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
33938 (build-system pyproject-build-system)
33939 (arguments (list #:tests? #f)) ;no tests
33940 (native-inputs (list python-setuptools))
33941 (propagated-inputs (list python-requests))
33942 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
33943 (synopsis "Upload notebooks to a notebooksharing.space instance")
33944 (description
33945 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
33946notebooksharing.space instance.")
33947 (license license:bsd-3)))
33948
33949(define-public python-reedsolo
33950 (package
33951 (name "python-reedsolo")
33952 (version "1.7.0")
33953 (source
33954 (origin
33955 (method git-fetch)
33956 (uri (git-reference
33957 (url "https://github.com/tomerfiliba/reedsolomon")
33958 (commit (string-append "v" version))))
33959 (file-name (git-file-name name version))
33960 (sha256
33961 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
33962 (build-system pyproject-build-system)
33963 (native-inputs (list python-pytest python-setuptools))
33964 (home-page "https://github.com/tomerfiliba/reedsolomon")
33965 (synopsis "Pure-Python Reed Solomon encoder/decoder")
33966 (description
33967 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
33968the tutorial at Wikiversity. This is a burst-type implementation, so that it
33969supports any Galois field higher than 2^3, but not binary streams.")
33970 (license license:public-domain)))
33971
33972(define-public python-esprima
33973 (package
33974 (name "python-esprima")
33975 (version "4.0.1")
33976 (source
33977 (origin
33978 (method git-fetch)
33979 (uri (git-reference
33980 (url "https://github.com/Kronuz/esprima-python")
33981 (commit (string-append "v" version))))
33982 (file-name (git-file-name name version))
33983 (sha256
33984 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
33985 (build-system pyproject-build-system)
33986 (arguments
33987 (list
33988 ;; XXX: pytest fails to collect tests, and a few tests are failing
33989 ;; using unittest backend. In particular, offsets with math characters
33990 ;; and uncompiled regexps.
33991 #:tests? #f
33992 #:test-backend #~'unittest
33993 #:test-flags
33994 #~(list "-k"
33995 (string-join (list
33996 ;; XXX: Character offsets with maths.
33997 "not test_math_alef"
33998 "test_math_dal_part"
33999 "test_math_kaf_lam"
34000 "test_math_zain_start"
34001 ;; XXX: Uncompiled regexps.
34002 "test_yield_arg_regexp1"
34003 "test_yield_arg_regexp2"
34004 "test_migrated_0005_source"
34005 "test_u_flag_valid_range"
34006 "test_migrated_0049"
34007 "test_migrated_0050_source")
34008 " and not "))))
34009 (native-inputs (list python-setuptools))
34010 (home-page "https://github.com/Kronuz/esprima-python")
34011 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
34012 (description
34013 "This package provides ECMAScript parsing infrastructure for
34014multipurpose analysis in Python.")
34015 (license license:bsd-3)))
34016
34017(define-public python-psycopg2-binary
34018 (package
34019 (name "python-psycopg2-binary")
34020 (version "2.9.10")
34021 (source
34022 (origin
34023 (method url-fetch)
34024 (uri (pypi-uri "psycopg2-binary" version))
34025 (sha256
34026 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
34027 (build-system pyproject-build-system)
34028 (arguments
34029 ;; Tests are disable because they need a live instance of PostgreSQL.
34030 '(#:tests? #f))
34031 (native-inputs (list python-setuptools python-wheel))
34032 (inputs (list postgresql))
34033 (home-page "https://psycopg.org/")
34034 (synopsis "PostgreSQL database adapter for Python")
34035 (description
34036 "Psycopg is a PostgreSQL database adapter for the Python programming
34037language. Its main features are the complete implementation of the Python DB
34038API 2.0 specification and the thread safety (several threads can share the
34039same connection). It was designed for heavily multi-threaded applications
34040that create and destroy lots of cursors and make a large number of concurrent
34041@code{INSERT}s or @code{UPDATE}s.
34042
34043Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
34044being both efficient and secure. It features client-side and
34045server-side cursors, asynchronous communication and notifications,
34046@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
34047out-of-the-box and adapted to matching PostgreSQL data types;
34048adaptation can be extended and customized thanks to a flexible objects
34049adaptation system.
34050
34051Psycopg 2 is both Unicode and Python 3 friendly.")
34052 (license license:lgpl3+)))
34053
34054(define-public python-pyfuse3
34055 (package
34056 (name "python-pyfuse3")
34057 (version "3.4.1")
34058 (source
34059 (origin
34060 (method url-fetch)
34061 (uri (pypi-uri "pyfuse3" version))
34062 (sha256
34063 (base32 "02cjnkhn6rf19bcp5g6spq59fhdg8izhwv2jgxgbvkabjigrqbv0"))))
34064 (build-system pyproject-build-system)
34065 (arguments
34066 (list
34067 #:test-flags
34068 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
34069 #~(list "--deselect=test/test_api.py::test_listdir")))
34070 (native-inputs
34071 (list pkg-config
34072 python-cython
34073 python-pytest
34074 python-setuptools
34075 python-setuptools-scm))
34076 (inputs
34077 (list fuse))
34078 (propagated-inputs
34079 (list python-trio))
34080 (home-page "https://github.com/libfuse/pyfuse3")
34081 (synopsis "Python bindings to FUSE 3")
34082 (description "This package provides Python 3 bindings for libfuse 3 with
34083async I/O support.")
34084 (license license:gpl2+)))
34085
34086(define-public python-ansicolors
34087 ;; XXX: Not maintained fork since 2017, consider to remove when there is no
34088 ;; any users.
34089 (package
34090 (name "python-ansicolors")
34091 (version "1.1.8")
34092 (source
34093 (origin
34094 (method url-fetch)
34095 (uri (pypi-uri "ansicolors" version ".zip"))
34096 (sha256
34097 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
34098 (build-system pyproject-build-system)
34099 (native-inputs
34100 (list python-pytest python-setuptools unzip))
34101 (home-page "https://github.com/jonathaneunice/colors/")
34102 (synopsis "ANSI colors for Python")
34103 (description
34104 "This package adds ANSI colors and decorations to your strings.")
34105 (license license:isc)))
34106
34107(define-public python-multipart
34108 (package
34109 (name "python-multipart")
34110 (version "0.0.20")
34111 (source (origin
34112 (method url-fetch)
34113 (uri (pypi-uri "python_multipart" version))
34114 (sha256
34115 (base32
34116 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
34117 (build-system pyproject-build-system)
34118 (native-inputs
34119 (list python-hatchling
34120 python-pytest
34121 python-pytest-cov
34122 python-pyyaml))
34123 (home-page "https://github.com/andrew-d/python-multipart")
34124 (synopsis "Streaming multipart parser for Python")
34125 (description
34126 "This package provides a streaming multipart parser for Python.")
34127 (license license:asl2.0)))
34128
34129(define-public python-aiopg
34130 (package
34131 (name "python-aiopg")
34132 (version "1.4.0")
34133 (source (origin
34134 (method url-fetch)
34135 (uri (pypi-uri "aiopg" version))
34136 (sha256
34137 (base32
34138 "0wcxcfazjsknr7hv46374rzh7502k8g1hvbi2r0rakbbz2z56qhi"))))
34139 (build-system pyproject-build-system)
34140 (arguments
34141 (list #:tests? #f)) ;they need Docker
34142 (native-inputs
34143 (list python-setuptools
34144 python-sqlalchemy))
34145 (propagated-inputs
34146 (list python-async-timeout-4
34147 python-psycopg2-binary))
34148 (home-page "https://aiopg.readthedocs.io")
34149 (synopsis "Postgres integration with asyncio")
34150 (description
34151 "aiopg is a library for accessing a PostgreSQL database from the
34152asyncio (PEP-3156/tulip) framework. It wraps asynchronous
34153features of the Psycopg database driver.")
34154 (license license:bsd-3)))
34155
34156(define-public python-shtab
34157 (package
34158 (name "python-shtab")
34159 (version "1.7.1")
34160 (source
34161 (origin
34162 (method url-fetch)
34163 (uri (pypi-uri "shtab" version))
34164 (sha256
34165 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
34166 (build-system pyproject-build-system)
34167 (native-inputs
34168 (list bash
34169 python-pytest
34170 python-pytest-cov
34171 python-pytest-timeout
34172 python-setuptools
34173 python-setuptools-scm
34174 python-wheel))
34175 (home-page "https://github.com/iterative/shtab")
34176 (synopsis "Automagic shell tab completion for Python CLI applications")
34177 (description
34178 "This package automatically generates shell tab completion scripts for
34179Python CLI apps.")
34180 (license license:asl2.0)))
34181
34182(define-public python-pyperf
34183 (package
34184 (name "python-pyperf")
34185 (version "2.3.1")
34186 (source
34187 (origin
34188 (method url-fetch)
34189 (uri (pypi-uri "pyperf" version))
34190 (sha256
34191 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
34192 (build-system pyproject-build-system)
34193 (arguments
34194 (list
34195 #:test-flags
34196 #~(list "--ignore=pyperf/tests/test_examples.py")))
34197 (native-inputs (list python-psutil python-pytest python-setuptools
34198 python-wheel))
34199 (home-page "https://github.com/psf/pyperf")
34200 (synopsis "Toolkit for running Python benchmarks")
34201 (description
34202 "The Python @code{pyperf} module is a toolkit for writing, running and
34203analyzing benchmarks. It features a simple API that can:
34204
34205@itemize
34206@item automatically calibrate a benchmark for a time budget;
34207@item spawn multiple worker processes;
34208@item compute the mean and standard deviation;
34209@item detect if a benchmark result seems unstable;
34210@item store benchmark results in JSON format;
34211@item support multiple units: seconds, bytes and integer.
34212@end itemize")
34213 (license license:expat)))
34214
34215(define-public python-pydispatcher
34216 (package
34217 (name "python-pydispatcher")
34218 (version "2.0.7")
34219 (source
34220 (origin
34221 (method url-fetch)
34222 (uri (pypi-uri "PyDispatcher" version))
34223 (sha256
34224 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
34225 (build-system pyproject-build-system)
34226 (native-inputs (list python-pytest python-setuptools))
34227 (home-page "https://pydispatcher.sourceforge.net")
34228 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
34229 (description
34230 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
34231@code{dispatcher.py} module. It provides the Python programmer with a robust
34232mechanism for event routing within various application contexts.
34233
34234Included in the package are the robustapply and saferef modules, which
34235provide the ability to selectively apply arguments to callable objects
34236and to reference instance methods using weak-references.")
34237 (license license:bsd-3)))
34238
34239(define-public python-pyee
34240 (package
34241 (name "python-pyee")
34242 (version "13.0.1")
34243 (source
34244 (origin
34245 (method git-fetch)
34246 (uri (git-reference
34247 (url "https://github.com/jfhbrook/pyee")
34248 (commit (string-append "v" version))))
34249 (file-name (git-file-name name version))
34250 (sha256
34251 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
34252 (build-system pyproject-build-system)
34253 (propagated-inputs (list python-typing-extensions))
34254 (native-inputs
34255 (list python-mock
34256 python-pytest
34257 python-pytest-asyncio
34258 python-pytest-trio
34259 python-setuptools
34260 python-trio
34261 python-twisted))
34262 (home-page "https://github.com/jfhbrook/pyee")
34263 (synopsis "Emit events with Python")
34264 (description
34265 "This package provides a port of node.js's EventEmitter to
34266python. Additionally, it includes a number of subclasses useful for
34267implementing async and threaded programming in python, such as async/await.")
34268 (license license:expat)))
34269
34270(define-public python-pypubsub
34271 (package
34272 (name "python-pypubsub")
34273 (version "4.0.3")
34274 (source
34275 (origin
34276 (method git-fetch)
34277 (uri (git-reference
34278 (url "https://github.com/schollii/pypubsub")
34279 (commit (string-append "v" version))))
34280 (file-name (git-file-name name version))
34281 (sha256
34282 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
34283 (build-system pyproject-build-system)
34284 (arguments
34285 (list
34286 #:phases
34287 #~(modify-phases %standard-phases
34288 (replace 'check
34289 (lambda* (#:key tests? #:allow-other-keys)
34290 (when tests?
34291 (with-directory-excursion "tests/suite"
34292 (invoke "py.test"))))))))
34293 (native-inputs
34294 (list python-pytest
34295 python-setuptools
34296 python-wheel))
34297 (home-page "https://github.com/schollii/pypubsub")
34298 (synopsis "Python publish-subcribe library")
34299 (description
34300 "This library provides a publish-subscribe API to facilitate event-based
34301or message-based architecture in a single-process application. It is centered
34302on the notion of a topic - senders publish messages of a given topic, and
34303listeners subscribe to messages of a given topic, all inside the same
34304process.")
34305 (license license:bsd-2)))
34306
34307(define-public python-queuelib
34308 (package
34309 (name "python-queuelib")
34310 (version "1.8.0")
34311 (source
34312 (origin
34313 (method git-fetch)
34314 (uri (git-reference
34315 (url "https://github.com/scrapy/queuelib")
34316 (commit (string-append "v" version))))
34317 (file-name (git-file-name name version))
34318 (sha256
34319 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
34320 (build-system pyproject-build-system)
34321 (native-inputs (list python-hatchling python-pytest))
34322 (home-page "https://github.com/scrapy/queuelib")
34323 (synopsis "Collection of queues for Python")
34324 (description
34325 "Queuelib is a Python library that implements object collections which
34326are stored in memory or persisted to disk, provide a simple API, and run fast.
34327
34328Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
34329by priority and queues that are emptied in a round-robin fashion.")
34330 (license license:bsd-3)))
34331
34332(define-public python-posix-ipc
34333 (package
34334 (name "python-posix-ipc")
34335 (version "1.3.2")
34336 (source
34337 (origin
34338 (method git-fetch)
34339 (uri (git-reference
34340 (url "https://github.com/osvenskan/posix_ipc")
34341 (commit (string-append "rel" version))))
34342 (file-name (git-file-name name version))
34343 (sha256
34344 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
34345 (build-system pyproject-build-system)
34346 (arguments
34347 (list
34348 #:test-flags
34349 ;; XXX: Collection fails due to stdin configuration.
34350 #~(list "--ignore=tests/test_memory.py")
34351 #:phases
34352 #~(modify-phases %standard-phases
34353 (add-after 'unpack 'set-cc-path
34354 (lambda _
34355 (setenv "CC" #$(cc-for-target)))))))
34356 (native-inputs (list python-pytest python-setuptools))
34357 (home-page "https://semanchuk.com/philip/posix_ipc/")
34358 (synopsis "POSIX IPC primitives for Python")
34359 (description
34360 "This package provides POSIX IPC primitives - semaphores, shared memory and
34361message queues for Python.")
34362 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
34363
34364(define-public python-itemadapter
34365 (package
34366 (name "python-itemadapter")
34367 (version "0.12.0")
34368 (source
34369 (origin
34370 (method git-fetch)
34371 (uri (git-reference
34372 (url "https://github.com/scrapy/itemadapter")
34373 (commit (string-append "v" version))))
34374 (file-name (git-file-name name version))
34375 (sha256
34376 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
34377 (build-system pyproject-build-system)
34378 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
34379 (native-inputs (list python-hatchling))
34380 (home-page "https://github.com/scrapy/itemadapter")
34381 (synopsis "Common interface for data container classes")
34382 (description
34383 "The ItemAdapter class is a wrapper for data container objects, providing
34384a common interface to handle objects of different types in an uniform manner,
34385regardless of their underlying implementation.
34386
34387Currently supported types are:
34388@itemize
34389@item scrapy.item.Item
34390@item dict
34391@item dataclass-based classes
34392@item attrs-based classes
34393@item pydantic-based classes
34394@end itemize
34395
34396Additionally, interaction with arbitrary types is supported by
34397implementing a pre-defined interface.")
34398 (license license:bsd-3)))
34399
34400(define-public python-itemloaders
34401 (package
34402 (name "python-itemloaders")
34403 (version "1.3.2")
34404 (source
34405 (origin
34406 (method url-fetch)
34407 (uri (pypi-uri "itemloaders" version))
34408 (sha256
34409 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
34410 (build-system pyproject-build-system)
34411 (native-inputs
34412 (list python-packaging
34413 python-pytest
34414 python-setuptools
34415 python-wheel))
34416 (propagated-inputs
34417 (list python-itemadapter python-jmespath python-parsel))
34418 (home-page "https://github.com/scrapy/itemloaders")
34419 (synopsis "Base library for scrapy's ItemLoader")
34420 (description "Itemloaders is a library that helps you collect data
34421from HTML and XML sources. It comes in handy to extract data from web
34422pages, as it supports data extraction using CSS and XPath Selectors.
34423
34424It’s specially useful when you need to standardize the data from many
34425sources. For example, it allows you to have all your casting and
34426parsing rules in a single place.")
34427 (license license:bsd-3)))
34428
34429(define-public python-iterable-io
34430 (package
34431 (name "python-iterable-io")
34432 (version "1.0.0")
34433 (source
34434 (origin
34435 (method url-fetch)
34436 (uri (pypi-uri "iterable-io" version))
34437 (sha256
34438 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
34439 (build-system pyproject-build-system)
34440 (native-inputs (list python-setuptools python-pytest))
34441 (home-page "https://github.com/pR0Ps/iterable-io")
34442 (synopsis "Adapt generators and other iterables to a file-like interface")
34443 (description
34444 "@code{iterable-io} is a small Python library that provides an adapter so
34445that it's possible to read from
34446@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
34447in the same way as
34448@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
34449objects.")
34450 (license license:lgpl3)))
34451
34452(define-public python-iteround
34453 (package
34454 (name "python-iteround")
34455 (version "1.0.4")
34456 ;; PyPI only has wheels.
34457 (source (origin
34458 (method git-fetch)
34459 (uri (git-reference
34460 (url "https://github.com/cgdeboer/iteround")
34461 (commit (string-append "v" version))))
34462 (file-name (git-file-name name version))
34463 (sha256
34464 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
34465 (build-system pyproject-build-system)
34466 (native-inputs
34467 (list python-pytest python-setuptools python-wheel))
34468 (home-page "https://github.com/cgdeboer/iteround")
34469 (synopsis "Sum-safe rounding for Iterables")
34470 (description "Iteround is a standard library sum-safe rounding library for
34471Python iterables (lists, tuples, dicts).")
34472 (license license:expat)))
34473
34474(define-public python-hypy-utils
34475 (package
34476 (name "python-hypy-utils")
34477 (version "1.0.29")
34478 (source
34479 (origin
34480 (method url-fetch)
34481 (uri (pypi-uri "hypy_utils" version))
34482 (sha256
34483 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
34484 (build-system pyproject-build-system)
34485 (arguments (list #:tests? #f)) ; No tests upstream.
34486 (native-inputs (list python-setuptools))
34487 (home-page "https://github.com/hykilpikonna/HyPyUtils")
34488 (synopsis "Python utility functions for HyDEV")
34489 (description "This module provides Python utility functions for modifying
34490and setting the color of terminal output, via HyDEV.")
34491 (license license:expat)))
34492
34493(define-public python-mike
34494 (package
34495 (name "python-mike")
34496 (version "2.1.3")
34497 (source
34498 (origin
34499 (method git-fetch) ; no tests data in PyPi package
34500 (uri (git-reference
34501 (url "https://github.com/jimporter/mike")
34502 (commit (string-append "v" version))))
34503 (file-name (git-file-name name version))
34504 (sha256
34505 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
34506 (build-system pyproject-build-system)
34507 (arguments
34508 (list
34509 #:test-flags
34510 ;; Most of integration tests hang or fail.
34511 #~(list "--ignore=test/integration/"
34512 ;; AttributeError: 'NoneType' object has no attribute 'group'
34513 "--ignore=test/unit/test_commands.py"
34514 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
34515 (native-inputs
34516 (list git-minimal/pinned
34517 python-pytest
34518 python-setuptools
34519 python-shtab
34520 python-wheel))
34521 (propagated-inputs
34522 (list python-importlib-metadata
34523 python-importlib-resources
34524 python-jinja2
34525 python-mkdocs
34526 python-pyparsing
34527 python-pyyaml
34528 python-pyyaml-env-tag
34529 python-verspec))
34530 (home-page "https://github.com/jimporter/mike")
34531 (synopsis "Manage multiple versions of MkDocs-powered documentation")
34532 (description
34533 "This package provides a Python utility to easily deploy multiple
34534versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
34535to Github via gh-pages.")
34536 (license license:bsd-3)))
34537
34538(define-public python-arpeggio
34539 (package
34540 (name "python-arpeggio")
34541 (version "2.0.2")
34542 (source
34543 (origin
34544 (method url-fetch)
34545 (uri (pypi-uri "Arpeggio" version))
34546 (sha256
34547 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
34548 (build-system pyproject-build-system)
34549 (native-inputs
34550 (list python-pytest
34551 python-setuptools
34552 python-wheel))
34553 (home-page "https://github.com/textX/Arpeggio")
34554 (synopsis "Packrat parser interpreter for Python")
34555 (description
34556 "This Python library provides a recursive descent parser with
34557backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
34558based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
34559for DSL development but it can be used for all sorts of general purpose
34560parsing.")
34561 (license license:expat)))
34562
34563(define-public python-flatten-json
34564 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
34565 ;; the commit assosiated with 0.1.14 version.
34566 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
34567 (revision "0"))
34568 (package
34569 (name "python-flatten-json")
34570 (version (git-version "0.1.14" revision commit))
34571 (source
34572 (origin
34573 (method git-fetch) ; no tests in PyPI release
34574 (uri (git-reference
34575 (url "https://github.com/amirziai/flatten")
34576 (commit commit)))
34577 (file-name (git-file-name name version))
34578 (sha256
34579 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
34580 (build-system pyproject-build-system)
34581 (native-inputs
34582 (list python-pytest
34583 python-setuptools
34584 python-wheel))
34585 (propagated-inputs
34586 (list python-six))
34587 (home-page "https://github.com/amirziai/flatten")
34588 (synopsis "Flatten JSON objects")
34589 (description
34590 "The @code{flatten_json} Python library flattens the hierarchy in your
34591object, which can be useful if you want to force your objects into a table.")
34592 (license license:expat))))
34593
34594(define-public python-deepdiff
34595 (package
34596 (name "python-deepdiff")
34597 (version "8.6.1")
34598 (source (origin
34599 (method url-fetch)
34600 (uri (pypi-uri "deepdiff" version))
34601 (sha256
34602 (base32
34603 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
34604 (build-system pyproject-build-system)
34605 (arguments
34606 ;; tests: 1028 passed, 10 skipped, 1 deselected
34607 ;; Ignore Polars test (not packaged).
34608 (list #:test-flags #~(list "-k" "not test_polars")))
34609 (propagated-inputs (list python-click ; for CLI
34610 python-pyyaml ; for CLI
34611 python-orderly-set
34612 python-orjson)) ; for optimization
34613 (native-inputs
34614 (list python-flit-core
34615 python-jsonpickle
34616 python-numpy
34617 python-pandas
34618 python-pydantic
34619 python-pytest
34620 python-pytest-benchmark
34621 python-pytz
34622 python-uuid6
34623 python-tomli-w))
34624 (home-page "https://github.com/seperman/deepdiff")
34625 (synopsis "Deep difference and search of any Python object/data")
34626 (description
34627 "This package provides tools for computing deep differences and searching
34628of any Python object/data. Recreate objects by adding adding deltas to each
34629other.")
34630 (license license:expat)))
34631
34632(define-public python-deepmerge
34633 (package
34634 (name "python-deepmerge")
34635 (version "1.0.1")
34636 (source
34637 (origin
34638 (method url-fetch)
34639 (uri (pypi-uri "deepmerge" version))
34640 (sha256
34641 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
34642 (build-system pyproject-build-system)
34643 (native-inputs
34644 (list python-setuptools-scm
34645 python-pytest
34646 python-setuptools
34647 python-wheel))
34648 (home-page "https://deepmerge.readthedocs.io/en/latest/")
34649 (synopsis "Merge nested data structures")
34650 (description
34651 "The @code{deep-merge} Python library provides a toolset to deeply merge
34652nested data structures in Python like lists and dictionaries.")
34653 (license license:expat)))
34654
34655(define-public python-durationpy
34656 (package
34657 (name "python-durationpy")
34658 (version "0.10")
34659 (source
34660 (origin
34661 (method git-fetch)
34662 (uri (git-reference
34663 (url "https://github.com/icholy/durationpy")
34664 (commit version)))
34665 (file-name (git-file-name name version))
34666 (sha256
34667 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
34668 (build-system pyproject-build-system)
34669 (arguments
34670 (list #:test-backend #~'custom
34671 #:test-flags #~(list "test.py")))
34672 (native-inputs (list python-setuptools))
34673 (home-page "https://github.com/icholy/durationpy")
34674 (synopsis "Python <-> Golang time duration formats converter")
34675 (description
34676 "This package implements a functionality to convert between
34677Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
34678 (license license:expat)))
34679
34680(define-public python-murmurhash3
34681 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
34682 (revision "0"))
34683 (package
34684 (name "python-murmurhash3")
34685 (version (git-version "2.3.5" revision commit))
34686 (source
34687 (origin
34688 (method git-fetch)
34689 (uri (git-reference
34690 (url "https://github.com/veegee/mmh3")
34691 (commit commit)))
34692 (file-name (git-file-name name version))
34693 (sha256
34694 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
34695 (build-system pyproject-build-system)
34696 (arguments
34697 (list
34698 #:phases
34699 #~(modify-phases %standard-phases
34700 (add-after 'unpack 'fix-package
34701 (lambda _
34702 (substitute* "mmh3module.cpp"
34703 (("#include <stdio\\.h>")
34704 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
34705 (native-inputs
34706 (list python-cython python-pytest python-setuptools python-wheel))
34707 (home-page "https://github.com/veegee/mmh3")
34708 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
34709 (description
34710 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
34711of fast and robust hash functions. This library is a Python extension module
34712written in C.")
34713 (license license:public-domain))))
34714
34715(define-public python-scooby
34716 (package
34717 (name "python-scooby")
34718 (version "0.11.0")
34719 (source
34720 (origin
34721 (method git-fetch)
34722 (uri (git-reference
34723 (url "https://github.com/banesullivan/scooby")
34724 (commit (string-append "v" version))))
34725 (file-name (git-file-name name version))
34726 (sha256
34727 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
34728 (build-system pyproject-build-system)
34729 (arguments
34730 (list
34731 ;; tests: 19 passed, 5 deselected, 1 warning
34732 #:test-flags
34733 ;; AssertionError: assert 'Module not found' == '0.1.0'
34734 #~(list "--deselect=tests/test_scooby.py::test_get_version"
34735 ;; ModuleNotFoundError: No module named 'no_version'
34736 "--deselect=tests/test_scooby.py::test_tracking"
34737 ;; Failed: DID NOT RAISE <class 'OSError'>
34738 "--deselect=tests/test_scooby.py::test_import_os_error"
34739 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
34740 "--deselect=tests/test_scooby.py::test_import_time"
34741 ;; Errored
34742 "--deselect=tests/test_scooby.py::test_cli")))
34743 (native-inputs
34744 (list python-beautifulsoup4
34745 python-numpy
34746 python-pytest
34747 python-pyvips
34748 python-scipy
34749 python-setuptools
34750 python-setuptools-scm))
34751 (propagated-inputs
34752 (list python-psutil))
34753 (home-page "https://github.com/banesullivan/scooby")
34754 (synopsis "Report hardware information and Python package versions")
34755 (description
34756 "The Scooby package reports the following information about the currently
34757running system:
34758
34759@itemize
34760@item operating system name;
34761@item hardware information including machine type (e.g., @samp{i386},
34762@samp{x86_64}, etc.), CPU count and total RAM;
34763@item Python environment (e.g., Python, IPython, etc.);
34764@item file system name;
34765@item Python version;
34766@item versions of specified Python packages.
34767@end itemize
34768
34769It can generate reports as HTML tables or plain text lists.
34770
34771Scooby has no required dependencies, and only few optional dependencies.")
34772 (license license:expat)))
34773
34774(define-public python-cymem
34775 (package
34776 (name "python-cymem")
34777 (version "2.0.6")
34778 (source
34779 (origin
34780 (method git-fetch)
34781 (uri (git-reference
34782 (url "https://github.com/explosion/cymem")
34783 (commit (string-append "v" version))))
34784 (file-name (git-file-name name version))
34785 (sha256
34786 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
34787 (build-system pyproject-build-system)
34788 (native-inputs (list python-cython python-pytest python-setuptools))
34789 (inputs (list python))
34790 (home-page "https://github.com/explosion/cymem")
34791 (synopsis "Cython memory pool for RAII-style memory management")
34792 (description
34793 "Cymem provides two small memory-management helpers for Cython. They make it
34794easy to tie memory to a Python object's life-cycle, so that the memory is freed
34795when the object is garbage collected.")
34796 (license license:expat)))
34797
34798(define-public python-preshed
34799 (package
34800 (name "python-preshed")
34801 (version "3.0.6")
34802 (source
34803 (origin
34804 (method git-fetch)
34805 (uri (git-reference
34806 (url "https://github.com/explosion/preshed")
34807 (commit (string-append "v" version))))
34808 (file-name (git-file-name name version))
34809 (sha256
34810 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
34811 (build-system pyproject-build-system)
34812 (arguments
34813 (list
34814 #:phases
34815 #~(modify-phases %standard-phases
34816 (add-after 'unpack 'patch-msvccompiler
34817 (lambda _
34818 (substitute* "setup.py"
34819 (("from distutils import ccompiler, msvccompiler")
34820 "from distutils import ccompiler")
34821 (("and msvccompiler.*")
34822 ""))))
34823 (replace 'check
34824 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
34825 (with-directory-excursion (site-packages inputs outputs)
34826 (for-each delete-file (find-files "." "\\.pyx$"))
34827 (apply (assoc-ref %standard-phases 'check) args)
34828 (delete-file-recursively "preshed/tests")))))))
34829 (native-inputs
34830 (list python-cython python-cymem python-pytest python-setuptools))
34831 (inputs (list python python-cymem python-murmurhash))
34832 (home-page "https://github.com/explosion/preshed")
34833 (synopsis "Cython hash tables that assume keys are pre-hashed")
34834 (description
34835 "Simple but high performance Cython hash table mapping pre-randomized keys
34836to void* values.")
34837 (license license:expat)))
34838
34839(define-public python-catalogue
34840 (package
34841 (name "python-catalogue")
34842 (version "2.0.7")
34843 (source
34844 (origin
34845 (method git-fetch)
34846 (uri (git-reference
34847 (url "https://github.com/explosion/catalogue")
34848 (commit (string-append "v" version))))
34849 (file-name (git-file-name name version))
34850 (sha256
34851 (base32 "0f7dqd8swycnspwfka79whr0v630v52hdmkmd1x7l920h33pg467"))))
34852 (build-system pyproject-build-system)
34853 (native-inputs (list python-pytest python-setuptools python-wheel))
34854 (home-page "https://github.com/explosion/catalogue")
34855 (synopsis "Lightweight function registries for your library")
34856 (description
34857 "This package is a tiny, zero-dependencies library that makes it easy to
34858add function (or object) registries to your code. Function registries are
34859helpful when you have objects that need to be both easily serializable and
34860fully customizable. Instead of passing a function into your object, you pass
34861in an identifier name, which the object can use to lookup the function from
34862the registry. This makes the object easy to serialize, because the name is a
34863simple string. If you instead saved the function, you'd have to use Pickle
34864for serialization, which has many drawbacks.")
34865 (license license:expat)))
34866
34867(define-public python-gatt
34868 (package
34869 (name "python-gatt")
34870 (version "0.2.7")
34871 (source (origin
34872 (method url-fetch)
34873 (uri (pypi-uri "gatt" version))
34874 (sha256
34875 (base32
34876 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
34877 (build-system pyproject-build-system)
34878 (arguments (list #:tests? #f)) ; No tests upstream.
34879 (propagated-inputs (list python-dbus-1.2 python-pygobject))
34880 (native-inputs (list python-setuptools))
34881 (home-page "https://github.com/getsenic/gatt-python")
34882 (synopsis "Bluetooth GATT SDK for Python")
34883 (description
34884 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
34885Software Development Kit} for Python helps you implement and communicate with
34886any Bluetooth Low Energy device that has a GATT profile. It supports:
34887
34888@itemize @bullet
34889@item Discovering nearby Bluetooth Low Energy devices
34890@item Connecting and disconnecting devices
34891@item Implementing your custom GATT profile
34892@item Accessing all GATT services
34893@item Accessing all GATT characteristics
34894@item Reading characteristic values
34895@item Writing characteristic values
34896@item Subscribing for characteristic value change notifications
34897@end itemize
34898
34899Currently, Linux is the only platform supported by this library.")
34900 (license license:expat)))
34901
34902(define-public python-dbus-fast
34903 (package
34904 (name "python-dbus-fast")
34905 (version "2.44.3")
34906 (source
34907 (origin
34908 (method git-fetch) ;No tests in PyPI package.
34909 (uri (git-reference
34910 (url "https://github.com/Bluetooth-Devices/dbus-fast")
34911 (commit (string-append "v" version))))
34912 (file-name (git-file-name name version))
34913 (sha256
34914 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
34915 (build-system pyproject-build-system)
34916 (arguments
34917 (list
34918 #:test-flags
34919 '(list
34920 ;; These tests need pytest_codspeed.
34921 "--ignore-glob=tests/benchmarks/test_*marshall.py"
34922 ;; These tests all fail with:
34923 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
34924 ;; set and could not get DISPLAY environment variable to get bus address
34925 "-m" "not asyncio")))
34926 (native-inputs (list python-cython
34927 python-poetry-core
34928 python-setuptools
34929 python-pytest
34930 python-pytest-cov
34931 python-pytest-asyncio
34932 python-covdefaults))
34933 (home-page "https://github.com/bluetooth-devices/dbus-fast")
34934 (synopsis "Faster version of dbus-next")
34935 (description "This package provides a faster version of dbus-next.")
34936 (license license:expat)))
34937
34938(define-public python-bleak
34939 (package
34940 (name "python-bleak")
34941 (version "0.22.3")
34942 (source
34943 (origin
34944 (method url-fetch)
34945 (uri (pypi-uri "bleak" version))
34946 (sha256
34947 (base32 "0p04kk84vjmfv2pl1lichaaq8rc9xdm9sgd5g9r5gr2pjv0w6j9i"))))
34948 (build-system pyproject-build-system)
34949 (arguments
34950 `(#:tests? #f)) ; no tests
34951 (propagated-inputs (list python-async-timeout
34952 python-dbus-fast
34953 python-typing-extensions))
34954 (native-inputs (list python-poetry-core))
34955 (home-page "https://github.com/hbldh/bleak")
34956 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
34957 (description "This package provides a Bluetooth Low Energy platform-agnostic
34958client library.")
34959 (license license:expat)))
34960
34961(define-public python-ndeflib
34962 (package
34963 (name "python-ndeflib")
34964 (version "0.3.3")
34965 (source
34966 (origin
34967 (method url-fetch)
34968 (uri (pypi-uri "ndeflib" version))
34969 (sha256
34970 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
34971 (build-system pyproject-build-system)
34972 (arguments
34973 (list
34974 ;; tests: 1571 passed, 37 deselected, 1 warning
34975 ;;
34976 ;; Two test fail with assertion not equal:
34977 ;;
34978 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
34979 ;; bytes] - AssertionError
34980 ;;
34981 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
34982 ;; 1 bytes] - AssertionError
34983 #:test-flags #~(list "-k" "not test_decode_error")))
34984 (native-inputs (list python-pytest-8 python-setuptools))
34985 (home-page "https://ndeflib.readthedocs.io/")
34986 (synopsis "NFC Data Exchange Format decoder and encoder.")
34987 (description "This package provides a NFC (Near-Field Communication)
34988Data Exchange Format decoder and encoder.")
34989 (license license:isc)))
34990
34991(define-public python-nfcpy
34992 (package
34993 (name "python-nfcpy")
34994 (version "1.0.4")
34995 (source
34996 (origin
34997 (method url-fetch)
34998 (uri (pypi-uri "nfcpy" version))
34999 (sha256
35000 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
35001 (build-system pyproject-build-system)
35002 (arguments
35003 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
35004 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
35005 python-pyserial))
35006 (native-inputs (list python-setuptools python-wheel))
35007 (home-page "https://github.com/nfcpy/nfcpy")
35008 (synopsis "Python module for Near-Field Communication.")
35009 (description "This package provides a Python module for Near-Field
35010Communication.")
35011 (license license:eupl1.1)))
35012
35013(define-public python-clrprint
35014 (package
35015 (name "python-clrprint")
35016 (version "2.0.1")
35017 (source (origin
35018 (method url-fetch)
35019 (uri (pypi-uri "clrprint" version))
35020 (sha256
35021 (base32
35022 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
35023 (build-system pyproject-build-system)
35024 (arguments '(#:tests? #f)) ;there are no tests
35025 (native-inputs
35026 (list python-setuptools))
35027 (propagated-inputs (list python-colorama python-termcolor))
35028 (home-page "https://github.com/AbhijithAJ/clrprint")
35029 (synopsis "Print colorful output in the terminal")
35030 (description "@code{clrprint} is developed to print colorful output in the
35031terminal. It has red, blue, green, yellow, purple and black/white (default)
35032colors.")
35033 (license license:expat)))
35034
35035(define-public python-mido
35036 (package
35037 (name "python-mido")
35038 (version "1.3.2")
35039 (source (origin
35040 (method url-fetch)
35041 (uri (pypi-uri "mido" version))
35042 (sha256
35043 (base32
35044 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
35045 (build-system pyproject-build-system)
35046 (arguments
35047 (list #:phases
35048 #~(modify-phases %standard-phases
35049 ;; This package requires python-packaging~=23.1 which is not yet
35050 ;; updated to. As per pyproject.toml, it is required to provide
35051 ;; a nice version_info opbject.
35052 ;; TODO: After updating python-packaging, fix this.
35053 (delete 'sanity-check))))
35054 (propagated-inputs (list python-importlib-metadata python-packaging))
35055 (native-inputs (list python-pytest python-setuptools python-wheel))
35056 (home-page "https://mido.readthedocs.io/en/stable/")
35057 (synopsis "MIDI Objects for Python")
35058 (description "This library is for working with MIDI 1.0 ports, messages and
35059files.")
35060 (license license:expat)))
35061
35062(define-public python-musical-scales
35063 (package
35064 (name "python-musical-scales")
35065 (version "1.0.1")
35066 (source (origin
35067 (method url-fetch)
35068 (uri (pypi-uri "musical-scales" version))
35069 (sha256
35070 (base32
35071 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
35072 (build-system pyproject-build-system)
35073 (arguments (list #:tests? #f)) ;no tests
35074 (native-inputs (list python-setuptools))
35075 (home-page "https://github.com/hmillerbakewell/musical-scales")
35076 (synopsis "Retrieve a scale based on a given mode and starting note")
35077 (description
35078 "Retrieve a scale based on a given mode and starting note.
35079Information about these scales can be
35080@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
35081Wikipedia}.")
35082 (license license:expat)))
35083
35084(define-public python-langcodes
35085 (package
35086 (name "python-langcodes")
35087 (version "3.5.0")
35088 (source (origin
35089 (method url-fetch)
35090 (uri (pypi-uri "langcodes" version))
35091 (sha256
35092 (base32
35093 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
35094 (build-system pyproject-build-system)
35095 (native-inputs
35096 (list python-pytest
35097 python-setuptools
35098 python-setuptools-scm))
35099 (propagated-inputs
35100 ;; [optional:data]
35101 (list python-language-data))
35102 (home-page "https://github.com/rspeer/langcodes")
35103 (synopsis "Python library for working with language codes")
35104 (description
35105 "This package provides a Python library for working with and comparing
35106language codes.
35107
35108@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3510947}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3511047 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
35111with it, and it also implements recommendations from the
35112@url{http://cldr.unicode.org/, Unicode CLDR}.
35113
35114@code{python-langcodes} can also refer to a database of language properties
35115and names, built from Unicode CLDR and the IANA subtag registry, if you
35116install @code{python-language-data}.")
35117 (license license:expat)))
35118
35119(define-public python-anyascii
35120 (package
35121 (name "python-anyascii")
35122 (version "0.3.3")
35123 (source (origin
35124 (method url-fetch)
35125 (uri (pypi-uri "anyascii" version))
35126 (sha256
35127 (base32
35128 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
35129 (build-system pyproject-build-system)
35130 (native-inputs (list python-pytest python-flit-core))
35131 (home-page "https://anyascii.com")
35132 (synopsis "Unicode to ASCII transliteration")
35133 (description "@code{anyascii} converts Unicode characters to their best
35134ASCII representation.")
35135 (license license:isc)))
35136
35137(define-public python-geomet
35138 (package
35139 (name "python-geomet")
35140 (version "1.1.0")
35141 (source
35142 (origin
35143 (method git-fetch)
35144 (uri (git-reference
35145 (url "https://github.com/geomet/geomet")
35146 (commit version)))
35147 (file-name (git-file-name name version))
35148 (sha256
35149 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
35150 (build-system pyproject-build-system)
35151 (native-inputs (list python-pytest python-setuptools))
35152 (propagated-inputs (list python-click python-six))
35153 (home-page "https://github.com/geomet/geomet")
35154 (synopsis
35155 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
35156 (description
35157 "This package provides utilities and functions for converting
35158GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
35159versa. Extended WKB/WKT are also supported.")
35160 (license license:asl2.0)))
35161
35162(define-public python-cogapp
35163 (package
35164 (name "python-cogapp")
35165 (version "3.3.0")
35166 (source (origin
35167 (method url-fetch)
35168 (uri (pypi-uri "cogapp" version))
35169 (sha256
35170 (base32
35171 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
35172 (build-system pyproject-build-system)
35173 (native-inputs (list python-pytest python-setuptools python-wheel))
35174 (home-page "https://nedbatchelder.com/code/cog")
35175 (synopsis "Content generation tool that leverages Python")
35176 (description "Cog is a file generation tool. It allows using pieces of
35177Python code as generators in your source files to generate arbitrary text.")
35178 (license license:expat)))
35179
35180(define-public python-cxxheaderparser
35181 (package
35182 (name "python-cxxheaderparser")
35183 (version "1.7.0")
35184 (source
35185 (origin
35186 (method git-fetch)
35187 (uri (git-reference
35188 (url "https://github.com/robotpy/cxxheaderparser")
35189 (commit version)))
35190 (file-name (git-file-name name version))
35191 (sha256
35192 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
35193 (build-system pyproject-build-system)
35194 (native-inputs
35195 (list python-hatch-vcs python-pytest))
35196 (home-page "https://github.com/robotpy/cxxheaderparser/")
35197 (synopsis "Python C++ header parser")
35198 (description "Pure python C++ header parser that parses C++ headers in a
35199mildly naive manner that allows it to handle many C constructs, including
35200many (C++11 and beyond) features.")
35201 (license license:bsd-3)))
35202
35203(define-public python-bsdiff4
35204 (package
35205 (name "python-bsdiff4")
35206 (version "1.2.6")
35207 (source
35208 (origin
35209 (method git-fetch)
35210 (uri (git-reference
35211 (url "https://github.com/ilanschnell/bsdiff4")
35212 (commit version)))
35213 (file-name (git-file-name name version))
35214 (sha256
35215 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
35216 (build-system pyproject-build-system)
35217 (arguments
35218 (list
35219 #:test-flags #~(list "--pyargs" "bsdiff4")))
35220 (native-inputs
35221 (list python-pytest
35222 python-setuptools
35223 python-wheel))
35224 (home-page "https://github.com/ilanschnell/bsdiff4")
35225 (synopsis "Binary diff and patch using the BSDIFF4 format")
35226 (description
35227 "This package provides a Python library for the @code{bsdiff} binary diff
35228utility. It also provides two command-line tools, @code{bsdiff4} and
35229@code{bspatch4}.")
35230 (license license:bsd-2)))
35231
35232(define-public python-mpv
35233 (package
35234 (name "python-mpv")
35235 (version "1.0.8")
35236 (source
35237 (origin
35238 (method git-fetch)
35239 (uri (git-reference
35240 (url "https://github.com/jaseg/python-mpv")
35241 (commit (string-append "v" version))))
35242 (file-name (git-file-name name version))
35243 (sha256
35244 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
35245 (build-system pyproject-build-system)
35246 (arguments
35247 (list #:phases
35248 #~(modify-phases %standard-phases
35249 (add-before 'build 'patch-reference-to-mpv
35250 (lambda* (#:key inputs #:allow-other-keys)
35251 ;; Without an absolute path it is not able find and load libmpv.
35252 (substitute* "mpv.py"
35253 (("sofile = .*")
35254 (format #f "sofile = '~a/lib/libmpv.so'~%"
35255 #$(this-package-input "mpv"))))))
35256 (add-before 'check 'prepare-for-tests
35257 (lambda _
35258 ;; Fontconfig throws errors when it has no cache dir to use.
35259 (setenv "XDG_CACHE_HOME" (getcwd))
35260 ;; Some tests fail without a writable and readable HOME.
35261 (setenv "HOME" (getcwd))
35262 (setenv "PY_MPV_SKIP_TESTS"
35263 "test_wait_for_property_event_overflow"))))))
35264 (native-inputs
35265 (list python-pytest
35266 python-pyvirtualdisplay
35267 python-setuptools
35268 xorg-server-for-tests))
35269 (inputs (list mpv))
35270 (propagated-inputs (list python-pillow)) ;for raw screenshots
35271 (home-page "https://github.com/jaseg/python-mpv")
35272 (synopsis "Python interface to the mpv media player")
35273 (description
35274 "python-mpv is a ctypes-based python interface to the mpv media player.
35275It gives you more or less full control of all features of the player, just
35276as the lua interface does.")
35277 ;; From the project's README:
35278 ;; python-mpv inherits the underlying libmpv's license, which can be either
35279 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
35280 ;; copyright page.
35281 (license license:gpl2+)))
35282
35283(define-public python-biblib
35284 (let ((upstream-version "0.1.0")
35285 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
35286 (revision "1"))
35287 (package
35288 (name "python-biblib")
35289 (version (git-version upstream-version revision commit))
35290 (source
35291 (origin
35292 (method git-fetch)
35293 (uri (git-reference
35294 (url "https://github.com/aclements/biblib")
35295 (commit commit)))
35296 (sha256
35297 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
35298 (file-name (git-file-name name version))))
35299 (build-system pyproject-build-system)
35300 (arguments (list #:tests? #f)) ; No tests upstream.
35301 (native-inputs (list python-setuptools))
35302 (home-page "https://github.com/aclements/biblib")
35303 (synopsis "BibTeX parsing and transformation library")
35304 (description
35305 "Biblib provides a simple, standalone Python 3 package for parsing
35306BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
35307entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
35308source code for BibTeX and hence (barring bugs in translation) should be fully
35309compatible with BibTeX's own parser.")
35310 ;; N.B. It seems the parser was translated from WEB by hand: this
35311 ;; package does not contain any generated files.
35312 (license license:expat))))
35313
35314(define-public python-cyclic
35315 (package
35316 (name "python-cyclic")
35317 (version "1.0.0")
35318 (source
35319 (origin
35320 (method git-fetch)
35321 (uri (git-reference
35322 (url "https://github.com/neurobin/cyclic")
35323 ;; Release is not tagged on github, see
35324 ;; https://github.com/neurobin/cyclic/issues/2
35325 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
35326 (file-name (git-file-name name version))
35327 (sha256
35328 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
35329 (build-system pyproject-build-system)
35330 (arguments (list #:test-backend #~'unittest))
35331 (native-inputs (list python-setuptools))
35332 (home-page "https://github.com/neurobin/cyclic")
35333 (synopsis "Handle cyclic relations")
35334 (description "This package handles cyclic relations compared by value.")
35335 (license license:bsd-3)))
35336
35337(define-public python-rcslice
35338 (package
35339 (name "python-rcslice")
35340 (version "1.1.0")
35341 (source
35342 (origin
35343 (method git-fetch)
35344 (uri (git-reference
35345 (url "https://github.com/neurobin/rcslice")
35346 ;; Releases are not tagged on github, see
35347 ;; https://github.com/neurobin/rcslice/issues/2
35348 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
35349 (file-name (git-file-name name version))
35350 (sha256
35351 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
35352 (build-system pyproject-build-system)
35353 (arguments (list #:test-backend #~'unittest))
35354 (native-inputs (list python-setuptools))
35355 (home-page "https://github.com/neurobin/rcslice")
35356 (synopsis "Slice a list of sliceables")
35357 (description
35358 "This package provides Python module to slice a list of sliceables (1
35359indexed, both start and end index are inclusive). Helps to slice file content
35360line by line or column by column or a combination of both.")
35361 (license license:bsd-3)))
35362
35363(define-public python-rpds-py
35364 (package
35365 (name "python-rpds-py")
35366 (version "0.10.6")
35367 (source (origin
35368 (method url-fetch)
35369 (uri (pypi-uri "rpds_py" version))
35370 (sha256
35371 (base32
35372 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
35373 (build-system cargo-build-system)
35374 (arguments
35375 (list
35376 #:imported-modules `(,@%cargo-build-system-modules
35377 ,@%pyproject-build-system-modules)
35378 #:modules '((guix build cargo-build-system)
35379 ((guix build pyproject-build-system) #:prefix py:)
35380 (guix build utils))
35381 #:phases
35382 #~(modify-phases %standard-phases
35383 (add-after 'build 'build-python-module
35384 (assoc-ref py:%standard-phases 'build))
35385 (add-after 'build-python-module 'install-python-module
35386 (assoc-ref py:%standard-phases 'install)))
35387 #:install-source? #false))
35388 (inputs
35389 (cons maturin (cargo-inputs 'python-rpds-py)))
35390 (native-inputs
35391 (list python-wrapper))
35392 (home-page "https://github.com/crate-py/rpds")
35393 (synopsis "Bindings to Rust rpds for persistent data structures")
35394 (description "This package provides Python bindings to the Rust rpds crate
35395for persistent data structures. It was written initially to support replacing
35396@code{python-pyrsistent}.")
35397 (license license:expat)))
35398
35399(define-public python-nanoid
35400 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
35401 (revision "0"))
35402 (package
35403 (name "python-nanoid")
35404 (version "2.0.0")
35405 (source
35406 (origin
35407 (method git-fetch)
35408 (uri
35409 (git-reference
35410 (url "https://github.com/puyuan/py-nanoid")
35411 (commit commit)))
35412 (file-name (git-file-name name commit))
35413 (sha256
35414 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
35415 (build-system pyproject-build-system)
35416 (native-inputs (list python-pytest python-setuptools))
35417 (home-page "https://github.com/puyuan/py-nanoid")
35418 (synopsis "Unique string ID generator")
35419 (description
35420 "This package provides a tiny, secure, URL-friendly, unique string ID
35421generator for Python.")
35422 (license license:expat))))
35423
35424(define-public python-misskey
35425 (package
35426 (name "python-misskey")
35427 (version "4.1.0")
35428 (source (origin
35429 (method git-fetch)
35430 (uri (git-reference
35431 (url "https://github.com/YuzuRyo61/Misskey.py")
35432 (commit (string-append "v" version))))
35433 (file-name (git-file-name name version))
35434 (sha256
35435 (base32
35436 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
35437 (build-system pyproject-build-system)
35438 (arguments (list #:tests? #f)) ;needs network
35439 (native-inputs (list python-setuptools))
35440 (propagated-inputs (list python-requests))
35441 (home-page "https://misskeypy.readthedocs.io")
35442 (synopsis "Python bindings for Misskey's API")
35443 (description
35444 "This package provides access to Misskey's API. Misskey is a SNS
35445platform using the ActivityPub protocol.")
35446 (license license:expat)))
35447
35448(define-public python-lief
35449 (package
35450 (name "python-lief")
35451 (version "0.17.5")
35452 (source (origin
35453 (method git-fetch)
35454 (uri (git-reference
35455 (url "https://github.com/lief-project/LIEF")
35456 (commit version)))
35457 (file-name (git-file-name name version))
35458 (sha256
35459 (base32
35460 "1w7q10barwi60bmcldyf6lg613d7nglf2kl14jddby870hhrpj5a"))))
35461 (build-system pyproject-build-system)
35462 (native-inputs (list cmake-minimal
35463 ninja
35464 python-scikit-build-core
35465 python-pydantic))
35466 (arguments
35467 (list
35468 #:tests? #f ;needs network
35469 #:phases #~(modify-phases %standard-phases
35470 (add-before 'build 'change-directory
35471 (lambda _
35472 (chdir "api/python"))))))
35473 (home-page "https://github.com/lief-project/LIEF")
35474 (synopsis "Library to instrument executable formats")
35475 (description
35476 "@code{python-lief} is a cross platform library which can parse, modify
35477and abstract ELF, PE and MachO formats.")
35478 (license license:asl2.0)))
35479
35480(define-public python-eris
35481 (package
35482 (name "python-eris")
35483 (version "1.0.0")
35484 (source
35485 (origin
35486 (method url-fetch)
35487 (uri (pypi-uri "eris" version))
35488 (sha256
35489 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
35490 (build-system pyproject-build-system)
35491 (arguments
35492 ;; No tests in PyPI, tests miss data files in Git:
35493 ;; - tests/test-vectors/test_encode
35494 ;; - tests/test-vectors/test_decode
35495 (list #:tests? #f))
35496 (native-inputs
35497 (list python-setuptools
35498 python-wheel))
35499 (propagated-inputs
35500 (list python-aiocoap
35501 python-pycryptodome))
35502 (home-page "https://codeberg.org/eris/python-eris")
35503 (synopsis "Python implementation of ERIS")
35504 (description
35505 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
35506Storage}.")
35507 (license license:lgpl3+)))
35508
35509(define-public python-pymonad
35510 (package
35511 (name "python-pymonad")
35512 (version "2.4.0")
35513 (source
35514 (origin
35515 (method git-fetch)
35516 (uri (git-reference
35517 (url "https://github.com/jasondelaat/pymonad")
35518 (commit (string-append "v" version))))
35519 (file-name (git-file-name name version))
35520 (sha256
35521 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
35522 (build-system pyproject-build-system)
35523 (arguments
35524 (list
35525 #:phases
35526 #~(modify-phases %standard-phases
35527 (replace 'check
35528 (lambda* (#:key tests? #:allow-other-keys)
35529 (when tests?
35530 (invoke "./run_tests.sh")))))))
35531 (native-inputs (list python-setuptools))
35532 (home-page "https://github.com/jasondelaat/pymonad")
35533 (synopsis "Monadic style functional programming for Python")
35534 (description "@code{python-pymonad} implements data structures typically
35535available in purely functional or functional first programming languages such
35536as Haskell and F#. Included are
35537
35538@itemize
35539@item Monad and Monoid data types with several common monads such as Maybe and
35540State
35541@item Useful tools such as the @code{@@curry} decorator for defining curried
35542functions
35543@item Type annotations to help ensure correct usage
35544@end itemize")
35545 (license license:bsd-3)))
35546
35547(define-public python-markdown-strings
35548 (package
35549 (name "python-markdown-strings")
35550 (version "3.3.0")
35551 (source
35552 (origin
35553 (method git-fetch)
35554 (uri (git-reference
35555 (url "https://github.com/awesmubarak/markdown_strings.git")
35556 (commit (string-append "v" version))))
35557 (file-name (git-file-name name version))
35558 (sha256
35559 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
35560 (build-system pyproject-build-system)
35561 (arguments
35562 (list
35563 #:test-backend #~'custom
35564 #:test-flags #~(list "test.py")))
35565 (native-inputs (list python-setuptools))
35566 (propagated-inputs (list python-lxml python-six))
35567 (home-page "https://github.com/awesmubarak/markdown_strings")
35568 (synopsis "Python library to create markdown-formatted text")
35569 (description "This package allows the programmatic creation of
35570markdown-compliant strings.")
35571 (license license:expat)))
35572
35573(define-public python-icecream
35574 (package
35575 (name "python-icecream")
35576 (version "2.1.9")
35577 (source
35578 (origin
35579 (method git-fetch)
35580 (uri (git-reference
35581 (url "https://github.com/gruns/icecream")
35582 (commit (string-append "v" version))))
35583 (file-name (git-file-name name version))
35584 (sha256
35585 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
35586 (build-system pyproject-build-system)
35587 (native-inputs
35588 (list python-hypothesis
35589 python-pytest
35590 python-setuptools))
35591 (propagated-inputs
35592 (list python-asttokens
35593 python-colorama
35594 python-executing
35595 python-pygments))
35596 (home-page "https://github.com/gruns/icecream")
35597 (synopsis
35598 "Single function call to debug variables, expressions, and program execution")
35599 (description
35600 "This tool lets you debug variables, expressions, and program execution
35601with one function call. IceCream makes print debugging a little sweeter.")
35602 (license license:expat)))
35603
35604(define-public python-icegrams
35605 (package
35606 (name "python-icegrams")
35607 (version "1.1.6")
35608 (source
35609 (origin
35610 (method git-fetch)
35611 (uri (git-reference
35612 ;; no tests in the PyPI archive
35613 (url "https://github.com/mideind/Icegrams")
35614 (commit (string-append version))))
35615 (file-name (git-file-name name version))
35616 (sha256
35617 (base32 "0kzj3k1rl11l66l2xlqilx576hgknb5fd7im96mqjq34ykm70i6f"))))
35618 (build-system pyproject-build-system)
35619 (arguments
35620 (list
35621 #:test-flags
35622 #~(list
35623 ;; two tests fail because of a hardcoded file path in the package's source code
35624 ;; this should be fixed upstream instead of with a substitution here
35625 "-k"
35626 (string-append "not test_trigrams" " and not test_word_ids")
35627 "test/test_ngrams.py")))
35628 (propagated-inputs (list python-cffi))
35629 (native-inputs (list python-pytest python-setuptools
35630 python-setuptools-scm python-wheel))
35631 (home-page "https://github.com/mideind/Icegrams")
35632 (synopsis "Trigram statistics for Icelandic")
35633 (description
35634 "Icegrams is a Python package that encapsulates a large trigram
35635library for Icelandic. You can use Icegrams to obtain probabilities (relative
35636frequencies) of over a million different unigrams (single words or tokens), or of
35637bigrams (pairs of two words or tokens), or of trigrams. Icegrams is useful for
35638instance in spelling correction, predictive typing, to help disabled people
35639write text fast, and for various text generation, statistics, and modeling tasks.")
35640 (license license:expat)))
35641
35642(define-public python-speg
35643 (package
35644 (name "python-speg")
35645 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
35646 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
35647 (revision . "0")))
35648 (version (git-version "0.3"
35649 (assoc-ref properties 'revision)
35650 (assoc-ref properties 'commit)))
35651 (source
35652 (origin
35653 (method git-fetch)
35654 (uri (git-reference
35655 (url "https://github.com/avakar/speg")
35656 (commit (assoc-ref properties 'commit))))
35657 (file-name (git-file-name name version))
35658 (sha256
35659 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
35660 (build-system pyproject-build-system)
35661 (native-inputs
35662 (list python-pytest
35663 python-setuptools))
35664 (propagated-inputs
35665 (list python-six))
35666 (home-page "https://github.com/avakar/speg")
35667 (synopsis "PEG-based parser interpreter with memoization")
35668 (description "This package is a PEG-based parser and interpreter with
35669memoization.")
35670 (license license:expat)))
35671
35672(define-public python-spinners
35673 (package
35674 (name "python-spinners")
35675 (version "0.0.24")
35676 (source
35677 (origin
35678 (method url-fetch)
35679 (uri (pypi-uri "spinners" version))
35680 (sha256
35681 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
35682 (build-system pyproject-build-system)
35683 (arguments
35684 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
35685 (native-inputs
35686 (list python-setuptools))
35687 (home-page "https://github.com/manrajgrover/py-spinners")
35688 (synopsis "Python library with graphical spinners for the terminal")
35689 (description
35690 "Spinners is a Python library that contains graphical spinners that can
35691be displayed terminal.")
35692 (license license:expat)))
35693
35694(define-public python-sqlglot
35695 (package
35696 (name "python-sqlglot")
35697 (version "26.33.0")
35698 (source
35699 (origin
35700 (method url-fetch)
35701 (uri (pypi-uri "sqlglot" version))
35702 (sha256
35703 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
35704 (build-system pyproject-build-system)
35705 (arguments
35706 (list
35707 #:test-backend #~'unittest
35708 #:phases
35709 #~(modify-phases %standard-phases
35710 (add-before 'check 'pre-check
35711 (lambda _
35712 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
35713 (native-inputs
35714 (list python-duckdb
35715 python-pytz
35716 python-pandas
35717 python-setuptools
35718 python-setuptools-scm
35719 python-tzdata))
35720 (home-page "https://sqlglot.com/")
35721 (synopsis "Python SQL Parser and Transpiler")
35722 (description
35723 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
35724engine. It can be used to format SQL or translate between 31 different
35725dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
35726BigQuery. It aims to read a wide variety of SQL inputs and output
35727syntactically and semantically correct SQL in the targeted dialects.")
35728 (license license:expat)))
35729
35730(define-public python-sqlglotrs
35731 (package
35732 (inherit python-sqlglot)
35733 (name "python-sqlglotrs")
35734 (version "0.6.1")
35735 (source
35736 (origin
35737 (method url-fetch)
35738 (uri (pypi-uri "sqlglotrs" version))
35739 (sha256
35740 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
35741 (build-system cargo-build-system)
35742 (arguments
35743 (list
35744 #:install-source? #false
35745 #:tests? #f ;no tests
35746 #:imported-modules `(,@%cargo-build-system-modules
35747 ,@%pyproject-build-system-modules)
35748 #:modules '((guix build cargo-build-system)
35749 ((guix build pyproject-build-system) #:prefix py:)
35750 (guix build utils))
35751 #:phases
35752 #~(modify-phases %standard-phases
35753 (add-after 'build 'build-python-module
35754 (assoc-ref py:%standard-phases 'build))
35755 (add-after 'build-python-module 'install-python-module
35756 (assoc-ref py:%standard-phases 'install))
35757 (add-after 'install-python-module 'add-install-to-pythonpath
35758 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
35759 (native-inputs
35760 (list maturin
35761 python-wrapper))
35762 (inputs
35763 (cargo-inputs 'python-sqlglotrs))))
35764
35765(define-public python-sqltrie
35766 (package
35767 (name "python-sqltrie")
35768 (version "0.11.2")
35769 (home-page "https://github.com/iterative/sqltrie/")
35770 (source
35771 (origin
35772 (method url-fetch)
35773 (uri (pypi-uri "sqltrie" version))
35774 (sha256
35775 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
35776 (build-system pyproject-build-system)
35777 (arguments
35778 (list
35779 #:test-flags
35780 #~(list "--ignore=tests/benchmarks/"
35781 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
35782 ;; yet in Guix.
35783 "--ignore=src/sqltrie/__pyinstaller")))
35784 (native-inputs
35785 (list python-pytest
35786 python-pytest-mock
35787 python-pytest-sugar
35788 python-setuptools
35789 python-setuptools-scm))
35790 (propagated-inputs
35791 (list python-attrs
35792 python-orjson
35793 python-pygtrie))
35794 (synopsis "SQL-based prefix tree for Python")
35795 (description
35796 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
35797python-diskcache.")
35798 (license license:asl2.0)))
35799
35800(define-public python-sre-yield
35801 (package
35802 (name "python-sre-yield")
35803 (version "1.2")
35804 (source
35805 (origin
35806 (method url-fetch)
35807 (uri (pypi-uri "sre_yield" version))
35808 (sha256
35809 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
35810 (build-system pyproject-build-system)
35811 (arguments
35812 (list #:test-backend #~'unittest))
35813 (native-inputs
35814 (list python-setuptools))
35815 (home-page "https://github.com/google/sre_yield")
35816 (synopsis "Expands a regular expression to its possible matches")
35817 (description
35818 "The goal of sre_yield is to efficiently generate all values that can
35819match a given regular expression, or count possible matches efficiently. It
35820uses the parsed regular expression, so you get a much more accurate result
35821than trying to just split strings.")
35822 (license license:asl2.0)))
35823
35824(define-public python-srsly
35825 (package
35826 (name "python-srsly")
35827 (version "2.5.1")
35828 (source
35829 (origin
35830 (method url-fetch)
35831 (uri (pypi-uri "srsly" version))
35832 (sha256
35833 (base32 "0zn74zyb928v898j6l86a83qgdvza78ksjg0v8ixla9yrzv4n6xb"))))
35834 (build-system pyproject-build-system)
35835 (arguments
35836 (list
35837 #:test-flags
35838 #~(list "--pyargs" "srsly"
35839 ;; 3 tests fail in
35840 ;; tests/cloudpickle/cloudpickle_test.py::CloudPickleTest
35841 "-k" (string-append "not test_import"
35842 " and not test_logger"
35843 " and not test_multiprocess"))))
35844 (native-inputs
35845 (list python-cython
35846 python-mock
35847 python-numpy
35848 python-psutil
35849 python-pytest
35850 python-pytest-timeout
35851 python-setuptools))
35852 (propagated-inputs
35853 (list python-catalogue))
35854 (home-page "https://github.com/explosion/srsly")
35855 (synopsis "Serialization utilities for Python")
35856 (description "This package bundles some of the best Python serialization
35857libraries into one standalone package, with a high-level API that makes it
35858easy to write code that's correct across platforms and Pythons.")
35859 (license license:expat)))
35860
35861(define-public python-srt
35862 (package
35863 (name "python-srt")
35864 (version "3.5.3")
35865 (source
35866 (origin
35867 (method url-fetch)
35868 (uri (pypi-uri "srt" version))
35869 (sha256
35870 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
35871 (build-system pyproject-build-system)
35872 (native-inputs
35873 (list python-pytest
35874 python-setuptools
35875 python-wheel))
35876 (home-page "https://github.com/cdown/srt")
35877 (synopsis "SRT parsing library")
35878 (description
35879 "This package provides a Python library for parsing, modifying, and
35880composing subtitles in the SRT file format.")
35881 (license license:expat)))
35882
35883(define-public python-sshpubkeys
35884 (package
35885 (name "python-sshpubkeys")
35886 (version "3.2.0")
35887 (source
35888 (origin
35889 (method git-fetch)
35890 (uri (git-reference
35891 (url "https://github.com/ojarva/python-sshpubkeys")
35892 (commit (string-append "v" version))))
35893 (file-name (git-file-name name version))
35894 (sha256
35895 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
35896 (build-system pyproject-build-system)
35897 (arguments
35898 (list #:tests? #f)) ; XXX: All tests fail
35899 (native-inputs
35900 (list python-setuptools
35901 python-wheel))
35902 (propagated-inputs
35903 (list python-cryptography
35904 python-ecdsa))
35905 (home-page "https://github.com/ojarva/python-sshpubkeys")
35906 (synopsis "OpenSSH public key parser")
35907 (description
35908 "This package provides a library for parsing and validating OpenSSH
35909public key files.")
35910 (license license:bsd-3)))
35911
35912(define-public python-sshtunnel
35913 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
35914 (revision "0"))
35915 (package
35916 (name "python-sshtunnel")
35917 (version (git-version "0.4.0" revision commit))
35918 (source
35919 (origin
35920 (method git-fetch)
35921 (uri (git-reference
35922 (url "https://github.com/pahaz/sshtunnel")
35923 (commit commit)))
35924 (file-name (git-file-name name version))
35925 (sha256
35926 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
35927 (patches (search-patches "python-sshtunnel-pep518.patch"))))
35928 (build-system pyproject-build-system)
35929 (arguments
35930 (list
35931 #:phases
35932 #~(modify-phases %standard-phases
35933 (add-after 'unpack 'remove-deprecated-dsskey
35934 (lambda _
35935 (substitute* "sshtunnel.py"
35936 (("'dsa': paramiko\\.DSSKey,")
35937 "")
35938 (("paramiko\\.DSSKey, ")
35939 "")))))))
35940 (propagated-inputs (list python-paramiko))
35941 (native-inputs
35942 (list openssh python-mock python-pytest python-setuptools))
35943 (home-page "https://github.com/pahaz/sshtunnel")
35944 (synopsis "Python SSH tunnels library")
35945 (description
35946 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
35947in the background, using Python.")
35948 (license license:expat))))
35949
35950(define-public python-stack-data
35951 (package
35952 (name "python-stack-data")
35953 (version "0.6.3")
35954 (source
35955 (origin
35956 (method url-fetch)
35957 (uri (pypi-uri "stack_data" version))
35958 (sha256
35959 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
35960 (build-system pyproject-build-system)
35961 (arguments
35962 (list
35963 #:test-flags
35964 #~(list "-k" (string-join
35965 ;; XXX: Tests fail with HTML diff.
35966 (list "not test_executing_style_defs"
35967 "test_pygments_example"
35968 "test_example")
35969 " and not "))
35970 #:phases
35971 #~(modify-phases %standard-phases
35972 (add-after 'unpack 'set-home-env
35973 (lambda _
35974 (setenv "HOME" "/tmp"))))))
35975 (native-inputs
35976 (list python-cython
35977 python-littleutils
35978 python-pygments
35979 python-pytest
35980 python-setuptools
35981 python-setuptools-scm
35982 python-typeguard
35983 python-wheel))
35984 (propagated-inputs
35985 (list python-asttokens
35986 python-executing
35987 python-pure-eval))
35988 (home-page "https://github.com/alexmojaki/stack_data")
35989 (synopsis "Python stack frame and traceback manipulation library")
35990 (description
35991 "The @code{stack_data} Python library extracts data from stack frames and
35992tracebacks. Is can be used to display more useful tracebacks
35993than the default.")
35994 (license license:expat)))
35995
35996(define-public python-stdio-mgr
35997 (package
35998 (name "python-stdio-mgr")
35999 (version "1.0.1")
36000 (source
36001 (origin
36002 (method git-fetch)
36003 (uri (git-reference
36004 (url "https://github.com/bskinn/stdio-mgr")
36005 (commit (string-append "v" version))))
36006 (file-name (git-file-name name version))
36007 (sha256
36008 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
36009 (build-system pyproject-build-system)
36010 (arguments
36011 (list
36012 ;; Do not run doctests requiring sphinx.
36013 #:test-flags #~(list "--ignore=README.rst")))
36014 (native-inputs
36015 (list python-pytest
36016 python-setuptools
36017 python-wheel))
36018 (propagated-inputs
36019 (list python-attrs))
36020 (home-page "https://github.com/bskinn/stdio-mgr")
36021 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
36022 (description
36023 "This package contains a context manager for mocking/wrapping
36024stdin/stdout/stderr.")
36025 (license license:expat)))
36026
36027;; TODO: This package is not necessary in Guix. It should be replaced by a
36028;; trivial python package providing the same functionality.
36029(define-public python-stdlib-list
36030 (package
36031 (name "python-stdlib-list")
36032 (version "0.11.1")
36033 (source
36034 (origin
36035 (method git-fetch)
36036 (uri (git-reference
36037 (url "https://github.com/jackmaney/python-stdlib-list")
36038 (commit (string-append "v" version))))
36039 (file-name (git-file-name name version))
36040 (sha256
36041 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
36042 (build-system pyproject-build-system)
36043 (native-inputs
36044 (list python-flit-core
36045 python-pytest
36046 python-sphinx))
36047 (home-page "https://github.com/jackmaney/python-stdlib-list")
36048 (synopsis "Python Standard Libraries")
36049 (description
36050 "This package contains a list of Python Standard Libraries.")
36051 (license license:expat)))
36052
36053(define-public python-stem
36054 (package
36055 (name "python-stem")
36056 (version "1.8.2")
36057 (source
36058 (origin
36059 (method url-fetch)
36060 (uri (pypi-uri "stem" version))
36061 (sha256
36062 (base32
36063 "10mm9qw4xv7d18086ivy38iaz04z72018186q03j5y69skzikyw3"))))
36064 (build-system pyproject-build-system)
36065 (arguments
36066 (list
36067 #:phases #~(modify-phases %standard-phases
36068 (replace 'check
36069 (lambda _
36070 (invoke "./run_tests.py" "--unit"))))))
36071 (native-inputs
36072 (list python-setuptools
36073 python-wheel))
36074 (home-page "https://stem.torproject.org/")
36075 (synopsis
36076 "Python controller library that allows applications to interact with Tor")
36077 (description
36078 "Stem is a Python controller library for Tor. With it you can use Tor's
36079 control protocol to script against the Tor process and read descriptor data
36080 relays publish about themselves.")
36081 (license license:lgpl3)))
36082
36083(define-public python-stltools
36084 (package
36085 (name "python-stltools")
36086 (version "2022.01.20")
36087 (source
36088 (origin
36089 (method git-fetch)
36090 (uri (git-reference
36091 (url "https://github.com/rsmith-nl/stltools")
36092 (commit version)))
36093 (file-name (git-file-name name version))
36094 (sha256
36095 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
36096 (build-system pyproject-build-system)
36097 (arguments
36098 (list
36099 #:phases
36100 #~(modify-phases %standard-phases
36101 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
36102 (delete 'build)
36103 (replace 'install
36104 (lambda* (#:key inputs outputs #:allow-other-keys)
36105 (let ((moddir (string-append (site-packages inputs outputs)
36106 "/stltools"))
36107 (bindir (string-append #$output "/bin")))
36108 (copy-recursively "stltools" moddir)
36109 (mkdir-p bindir)
36110 (for-each
36111 (lambda (script)
36112 (let ((source (string-append script ".py"))
36113 (target (string-append bindir "/" script)))
36114 (copy-file source target)
36115 (chmod target #o555)))
36116 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
36117 (native-inputs
36118 (list python-pytest
36119 python-setuptools))
36120 (propagated-inputs
36121 (list python-pycairo))
36122 (home-page "https://github.com/rsmith-nl/stltools")
36123 (synopsis "Python modules and scripts for handling STL files")
36124 (description
36125 "This package consists of Python modules and scripts for manipulating
36126stereolithography (STL) files. It can convert STL files into POV-ray meshes,
36127PDF and PostScript. The Python modules allow for reading and writing STL
36128files. It supports both the text and binary forms of STL.")
36129 (license license:expat)))
36130
36131(define-public python-stone
36132 (package
36133 (name "python-stone")
36134 (version "3.3.9")
36135 (source
36136 (origin
36137 (method git-fetch)
36138 (uri (git-reference
36139 (url "https://github.com/dropbox/stone")
36140 (commit (string-append "v" version))))
36141 (file-name (git-file-name name version))
36142 (sha256
36143 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
36144 (build-system pyproject-build-system)
36145 (native-inputs
36146 (list python-pytest
36147 python-setuptools))
36148 (propagated-inputs
36149 (list python-jinja2
36150 python-packaging
36151 python-ply
36152 python-six)) ;hard requirement, still
36153 (home-page "https://github.com/dropbox/stone")
36154 (synopsis "Official Api Spec Language for Dropbox")
36155 (description
36156 "Stone is an interface description language (IDL) for APIs.")
36157 (license license:expat)))
36158
36159(define-public python-stopit
36160 (package
36161 (name "python-stopit")
36162 (version "1.1.2")
36163 (source
36164 (origin
36165 (method git-fetch)
36166 (uri (git-reference
36167 (url "https://github.com/glenfant/stopit")
36168 (commit version)))
36169 (file-name (git-file-name name version))
36170 (sha256
36171 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
36172 (build-system pyproject-build-system)
36173 (arguments
36174 (list #:test-backend #~'custom
36175 #:test-flags #~(list "tests.py")))
36176 (native-inputs (list python-setuptools))
36177 (home-page "https://pypi.python.org/pypi/stopit")
36178 (synopsis "Timeout control decorator and context managers")
36179 (description
36180 "Raise asynchronous exceptions in other threads, control the timeout of
36181blocks or callables with two context managers and two decorators.")
36182 (license license:expat)))
36183
36184(define-public python-straight-plugin
36185 (package
36186 (name "python-straight-plugin")
36187 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
36188 (revision . "0")))
36189 (version (git-version "1.4.1"
36190 (assoc-ref properties 'revision)
36191 (assoc-ref properties 'commit)))
36192 (source
36193 (origin
36194 (method git-fetch)
36195 (uri (git-reference
36196 (url "https://github.com/ironfroggy/straight.plugin")
36197 (commit (assoc-ref properties 'commit))))
36198 (file-name (git-file-name name version))
36199 (sha256
36200 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
36201 (build-system pyproject-build-system)
36202 (arguments
36203 (list
36204 #:test-backend #~'custom
36205 #:test-flags #~(list "tests.py")))
36206 (native-inputs (list python-mock python-setuptools))
36207 (home-page "https://github.com/ironfroggy/straight.plugin")
36208 (synopsis "Simple namespaced plugin facility")
36209 (description
36210 "Straight Plugin provides a type of plugin you can create from almost any
36211existing Python modules, and an easy way for outside developers to add
36212functionality and customization to your projects with their own plugins.")
36213 (license license:expat)))
36214
36215(define-public python-streamtracer
36216 (package
36217 (name "python-streamtracer")
36218 (version "2.4.0")
36219 (source
36220 (origin
36221 (method url-fetch)
36222 (uri (pypi-uri "streamtracer" version))
36223 (sha256
36224 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
36225 (build-system pyproject-build-system)
36226 (arguments
36227 (list
36228 #:imported-modules `(,@%cargo-build-system-modules
36229 ,@%pyproject-build-system-modules)
36230 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
36231 (guix build pyproject-build-system)
36232 (guix build utils))
36233 #:test-flags
36234 #~(list "--pyargs" "streamtracer")
36235 #:phases
36236 #~(modify-phases %standard-phases
36237 (add-after 'unpack 'prepare-cargo-build-system
36238 (lambda args
36239 (for-each (lambda (phase)
36240 (format #t "Running cargo phase: ~a~%" phase)
36241 (apply (assoc-ref cargo:%standard-phases phase)
36242 #:cargo-target #$(cargo-triplet)
36243 args))
36244 '(unpack-rust-crates
36245 configure
36246 check-for-pregenerated-files
36247 patch-cargo-checksums)))))))
36248 (native-inputs
36249 (append
36250 (list maturin
36251 python-pytest
36252 python-pytest-doctestplus
36253 rust
36254 `(,rust "cargo"))
36255 (or (and=> (%current-target-system)
36256 (compose list make-rust-sysroot))
36257 '())))
36258 (propagated-inputs
36259 (list python-numpy
36260 python-packaging))
36261 (inputs (cargo-inputs 'python-streamtracer))
36262 (home-page "https://github.com/sunpy/streamtracer")
36263 (synopsis "Rapid streamline tracing in Python")
36264 (description
36265 "streamtracer is a Python package for rapid streamline tracing on
36266regularly spaced grids. The actual streamline tracing is done at a low level
36267in Rust, with a nice Python API provided on top.")
36268 (license license:gpl3+)))
36269
36270(define-public python-strenum
36271 (package
36272 (name "python-strenum")
36273 (version "0.4.15")
36274 (source
36275 (origin
36276 (method git-fetch)
36277 (uri (git-reference
36278 (url "https://github.com/irgeek/StrEnum")
36279 (commit (string-append "v" version))))
36280 (file-name (git-file-name name version))
36281 (sha256
36282 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))))
36283 (build-system pyproject-build-system)
36284 (arguments
36285 (list
36286 #:test-flags
36287 #~(list "--ignore=doc/")
36288 #:phases
36289 #~(modify-phases %standard-phases
36290 (add-after 'unpack 'fix-version
36291 ;; Versioneer is useless when there is no git metadata.
36292 (lambda _
36293 (substitute* "setup.py"
36294 (("version=versioneer.get_version\\(),")
36295 (format #f "version=~s," #$version)))))
36296 (add-after 'unpack 'fix-pytest-config
36297 (lambda _
36298 (substitute* "pytest.ini"
36299 (("addopts =.*") "")))))))
36300 (native-inputs
36301 (list python-pytest
36302 python-setuptools))
36303 (home-page "https://github.com/irgeek/StrEnum")
36304 (synopsis "Enum that inherits from str")
36305 (description "StrEnum is a Python @code{enum.Enum} that inherits from
36306@code{str} to complement @code{enum.IntEnum} in the standard library.")
36307 (license license:expat)))
36308
36309(define-public python-structlog
36310 (package
36311 (name "python-structlog")
36312 (version "25.5.0")
36313 (source
36314 (origin
36315 (method url-fetch)
36316 (uri (pypi-uri "structlog" version))
36317 (sha256
36318 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
36319 (build-system pyproject-build-system)
36320 (native-inputs
36321 (list python-hatch-fancy-pypi-readme
36322 python-hatch-vcs
36323 python-hatchling
36324 python-pytest
36325 python-pytest-asyncio
36326 python-time-machine))
36327 (home-page "https://www.structlog.org/")
36328 (synopsis "Structured Logging for Python")
36329 (description "@code{structlog} changes logging in Python by adding structure
36330to your log entries.")
36331 (license (list license:asl2.0 license:expat))))
36332
36333(define-public python-style
36334 (package
36335 (name "python-style")
36336 (version "1.1.6")
36337 (source
36338 (origin
36339 (method url-fetch)
36340 (uri (pypi-uri "style" version))
36341 (sha256
36342 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
36343 (build-system pyproject-build-system)
36344 (arguments
36345 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
36346 (native-inputs
36347 (list python-setuptools))
36348 (home-page "https://github.com/lmittmann/style")
36349 (synopsis "Terminal string styling")
36350 (description
36351"@code{python-style} is a simple terminal string styling package. Its API is
36352a port of the chalk package for javascript.")
36353 (license license:expat)))
36354
36355(define-public python-svgelements
36356 (package
36357 (name "python-svgelements")
36358 (version "1.9.6")
36359 (source
36360 (origin
36361 (method url-fetch)
36362 (uri (pypi-uri "svgelements" version))
36363 (sha256
36364 (base32 "1xrp7yxg65dqdrmghriljf9hh2smq2zhzr2hzmqifgfd0ijas0kw"))))
36365 (build-system pyproject-build-system)
36366 (native-inputs
36367 (list python-anyio
36368 python-pytest
36369 python-numpy
36370 python-pillow
36371 python-scipy
36372 python-setuptools
36373 python-wheel))
36374 (home-page "https://github.com/meerk40t/svgelements")
36375 (synopsis "SVG parsing for elements, paths, and other SVG objects")
36376 (description
36377 "This module does high fidelity SVG parsing and geometric rendering.
36378The goal is to successfully and correctly process SVG for use with any scripts
36379that may need or want to use SVG files as geometric data.")
36380 (license license:expat)))
36381
36382(define-public python-svgutils
36383 (package
36384 (name "python-svgutils")
36385 (version "0.3.4")
36386 (source
36387 (origin
36388 (method url-fetch)
36389 (uri (pypi-uri "svgutils" version))
36390 (sha256
36391 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
36392 (build-system pyproject-build-system)
36393 (arguments
36394 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
36395 (native-inputs
36396 (list python-setuptools))
36397 (propagated-inputs
36398 (list python-lxml))
36399 (home-page "https://svgutils.readthedocs.io")
36400 (synopsis "Python SVG editor")
36401 (description "This is an utility package that helps with editing and
36402concatenating SVG files. It is especially directed at scientists preparing
36403final figures for submission to journals. So far it supports arbitrary
36404placement and scaling of SVG figures and adding markers, such as labels.")
36405 (license license:expat)))
36406
36407(define-public python-swagger-spec-validator
36408 (package
36409 (name "python-swagger-spec-validator")
36410 (version "3.0.4")
36411 (source
36412 (origin
36413 (method git-fetch)
36414 (uri (git-reference
36415 (url "https://github.com/Yelp/swagger_spec_validator")
36416 (commit (string-append "v" version))))
36417 (file-name (git-file-name name version))
36418 (sha256
36419 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
36420 (build-system pyproject-build-system)
36421 (native-inputs
36422 (list python-pytest
36423 python-setuptools))
36424 (propagated-inputs
36425 (list python-importlib-resources
36426 python-jsonschema
36427 python-pyyaml
36428 python-typing-extensions))
36429 (home-page "https://github.com/Yelp/swagger_spec_validator")
36430 (synopsis "Validation of Swagger specifications")
36431 (description
36432 "@code{swagger_spec_validator} provides a library for validating Swagger
36433API specifications.")
36434 (license license:asl2.0)))
36435
36436(define-public python-syllables
36437 (package
36438 (name "python-syllables")
36439 (version "1.0.3")
36440 (source
36441 (origin
36442 (method git-fetch)
36443 (uri (git-reference
36444 (url "https://github.com/prosegrinder/python-syllables")
36445 (commit (string-append "v" version))))
36446 (file-name (git-file-name name version))
36447 (sha256
36448 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
36449 (build-system pyproject-build-system)
36450 (native-inputs
36451 (list python-cmudict
36452 python-pytest
36453 python-setuptools))
36454 (home-page "https://github.com/prosegrinder/python-syllables")
36455 (synopsis "Package for estimating the number of syllables in a word")
36456 (description
36457 "This package provides a Python package for estimating the number of
36458syllables in a word.")
36459 (license license:gpl3)))
36460
36461(define-public python-sympy
36462 (package
36463 (name "python-sympy")
36464 (version "1.13.3")
36465 (source
36466 (origin
36467 (method url-fetch)
36468 (uri (pypi-uri "sympy" version))
36469 (sha256
36470 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
36471 (build-system pyproject-build-system)
36472 (arguments
36473 '(#:phases
36474 (modify-phases %standard-phases
36475 (replace 'check
36476 (lambda* (#:key tests? #:allow-other-keys)
36477 (if tests?
36478 (invoke "python3" "-c"
36479 "import sympy; sympy.test(\"/core\")")))))))
36480 (propagated-inputs (list python-mpmath))
36481 (native-inputs
36482 (list python-hypothesis
36483 python-pytest
36484 python-setuptools
36485 python-wheel))
36486 (home-page "https://www.sympy.org/")
36487 (synopsis "Python library for symbolic mathematics")
36488 (description
36489 "SymPy is a Python library for symbolic mathematics. It aims to become a
36490full-featured computer algebra system (CAS) while keeping the code as simple
36491as possible in order to be comprehensible and easily extensible.")
36492 (license license:bsd-3)))
36493
36494(define-public python-tables
36495 (package
36496 (name "python-tables")
36497 ;; XXX: Compatability fix for numexpr 2.13.0, see:
36498 ;; <https://github.com/PyTables/PyTables/pull/1256>.
36499 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
36500 (revision . "0")))
36501 (version (git-version "3.10.2"
36502 (assoc-ref properties 'revision)
36503 (assoc-ref properties 'commit)))
36504 (source
36505 (origin
36506 (method git-fetch)
36507 (uri (git-reference
36508 (url "https://github.com/PyTables/PyTables")
36509 (commit (assoc-ref properties 'commit))))
36510 (file-name (git-file-name name version))
36511 (sha256
36512 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
36513 (snippet '(begin
36514 (use-modules (guix build utils))
36515 (delete-file-recursively "hdf5-blosc")
36516 (delete-file-recursively "c-blosc")))))
36517 (build-system pyproject-build-system)
36518 (arguments
36519 (list
36520 #:phases
36521 #~(modify-phases %standard-phases
36522 (add-after 'unpack 'disable-tuning
36523 (lambda _
36524 (substitute* "setup.py"
36525 (("cpu_flags = .*")
36526 "cpu_flags = ['sse2']\n"))))
36527 (add-after 'unpack 'fix-reference-to-blosc2
36528 (lambda* (#:key inputs #:allow-other-keys)
36529 (substitute* "tables/__init__.py"
36530 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
36531 m indent)
36532 (string-append indent
36533 "\""
36534 (search-input-file inputs "/lib/libblosc2.so")
36535 "\",\n" m)))))
36536 (add-before 'build 'pre-build
36537 (lambda _
36538 (substitute* "setup.py"
36539 (("hdf5-blosc/src")
36540 (format #f "~a/src"
36541 #$(package-source (this-package-input "hdf5-blosc")))))
36542 (invoke "make" "distclean") ;Regenerate C code with Cython
36543 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
36544 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
36545 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
36546 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
36547 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
36548 (add-before 'check 'pre-check
36549 (lambda _
36550 (setenv "HOME" "/tmp")))
36551 (replace 'check
36552 (lambda* (#:key tests? #:allow-other-keys)
36553 (when tests?
36554 (with-directory-excursion "/tmp"
36555 ;; Performing only a light (yet comprehensive) subset of the
36556 ;; test suite. If you want a more complete test, try
36557 ;; passing the --heavy flag to this script (or set the
36558 ;; 'heavy' parameter in case you are using tables.test()
36559 ;; call). The whole suite will take more than 4 hours to
36560 ;; complete on a relatively modern CPU and around 512 MB of
36561 ;; main memory.
36562 (invoke "python" "-m" "tables.tests.test_all"))))))))
36563 (native-inputs
36564 (list pkg-config
36565 python-cython
36566 python-pytest
36567 python-setuptools
36568 python-sphinx))
36569 (inputs
36570 (list bzip2
36571 c-blosc
36572 c-blosc2
36573 hdf5
36574 hdf5-blosc
36575 lzo))
36576 (propagated-inputs
36577 (list python-blosc2
36578 python-numexpr
36579 python-numpy
36580 python-packaging
36581 python-py-cpuinfo
36582 python-typing-extensions))
36583 (home-page "https://www.pytables.org/")
36584 (synopsis "Hierarchical datasets for Python")
36585 (description "PyTables is a package for managing hierarchical datasets and
36586designed to efficiently cope with extremely large amounts of data.")
36587 (license license:bsd-3)))
36588
36589(define-public python-tablib
36590 (package
36591 (name "python-tablib")
36592 (version "3.9.0")
36593 (source
36594 (origin
36595 (method url-fetch)
36596 (uri (pypi-uri "tablib" version))
36597 (sha256
36598 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
36599 (build-system pyproject-build-system)
36600 (native-inputs
36601 (list python-pytest
36602 python-pytest-cov
36603 python-setuptools
36604 python-setuptools-scm))
36605 (inputs ;; [cli]
36606 (list python-tabulate))
36607 (propagated-inputs
36608 (list python-markuppy
36609 python-odfpy
36610 python-openpyxl
36611 python-pyyaml
36612 python-xlrd
36613 python-xlwt))
36614 (home-page "https://tablib.readthedocs.io")
36615 (synopsis "Format agnostic tabular data library")
36616 (description
36617 "@code{tablib} is a format-agnostic tabular dataset library,
36618written in Python. Supported output formats are Excel (Sets + Books),
36619JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
36620TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
36621
36622@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
36623quite huge, this Guix package doesn't depend on pandas. In case, just also
36624install @code{python-pandas}.")
36625 (license license:expat)))
36626
36627(define-public python-tabulate
36628 (package
36629 (name "python-tabulate")
36630 (version "0.9.0")
36631 (source
36632 (origin
36633 (method url-fetch)
36634 (uri (pypi-uri "tabulate" version))
36635 (sha256
36636 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
36637 (build-system pyproject-build-system)
36638 (native-inputs
36639 (list python-pytest
36640 python-setuptools-scm
36641 python-setuptools))
36642 (propagated-inputs
36643 (list python-wcwidth))
36644 (home-page "https://github.com/astanin/python-tabulate")
36645 (synopsis "Pretty-print tabular data")
36646 (description
36647 "Tabulate is a library and command-line utility to pretty-print tabular
36648data in Python.")
36649 (license license:expat)))
36650
36651(define-public python-takethetime
36652 (package
36653 (name "python-takethetime")
36654 (version "0.3.1")
36655 (source
36656 (origin
36657 (method url-fetch)
36658 (uri (pypi-uri "TakeTheTime" version))
36659 (sha256
36660 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
36661 (build-system pyproject-build-system)
36662 (arguments
36663 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
36664 (native-inputs
36665 (list python-setuptools
36666 python-wheel))
36667 (home-page "https://github.com/ErikBjare/TakeTheTime")
36668 (synopsis "Timing chunks of code")
36669 (description
36670 "This package implements a functionality for time taking using context
36671managers.")
36672 (license license:expat)))
36673
36674(define-public python-tasklogger
36675 (package
36676 (name "python-tasklogger")
36677 (version "1.2.0")
36678 (source
36679 (origin
36680 (method url-fetch)
36681 (uri (pypi-uri "tasklogger" version))
36682 (sha256
36683 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
36684 (build-system pyproject-build-system)
36685 (native-inputs
36686 (list python-pytest
36687 python-numpy
36688 python-setuptools))
36689 (propagated-inputs
36690 (list python-deprecated))
36691 (home-page "https://github.com/scottgigante/tasklogger")
36692 (synopsis "Extension to the core Python logging library")
36693 (description "This package provides an extension to the core Python
36694logging library for logging the beginning and completion of tasks and
36695subtasks.")
36696 (license license:gpl2)))
36697
36698(define-public python-tatsu
36699 (package
36700 (name "python-tatsu")
36701 (version "5.13.2")
36702 (source
36703 (origin
36704 (method git-fetch)
36705 (uri (git-reference
36706 (url "https://github.com/neogeny/TatSu")
36707 (commit (string-append "v" version))))
36708 (file-name (git-file-name name version))
36709 (sha256
36710 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
36711 (build-system pyproject-build-system)
36712 (native-inputs
36713 (list python-pytest
36714 python-setuptools))
36715 (home-page "https://tatsu.readthedocs.io/en/stable/")
36716 (synopsis "PEG/Packrat Parser generator for Python")
36717 (description
36718 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
36719Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
36720or Packrat parser in Python.")
36721 (license license:bsd-2)))
36722
36723(define-public python-tblib
36724 (package
36725 (name "python-tblib")
36726 (version "3.1.0")
36727 (source
36728 (origin
36729 (method url-fetch)
36730 (uri (pypi-uri "tblib" version))
36731 (sha256
36732 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
36733 (build-system pyproject-build-system)
36734 (arguments
36735 (list
36736 ;; Don't run benchmark tests.
36737 #:test-flags #~(list "--ignore=tests/test_perf.py")
36738 #:phases
36739 #~(modify-phases %standard-phases
36740 (add-after 'unpack 'fix-pytest-config
36741 (lambda _
36742 (substitute* "pytest.ini"
36743 (("--benchmark-disable") "")))))))
36744 (native-inputs
36745 (list python-pytest
36746 python-setuptools))
36747 (home-page "https://github.com/ionelmc/python-tblib")
36748 (synopsis "Traceback serialization library")
36749 (description
36750 "Traceback serialization allows you to:
36751
36752@enumerate
36753@item Pickle tracebacks and raise exceptions with pickled tracebacks in
36754different processes. This allows better error handling when running code over
36755multiple processes (imagine multiprocessing, billiard, futures, celery etc).
36756
36757@item Parse traceback strings and raise with the parsed tracebacks.
36758@end enumerate\n")
36759 (license license:bsd-3)))
36760
36761(define-public python-telethon
36762 (package
36763 (name "python-telethon")
36764 (version "1.42.0")
36765 (source
36766 (origin
36767 (method git-fetch)
36768 (uri (git-reference
36769 (url "https://codeberg.org/Lonami/Telethon")
36770 (commit (string-append "v" version))))
36771 (file-name (git-file-name name version))
36772 (sha256
36773 (base32 "16xp5cwfv1ly25zcnnn0jgrmzpsl3yqzf92dfbnpyiy64j8wkh9l"))))
36774 (build-system pyproject-build-system)
36775 (native-inputs
36776 (list python-pytest
36777 python-pytest-asyncio
36778 python-pytest-trio
36779 python-setuptools))
36780 (propagated-inputs
36781 (list python-rsa python-pyaes))
36782 (home-page "https://docs.telethon.dev")
36783 (synopsis "Full-featured Telegram client library for Python 3")
36784 (description "This library is designed to make it easy to write Python
36785programs that can interact with Telegram.")
36786 (license license:expat)))
36787
36788(define-public python-tempdir
36789 (package
36790 (name "python-tempdir")
36791 (version "0.7.1")
36792 (source
36793 (origin
36794 (method url-fetch)
36795 (uri (pypi-uri "tempdir" version))
36796 (sha256
36797 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
36798 (build-system pyproject-build-system)
36799 (arguments (list #:tests? #f)) ; No tests.
36800 (native-inputs (list python-setuptools))
36801 (home-page "https://pypi.org/project/tempdir/")
36802 (synopsis "Python library for managing temporary directories")
36803 (description
36804 "This library manages temporary directories that are automatically
36805deleted with all their contents when they are no longer needed. It is
36806particularly convenient for use in tests.")
36807 (license license:expat)))
36808
36809(define-public python-tempora
36810 (package
36811 (name "python-tempora")
36812 (version "5.8.1")
36813 (source
36814 (origin
36815 (method url-fetch)
36816 (uri (pypi-uri "tempora" version))
36817 (sha256
36818 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
36819 (build-system pyproject-build-system)
36820 (arguments
36821 (list
36822 ;; Do not test the myproject.toml build as it tries to pull dependencies
36823 ;; from the Internet.
36824 #:test-flags #~(list "-k" "not project"
36825 "tests")))
36826 (native-inputs
36827 (list python-freezegun
36828 python-pytest
36829 python-setuptools
36830 python-setuptools-scm
36831 python-tzdata))
36832 (propagated-inputs (list python-dateutil python-jaraco-functools))
36833 (home-page "https://github.com/jaraco/tempora")
36834 (synopsis "Python date and time objects and routines")
36835 (description
36836 "The @code{tempora} Python library contains miscellaneous date and time
36837related utilities and constants, routines for measuring, profiling, and
36838getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
36839well as an event scheduler.")
36840 (license license:expat)))
36841
36842(define-public python-tenacity
36843 (package
36844 (name "python-tenacity")
36845 (version "9.0.0")
36846 (source
36847 (origin
36848 (method url-fetch)
36849 (uri (pypi-uri "tenacity" version))
36850 (sha256
36851 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
36852 (build-system pyproject-build-system)
36853 (native-inputs
36854 (list python-pytest
36855 python-setuptools
36856 python-setuptools-scm
36857 python-tornado
36858 python-typeguard
36859 python-wheel))
36860 (home-page "https://github.com/jd/tenacity")
36861 (synopsis "Retrying library for python")
36862 (description
36863 "Tenacity is a general-purpose python library to simplify the task of
36864adding retry behavior to just about anything.")
36865 (license license:asl2.0)))
36866
36867(define-public python-term-background
36868 (package
36869 (name "python-term-background")
36870 (version "1.0.2")
36871 (source
36872 (origin
36873 (method url-fetch)
36874 (uri (pypi-uri "term_background" version))
36875 (sha256
36876 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
36877 (arguments
36878 (list
36879 #:phases
36880 '(modify-phases %standard-phases
36881 (add-after 'unpack 'fix-build
36882 (lambda _ (delete-file "setup.py"))))))
36883 (build-system pyproject-build-system)
36884 (native-inputs
36885 (list python-pytest
36886 python-setuptools
36887 python-setuptools-scm
36888 python-wrapper
36889 python-wheel))
36890 (home-page "http://github.com/rocky/shell-term-background")
36891 (synopsis "Determine if shell has a light or dark background")
36892 (description "This package determines if shell has a light or dark
36893background.")
36894 (license license:gpl2+)))
36895
36896(define-public python-term-image
36897 (package
36898 (name "python-term-image")
36899 (version "0.7.2")
36900 (source
36901 (origin
36902 ;; We need the full repo to run the tests.
36903 (method git-fetch)
36904 (uri (git-reference
36905 (url "https://github.com/AnonymouX47/term-image")
36906 (commit (string-append "v" version))))
36907 (file-name (git-file-name name version))
36908 (sha256
36909 (base32 "1lsd5m0k5m99arkca2rzrrlln10c8ax6xfawqwjnspcbf8l3h3dq"))))
36910 (build-system pyproject-build-system)
36911 (arguments
36912 (list #:test-flags
36913 #~(list "tests"
36914 ;; These tests require network access.
36915 "-k" (string-append "not test_from_url"
36916 " and not test_source"
36917 " and not test_close"))
36918 #:phases
36919 #~(modify-phases %standard-phases
36920 (add-after 'unpack 'adjust-dependencies
36921 (lambda _
36922 (substitute* "setup.py"
36923 (("pillow>=9.1,<11") "pillow>=9.1,<12")))))))
36924 (propagated-inputs (list python-pillow python-requests))
36925 (native-inputs
36926 (list python-pytest
36927 python-setuptools
36928 python-urwid))
36929 (home-page "https://github.com/AnonymouX47/term-image")
36930 (synopsis "Display images in the terminal")
36931 (description "term-image is a library and program to display images on
36932compatible terminals.
36933
36934Features:
36935@enumerate
36936@item Multiple image formats (basically all formats supported by
36937@code{PIL.Image.open()})
36938@item Multiple image source types: PIL image instance, local file, URL
36939@item Multiple image render styles (with automatic support detection)
36940@item Support for multiple terminal graphics protocols, including Kitty
36941@item Transparency support (with multiple options)
36942@item Animated image support (including transparent ones)
36943@item Integration into various TUI / terminal-based output libraries
36944@item Terminal size awareness
36945@item Automatic and manual image sizing
36946@item Horizontal and vertical alignment
36947@item Automatic and manual font ratio adjustment (to preserve image aspect
36948ratio)
36949@end enumerate")
36950 (license license:expat)))
36951
36952(define-public python-termcolor
36953 (package
36954 (name "python-termcolor")
36955 (version "2.5.0")
36956 (source
36957 (origin
36958 (method url-fetch)
36959 (uri (pypi-uri "termcolor" version))
36960 (sha256
36961 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
36962 (build-system pyproject-build-system)
36963 (arguments
36964 (list
36965 #:phases
36966 #~(modify-phases %standard-phases
36967 (add-after 'unpack 'relax-coverage-requirements
36968 (lambda _
36969 (substitute* "pyproject.toml"
36970 ((".*coverage.*") "")))))))
36971 (native-inputs
36972 (list python-hatch-vcs
36973 python-hatchling
36974 python-pytest
36975 python-pytest-cov))
36976 (home-page "https://pypi.org/project/termcolor/")
36977 (synopsis "ANSII Color formatting for terminal output")
36978 (description
36979 "This package provides ANSII Color formatting for output in terminals.")
36980 (license license:expat)))
36981
36982(define-public python-termcolor-1
36983 (package
36984 (inherit python-termcolor)
36985 (version "1.1.0")
36986 (source
36987 (origin
36988 (method url-fetch)
36989 (uri (pypi-uri "termcolor" version))
36990 (sha256
36991 (base32
36992 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
36993 ;; There are no tests
36994 (arguments (list #:tests? #false))
36995 (native-inputs
36996 (list python-setuptools
36997 python-wheel))))
36998
36999(define-public python-termcolor-next
37000 (package
37001 (inherit python-termcolor)
37002 (name "python-termcolor-next")
37003 (version "3.1.0")
37004 (source
37005 (origin
37006 (method url-fetch)
37007 (uri (pypi-uri "termcolor" version))
37008 (sha256
37009 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
37010 (arguments '())))
37011
37012(define-public python-terminaltables
37013 (package
37014 (name "python-terminaltables")
37015 (version "3.1.0")
37016 (source
37017 (origin
37018 (method git-fetch)
37019 (uri (git-reference
37020 (url "https://github.com/Robpol86/terminaltables")
37021 (commit (string-append "v" version))))
37022 (file-name (git-file-name name version))
37023 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
37024 (build-system pyproject-build-system)
37025 ;; XXX: A lot of test fail with flaky behavior.
37026 (arguments (list #:tests? #f))
37027 (native-inputs
37028 (list python-colorclass
37029 python-colorama
37030 python-pytest
37031 python-setuptools
37032 python-termcolor))
37033 (home-page "https://github.com/Robpol86/terminaltables")
37034 (synopsis
37035 "Generate simple tables in terminals from a nested list of strings")
37036 (description
37037 "This package makes it easy to draw tables in terminal/console
37038applications from a list of lists of strings. It supports multi-line rows.")
37039 (license license:expat)))
37040
37041(define-public python-termstyle
37042 (package
37043 (name "python-termstyle")
37044 (version "0.1.11")
37045 (source
37046 (origin
37047 (method url-fetch)
37048 (uri (pypi-uri "termstyle" version))
37049 (sha256
37050 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
37051 (build-system pyproject-build-system)
37052 (arguments
37053 (list #:test-backend #~'custom
37054 #:test-flags #~(list "test3.py")))
37055 (native-inputs
37056 (list python-setuptools))
37057 (home-page "https://github.com/gfxmonk/termstyle")
37058 (synopsis "Console text coloring for Python")
37059 (description "This package provides console text coloring for Python.")
37060 (license license:bsd-3)))
37061
37062(define-public python-text-unidecode
37063 (package
37064 (name "python-text-unidecode")
37065 (version "1.3")
37066 (source
37067 (origin
37068 (method url-fetch)
37069 (uri (pypi-uri "text-unidecode" version))
37070 (sha256
37071 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
37072 (build-system pyproject-build-system)
37073 (native-inputs
37074 (list python-pytest
37075 python-setuptools))
37076 (home-page "https://github.com/kmike/text-unidecode/")
37077 (synopsis "Decode Unicode data")
37078 (description
37079 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
37080Perl library. It can create ASCII representations of Unicode data. In general
37081users should prefer the @code{python-unidecode} package which offers better
37082memory usage and transliteration quality.")
37083 ;; The user can choose either license.
37084 (license (list license:clarified-artistic license:gpl2+))))
37085
37086(define-public python-textdistance
37087 (package
37088 (name "python-textdistance")
37089 (version "4.6.3")
37090 (source
37091 (origin
37092 (method git-fetch)
37093 (uri (git-reference
37094 (url "https://github.com/life4/textdistance")
37095 (commit version)))
37096 (file-name (git-file-name name version))
37097 (sha256
37098 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
37099 (build-system pyproject-build-system)
37100 ;; tests: 430 passed, 1446 warnings
37101 (native-inputs
37102 (list python-numpy
37103 python-pytest
37104 python-setuptools))
37105 (propagated-inputs
37106 (list python-jellyfish
37107 python-distance
37108 python-levenshtein
37109 python-pylev
37110 python-pyxdameraulevenshtein
37111 python-rapidfuzz))
37112 (home-page "https://github.com/life4/textdistance")
37113 (synopsis "Compute distance between the two texts")
37114 (description "@code{textdistance} is a pure Python library for comparing
37115distance between two or more sequences by many algorithms.")
37116 (license license:expat)))
37117
37118(define-public python-textparser
37119 (package
37120 (name "python-textparser")
37121 (version "0.24.0")
37122 (source
37123 (origin
37124 (method url-fetch)
37125 (uri (pypi-uri "textparser" version))
37126 (sha256
37127 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
37128 (build-system pyproject-build-system)
37129 (arguments
37130 (list #:test-backend #~'unittest))
37131 (native-inputs (list python-setuptools))
37132 (home-page "https://github.com/eerimoq/textparser")
37133 (synopsis "Fast text parser for Python")
37134 (description "This library provides a text parser written in the Python
37135language. It aims to be fast.")
37136 (license license:expat)))
37137
37138(define-public python-texttable
37139 (package
37140 (name "python-texttable")
37141 (version "1.6.4")
37142 (source
37143 (origin
37144 (method git-fetch)
37145 (uri (git-reference
37146 (url "https://github.com/foutaise/texttable/")
37147 (commit (string-append "v" version))))
37148 (file-name (git-file-name name version))
37149 (sha256
37150 (base32 "1lcn76wx6fsj8d79gs985irkqz5qbwq1v9ji9jxsra6dbb643v5j"))))
37151 (build-system pyproject-build-system)
37152 (arguments (list #:test-flags #~(list "tests.py")))
37153 (native-inputs (list python-pytest python-setuptools))
37154 (home-page "https://github.com/foutaise/texttable/")
37155 (synopsis "Create simple ASCII tables in Python")
37156 (description
37157 "This package provides a Python module for creating simple ASCII
37158tables.")
37159 (license license:expat)))
37160
37161(define-public python-textual
37162 (package
37163 (name "python-textual")
37164 (version "7.4.0")
37165 (source
37166 (origin
37167 (method git-fetch)
37168 (uri (git-reference
37169 (url "https://github.com/Textualize/textual")
37170 (commit (string-append "v" version))))
37171 (file-name (git-file-name name version))
37172 (sha256
37173 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
37174 (build-system pyproject-build-system)
37175 (arguments
37176 (list
37177 #:test-flags
37178 ;; Snapshot tests require python-pytest-textual-snapshot which
37179 ;; in turn depends on python-textual.
37180 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
37181 "-k" (string-append
37182 ;; Broken for unknown reason.
37183 "not test_textual_env_var"
37184 ;; Tests that require python-treesitter-languages.
37185 " and not test_widget_construct"
37186 " and not test_setting_builtin_language_via_constructor"
37187 " and not test_setting_builtin_language_via_attribute"
37188 " and not test_setting_language_to_none"
37189 " and not test_setting_unknown_language"
37190 " and not test_register_language"
37191 " and not test_update_highlight_query"
37192 " and not test_default_theme"
37193 " and not test_setting_builtin_themes"
37194 " and not test_setting_unknown_theme_raises_exception"
37195 " and not test_registering_and_setting_theme"
37196 " and not test_progress_bar_width_1fr"))
37197 #:phases
37198 #~(modify-phases %standard-phases
37199 (add-after 'unpack 'relax-requirements
37200 (lambda _
37201 (substitute* "pyproject.toml"
37202 (("pygments =.*")
37203 "pygments = \"*\"\n")))))))
37204 (propagated-inputs
37205 (list python-markdown-it-py
37206 python-mdit-py-plugins
37207 python-platformdirs
37208 python-rich
37209 python-tree-sitter
37210 ;; python-tree-sitter-languages ; optional, not packed yet
37211 python-typing-extensions))
37212 (native-inputs
37213 (list python-poetry-core
37214 python-pytest
37215 python-pytest-asyncio
37216 python-pytest-xdist))
37217 (home-page "https://github.com/Textualize/textual")
37218 (synopsis "Build text user interfaces in Python")
37219 (description "Textual is a @acronym{TUI, Text User Interface} framework
37220for Python inspired by modern web development.")
37221 (license license:expat)))
37222
37223(define-public python-tftpy
37224 (package
37225 (name "python-tftpy")
37226 (version "0.8.6")
37227 (source
37228 (origin
37229 (method git-fetch)
37230 (uri (git-reference
37231 (url "https://github.com/msoulier/tftpy")
37232 (commit version)))
37233 (file-name (git-file-name name version))
37234 (sha256
37235 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
37236 (build-system pyproject-build-system)
37237 (arguments
37238 (list
37239 #:test-backend #~'unittest
37240 #:test-flags #~(list "tests/test.py")
37241 #:phases
37242 #~(modify-phases %standard-phases
37243 (add-before 'check 'configure-tests
37244 (lambda* (#:key tests? #:allow-other-keys)
37245 (when tests?
37246 ;; The default DEBUG logging level is way too verbose.
37247 (substitute* "tests/test.py"
37248 (("logging\\.DEBUG")
37249 "logging.INFO"))))))))
37250 (native-inputs (list python-setuptools))
37251 (home-page "https://tftpy.sourceforge.net/")
37252 (synopsis "Python trivial file transfer protocol (TFTP) library")
37253 (description
37254 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
37255be used to act both as a TFTP client or TFTP server.")
37256 (license license:expat)))
37257
37258(define-public python-three-merge
37259 (package
37260 (name "python-three-merge")
37261 (version "0.1.1")
37262 (source
37263 (origin
37264 ;; There are no tests in the PyPI tarball.
37265 (method git-fetch)
37266 (uri (git-reference
37267 (url "https://github.com/spyder-ide/three-merge")
37268 (commit (string-append "v" version))))
37269 (file-name (git-file-name name version))
37270 (sha256
37271 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
37272 (build-system pyproject-build-system)
37273 (propagated-inputs
37274 (list python-diff-match-patch))
37275 (native-inputs
37276 (list python-pytest python-setuptools python-wheel))
37277 (home-page "https://github.com/spyder-ide/three-merge")
37278 (synopsis "Library for merging two strings with respect to a base one")
37279 (description
37280 "This package provides a Python library to perform a 3-way merge between
37281strings, based on @code{diff-match-patch}. This library performs merges at a
37282character level, as opposed to most VCS systems, which opt for a line-based
37283approach.")
37284 (license license:expat)))
37285
37286(define-public python-throttler
37287 (package
37288 (name "python-throttler")
37289 (version "1.2.2")
37290 (source
37291 (origin
37292 (method git-fetch)
37293 (uri (git-reference
37294 (url "https://github.com/uburuntu/throttler")
37295 (commit (string-append "v" version))))
37296 (sha256
37297 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
37298 (build-system pyproject-build-system)
37299 (native-inputs
37300 (list python-aiohttp
37301 python-codecov
37302 python-flake8
37303 python-pytest
37304 python-pytest-asyncio
37305 python-pytest-cov
37306 python-setuptools
37307 python-wheel))
37308 (home-page "https://github.com/uburuntu/throttler")
37309 (synopsis "Throttling with asyncio support")
37310 (description
37311 "This is a Python package for easy throttling with asyncio support.")
37312 (license license:expat)))
37313
37314(define-public python-tifffile
37315 (package
37316 (name "python-tifffile")
37317 (version "2025.10.4")
37318 (source
37319 (origin
37320 (method url-fetch)
37321 (uri (pypi-uri "tifffile" version))
37322 (sha256
37323 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
37324 (build-system pyproject-build-system)
37325 ;; Tests require lfdfiles, which depends on tifffile
37326 (arguments (list #:tests? #f))
37327 (propagated-inputs
37328 (list python-numpy))
37329 (native-inputs
37330 (list python-setuptools))
37331 (home-page "https://www.lfd.uci.edu/~gohlke/")
37332 (synopsis "Read and write TIFF(r) files")
37333 (description
37334 "This package lets you read image and metadata from many bio-scientific
37335formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
37336MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
37337to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
37338 (license license:bsd-3)))
37339
37340(define-public python-tiktoken
37341 (package
37342 (name "python-tiktoken")
37343 (version "0.9.0")
37344 (source
37345 (origin
37346 (method url-fetch)
37347 (uri (pypi-uri "tiktoken" version))
37348 (sha256
37349 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
37350 (build-system cargo-build-system)
37351 (arguments
37352 (list
37353 #:install-source? #false
37354 #:imported-modules
37355 (append %pyproject-build-system-modules
37356 %cargo-build-system-modules)
37357 #:modules
37358 '((guix build cargo-build-system)
37359 ((guix build pyproject-build-system) #:prefix py:)
37360 (guix build utils))
37361 #:phases
37362 #~(modify-phases %standard-phases
37363 (replace 'build
37364 (assoc-ref py:%standard-phases 'build))
37365 (add-after 'install 'wrap
37366 (lambda _
37367 ;; Collection of python- and pyproject-build-system phases
37368 ;; between 'install and 'check.
37369 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
37370 (assoc-ref py:%standard-phases 'add-install-to-path)
37371 (assoc-ref py:%standard-phases 'wrap)
37372 (assoc-ref py:%standard-phases 'create-entrypoints)
37373 (assoc-ref py:%standard-phases 'compile-bytecode)))
37374 (replace 'install
37375 (assoc-ref py:%standard-phases 'install)))))
37376 (propagated-inputs (list python-regex python-requests))
37377 (inputs (cargo-inputs 'python-tiktoken))
37378 (native-inputs
37379 (list python-setuptools
37380 python-setuptools-rust
37381 python-wheel
37382 python-wrapper))
37383 (home-page "https://github.com/openai/tiktoken/")
37384 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
37385 (description
37386 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
37387@code{OpenAI's} models.")
37388 (license license:expat)))
37389
37390(define-public python-timeout-decorator
37391 ;; TODO: Remove when python-requests-caches releses a fresh version dropping
37392 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
37393 (package
37394 (name "python-timeout-decorator")
37395 (version "0.5.0")
37396 (source
37397 (origin
37398 (method url-fetch)
37399 (uri (pypi-uri "timeout-decorator" version))
37400 (sha256
37401 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
37402 (build-system pyproject-build-system)
37403 (arguments (list #:tests? #f))
37404 (native-inputs (list python-setuptools python-wheel))
37405 (home-page "https://github.com/pnpnpn/timeout-decorator")
37406 (synopsis "Timeout decorator")
37407 (description "This package provides a decorator that raises an error
37408when an operation takes longer than expected.")
37409 (license license:expat)))
37410
37411(define-public python-titlecase
37412 (package
37413 (name "python-titlecase")
37414 (version "2.4.1")
37415 (source
37416 (origin
37417 (method url-fetch)
37418 (uri (pypi-uri "titlecase" version))
37419 (sha256
37420 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
37421 (build-system pyproject-build-system)
37422 (arguments
37423 (list
37424 #:test-backend #~'unittest))
37425 (native-inputs
37426 (list python-setuptools))
37427 (home-page "https://github.com/ppannuto/python-titlecase")
37428 (synopsis "Capitalize strings similar to book titles")
37429 (description
37430 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
37431It capitalizes (predominantly English) strings in a way that is similar to
37432book titles, using the New York Times Manual of Style to leave certain words
37433lowercase.")
37434 (license license:expat)))
37435
37436(define-public python-tlsh
37437 (package
37438 (name "python-tlsh")
37439 (version "4.11.2")
37440 (home-page "https://github.com/trendmicro/tlsh")
37441 (source
37442 (origin
37443 (method git-fetch)
37444 (uri (git-reference (url home-page) (commit version)))
37445 (file-name (git-file-name name version))
37446 (sha256
37447 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
37448 (build-system pyproject-build-system)
37449 (arguments
37450 (list
37451 #:phases
37452 #~(modify-phases %standard-phases
37453 (add-before 'build 'configure
37454 (lambda _
37455 (invoke "cmake" "."))) ;to generate tlsh_version.h
37456 (add-after 'configure 'chdir
37457 (lambda _
37458 (chdir "py_ext")))
37459 (replace 'check
37460 (lambda* (#:key tests? #:allow-other-keys)
37461 (when tests?
37462 (with-directory-excursion "../Testing"
37463 (invoke "./python_test.sh"))))))))
37464 (native-inputs (list cmake-minimal python-setuptools))
37465 (synopsis "Fuzzy matching library for Python")
37466 (description
37467 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
37468Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
37469value which can be used for similarity comparisons. Similar objects have
37470similar hash values, which allows for the detection of similar objects by
37471comparing their hash values. The byte stream should have a sufficient amount
37472of complexity; for example, a byte stream of identical bytes will not generate
37473a hash value.")
37474 (license license:asl2.0)))
37475
37476(define-public python-tokenize-rt
37477 (package
37478 (name "python-tokenize-rt")
37479 (version "6.2.0")
37480 (source
37481 (origin
37482 (method git-fetch)
37483 (uri (git-reference
37484 (url "https://github.com/asottile/tokenize-rt")
37485 (commit (string-append "v" version))))
37486 (file-name (git-file-name name version))
37487 (sha256
37488 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
37489 (build-system pyproject-build-system)
37490 (native-inputs (list python-pytest python-setuptools))
37491 (home-page "https://github.com/asottile/tokenize-rt")
37492 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
37493 (description
37494 "This Python library is a wrapper around @code{tokenize} from the Python
37495standard library. It provides two additional tokens @code{ESCAPED_NL} and
37496@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
37497and @code{tokens_to_src} to roundtrip.")
37498 (license license:expat)))
37499
37500(define-public python-tomlkit
37501 (package
37502 (name "python-tomlkit")
37503 (version "0.13.3")
37504 (source
37505 (origin
37506 (method url-fetch)
37507 (uri (pypi-uri "tomlkit" version))
37508 (sha256
37509 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
37510 (build-system pyproject-build-system)
37511 (native-inputs
37512 (list python-poetry-core
37513 python-pytest
37514 python-pyyaml))
37515 (home-page "https://github.com/sdispater/tomlkit")
37516 (synopsis "Style-preserving TOML library")
37517 (description
37518 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
37519preserves all comments, indentations, whitespace and internal element ordering,
37520and makes them accessible and editable via an intuitive API. It can also
37521create new TOML documents from scratch using the provided helpers. Part of the
37522implementation has been adapted, improved, and fixed from Molten.")
37523 (license license:expat)))
37524
37525(define-public python-toolrack
37526 (package
37527 (name "python-toolrack")
37528 (version "4.0.3")
37529 (source
37530 (origin
37531 (method git-fetch)
37532 (uri (git-reference
37533 (url "https://github.com/albertodonato/toolrack")
37534 (commit (string-append "v" version))))
37535 (file-name (git-file-name name version))
37536 (sha256
37537 (base32
37538 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
37539 (build-system pyproject-build-system)
37540 (arguments
37541 (list
37542 #:phases
37543 #~(modify-phases %standard-phases
37544 (add-after 'unpack 'patch-/bin/sh
37545 (lambda _
37546 (substitute* "tests/aio/process_test.py"
37547 (("/bin/sh")
37548 (which "sh"))))))))
37549 (native-inputs
37550 (list python-pytest
37551 python-pytest-asyncio
37552 python-pytest-mock
37553 python-setuptools))
37554 (home-page "https://github.com/albertodonato/toolrack")
37555 (synopsis "Collection of Python utility functions and classes")
37556 (description "This package provides a collection of miscellaneous utility
37557functions and classes.")
37558 (license license:lgpl3+)))
37559
37560(define-public python-toolshed
37561 (package
37562 (name "python-toolshed")
37563 (version "0.4.6")
37564 (source
37565 (origin
37566 (method url-fetch)
37567 (uri (pypi-uri "toolshed" version))
37568 (sha256
37569 (base32 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
37570 (build-system pyproject-build-system)
37571 (arguments
37572 (list #:tests? #f)) ;tests are not included in PyPI archive
37573 (native-inputs
37574 (list python-setuptools))
37575 (home-page "https://github.com/brentp/toolshed/")
37576 (synopsis "Collection of modules and functions for working with data")
37577 (description "This is a collection of well-tested, simple modules and
37578functions that aim to reduce boilerplate when working with data.")
37579 (license license:bsd-2)))
37580
37581(define-public python-toolz
37582 (package
37583 (name "python-toolz")
37584 (version "1.0.0")
37585 (source
37586 (origin
37587 (method url-fetch)
37588 (uri (pypi-uri "toolz" version))
37589 (sha256
37590 (base32 "00ks0jhl1jwm9576c5sh10pnla8ni21yvg4kcxasr627l3cy71ic"))))
37591 (build-system pyproject-build-system)
37592 (native-inputs
37593 (list python-pytest
37594 python-setuptools
37595 python-wheel))
37596 (home-page "https://github.com/pytoolz/toolz/")
37597 (synopsis "List processing tools and functional utilities")
37598 (description
37599 "This package provides a set of utility functions for iterators,
37600functions, and dictionaries.")
37601 (license license:bsd-3)))
37602
37603(define-public python-toposort
37604 (package
37605 (name "python-toposort")
37606 (version "1.10")
37607 (source
37608 (origin
37609 (method url-fetch)
37610 (uri (pypi-uri "toposort" version))
37611 (sha256
37612 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
37613 (build-system pyproject-build-system)
37614 (arguments
37615 (list #:test-backend #~'custom
37616 #:test-flags #~(list "-m" "test.test_toposort")))
37617 (native-inputs (list python-setuptools))
37618 (home-page "https://gitlab.com/ericvsmith/toposort")
37619 (synopsis "Topological sort algorithm")
37620 (description
37621 "This package provides an implementation of a topological sort
37622algorithm.")
37623 (license license:asl2.0)))
37624
37625(define-public python-towncrier
37626 (package
37627 (name "python-towncrier")
37628 (version "25.8.0")
37629 (source
37630 (origin
37631 (method url-fetch)
37632 (uri (pypi-uri "towncrier" version))
37633 (sha256
37634 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
37635 (build-system pyproject-build-system)
37636 (native-inputs
37637 (list git-minimal/pinned ;tests create git repositories
37638 python-hatchling
37639 python-pytest
37640 python-twisted))
37641 (propagated-inputs
37642 (list python-click
37643 python-jinja2))
37644 (home-page "https://towncrier.readthedocs.io/en/stable/")
37645 (synopsis "Manage release notes")
37646 (description
37647 "@code{towncrier} is a utility to produce useful, summarized news files
37648 (also known as changelogs) for a project.")
37649 (license license:expat)))
37650
37651(define-public python-tqdm
37652 (package
37653 (name "python-tqdm")
37654 (version "4.67.1")
37655 (source
37656 (origin
37657 (method url-fetch)
37658 (uri (pypi-uri "tqdm" version))
37659 (sha256
37660 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
37661 (build-system pyproject-build-system)
37662 (arguments
37663 (list #:test-flags
37664 '(list "-o" "asyncio_mode=auto"
37665 "-k" "not perf and not test_rlock_creation")))
37666 (native-inputs
37667 (list python-pytest
37668 python-pytest-asyncio
37669 python-pytest-timeout
37670 python-setuptools
37671 python-setuptools-scm
37672 python-toml
37673 python-wheel))
37674 (home-page "https://github.com/tqdm/tqdm")
37675 (synopsis "Fast, extensible progress meter")
37676 (description
37677 "Make loops show a progress bar on the console by just wrapping any
37678iterable with @code{|tqdm(iterable)|}. Offers many options to define
37679design and layout.")
37680 (license (list license:mpl2.0 license:expat))))
37681
37682(define-public python-traitlets
37683 (package
37684 (name "python-traitlets")
37685 (version "5.14.3")
37686 (source
37687 (origin
37688 (method url-fetch)
37689 (uri (pypi-uri "traitlets" version))
37690 (sha256
37691 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
37692 (build-system pyproject-build-system)
37693 ;; tests: 566 passed, 3 skipped, 1 warning
37694 (native-inputs
37695 (list python-hatchling
37696 python-pytest))
37697 (home-page "https://ipython.org")
37698 (synopsis "Configuration system for Python applications")
37699 (description
37700 "Traitlets is a framework that lets Python classes have attributes with
37701type checking, dynamically calculated default values, and ‘on change’
37702callbacks. The package also includes a mechanism to use traitlets for
37703configuration, loading values from files or from command line arguments. This
37704is a distinct layer on top of traitlets, so you can use traitlets in your code
37705without using the configuration machinery.")
37706 (license license:bsd-3)))
37707
37708(define-public python-translate-toolkit
37709 (package
37710 (name "python-translate-toolkit")
37711 (version "3.15.6")
37712 (source
37713 (origin
37714 (method url-fetch)
37715 (uri (pypi-uri "translate_toolkit" version))
37716 (sha256
37717 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
37718 (build-system pyproject-build-system)
37719 (arguments
37720 (list
37721 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
37722 #:test-flags
37723 ;; TODO: Some of the optional inputs are not packaged yet.
37724 #~(list #$@(map (lambda (file) (string-append "--ignore="
37725 "tests/translate/"
37726 file))
37727 (list "convert/test_ini2po.py"
37728 "convert/test_php2po.py"
37729 "convert/test_po2ini.py"
37730 "convert/test_po2php.py"
37731 "storage/test_cpo.py"
37732 "storage/test_fluent.py"
37733 "storage/test_ini.py"
37734 "storage/test_php.py"
37735 "storage/test_po.py"
37736 "storage/test_pypo.py"
37737 "storage/test_subtitles.py"))
37738 #$@(map (lambda (test) (string-append "--deselect="
37739 "tests/translate/storage/"
37740 test))
37741 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
37742 ;; 0xff in position 0: invalid start byte
37743 (list "test_csvl10n.py::TestCSV::test_encoding_save"
37744 ;; FileNotFoundError: [Errno 2] No such file or
37745 ;; directory: 'msgfmt'
37746 "test_mo.py::TestMOFile::test_output"
37747 ;; assert 0 == -16200
37748 "test_poheader.py::test_timezones"))
37749 #$@(map (lambda (test) (string-append "--deselect="
37750 "tests/translate/tools/"
37751 test))
37752 ;; XXX: Some issues with XML parsing.
37753 (list "test_junitmsgfmt.py::test_output"
37754 "test_pocount.py::test_output"
37755 "test_pocount.py::test_cases"))
37756 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
37757 (native-inputs
37758 (list python-pytest
37759 python-setuptools
37760 python-setuptools-scm))
37761 (propagated-inputs
37762 (list python-cwcwidth
37763 python-cheroot
37764 ;; python-aeidon
37765 ;; python-fluent
37766 python-iniparse
37767 python-lxml
37768 python-mistletoe
37769 python-phply
37770 python-pyparsing
37771 python-ruamel.yaml
37772 python-vobject))
37773 (home-page "https://toolkit.translatehouse.org")
37774 (synopsis "Tools and API for translation and localization engineering")
37775 (description
37776 "Tools and API for translation and localization engineering. It contains
37777several utilities, as well as an API for building localization tools.")
37778 (license license:gpl2+)))
37779
37780;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
37781(define-public python-translate-toolkit-for-offlate
37782 (hidden-package
37783 (package
37784 (inherit python-translate-toolkit)
37785 (version "3.6.2")
37786 (source
37787 (origin
37788 (method url-fetch)
37789 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
37790 (sha256
37791 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
37792 (arguments
37793 (list #:tests? #f)))))
37794
37795(define-public python-translitcodec
37796 (package
37797 (name "python-translitcodec")
37798 (version "0.7.0")
37799 (source
37800 (origin
37801 (method git-fetch)
37802 (uri (git-reference
37803 (url "https://github.com/claudep/translitcodec")
37804 (commit (string-append "version-" version))))
37805 (file-name (git-file-name name version))
37806 (sha256
37807 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
37808 (build-system pyproject-build-system)
37809 (native-inputs (list python-pytest python-setuptools))
37810 (home-page "https://github.com/claudep/translitcodec")
37811 (synopsis "Unicode to 8-bit charset transliteration codec")
37812 (description
37813 "This package contains codecs for transliterating ISO 10646 texts into
37814best-effort representations using smaller coded character sets (ASCII,
37815ISO 8859, etc.).")
37816 (license license:expat)))
37817
37818(define-public python-treelib
37819 (package
37820 (name "python-treelib")
37821 (version "1.8.0")
37822 (source
37823 (origin
37824 (method git-fetch)
37825 (uri (git-reference
37826 (url "https://github.com/caesar0301/treelib")
37827 (commit (string-append "v" version))))
37828 (file-name (git-file-name name version))
37829 (sha256
37830 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
37831 (patches
37832 (search-patches "python-treelib-remove-python2-compat.patch"))))
37833 (build-system pyproject-build-system)
37834 (native-inputs (list python-poetry-core python-pytest))
37835 (home-page "https://github.com/caesar0301/treelib")
37836 (synopsis "Implementation of a tree structure in Python")
37837 (description
37838 "This package provides a Python implementation of a tree structure.")
37839 (license license:asl2.0)))
37840
37841(define-public python-trio
37842 (package
37843 (name "python-trio")
37844 (version "0.32.0")
37845 (source
37846 (origin
37847 (method url-fetch)
37848 (uri (pypi-uri "trio" version))
37849 (sha256
37850 (base32 "0sw04md83splkb0x37bmd1yj8rbf033p2k0x3qim3k9vjbn2j3qm"))))
37851 (build-system pyproject-build-system)
37852 (arguments
37853 (list
37854 #:test-flags
37855 #~(list
37856 #$@(if (package? (this-package-native-input "python-trustme"))
37857 #~()
37858 #~("--ignore=src/trio/_tests/test_dtls.py"
37859 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
37860 "--ignore=src/trio/_tests/test_ssl.py"))
37861 ;; Skip tests for the upstream repository's tooling.
37862 "--ignore=src/trio/_tests/tools"
37863 "-k" (string-join
37864 (list
37865 ;; Keyboard interrupts misbehave in the build sandbox.
37866 "not test_ki_in_repl"
37867 "test_KI_interrupts"
37868 "test_run_in_trio_thread_ki"
37869 ;; Somehow f'{check_errno_is_5!r}' evaluates
37870 ;; to "'check_errno_is_5'" instead of "<function ...>",
37871 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
37872 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
37873 ;; will probably be removed in version 0.35.
37874 "test_Matcher_check"
37875 "test_matcher_tostring"
37876 "test_raisesgroup_tostring"
37877 ;; Failure in name resolution.
37878 "test_SocketType_resolve"
37879 ;; OSError: protocol not found.
37880 "test_getprotobyname")
37881 " and not ")
37882 "src/trio/_tests")
37883 #:phases
37884 #~(modify-phases %standard-phases
37885 (add-after 'unpack 'patch-pthread-path
37886 (lambda* (#:key inputs #:allow-other-keys)
37887 (substitute* '("src/trio/_core/_thread_cache.py"
37888 "src/trio/_tests/test_threads.py")
37889 (("ctypes.util.find_library\\(\"pthread\"\\)")
37890 (simple-format #f "~s"
37891 (search-input-file inputs "lib/libpthread.so.0"))))))
37892 (add-before 'check 'set-env
37893 (lambda _
37894 ;; Tests require a writable home.
37895 (setenv "HOME" "/tmp"))))))
37896 (native-inputs
37897 (append
37898 (if (supported-package? python-pyopenssl)
37899 (list python-pyopenssl)
37900 '())
37901 (if (supported-package? python-trustme)
37902 (list python-trustme)
37903 '())
37904 (list python-async-generator)
37905 (if (supported-package? python-cryptography)
37906 (list python-cryptography)
37907 '())
37908 (list python-jedi
37909 python-pylint
37910 python-pytest
37911 python-setuptools)))
37912 (propagated-inputs
37913 (list python-attrs
37914 python-idna
37915 python-outcome
37916 python-sniffio
37917 python-sortedcontainers))
37918 (home-page "https://trio.readthedocs.io")
37919 (synopsis "Friendly Python library for async concurrency and I/O")
37920 (description
37921 "Trio strives to be a production-quality, async/await-native I/O library
37922for Python. Like all async libraries, its main purpose is to help you write
37923programs that do multiple things at the same time with parallelized I/O.")
37924 ;; Either license applies.
37925 (license (list license:expat license:asl2.0))))
37926
37927(define-public python-trio-typing
37928 (package
37929 (name "python-trio-typing")
37930 (version "0.10.0")
37931 (source
37932 (origin
37933 (method url-fetch)
37934 (uri (pypi-uri "trio-typing" version))
37935 (sha256
37936 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
37937 (build-system pyproject-build-system)
37938 (native-inputs (list python-pytest python-setuptools python-wheel))
37939 (propagated-inputs
37940 (list python-async-generator
37941 python-importlib-metadata
37942 python-mypy-extensions
37943 python-packaging
37944 python-trio
37945 python-typing-extensions))
37946 (home-page "https://github.com/python-trio/trio-typing")
37947 (synopsis "Static type checking support for Trio and related projects")
37948 (description
37949 "This package provides:
37950
37951@itemize
37952@item PEP 561 typing stubs packages for the Trio project packages:
37953
37954@itemize
37955@item trio (@code{trio-stubs})
37956@item outcome (@code{outcome-stubs})
37957@item async_generator (@code{async_generator-stubs})
37958@end itemize
37959
37960@item A package @code{trio_typing} containing types that Trio programs often
37961want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
37962a mypy plugin that smooths over some limitations in the basic type hints.
37963@end itemize")
37964 ;; Either license applies.
37965 (license (list license:expat license:asl2.0))))
37966
37967(define-public python-trubar
37968 (package
37969 (name "python-trubar")
37970 (version "0.3.4")
37971 (source
37972 (origin
37973 (method url-fetch)
37974 (uri (pypi-uri "trubar" version))
37975 (sha256
37976 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
37977 (build-system pyproject-build-system)
37978 (arguments
37979 (list
37980 #:test-flags
37981 #~(list "-k" (string-join
37982 ;; AttributeError: module 'libcst' has no attribute
37983 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
37984 (list "not test_import_from_future"
37985 "test_inport_after_docstring"
37986 ;; AssertionError: Items in the second set but not
37987 ;; the first
37988 "test_walk_files")
37989 " and not "))))
37990 (native-inputs
37991 (list python-pytest
37992 python-setuptools
37993 python-wheel))
37994 (propagated-inputs
37995 (list python-libcst
37996 python-pyyaml))
37997 (home-page "https://github.com/janezd/trubar")
37998 (synopsis "Utility for translation of Python sources")
37999 (description
38000 "This package provides a tool for translation and localization of Python
38001programs via modification of source files. Trubar supports f-strings and does
38002not require any changes to the original source code, such as marking strings
38003for translation.")
38004 (license license:expat)))
38005
38006(define-public python-twine
38007 (package
38008 (name "python-twine")
38009 (version "6.2.0")
38010 (source
38011 (origin
38012 (method url-fetch)
38013 (uri (pypi-uri "twine" version))
38014 (sha256
38015 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
38016 (build-system pyproject-build-system)
38017 (arguments
38018 (list
38019 ;; tests: 228 passed, 1 deselected
38020 #:test-flags
38021 ;; Assertion is not equal for one tests.
38022 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
38023 (native-inputs
38024 (list python-pretend
38025 python-pytest
38026 python-pytest-socket
38027 python-setuptools
38028 python-setuptools-scm))
38029 (propagated-inputs
38030 (list python-id
38031 python-keyring
38032 python-packaging
38033 python-readme-renderer
38034 python-requests
38035 python-requests-toolbelt
38036 python-rfc3986
38037 python-rich
38038 python-urllib3))
38039 (home-page "https://github.com/pypa/twine")
38040 (synopsis "Collection of utilities for interacting with PyPI")
38041 (description
38042 "@code{twine} currently supports registering projects and uploading
38043distributions. It authenticates the user over HTTPS, allows them to pre-sign
38044their files and supports any packaging format (including wheels).")
38045 (license license:asl2.0)))
38046
38047(define-public python-twisted
38048 (package
38049 (name "python-twisted")
38050 (version "25.5.0")
38051 (source
38052 (origin
38053 (method git-fetch)
38054 (uri (git-reference
38055 (url "https://github.com/twisted/twisted")
38056 (commit (string-append "twisted-" version))))
38057 (file-name (git-file-name name version))
38058 (sha256
38059 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
38060 (build-system pyproject-build-system)
38061 (arguments
38062 (list
38063 ;; tests: skips=638, successes=9759
38064 #:test-backend #~'custom
38065 #:test-flags
38066 #~(list "-m" "twisted.trial"
38067 "--temp-directory=/tmp/_trial_temp"
38068 (string-append "-j" (number->string (min 8 (parallel-job-count))))
38069 "twisted")
38070 #:phases
38071 #~(modify-phases %standard-phases
38072 (add-after 'unpack 'disable-broken-tests
38073 (lambda _
38074 (for-each delete-file
38075 (list
38076 ;; No idea why they fail
38077 "src/twisted/test/test_log.py"
38078 ;; Network tests
38079 "src/twisted/conch/test/test_cftp.py"
38080 "src/twisted/internet/test/test_endpoints.py"
38081 "src/twisted/protocols/test/test_tls.py"
38082 "src/twisted/test/test_sslverify.py"
38083 "src/twisted/web/test/test_agent.py"
38084 "src/twisted/web/test/test_tap.py"
38085 ;; These need a git executable
38086 "src/twisted/python/test/test_release.py"
38087 ;; These leave behind a socket file, which breaks the
38088 ;; build with "...has an unsupported type"
38089 "src/twisted/internet/test/test_unix.py"
38090 "src/twisted/test/test_unix.py"
38091 ;; These complain about missing test modules.
38092 "src/twisted/test/test_failure.py"
38093 "src/twisted/web/test/test_http2.py"
38094 "src/twisted/conch/test/test_forwarding.py")))))))
38095 (propagated-inputs
38096 (list python-attrs
38097 python-automat
38098 python-bcrypt
38099 python-constantly
38100 python-hyperlink
38101 python-incremental
38102 python-typing-extensions
38103 python-zope-interface
38104 ;; [conch]
38105 (list python "tk")
38106 python-appdirs
38107 python-bcrypt
38108 python-cryptography
38109 ;; [http2]
38110 python-h2
38111 python-priority
38112 ;; [tls]
38113 python-idna
38114 python-pyopenssl
38115 python-service-identity
38116 ;; [serial]
38117 python-pyserial))
38118 (native-inputs
38119 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
38120 python-hatch-fancy-pypi-readme
38121 python-hatchling
38122 python-httpx
38123 python-hypothesis
38124 python-incremental
38125 python-pyhamcrest
38126 python-pytest))
38127 (home-page "https://twistedmatrix.com/")
38128 (synopsis "Asynchronous networking framework written in Python")
38129 (description
38130 "Twisted is an extensible framework for Python programming, with special
38131focus on event-based network programming and multiprotocol integration.")
38132 (license license:expat)))
38133
38134(define-public python-txredisapi
38135 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
38136 ;; The latest version is 1.4.11, but it contains a bug:
38137 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
38138 ;; patched in commit d2259a3.
38139 (revision "0"))
38140 (package
38141 (name "python-txredisapi")
38142 (version (git-version "1.4.11" revision commit))
38143 (source
38144 (origin
38145 (method git-fetch)
38146 ;; The source distribution on PyPi is missing test files:
38147 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
38148 (uri (git-reference
38149 (url "https://github.com/IlyaSkriblovsky/txredisapi")
38150 (commit commit)))
38151 (file-name (git-file-name name version))
38152 (sha256
38153 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
38154 (build-system pyproject-build-system)
38155 (arguments
38156 (list #:test-backend #~'custom
38157 #:test-flags #~(list "-m" "twisted.trial" "tests")
38158 #:phases
38159 #~(modify-phases %standard-phases
38160 ;; The tests require a running Redis server.
38161 (add-before 'check 'start-redis
38162 (lambda _
38163 (invoke "redis-server" "--daemonize" "yes"))))))
38164 (propagated-inputs (list python-twisted))
38165 (native-inputs (list python-mock python-setuptools redis))
38166 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
38167 (synopsis "Non-blocking Redis client for Python")
38168 (description "txredisapi is a non-blocking client driver for the Redis
38169database, written in Python. It uses Twisted for asynchronous communication
38170with Redis.")
38171 (license license:asl2.0))))
38172
38173(define-public python-typeapi
38174 (package
38175 (name "python-typeapi")
38176 (version "2.2.4")
38177 (source
38178 (origin
38179 (method url-fetch)
38180 (uri (pypi-uri "typeapi" version))
38181 (sha256
38182 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
38183 (build-system pyproject-build-system)
38184 (arguments
38185 (list
38186 #:tests? #false)) ;there are none
38187 (propagated-inputs (list python-typing-extensions))
38188 (native-inputs (list python-hatchling))
38189 (home-page "https://pypi.org/project/typeapi/")
38190 (synopsis "Type hints")
38191 (description "The typeapi package provides an object-oriented interface
38192for introspecting PEP484 type hints at runtime, including forward references
38193that make use of the more recent PEP585 and PEP604 type hint features in
38194Python versions that don't natively support them.")
38195 (license license:expat)))
38196
38197(define-public python-typer
38198 (package
38199 (name "python-typer")
38200 (version "0.20.0")
38201 (source
38202 (origin
38203 (method git-fetch)
38204 (uri (git-reference
38205 (url "https://github.com/fastapi/typer")
38206 (commit version)))
38207 (file-name (git-file-name name version))
38208 (sha256
38209 (base32 "1a2ay2kj3d3rwjscx3hw2adgqifs3hdp7kwcpdh1bl3iy8mn9xdi"))))
38210 (build-system pyproject-build-system)
38211 (arguments
38212 (list
38213 #:test-flags
38214 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count))))))
38215 (native-inputs
38216 (list python-coverage ;this is required in tests
38217 python-pdm-backend
38218 python-pytest
38219 python-pytest-xdist))
38220 (propagated-inputs
38221 (list python-click
38222 python-typing-extensions
38223 ;; [optional]
38224 python-rich
38225 python-shellingham))
38226 (home-page "https://github.com/fastapi/typer")
38227 (synopsis "Typer builds CLI based on Python type hints")
38228 (description
38229 "Typer is a library for building CLI applications. It's based on Python
382303.6+ type hints.")
38231 (license license:expat)))
38232
38233(define-public python-types-aiofiles
38234 (package
38235 (name "python-types-aiofiles")
38236 (version "25.1.0.20251011")
38237 (source
38238 (origin
38239 (method url-fetch)
38240 (uri (pypi-uri "types_aiofiles" version))
38241 (sha256
38242 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
38243 (build-system pyproject-build-system)
38244 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38245 (native-inputs (list python-setuptools))
38246 (home-page "https://github.com/python/typeshed")
38247 (synopsis "Typing stubs for python-aiofiles")
38248 (description "This package providis typing stubs for python-aiofiles.")
38249 (license license:asl2.0)))
38250
38251(define-public python-types-colorama
38252 (package
38253 (name "python-types-colorama")
38254 (version "0.4.15.20250801")
38255 (source
38256 (origin
38257 (method url-fetch)
38258 (uri (pypi-uri "types_colorama" version))
38259 (sha256
38260 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
38261 (build-system pyproject-build-system)
38262 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38263 (native-inputs
38264 (list python-setuptools))
38265 (home-page "https://github.com/python/typeshed")
38266 (synopsis "Typing stubs for colorama")
38267 (description "This package provides typing stubs for colorama.")
38268 (license license:asl2.0)))
38269
38270(define-public python-types-dataclasses
38271 (package
38272 (name "python-types-dataclasses")
38273 (version "0.6.6")
38274 (source
38275 (origin
38276 (method url-fetch)
38277 (uri (pypi-uri "types-dataclasses" version))
38278 (sha256
38279 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
38280 (build-system pyproject-build-system)
38281 (arguments (list #:tests? #f)) ;no tests
38282 (native-inputs (list python-setuptools))
38283 (home-page "https://github.com/python/typeshed")
38284 (synopsis "Typing stubs for dataclasses")
38285 (description
38286 "This package provides a collection of library stubs for Python, with
38287static types.")
38288 (license license:asl2.0)))
38289
38290(define-public python-types-dateutil
38291 (package
38292 (name "python-types-dateutil")
38293 (version "2.9.0.20240316")
38294 (source
38295 (origin
38296 (method url-fetch)
38297 (uri (pypi-uri "types-python-dateutil" version))
38298 (sha256
38299 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
38300 (build-system pyproject-build-system)
38301 (arguments (list #:tests? #f)) ; no tests
38302 (native-inputs
38303 (list python-pytest python-setuptools python-wheel))
38304 (home-page "https://github.com/python/typeshed")
38305 (synopsis "Typing stubs for python-dateutil")
38306 (description
38307 "This is a PEP 561 type stub package for the @code{python-dateutil}
38308package.")
38309 (license license:asl2.0)))
38310
38311(define-public python-types-docutils
38312 (package
38313 (name "python-types-docutils")
38314 (version "0.22.2.20251006")
38315 (source
38316 (origin
38317 (method url-fetch)
38318 (uri (pypi-uri "types_docutils" version))
38319 (sha256
38320 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
38321 (build-system pyproject-build-system)
38322 (arguments (list #:tests? #f)) ;no tests
38323 (native-inputs (list python-setuptools))
38324 (home-page "https://github.com/python/typeshed")
38325 (synopsis "Typing stubs for docutils")
38326 (description "This package provides a collection of library stubs for
38327Python, with static types.")
38328 (license license:asl2.0)))
38329
38330(define-public python-types-freezegun
38331 (package
38332 (name "python-types-freezegun")
38333 (version "1.1.8")
38334 (source
38335 (origin
38336 (method url-fetch)
38337 (uri (pypi-uri "types-freezegun" version))
38338 (sha256
38339 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
38340 (build-system pyproject-build-system)
38341 (arguments
38342 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
38343 ;; right files from source, so ignore them for now.
38344 (list #:tests? #f))
38345 (native-inputs (list python-setuptools python-wheel))
38346 (home-page "https://github.com/python/typeshed")
38347 (synopsis "Typing stubs for @code{freezegun}")
38348 (description "This package contains typing stubs for for @code{freezegun}, a
38349very small subset the Python stubs contained in the complete @code{typeshed}
38350collection.")
38351 (license license:asl2.0)))
38352
38353(define-public python-types-orjson
38354 (package
38355 (name "python-types-orjson")
38356 (version "3.6.2")
38357 (source
38358 (origin
38359 (method url-fetch)
38360 (uri (pypi-uri "types-orjson" version))
38361 (sha256
38362 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
38363 (build-system pyproject-build-system)
38364 (arguments (list #:tests? #f)) ;no tests
38365 (native-inputs (list python-setuptools))
38366 (home-page "https://github.com/python/typeshed")
38367 (synopsis "Typing stubs for orjson")
38368 (description "This is a PEP 561 type stub package for the @code{orjson}
38369package. It can be used by type-checking tools like mypy, PyCharm, pytype
38370etc. to check code that uses @code{orjson}.")
38371 (license license:asl2.0)))
38372
38373(define-public python-types-protobuf
38374 (package
38375 (name "python-types-protobuf")
38376 (version "3.20.1")
38377 (source (origin
38378 (method url-fetch)
38379 (uri (pypi-uri "types-protobuf" version))
38380 (sha256
38381 (base32
38382 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
38383 (build-system pyproject-build-system)
38384 (arguments
38385 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
38386 ;; right files from source, so ignore them for now.
38387 (list #:tests? #f))
38388 (native-inputs (list python-setuptools python-wheel))
38389 (home-page "https://github.com/python/typeshed")
38390 (synopsis "Typing stubs for @code{protobuf}")
38391 (description "This package contains typing stubs for @code{protobuf}, a
38392very small subset the Python stubs contained in the complete @code{typeshed}
38393collection.")
38394 (license license:asl2.0)))
38395
38396(define-public python-types-python-dateutil
38397 (package
38398 (name "python-types-python-dateutil")
38399 (version "2.9.0.20250708")
38400 (source
38401 (origin
38402 (method url-fetch)
38403 (uri (pypi-uri "types_python_dateutil" version))
38404 (sha256
38405 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
38406 (build-system pyproject-build-system)
38407 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38408 (native-inputs (list python-setuptools))
38409 (home-page "https://github.com/python/typeshed")
38410 (synopsis "Typing stubs for python-dateutil")
38411 (description "This package providis typing stubs for python-dateutil.")
38412 (license license:asl2.0)))
38413
38414(define-public python-types-pytz
38415 (package
38416 (name "python-types-pytz")
38417 (version "2025.2.0.20250809")
38418 (source
38419 (origin
38420 (method url-fetch)
38421 (uri (pypi-uri "types_pytz" version))
38422 (sha256
38423 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
38424 (build-system pyproject-build-system)
38425 (arguments
38426 (list #:tests? #f)) ;no tests provided
38427 (native-inputs (list python-setuptools))
38428 (home-page "https://github.com/python/typeshed")
38429 (synopsis "Typing stubs for pytz")
38430 (description "This package contains typing stubs for @code{pytz}, a very
38431small subset the Python stubs contained in the complete @code{typeshed}
38432collection.")
38433 (license license:asl2.0)))
38434
38435(define-public python-types-pyyaml
38436 (package
38437 (name "python-types-pyyaml")
38438 (version "6.0.12.20250915")
38439 (source
38440 (origin
38441 (method url-fetch)
38442 (uri (pypi-uri "types_pyyaml" version))
38443 (sha256
38444 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
38445 (build-system pyproject-build-system)
38446 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38447 (native-inputs
38448 (list python-setuptools))
38449 (home-page " https://github.com/python/typeshed")
38450 (synopsis "Typing stubs for PyYAML")
38451 (description "This package provides typing stubs for @code{PyYAML}.")
38452 (license license:asl2.0)))
38453
38454(define-public python-types-regex
38455 (package
38456 (name "python-types-regex")
38457 (version "2025.9.18.20250921")
38458 (source
38459 (origin
38460 (method url-fetch)
38461 (uri (pypi-uri "types_regex" version))
38462 (sha256
38463 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
38464 (build-system pyproject-build-system)
38465 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38466 (native-inputs (list python-setuptools))
38467 (home-page "https://github.com/python/typeshed")
38468 (synopsis "Typing stubs for regex")
38469 (description "This package provides typing stubs for regex.")
38470 (license license:asl2.0)))
38471
38472(define-public python-types-requests
38473 (package
38474 (name "python-types-requests")
38475 (version "2.32.4.20250611")
38476 (source
38477 (origin
38478 (method url-fetch)
38479 (uri (pypi-uri "types_requests" version))
38480 (sha256
38481 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
38482 (build-system pyproject-build-system)
38483 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38484 (native-inputs
38485 (list python-setuptools))
38486 (propagated-inputs
38487 (list python-urllib3))
38488 (home-page "https://github.com/python/typeshed")
38489 (synopsis "Typing stubs for requests")
38490 (description "This package provides typing stubs for requests.")
38491 (license license:asl2.0)))
38492
38493(define-public python-types-setuptools
38494 (package
38495 (name "python-types-setuptools")
38496 (version "80.9.0.20250529")
38497 (source
38498 (origin
38499 (method url-fetch)
38500 (uri (pypi-uri "types_setuptools" version))
38501 (sha256
38502 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
38503 (build-system pyproject-build-system)
38504 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38505 (native-inputs
38506 (list python-setuptools))
38507 (home-page "https://github.com/python/typeshed")
38508 (synopsis "Typing stubs for setuptools")
38509 (description "This package provides typing stubs for setuptools.")
38510 (license license:asl2.0)))
38511
38512(define-public python-types-simplejson
38513 (package
38514 (name "python-types-simplejson")
38515 (version "3.19.0.20241221")
38516 (source
38517 (origin
38518 (method url-fetch)
38519 (uri (pypi-uri "types_simplejson" version))
38520 (sha256
38521 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
38522 (build-system pyproject-build-system)
38523 (arguments
38524 (list
38525 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
38526 (native-inputs
38527 (list python-setuptools python-wheel))
38528 (home-page "https://github.com/python/typeshed")
38529 (synopsis "Typing stubs for simplejson")
38530 (description "Typing stubs for simplejson.")
38531 (license license:asl2.0)))
38532
38533(define-public python-types-toml
38534 (package
38535 (name "python-types-toml")
38536 (version "0.10.8.20240310")
38537 (source
38538 (origin
38539 (method url-fetch)
38540 (uri (pypi-uri "types-toml" version))
38541 (sha256
38542 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
38543 (build-system pyproject-build-system)
38544 (arguments
38545 (list #:tests? #f)) ;no tests provided
38546 (native-inputs (list python-setuptools))
38547 (home-page "https://github.com/python/typeshed")
38548 (synopsis "Typing stubs for TOML")
38549 (description
38550 "This package contains typing stubs for TOML, a very small subset the
38551Python stubs contained in the complete @code{typeshed} collection.")
38552 (license license:asl2.0)))
38553
38554(define-public python-types-tqdm
38555 (package
38556 (name "python-types-tqdm")
38557 (version "4.67.0.20250809")
38558 (source
38559 (origin
38560 (method url-fetch)
38561 (uri (pypi-uri "types_tqdm" version))
38562 (sha256
38563 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
38564 (build-system pyproject-build-system)
38565 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38566 (native-inputs (list python-setuptools))
38567 (propagated-inputs (list python-types-requests))
38568 (home-page "https://github.com/python/typeshed")
38569 (synopsis "Typing stubs for python-tqdm")
38570 (description "This package providis typing stubs for python-tqdm.")
38571 (license license:asl2.0)))
38572
38573(define-public python-types-ujson
38574 (package
38575 (name "python-types-ujson")
38576 (version "5.10.0.20250822")
38577 (source
38578 (origin
38579 (method url-fetch)
38580 (uri (pypi-uri "types_ujson" version))
38581 (sha256
38582 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
38583 (build-system pyproject-build-system)
38584 (arguments
38585 (list #:tests? #f)) ;no tests provided
38586 (native-inputs (list python-setuptools))
38587 (home-page "https://github.com/python/typeshed")
38588 (synopsis "Typing stubs for ujson")
38589 (description
38590 "This is a PEP 561 type stub package for the ujson package. It can be
38591used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
38592uses ujson.")
38593 (license license:asl2.0)))
38594
38595(define-public python-types-urllib3
38596 (package
38597 (name "python-types-urllib3")
38598 (version "1.26.25.14")
38599 (source
38600 (origin
38601 (method url-fetch)
38602 (uri (pypi-uri "types-urllib3" version))
38603 (sha256
38604 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
38605 (build-system pyproject-build-system)
38606 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38607 (native-inputs
38608 (list python-setuptools))
38609 (home-page "https://github.com/python/typeshed")
38610 (synopsis "Typing stubs for urllib3")
38611 (description "This package provides typing stubs for urllib3.")
38612 (license license:asl2.0)))
38613
38614(define-public python-typeshed-client
38615 (package
38616 (name "python-typeshed-client")
38617 (version "2.8.2")
38618 (source
38619 (origin
38620 (method git-fetch)
38621 (uri (git-reference
38622 (url "https://github.com/JelleZijlstra/typeshed_client")
38623 (commit (string-append "v" version))))
38624 (file-name (git-file-name name version))
38625 (sha256
38626 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
38627 (build-system pyproject-build-system)
38628 (arguments
38629 (list #:test-backend #~'custom
38630 #:test-flags #~(list "tests/test.py")))
38631 (native-inputs
38632 (list python-setuptools))
38633 (propagated-inputs
38634 (list python-importlib-resources
38635 python-typing-extensions))
38636 (home-page "https://github.com/JelleZijlstra/typeshed_client")
38637 (synopsis "Library for accessing stubs in typeshed")
38638 (description
38639 "This package provides a library for accessing stubs in typeshed.")
38640 (license license:expat)))
38641
38642(define-public python-typing-inspect
38643 (package
38644 (name "python-typing-inspect")
38645 (version "0.9.0")
38646 (source
38647 (origin
38648 (method url-fetch)
38649 (uri (pypi-uri "typing_inspect" version))
38650 (sha256
38651 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
38652 (build-system pyproject-build-system)
38653 (native-inputs
38654 (list python-pytest
38655 python-setuptools
38656 python-wheel))
38657 (propagated-inputs
38658 (list python-mypy-extensions
38659 python-typing-extensions))
38660 (home-page "https://github.com/ilevkivskyi/typing_inspect")
38661 (synopsis "API for inspection of types in the Python @code{typing} module")
38662 (description
38663 "The @code{typing_inspect} module defines experimental API for runtime
38664inspection of types defined in the Python standard typing module.")
38665 (license license:expat)))
38666
38667(define-public python-typing-inspection
38668 (package
38669 (name "python-typing-inspection")
38670 (version "0.4.2")
38671 (source
38672 (origin
38673 (method git-fetch)
38674 (uri (git-reference
38675 (url "https://github.com/pydantic/typing-inspection")
38676 (commit (string-append "v" version))))
38677 (file-name (git-file-name name version))
38678 (sha256
38679 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
38680 (build-system pyproject-build-system)
38681 ;; tests: 89 passed, 3 skipped
38682 (native-inputs
38683 (list python-pytest
38684 python-hatchling))
38685 (propagated-inputs
38686 (list python-typing-extensions))
38687 (home-page "https://github.com/pydantic/typing-inspection")
38688 (synopsis "Runtime typing introspection tools")
38689 (description
38690 "@code{typing-inspection} provides tools to inspect type annotations at
38691runtime.")
38692 (license license:expat)))
38693
38694(define-public python-typogrify
38695 (package
38696 (name "python-typogrify")
38697 (version "2.1.0")
38698 (source
38699 (origin
38700 (method url-fetch)
38701 (uri (pypi-uri "typogrify" version))
38702 (sha256
38703 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
38704 (build-system pyproject-build-system)
38705 (arguments
38706 (list
38707 #:test-flags
38708 #~(list "--doctest-modules"
38709 "typogrify/filters.py"
38710 "typogrify/packages/titlecase/tests.py")))
38711 (native-inputs
38712 (list python-pytest
38713 python-hatchling))
38714 (propagated-inputs
38715 (list python-smartypants))
38716 (home-page "https://github.com/justinmayer/typogrify")
38717 (synopsis "Filters to transform text into typographically-improved HTML")
38718 (description
38719 "@code{typogrify} provides a set of custom filters that automatically
38720apply various transformations to plain text in order to yield
38721typographically-improved HTML. While often used in conjunction with Jinja and
38722Django template systems, the filters can be used in any environment.")
38723 (license license:bsd-3)))
38724
38725(define-public python-ua-parser
38726 (package
38727 (name "python-ua-parser")
38728 (version "0.10.0")
38729 (source
38730 (origin
38731 (method url-fetch)
38732 (uri (pypi-uri "ua-parser" version))
38733 (sha256
38734 (base32
38735 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
38736 (build-system pyproject-build-system)
38737 (arguments
38738 `(#:tests? #f)) ;no test suite in release
38739 (native-inputs
38740 (list python-pyyaml
38741 python-setuptools))
38742 (home-page "https://github.com/ua-parser/uap-python")
38743 (synopsis "User agent parser")
38744 (description
38745 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
38746 (license license:asl2.0)))
38747
38748(define-public python-ubelt
38749 (package
38750 (name "python-ubelt")
38751 (version "1.3.6")
38752 (source
38753 (origin
38754 (method git-fetch)
38755 (uri (git-reference
38756 (url "https://github.com/Erotemic/ubelt")
38757 (commit (string-append "v" version))))
38758 (file-name (git-file-name name version))
38759 (sha256
38760 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
38761 (build-system pyproject-build-system)
38762 (arguments
38763 (list
38764 ;; The builder user home doesn't match HOME, which causes this test to
38765 ;; fail.
38766 #:test-flags #~(list "-k" "not userhome")
38767 #:phases
38768 #~(modify-phases %standard-phases
38769 (add-before 'check 'pre-check
38770 (lambda _
38771 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
38772 (native-inputs
38773 (list python-pytest
38774 python-requests
38775 python-setuptools
38776 python-wheel
38777 python-xdoctest))
38778 (propagated-inputs
38779 (list python-ordered-set))
38780 (home-page "https://github.com/Erotemic/ubelt")
38781 (synopsis "Python library for hashing, caching, timing and more")
38782 (description
38783 "Ubelt is a small library of simple functions that extend the Python
38784standard library. It includes an @acronym{API, Application Programming
38785Interface} to simplify common problems such as caching, timing, computing
38786progress, among other things.")
38787 (license license:asl2.0)))
38788
38789(define-public python-uc-micro-py
38790 (package
38791 (name "python-uc-micro-py")
38792 (version "1.0.1")
38793 (source (origin
38794 (method git-fetch) ;for tests
38795 (uri (git-reference
38796 (url "https://github.com/tsutsu3/uc.micro-py")
38797 (commit (string-append "v" version))))
38798 (file-name (git-file-name name version))
38799 (sha256
38800 (base32
38801 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
38802 (build-system pyproject-build-system)
38803 (native-inputs (list python-pytest python-setuptools python-wheel))
38804 (home-page "https://github.com/tsutsu3/uc.micro-py")
38805 (synopsis "Unicode data files for linkify-it-py projects")
38806 (description "This package contains a micro subset of Unicode data files
38807for linkify-it-py projects.")
38808 (license license:expat)))
38809
38810(define-public python-ujson
38811 (package
38812 (name "python-ujson")
38813 (version "5.10.0")
38814 (source
38815 (origin
38816 (method url-fetch)
38817 (uri (pypi-uri "ujson" version))
38818 (sha256
38819 (base32
38820 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
38821 (modules '((guix build utils)))
38822 (snippet
38823 #~(begin (delete-file-recursively "deps")))))
38824 (build-system pyproject-build-system)
38825 (arguments
38826 (list
38827 #:phases
38828 #~(modify-phases %standard-phases
38829 (add-after 'unpack 'link-to-system-double-conversion
38830 (lambda* (#:key inputs #:allow-other-keys)
38831 (let ((d-c (assoc-ref inputs "double-conversion")))
38832 (substitute* "setup.py"
38833 (("./deps/double-conversion/double-conversion\"")
38834 (string-append d-c "/include/double-conversion\""))
38835 (("-lstdc++" stdc)
38836 (string-append "-L" d-c "/lib\","
38837 " \"-ldouble-conversion\","
38838 " \"" stdc)))))))))
38839 (native-inputs
38840 (list double-conversion
38841 python-pytest
38842 python-setuptools
38843 python-setuptools-scm
38844 python-wheel))
38845 (home-page "https://github.com/ultrajson/ultrajson")
38846 (synopsis "Ultra fast JSON encoder and decoder for Python")
38847 (description
38848 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
38849bindings for Python 3.")
38850 (license license:bsd-3)))
38851
38852(define-public python-ukkonen
38853 (package
38854 (name "python-ukkonen")
38855 (version "1.0.1")
38856 (source
38857 (origin
38858 ;; There are no tests in the PyPI tarball.
38859 (method git-fetch)
38860 (uri (git-reference
38861 (url "https://github.com/asottile/ukkonen")
38862 (commit (string-append "v" version))))
38863 (file-name (git-file-name name version))
38864 (sha256
38865 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
38866 (build-system pyproject-build-system)
38867 (native-inputs (list python-pytest python-setuptools python-wheel))
38868 (propagated-inputs (list python-cffi))
38869 (home-page "https://github.com/asottile/ukkonen")
38870 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
38871 (description "This package is an implementation of of bounded Levenshtein
38872distance (Ukkonen).")
38873 (license license:expat)))
38874
38875(define-public python-ulid
38876 (package
38877 (name "python-ulid")
38878 (version "3.1.0")
38879 (source
38880 (origin
38881 (method git-fetch)
38882 (uri (git-reference
38883 (url "https://github.com/mdomke/python-ulid")
38884 (commit version)))
38885 (file-name (git-file-name name version))
38886 (sha256
38887 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
38888 (build-system pyproject-build-system)
38889 (native-inputs
38890 (list python-freezegun
38891 python-hatch-fancy-pypi-readme
38892 python-hatch-vcs
38893 python-hatchling
38894 python-pytest))
38895 (propagated-inputs
38896 (list python-pydantic))
38897 (home-page "https://github.com/mdomke/python-ulid")
38898 (synopsis "Universally unique lexicographically sortable identifier")
38899 (description
38900 "ULID is a universally unique lexicographically sortable identifier.
38901It is:
38902@itemize
38903@item 128-bit compatible with UUID
38904@item 1.21e+24 unique ULIDs per millisecond
38905@item lexicographically sortable!
38906@item canonically encoded as a 26 character string, as opposed to the 36
38907character UUID
38908@item uses Crockford's base32 for better efficiency and readability (5 bits
38909per character)
38910@item case insensitive
38911@item no special characters (URL safe)
38912@item monotonic sort order (correctly detects and handles the same
38913millisecond)
38914@end itemize")
38915 (license license:expat)))
38916
38917(define-public python-uncertainties
38918 (package
38919 (name "python-uncertainties")
38920 (version "3.2.3")
38921 (source
38922 (origin
38923 (method url-fetch)
38924 (uri (pypi-uri "uncertainties" version))
38925 (sha256
38926 (base32
38927 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
38928 (build-system pyproject-build-system)
38929 (native-inputs
38930 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
38931 (propagated-inputs (list python-numpy))
38932 (home-page "https://uncertainties.readthedocs.io/en/latest/")
38933 (synopsis "Calculations with uncertainties")
38934 (description
38935 "The uncertainties package transparently handles calculations with
38936numbers with uncertainties. It can also yield the derivatives of any
38937expression.")
38938 (license license:bsd-3)))
38939
38940(define-public python-unicodedata2
38941 (package
38942 (name "python-unicodedata2")
38943 (version "16.0.0")
38944 (source
38945 (origin
38946 (method url-fetch)
38947 (uri (pypi-uri "unicodedata2" version))
38948 (sha256
38949 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
38950 (build-system pyproject-build-system)
38951 (native-inputs
38952 (list python-pytest
38953 python-setuptools))
38954 (home-page "https://github.com/fonttools/unicodedata2")
38955 (synopsis "Python unicodedata backport")
38956 (description "This package corresponds to the latest @code{unicodedata}
38957standard Python module.")
38958 (license license:asl2.0)))
38959
38960(define-public python-unicode-linebreak
38961 (package
38962 (name "python-unicode-linebreak")
38963 (version "0.0.2")
38964 (source
38965 (origin
38966 (method git-fetch)
38967 (uri (git-reference
38968 (url "https://github.com/mondeja/py-unicode-linebreak")
38969 (commit (string-append "v" version))))
38970 (file-name (git-file-name name version))
38971 (sha256
38972 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
38973 (build-system pyproject-build-system)
38974 (arguments
38975 (list
38976 #:imported-modules `(,@%cargo-build-system-modules
38977 ,@%pyproject-build-system-modules)
38978 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
38979 (guix build pyproject-build-system)
38980 (guix build utils))
38981 #:test-backend #~'unittest
38982 #:phases
38983 #~(modify-phases %standard-phases
38984 (add-after 'unpack 'prepare-cargo-build-system
38985 (lambda args
38986 (for-each
38987 (lambda (phase)
38988 (format #t "Running cargo phase: ~a~%" phase)
38989 (apply (assoc-ref cargo:%standard-phases phase)
38990 #:cargo-target #$(cargo-triplet)
38991 args))
38992 '(unpack-rust-crates
38993 configure
38994 check-for-pregenerated-files
38995 patch-cargo-checksums)))))))
38996 (native-inputs
38997 (append
38998 (list maturin
38999 rust
39000 `(,rust "cargo"))
39001 (or (and=> (%current-target-system)
39002 (compose list make-rust-sysroot))
39003 '())))
39004 (inputs (cargo-inputs 'unicode_linebreak))
39005 (home-page "https://github.com/mondeja/py-unicode-linebreak")
39006 (synopsis "Markdown paragraph wrapper")
39007 (description
39008 "This package provides a Markdown paragraph wrapper using Unicode Line
39009Breaking Algorithm written in Rust with Python bindings.")
39010 (license license:expat)))
39011
39012(define-public python-unicodeitplus
39013 (package
39014 (name "python-unicodeitplus")
39015 (version "0.3.1")
39016 (source
39017 (origin
39018 (method url-fetch)
39019 (uri (pypi-uri "unicodeitplus" version))
39020 (sha256
39021 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
39022 (build-system pyproject-build-system)
39023 (native-inputs
39024 (list python-pytest
39025 python-setuptools
39026 python-setuptools-scm))
39027 (propagated-inputs
39028 (list python-lark))
39029 (home-page "https://github.com/HDembinski/unicodeitplus")
39030 (synopsis "Convert simple LaTeX to an Unicode approximation")
39031 (description
39032 "This package provides a more complete LaTeX to Unicode converter than
39033@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
39034Backus-Naur Form} with the Lark library.")
39035 (license license:bsd-3)))
39036
39037(define-public python-unidecode
39038 (package
39039 (name "python-unidecode")
39040 (version "1.4.0")
39041 (source
39042 (origin
39043 (method url-fetch)
39044 (uri (pypi-uri "Unidecode" version))
39045 (sha256
39046 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
39047 (build-system pyproject-build-system)
39048 (native-inputs
39049 (list python-pytest python-setuptools))
39050 (home-page "https://pypi.org/project/Unidecode/")
39051 (synopsis "ASCII transliterations of Unicode text")
39052 (description
39053 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
39054useful when integrating with legacy code that doesn't support Unicode, or for
39055ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
39056machine identifiers from human-readable Unicode strings that should still be
39057somewhat intelligible.")
39058 (license license:gpl2+)))
39059
39060(define-public python-unique-log-filter
39061 (package
39062 (name "python-unique-log-filter")
39063 (version "0.1.0")
39064 (source
39065 (origin
39066 (method git-fetch)
39067 (uri (git-reference
39068 (url "https://github.com/twizmwazin/unique_log_filter")
39069 (commit (string-append "v" version))))
39070 (file-name (git-file-name name version))
39071 (sha256
39072 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
39073 (build-system pyproject-build-system)
39074 (arguments
39075 (list #:test-backend #~'custom
39076 #:test-flags #~(list "test_unique_log_filter.py")))
39077 (native-inputs (list python-flit-core))
39078 (home-page "https://github.com/twizmwazin/unique_log_filter")
39079 (synopsis "Log filter that removes duplicate log messages")
39080 (description
39081 "This library provides a filter for the @code{logging} module
39082from the Python standard library which allows removing duplicate log
39083messages.")
39084 (license license:bsd-2)))
39085
39086(define-public python-uniseg
39087 (package
39088 (name "python-uniseg")
39089 (version "0.10.0")
39090 (source
39091 (origin
39092 (method url-fetch)
39093 (uri (pypi-uri "uniseg" version))
39094 (sha256
39095 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
39096 (build-system pyproject-build-system)
39097 (native-inputs
39098 (list python-pytest
39099 python-setuptools
39100 python-setuptools-scm))
39101 (home-page "https://bitbucket.org/emptypage/uniseg-python")
39102 (synopsis "Python library to determine Unicode text segmentations")
39103 (description
39104 "Uniseg is a Python package used to determine Unicode text segmentations.
39105Supported segmentations include:
39106@enumerate
39107@item @dfn{Code point} (any value in the Unicode codespace)
39108@item @dfn{Grapheme cluster} (user-perceived character made of a single or
39109multiple Unicode code points, e.g. \"G\" + acute-accent)
39110@item Word break
39111@item Sentence break
39112@item Line break
39113@end enumerate")
39114 (license license:expat)))
39115
39116(define-public python-universal-pathlib
39117 (package
39118 (name "python-universal-pathlib")
39119 (version "0.2.6")
39120 (source
39121 (origin
39122 (method git-fetch)
39123 (uri (git-reference
39124 (url "https://github.com/fsspec/universal_pathlib")
39125 (commit (string-append "v" version))))
39126 (file-name (git-file-name name version))
39127 (sha256
39128 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
39129 (build-system pyproject-build-system)
39130 (arguments
39131 (list
39132 #:tests? #f)) ;requires network
39133 (native-inputs
39134 (list python-setuptools
39135 python-setuptools-scm))
39136 (propagated-inputs
39137 (list python-fsspec
39138 python-pathlib-abc))
39139 (home-page "https://github.com/fsspec/universal_pathlib")
39140 (synopsis
39141 "@code{pathlib} API extended to use @code{fsspec} backends")
39142 (description
39143 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
39144API to support a variety of backend filesystems via filesystem_spec.")
39145 (license license:expat)))
39146
39147(define-public python-unpaddedbase64
39148 (package
39149 (name "python-unpaddedbase64")
39150 (version "2.1.0")
39151 (source
39152 (origin
39153 (method git-fetch)
39154 (uri (git-reference
39155 (url "https://github.com/matrix-org/python-unpaddedbase64")
39156 (commit (string-append "v" version))))
39157 (file-name (git-file-name name version))
39158 (sha256
39159 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
39160 (build-system pyproject-build-system)
39161 (native-inputs (list python-poetry-core
39162 python-pytest
39163 python-setuptools
39164 python-wheel))
39165 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
39166 (synopsis "Encode and decode Base64 without “=” padding")
39167 (description
39168 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
39169using “=” characters. However this conveys no benefit so many protocols
39170choose to use Base64 without the “=” padding.")
39171 (license license:asl2.0)))
39172
39173(define-public python-update-checker
39174 (package
39175 (name "python-update-checker")
39176 (version "0.18.0")
39177 (source
39178 (origin
39179 (method url-fetch)
39180 (uri (pypi-uri "update-checker" version))
39181 (sha256
39182 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
39183 (build-system pyproject-build-system)
39184 (native-inputs
39185 (list python-pytest
39186 python-setuptools))
39187 (propagated-inputs
39188 (list python-requests))
39189 (home-page "https://github.com/bboe/update_checker")
39190 (synopsis "Python module that will check for package updates")
39191 (description "This package provides a Python module that will check for
39192package updates.")
39193 (license license:bsd-2)))
39194
39195(define-public python-uri-template
39196 (package
39197 (name "python-uri-template")
39198 (version "1.3.0")
39199 (source
39200 (origin
39201 (method url-fetch)
39202 (uri (pypi-uri "uri-template" version))
39203 (sha256
39204 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
39205 (build-system pyproject-build-system)
39206 (arguments
39207 (list
39208 #:phases
39209 '(modify-phases %standard-phases
39210 (replace 'check
39211 (lambda* (#:key tests? #:allow-other-keys)
39212 (when tests?
39213 (invoke "python3" "test.py")))))))
39214 (native-inputs
39215 (list python-setuptools
39216 python-setuptools-scm
39217 python-wheel))
39218 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
39219 (synopsis "RFC 6570 URI Template Processor")
39220 (description "This package implements URI Template expansion in strict
39221adherence to RFC 6570, but adds a few extensions.")
39222 (license license:expat)))
39223
39224(define-public python-urwid
39225 (package
39226 (name "python-urwid")
39227 (version "3.0.3")
39228 (source
39229 (origin
39230 (method url-fetch)
39231 (uri (pypi-uri "urwid" version))
39232 (sha256
39233 (base32
39234 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
39235 (build-system pyproject-build-system)
39236 (arguments
39237 (list
39238 #:test-flags
39239 #~(list "tests"
39240 ;; According to Debian these tests are cursed.
39241 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
39242 "--ignore=tests/test_vterm.py")))
39243 (native-inputs
39244 (list python-pytest
39245 python-pytest-cov
39246 python-setuptools
39247 python-setuptools-scm))
39248 (propagated-inputs
39249 (list python-wcwidth
39250 ;; [optional]
39251 python-pygobject
39252 python-pyzmq
39253 python-tornado
39254 python-pyserial
39255 python-twisted))
39256 (home-page "https://urwid.org")
39257 (synopsis "Console user interface library for Python")
39258 (description
39259 "Urwid is a curses-based UI/widget library for Python. It includes many
39260features useful for text console applications.")
39261 (license license:lgpl2.1+)))
39262
39263(define-public python-urwid-2
39264 (package
39265 (inherit python-urwid)
39266 (name "python-urwid")
39267 (version "2.6.16")
39268 (source
39269 (origin
39270 (method url-fetch)
39271 (uri (pypi-uri "urwid" version))
39272 (sha256
39273 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
39274
39275(define-deprecated/public-alias python-urwid-3
39276 python-urwid) ;may be removed after 2025-11-12
39277
39278(define-public python-urwid-for-zulip-term
39279 ;; [email protected] requires exact 2.1.2 version otherewise some tests fail
39280 ;; to pass, remove when no longer required.
39281 (hidden-package
39282 (package
39283 (inherit python-urwid)
39284 (version "2.1.2")
39285 (source
39286 (origin
39287 (method url-fetch)
39288 (uri (pypi-uri "urwid" version))
39289 (sha256
39290 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
39291 (arguments
39292 (list #:tests? #f)))))
39293
39294(define-public python-urwid-readline
39295 (package
39296 (name "python-urwid-readline")
39297 (version "0.15.1")
39298 (source
39299 (origin
39300 (method git-fetch)
39301 (uri (git-reference
39302 (url "https://github.com/rr-/urwid_readline")
39303 (commit version)))
39304 (file-name (git-file-name name version))
39305 (sha256
39306 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
39307 (build-system pyproject-build-system)
39308 (native-inputs
39309 (list python-pytest
39310 python-setuptools))
39311 (propagated-inputs
39312 (list python-urwid))
39313 (home-page "https://github.com/rr-/urwid_readline")
39314 (synopsis "Text input widget for urwid that supports readline shortcuts")
39315 (description
39316 "This package provides a textbox edit widget for @code{python-urwid} that
39317supports @code{readline} shortcuts.")
39318 (license license:expat)))
39319
39320(define-public python-urwidgets
39321 (package
39322 (name "python-urwidgets")
39323 (version "0.2.1")
39324 (source
39325 (origin
39326 (method url-fetch)
39327 (uri (pypi-uri "urwidgets" version))
39328 (sha256
39329 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
39330 (build-system pyproject-build-system)
39331 (arguments
39332 (list #:tests? #f)) ;no tests
39333 (native-inputs
39334 (list python-setuptools))
39335 (propagated-inputs
39336 (list python-urwid-2))
39337 (home-page "https://github.com/AnonymouX47/urwidgets")
39338 (synopsis "Collection of widgets for urwid")
39339 (description
39340 "This package provides a collection of widgets for urwid.")
39341 (license license:expat)))
39342
39343(define-public python-urwidtrees
39344 (package
39345 (name "python-urwidtrees")
39346 (version "1.0.4")
39347 (source
39348 (origin
39349 (method git-fetch)
39350 ;; package author intends on distributing via github rather than pypi:
39351 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
39352 (uri (git-reference
39353 (url "https://github.com/pazz/urwidtrees")
39354 (commit version)))
39355 (file-name (git-file-name name version))
39356 (sha256
39357 (base32
39358 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
39359 (build-system pyproject-build-system)
39360 (arguments
39361 '(#:tests? #f)) ; no tests
39362 (propagated-inputs (list python-urwid))
39363 (native-inputs (list python-mock python-setuptools python-wheel))
39364 (home-page "https://github.com/pazz/urwidtrees")
39365 (synopsis "Tree widgets for urwid")
39366 (description "Urwidtrees is a Widget Container API for the @code{urwid}
39367toolkit. Use it to build trees of widgets.")
39368 (license license:gpl3+)))
39369
39370(define-public python-user-agents
39371 (package
39372 (name "python-user-agents")
39373 (version "2.2.0")
39374 (source
39375 (origin
39376 (method git-fetch)
39377 (uri (git-reference
39378 (url "https://github.com/selwin/python-user-agents")
39379 (commit (string-append "v" version))))
39380 (file-name (git-file-name name version))
39381 (sha256
39382 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
39383 (build-system pyproject-build-system)
39384 (arguments
39385 (list #:test-backend #~'unittest))
39386 (native-inputs
39387 (list python-setuptools))
39388 (propagated-inputs
39389 (list python-ua-parser))
39390 (home-page "https://github.com/selwin/python-user-agents")
39391 (synopsis "User Agent strings parsing library")
39392 (description
39393 "A library to identify devices (phones, tablets) and their capabilities by
39394parsing (browser/HTTP) user agent strings.")
39395 (license license:expat)))
39396
39397(define-public python-userpath
39398 (package
39399 (name "python-userpath")
39400 (version "1.9.2")
39401 (source
39402 (origin
39403 (method url-fetch)
39404 (uri (pypi-uri "userpath" version))
39405 (sha256
39406 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
39407 (build-system pyproject-build-system)
39408 (arguments
39409 ;; See https://github.com/ofek/userpath/issues/43.
39410 ;; In Guix, tests try to find the temporary build directory in PATH, but
39411 ;; only the store output is present.
39412 (list #:tests? #f))
39413 (native-inputs (list python-hatchling python-pytest))
39414 (propagated-inputs (list python-click))
39415 (home-page "https://github.com/ofek/userpath")
39416 (synopsis "Add locations to the user's PATH")
39417 (description "This package provides a tool for modifying a user's PATH.")
39418 (license license:expat)))
39419
39420(define-public python-userspacefs
39421 (package
39422 (name "python-userspacefs")
39423 (version "3.1.1")
39424 (source
39425 (origin
39426 (method url-fetch)
39427 (uri (pypi-uri "userspacefs" version))
39428 (sha256
39429 (base32 "0lfzgijza3p4wbrhlf8pzj89j7caj8x6aij78d4izppvq4kfjqs6"))))
39430 (build-system pyproject-build-system)
39431 (arguments
39432 (list #:tests? #f ;no tests
39433 #:phases
39434 #~(modify-phases %standard-phases
39435 (add-after 'unpack 'hardcode-libfuse
39436 (lambda* (#:key inputs #:allow-other-keys)
39437 (substitute* "userspacefs/fusepy.py"
39438 (("^_libfuse_path.*")
39439 (string-append "_libfuse_path = '"
39440 (search-input-file inputs "lib/libfuse.so")
39441 "'\n"))))))))
39442 (inputs (list fuse-2))
39443 (native-inputs (list python-setuptools))
39444 (propagated-inputs (list python-aiohttp python-typing-extensions))
39445 (home-page "https://thelig.ht/code/userspacefs/readme.html")
39446 (synopsis "User-space file systems for Python")
39447 (description
39448 "@code{userspacefs} is a library that allows you to easily write
39449user-space file systems in Python.")
39450 (license license:gpl3+)))
39451
39452(define-public python-utils
39453 (package
39454 (name "python-utils")
39455 (version "3.9.1")
39456 (source
39457 (origin
39458 (method url-fetch)
39459 (uri (pypi-uri "python_utils" version))
39460 (sha256
39461 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
39462 (build-system pyproject-build-system)
39463 (arguments
39464 (list
39465 #:phases
39466 #~(modify-phases %standard-phases
39467 (add-after 'unpack 'fix-pytest-config
39468 (lambda _
39469 ;; Drop test coverage requirements.
39470 (substitute* "pytest.ini"
39471 ((".*--cov.*") "")))))))
39472 (native-inputs
39473 (list python-pytest
39474 python-pytest-asyncio
39475 python-setuptools))
39476 (propagated-inputs
39477 (list python-loguru
39478 python-typing-extensions))
39479 (home-page "https://github.com/WoLpH/python-utils")
39480 (synopsis "Convenient utilities not included with the standard Python install")
39481 (description
39482 "Python Utils is a collection of small Python functions and classes
39483which make common patterns shorter and easier.")
39484 (license license:bsd-2)))
39485
39486(define-public python-uuid6
39487 (package
39488 (name "python-uuid6")
39489 (version "2025.0.1")
39490 (source
39491 (origin
39492 (method git-fetch)
39493 (uri (git-reference
39494 (url "https://github.com/oittaa/uuid6-python")
39495 (commit version)))
39496 (file-name (git-file-name name version))
39497 (sha256
39498 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
39499 (build-system pyproject-build-system)
39500 (arguments
39501 (list
39502 #:test-flags
39503 ;; Test is time based: AssertionError: 13987034766.015247 !=
39504 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
39505 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
39506 (native-inputs
39507 (list python-pytest
39508 python-setuptools
39509 python-setuptools-scm))
39510 (home-page "https://github.com/oittaa/uuid6-python")
39511 (synopsis "Time-based UUID formats which are suited for use as a database key")
39512 (description
39513 "This module extends immutable UUID objects (the UUID class) with the
39514functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
39515@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
39516 (license license:expat)))
39517
39518(define-public python-validate-email
39519 (package
39520 (name "python-validate-email")
39521 (version "1.3")
39522 (source
39523 (origin
39524 (method url-fetch)
39525 (uri (pypi-uri "validate_email" version))
39526 (sha256
39527 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
39528 (build-system pyproject-build-system)
39529 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
39530 (native-inputs
39531 (list python-setuptools))
39532 (home-page "https://github.com/syrusakbary/validate_email")
39533 (synopsis "Verifies if an email address is valid and really exists")
39534 (description
39535 "@code{validate_email} can be used to verify if an email address is
39536valid and really exists.")
39537 (license license:lgpl3+)))
39538
39539(define-public python-validators
39540 (package
39541 (name "python-validators")
39542 (version "0.34.0")
39543 (source
39544 (origin
39545 (method url-fetch)
39546 (uri (pypi-uri "validators" version))
39547 (sha256
39548 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
39549 (build-system pyproject-build-system)
39550 (arguments
39551 (list
39552 ;; python-eth-hash is not packed yet.
39553 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
39554 (native-inputs
39555 (list python-pytest
39556 python-setuptools
39557 python-wheel))
39558 (propagated-inputs
39559 (list python-decorator
39560 ;; python-eth-hash ; optional, not packed yet.
39561 python-six))
39562 (home-page "https://github.com/kvesteri/validators")
39563 (synopsis "Data validation library")
39564 (description
39565 "This package contains validators for different things such as email
39566addresses, IP addresses, URLs, hashes and more. It has been designed to be
39567easy to use and not require defining a schema or form just to validate some
39568input.")
39569 (license license:expat)))
39570
39571(define-public python-valkey
39572 (package
39573 (name "python-valkey")
39574 (version "6.1.1")
39575 (source
39576 (origin
39577 (method git-fetch)
39578 (uri (git-reference
39579 (url "https://github.com/valkey-io/valkey-py")
39580 (commit (string-append "v" version))))
39581 (file-name (git-file-name name version))
39582 (sha256
39583 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
39584 (build-system pyproject-build-system)
39585 (arguments
39586 ;; XXX: A lot of tests fail with ConnectionError
39587 ;; Maybe we need to spawn a valkey server?
39588 (list #:tests? #f))
39589 (native-inputs
39590 (list python-setuptools))
39591 (home-page "https://github.com/valkey-io/valkey-py")
39592 (synopsis "Python client for Valkey")
39593 (description
39594 "This package provides a python client for the @code{Valkey} key-value
39595store, forked from redis-py.")
39596 (license license:expat)))
39597
39598;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
39599;; package.
39600(define-public python-vcversioner
39601 (package
39602 (name "python-vcversioner")
39603 (version "2.16.0.0")
39604 (source
39605 (origin
39606 (method url-fetch)
39607 (uri (pypi-uri "vcversioner" version))
39608 (sha256
39609 (base32
39610 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
39611 (build-system pyproject-build-system)
39612 (arguments
39613 (list #:tests? #f)) ;no tests in PyPI archvie
39614 (native-inputs
39615 (list python-setuptools))
39616 (home-page "https://github.com/habnabit/vcversioner")
39617 (synopsis "Python library for version number discovery")
39618 (description
39619 "Vcversioner is a Python library that inspects tagging information in a
39620variety of version control systems in order to discover version numbers.")
39621 (license license:isc)))
39622
39623(define-public python-vdf
39624 (package
39625 (name "python-vdf")
39626 (version "3.4")
39627 (source
39628 (origin
39629 (method git-fetch) ; no tests in PyPI release
39630 (uri (git-reference
39631 (url "https://github.com/ValvePython/vdf")
39632 (commit (string-append "v" version))))
39633 (file-name (git-file-name name version))
39634 (sha256
39635 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
39636 (build-system pyproject-build-system)
39637 (native-inputs
39638 (list python-pytest python-setuptools))
39639 (home-page "https://github.com/ValvePython/vdf")
39640 (synopsis "Work with Valve's VDF text format")
39641 (description
39642 "This package provides @code{python-vdf}, a library for working with
39643 Valve's VDF text format.")
39644 (license license:expat)))
39645
39646(define-public python-vendetect
39647 (package
39648 (name "python-vendetect")
39649 (version "0.0.3")
39650 (source
39651 (origin
39652 (method url-fetch)
39653 (uri (pypi-uri "vendetect" version))
39654 (sha256
39655 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
39656 (build-system pyproject-build-system)
39657 (propagated-inputs (list python-copydetect python-rich))
39658 (native-inputs (list python-hatchling python-pytest))
39659 (home-page "https://github.com/trailofbits/vendetect")
39660 (synopsis "Detect vendored and copy-pasted code")
39661 (description
39662 "Vendetect helps identify copied or vendored code between repositories,
39663making it easier to detect when code has been copied with or without
39664attribution. It uses similarity detection algorithms to compare code files
39665and highlight matching sections.")
39666 (license license:agpl3+)))
39667
39668;; XXX: No updates since 2017.
39669(define-public python-verboselogs
39670 (package
39671 (name "python-verboselogs")
39672 (version "1.7")
39673 (source
39674 (origin
39675 (method url-fetch)
39676 (uri (pypi-uri "verboselogs" version))
39677 (sha256
39678 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
39679 (build-system pyproject-build-system)
39680 (arguments
39681 (list
39682 #:test-flags
39683 ;; Do not run pylint plugin test, as astroid is an old unsupported
39684 ;; version.
39685 #~(list "-k" "not test_pylint_plugin"
39686 "verboselogs/tests.py")))
39687 (native-inputs
39688 (list python-mock
39689 python-pytest
39690 python-setuptools))
39691 (home-page "https://verboselogs.readthedocs.io")
39692 (synopsis "Verbose logging level for Python's logging module")
39693 (description
39694 "The @code{verboselogs} package extends Python's @code{logging} module to
39695add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
39696 (license license:expat)))
39697
39698(define-public python-verlib2
39699 (package
39700 (name "python-verlib2")
39701 (version "0.3.1")
39702 (source
39703 (origin
39704 (method git-fetch)
39705 (uri (git-reference
39706 (url "https://github.com/pyveci/verlib2")
39707 (commit (string-append "v" version))))
39708 (file-name (git-file-name name version))
39709 (sha256
39710 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
39711 (build-system pyproject-build-system)
39712 (native-inputs
39713 (list python-pretend python-pytest python-pytest-cov python-setuptools))
39714 (home-page "https://github.com/pyveci/verlib2")
39715 (synopsis "Python versioning utilities")
39716 (description
39717 "This package provides a standalone variant of @code{distutils.version} and
39718@code{packaging.version}, without anything else.")
39719 (license license:bsd-2)))
39720
39721;; XXX: No updates since 2018, consider to remove when fails to build, it's a
39722;; leaf package.
39723(define-public python-version
39724 ;; No version tags available in the git repo; just using bare commit instead.
39725 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
39726 (revision "1"))
39727 (package
39728 (name "python-version")
39729 (version (git-version "0.0.2" revision commit))
39730 (source
39731 (origin
39732 (method git-fetch)
39733 (uri (git-reference
39734 (url "https://gitlab.com/halfak/python_version")
39735 (commit commit)))
39736 (file-name (git-file-name name version))
39737 (sha256
39738 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
39739 (build-system pyproject-build-system)
39740 (arguments
39741 (list #:tests? #f)) ;no tests
39742 (native-inputs
39743 (list python-setuptools))
39744 (home-page "https://gitlab.com/halfak/python_version")
39745 (synopsis "Python version checking utility")
39746 (description
39747 "This package provides a simple utility for checking the python version.")
39748 (license license:expat))))
39749
39750(define-public python-versioneer
39751 (package
39752 (name "python-versioneer")
39753 (version "0.29")
39754 (source
39755 (origin
39756 (method url-fetch)
39757 (uri (pypi-uri "versioneer" version))
39758 (sha256
39759 (base32
39760 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
39761 (patches (search-patches "python-versioneer-guix-support.patch"))))
39762 (build-system pyproject-build-system)
39763 (arguments
39764 (list
39765 ;; Minimize test requirements.
39766 #:test-flags
39767 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
39768 "--ignore=test/git/test_invocations.py"
39769 "--ignore=test/test_render.py")
39770 #:phases
39771 #~(modify-phases %standard-phases
39772 (add-before 'check 'pre-check
39773 (lambda _
39774 (invoke "python" "setup.py" "make_versioneer"
39775 "make_long_version_py_git"))))))
39776 (native-inputs
39777 (list git-minimal/pinned
39778 python-pytest
39779 python-setuptools
39780 python-wheel))
39781 (propagated-inputs
39782 (list python-tomli))
39783 (home-page "https://github.com/python-versioneer/python-versioneer")
39784 (synopsis "Version-string management for VCS-controlled trees")
39785 (description
39786 "@code{versioneer} is a tool for managing a recorded version number in
39787distutils-based python projects. The goal is to remove the tedious and
39788error-prone \"update the embedded version string\" step from your release
39789process.")
39790 (license license:unlicense)))
39791
39792(define-public python-verspec
39793 (package
39794 (name "python-verspec")
39795 (version "0.1.0")
39796 (source
39797 (origin
39798 (method url-fetch)
39799 (uri (pypi-uri "verspec" version))
39800 (sha256
39801 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
39802 (build-system pyproject-build-system)
39803 (arguments
39804 (list
39805 #:phases
39806 #~(modify-phases %standard-phases
39807 (add-before 'check 'pre-check
39808 (lambda _
39809 (invoke "touch" "test/__init__.py"))))))
39810 (native-inputs
39811 (list python-pretend
39812 python-pytest
39813 python-setuptools))
39814 (home-page "https://github.com/jimporter/verspec")
39815 (synopsis "Flexible version handling for Python")
39816 (description
39817 "This Python library handles software versions and specifiers. It is
39818adapted from the @code{packaging} package.")
39819 (license (list license:bsd-2 license:asl2.0))))
39820
39821(define-public python-vine
39822 (package
39823 (name "python-vine")
39824 (version "5.1.0")
39825 (source
39826 (origin
39827 (method url-fetch)
39828 (uri (pypi-uri "vine" version))
39829 (sha256
39830 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
39831 (build-system pyproject-build-system)
39832 (arguments
39833 (list
39834 #:test-flags
39835 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
39836 #~(list "-k" (string-join
39837 (list "not test_evaluate"
39838 "test_reverse"
39839 "test_cancel"
39840 "test_throw")
39841 " and not "))))
39842 (native-inputs
39843 (list python-pytest python-setuptools python-wheel))
39844 (home-page "https://github.com/celery/vine")
39845 (synopsis "Promises for Python")
39846 (description
39847 "@code{vine} provides a special implementation of promises in that it can
39848be used both for \"promise of a value\" and lazy evaluation. The biggest
39849upside for this is that everything in a promise can also be a promise,
39850e.g. filters, callbacks and errbacks can all be promises.")
39851 (license license:bsd-3)))
39852
39853(define-public python-virtualenv
39854 (package
39855 (name "python-virtualenv")
39856 (version "20.29.1")
39857 (source
39858 (origin
39859 (method url-fetch)
39860 (uri (pypi-uri "virtualenv" version))
39861 (sha256
39862 (base32
39863 "0dfwnn8i1y33kgxhi4xyhsj4yr5vsin7zf9c343bcbyk700rgf5q"))))
39864 (build-system pyproject-build-system)
39865 (arguments
39866 (list
39867 #:test-flags
39868 #~(list "-k" (string-join
39869 (list
39870 ;; These tests require Internet access.
39871 "not test_seed_link_via_app_data"
39872 ;; AssertionError: assert 'python' in ['python3',
39873 ;; 'python3.11'].
39874 ;;
39875 ;; PythonInfo() returns: 'system_executable':
39876 ;; '/gnu/store/...-python-wrapper-3.11.11/bin/python'
39877 "test_fallback_existent_system_executable")
39878 " and not "))))
39879 (native-inputs
39880 (list python-flaky
39881 python-hatch-vcs
39882 python-hatchling
39883 python-packaging
39884 python-pytest
39885 python-pytest-env
39886 python-pytest-freezer
39887 python-pytest-mock
39888 python-pytest-timeout
39889 python-setuptools
39890 python-time-machine))
39891 (propagated-inputs
39892 (list python-distlib
39893 python-filelock
39894 python-platformdirs))
39895 (home-page "https://virtualenv.pypa.io/")
39896 (synopsis "Virtual Python environment builder")
39897 (description
39898 "Virtualenv is a tool to create isolated Python environments.")
39899 (license license:expat)))
39900
39901(define-public python-virtualenv-for-hatch
39902 ;; For [email protected], remove when no longer required.
39903 (hidden-package
39904 (package
39905 (inherit python-virtualenv)
39906 (version "20.25.3")
39907 (source
39908 (origin
39909 (method url-fetch)
39910 (uri (pypi-uri "virtualenv" version))
39911 (sha256
39912 (base32 "1gj57xqgrg53yfn9ypikgky01hvazxdyl556kwsc7b7avyxm9dbv")))))))
39913
39914;; XXX: No new release since 2021, no updates on default branch since 2023, no
39915;; users in Guix; consider to remove if it keeps failing to build.
39916(define-public python-virtualenv-clone
39917 (package
39918 (name "python-virtualenv-clone")
39919 (version "0.5.7")
39920 (source
39921 (origin
39922 (method git-fetch)
39923 (uri (git-reference
39924 (url "https://github.com/edwardgeorge/virtualenv-clone")
39925 (commit version)))
39926 (file-name (git-file-name name version))
39927 (sha256
39928 (base32 "0p0d1y3axvjfnxlgwjx2374gikc8bmc82g0m7yashihbikh7pcxa"))))
39929 (build-system pyproject-build-system)
39930 (arguments
39931 (list
39932 #:test-flags
39933 #~(list "-k" (string-join
39934 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
39935 ;; 0xba in position 10: invalid start byte
39936 (list "not test_clone_contents"
39937 ;; AssertionError: All versions were skipped.
39938 "test_clone_syspath"
39939 "test_clone_version"
39940 "test_virtualenv_syspath"
39941 "test_virtualenv_versions")
39942 " and not "))))
39943 (native-inputs
39944 (list python-pytest
39945 python-setuptools
39946 python-tomli
39947 python-virtualenv
39948 python-wheel))
39949 (home-page "https://github.com/edwardgeorge/virtualenv-clone")
39950 (synopsis "Clone a non-relocatable virtualenv cleanly")
39951 (description
39952 "Clone non-relocatable virtualenvs without breaking site-packages.")
39953 (license license:expat)))
39954
39955(define-public python-vncdotool
39956 (package
39957 (name "python-vncdotool")
39958 (version "1.2.0")
39959 (source
39960 (origin
39961 (method git-fetch)
39962 (uri (git-reference
39963 (url "http://github.com/sibson/vncdotool")
39964 (commit (string-append "v" version))))
39965 (file-name (git-file-name name version))
39966 (sha256
39967 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
39968 (build-system pyproject-build-system)
39969 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
39970 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
39971 python-setuptools python-wheel))
39972 (home-page "http://github.com/sibson/vncdotool")
39973 (synopsis "Command line VNC client")
39974 (description
39975 "This package provides a Python command line VNC client. It can be
39976useful to automating interactions with virtual machines or hardware devices
39977that are otherwise difficult to control.")
39978 (license license:expat)))
39979
39980(define-public python-vncdotool-bootstrap
39981 (hidden-package
39982 (package/inherit python-vncdotool
39983 (arguments (list #:tests? #f))
39984 (native-inputs (list python-pexpect python-pytest python-setuptools
39985 python-wheel)))))
39986
39987(define-public python-vobject
39988 (package
39989 (name "python-vobject")
39990 (version "0.9.9")
39991 (source (origin
39992 (method url-fetch)
39993 (uri (pypi-uri "vobject" version))
39994 (sha256
39995 (base32
39996 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
39997 (build-system pyproject-build-system)
39998 (arguments
39999 '(;; The test suite relies on some non-portable Windows interfaces. Tests
40000 ;; are rewokred on master's HEAD.
40001 #:tests? #f))
40002 (native-inputs
40003 (list python-setuptools))
40004 (propagated-inputs
40005 (list python-dateutil
40006 python-pytz
40007 python-six)) ;it's dropped on master's HEAD
40008 (home-page "https://py-vobject.github.io/")
40009 (synopsis "Parse and generate vCard and vCalendar files")
40010 (description
40011 "Vobject is intended to be a full featured Python package for parsing
40012and generating vCard and vCalendar files. Currently, iCalendar files are
40013supported and well tested. vCard 3.0 files are supported, and all data should
40014be imported, but only a few components are understood in a sophisticated way.")
40015 (license license:asl2.0)))
40016
40017(define-public python-voluptuous
40018 (package
40019 (name "python-voluptuous")
40020 (version "0.15.2")
40021 (source
40022 (origin
40023 (method url-fetch)
40024 (uri (pypi-uri "voluptuous" version))
40025 (sha256
40026 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
40027 (build-system pyproject-build-system)
40028 (native-inputs
40029 (list python-pytest
40030 python-setuptools))
40031 (home-page "https://github.com/alecthomas/voluptuous")
40032 (synopsis "Python data validation library")
40033 (description
40034 "Voluptuous is a Python data validation library. It is primarily
40035intended for validating data coming into Python as JSON, YAML, etc.")
40036 (license license:bsd-3)))
40037
40038(define-public python-wadler-lindig
40039 (package
40040 (name "python-wadler-lindig")
40041 (version "0.1.7")
40042 (source
40043 (origin
40044 ;; GitHub includes the tests, unlike the PyPI tarball
40045 (method git-fetch)
40046 (uri (git-reference
40047 (url "https://github.com/patrick-kidger/wadler_lindig")
40048 (commit (string-append "v" version))))
40049 (file-name (git-file-name name version))
40050 (sha256
40051 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
40052 (build-system pyproject-build-system)
40053 (native-inputs (list python-hatchling python-pytest python-numpy))
40054 (home-page "https://docs.kidger.site/wadler_lindig")
40055 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
40056 (description
40057 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
40058library for Python that implements a simplified version of the Wadler-Lindig
40059algorithm. Designed to consume less horizontal space than Python's
40060built-in pprint.pprint, it produces compact, well-formatted representations
40061even for complex custom types.")
40062 (license license:asl2.0)))
40063
40064(define-public python-wait-for2
40065 (package
40066 (name "python-wait-for2")
40067 (version "0.4.1")
40068 (source
40069 (origin
40070 (method git-fetch)
40071 (uri (git-reference
40072 (url "https://github.com/Traktormaster/wait-for2")
40073 (commit (string-append "v" version))))
40074 (file-name (git-file-name name version))
40075 (sha256
40076 (base32 "08911yby18sw2y6njn1fqlwvf9j2aay0p5d3wykdlcj36nyxfv1w"))))
40077 (build-system pyproject-build-system)
40078 (native-inputs
40079 (list python-pytest
40080 python-pytest-asyncio
40081 python-setuptools))
40082 (home-page "https://github.com/Traktormaster/wait-for2")
40083 (synopsis "Asyncio wait_for handling simultaneous cancellation and future completion")
40084 (description
40085 "This package provide an alternate implementation of @code{asyncio.wait_for()}
40086introduced in Python 3.12. It handles several edge cases like simultaneous
40087cancellation of wait and completion of future differently and consistently
40088across Python versions 3.7+.")
40089 (license license:asl2.0)))
40090
40091(define-public python-wand
40092 (package
40093 (name "python-wand")
40094 (version "0.7.0")
40095 (source
40096 (origin
40097 (method url-fetch)
40098 (uri (pypi-uri "wand" version))
40099 (sha256
40100 (base32 "1ya00xn57x3lfk6d498lv23hqdq93fmada2v5rskzhj8q8y9i3z4"))))
40101 (build-system pyproject-build-system)
40102 (arguments
40103 (list
40104 #:phases
40105 #~(modify-phases %standard-phases
40106 (add-after 'unpack 'hardcode-lib-path
40107 (lambda _
40108 (substitute* "wand/api.py"
40109 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
40110 (string-append "\"" #$(this-package-input "imagemagick") "\""))
40111 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
40112 "\".Q16\"")))))))
40113 (native-inputs
40114 (list python-setuptools python-pytest python-wheel))
40115 (inputs
40116 (list imagemagick))
40117 (home-page "https://docs.wand-py.org/")
40118 (synopsis "MagickWand API binding for Python")
40119 (description
40120 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
40121 (license license:expat)))
40122
40123(define-public python-wasabi
40124 (package
40125 (name "python-wasabi")
40126 (version "1.1.3")
40127 (source
40128 (origin
40129 (method url-fetch)
40130 (uri (pypi-uri "wasabi" version))
40131 (sha256
40132 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
40133 (build-system pyproject-build-system)
40134 (arguments
40135 (list
40136 #:test-flags
40137 ;; Test requires nbconvert which is huge.
40138 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
40139 (native-inputs
40140 (list python-pytest
40141 python-setuptools))
40142 (propagated-inputs
40143 (list python-colorama))
40144 (home-page "https://github.com/ines/wasabi")
40145 (synopsis "Console printing and formatting toolkit")
40146 (description
40147 "This package provides a lightweight console printing and formatting
40148toolkit for Python.")
40149 (license license:expat)))
40150
40151(define-public python-watchdog
40152 (package
40153 (name "python-watchdog")
40154 (version "6.0.0")
40155 (source
40156 (origin
40157 (method url-fetch)
40158 (uri (pypi-uri "watchdog" version))
40159 (sha256
40160 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
40161 (build-system pyproject-build-system)
40162 (arguments
40163 (list
40164 #:test-flags
40165 #~(list "-k" (string-join
40166 (list "not test_kill_auto_restart"
40167 "test_auto_restart_on_file_change_debounce"
40168 ;; Fails with too many open files.
40169 "test_select_fd")
40170 " and not "))))
40171 (native-inputs
40172 (list python-pytest
40173 python-pytest-cov
40174 python-pytest-timeout
40175 python-setuptools))
40176 (propagated-inputs
40177 (list python-pyyaml))
40178 (home-page "https://github.com/gorakhargosh/watchdog")
40179 (synopsis "File system events monitoring")
40180 (description "This package provides a way to monitor file system events
40181such as a file modification and trigger an action. This is similar to inotify,
40182but portable.")
40183 (license license:asl2.0)))
40184
40185(define-public python-watchfiles
40186 (package
40187 (name "python-watchfiles")
40188 (version "1.1.1")
40189 (source
40190 (origin
40191 (method git-fetch)
40192 (uri (git-reference
40193 (url "https://github.com/samuelcolvin/watchfiles")
40194 (commit (string-append "v" version))))
40195 (file-name (git-file-name name version))
40196 (sha256
40197 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
40198 (build-system pyproject-build-system)
40199 (arguments
40200 (list
40201 ;; Missing file in source.
40202 #:test-flags ''("-k" "not test_docs_examples")
40203 #:imported-modules `(,@%cargo-build-system-modules
40204 ,@%pyproject-build-system-modules)
40205 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
40206 (guix build pyproject-build-system)
40207 (guix build utils))
40208 #:phases
40209 #~(modify-phases %standard-phases
40210 (add-after 'unpack 'prepare-cargo-build-system
40211 (lambda args
40212 (for-each
40213 (lambda (phase)
40214 (format #t "Running cargo phase: ~a~%" phase)
40215 (apply (assoc-ref cargo:%standard-phases phase)
40216 #:cargo-target #$(cargo-triplet)
40217 args))
40218 '(unpack-rust-crates
40219 configure
40220 check-for-pregenerated-files
40221 patch-cargo-checksums))))
40222 (add-after 'build 'install-rust-library
40223 (lambda _
40224 (copy-file "target/release/lib_rust_notify.so"
40225 "watchfiles/_rust_notify.so"))))))
40226 (native-inputs
40227 (append
40228 (list maturin
40229 python-anyio
40230 python-dirty-equals
40231 python-pytest
40232 python-pytest-mock
40233 python-pytest-timeout
40234 rust
40235 `(,rust "cargo"))
40236 (or (and=> (%current-target-system)
40237 (compose list make-rust-sysroot))
40238 '())))
40239 (inputs
40240 (cargo-inputs 'python-watchfiles))
40241 (propagated-inputs
40242 (list python-anyio))
40243 (home-page "https://github.com/samuelcolvin/watchfiles")
40244 (synopsis "Simple, modern file watching and code reload in Python")
40245 (description
40246 "Simple, modern file watching and code reload in Python inspired by
40247@code{watchdog}. Among the differences are a unified approach for each
40248operating systems and an elegant approach to concurrency using threading.")
40249 (license license:expat)))
40250
40251(define-public python-wcwidth
40252 (package
40253 (name "python-wcwidth")
40254 (version "0.2.13")
40255 (source (origin
40256 (method url-fetch)
40257 (uri (pypi-uri "wcwidth" version))
40258 (sha256
40259 (base32
40260 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
40261 (build-system pyproject-build-system)
40262 (native-inputs (list python-pytest
40263 python-pytest-cov
40264 python-setuptools
40265 python-wheel))
40266 (home-page "https://github.com/jquast/wcwidth")
40267 (synopsis "Measure number of terminal column cells of wide-character codes")
40268 (description "Wcwidth measures the number of terminal column cells of
40269wide-character codes. It is useful for those implementing a terminal emulator,
40270or programs that carefully produce output to be interpreted by one. It is a
40271Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
40272specified in POSIX.1-2001 and POSIX.1-2008.")
40273 (license license:expat)))
40274
40275(define-public python-whatever
40276 (package
40277 (name "python-whatever")
40278 (version "0.7")
40279 (source
40280 (origin
40281 (method git-fetch)
40282 (uri (git-reference
40283 (url "https://github.com/Suor/whatever")
40284 (commit version)))
40285 (file-name (git-file-name name version))
40286 (sha256
40287 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
40288 (build-system pyproject-build-system)
40289 (native-inputs
40290 (list python-pytest python-setuptools python-wheel))
40291 (home-page "https://github.com/Suor/whatever")
40292 (synopsis "Make anonymous functions by partial application of operators")
40293 (description "@code{whatever} provides an easy way to make anonymous
40294functions by partial application of operators.")
40295 (license license:bsd-3)))
40296
40297(define-public python-whatthepatch
40298 (package
40299 (name "python-whatthepatch")
40300 (version "1.0.7")
40301 (source
40302 (origin
40303 (method url-fetch)
40304 (uri (pypi-uri "whatthepatch" version))
40305 (sha256
40306 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
40307 (build-system pyproject-build-system)
40308 (native-inputs (list python-pytest python-setuptools))
40309 (home-page "https://github.com/cscorley/whatthepatch")
40310 (synopsis "Patch parsing and application library")
40311 (description
40312 "This package provides a patch parsing and application library.")
40313 (license license:expat)))
40314
40315(define-public python-wheel-filename
40316 (package
40317 (name "python-wheel-filename")
40318 (version "1.4.2")
40319 (source
40320 (origin
40321 (method url-fetch)
40322 (uri (pypi-uri "wheel_filename" version))
40323 (sha256
40324 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
40325 (build-system pyproject-build-system)
40326 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
40327 (home-page "https://github.com/wheelodex/wheel-filename")
40328 (synopsis "Parse wheel filenames")
40329 (description
40330 "This software allows you to verify
40331@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
40332filenames and parse them into their component fields.
40333
40334This package adheres strictly to the standard, with the following
40335exceptions:
40336
40337@itemize @bullet
40338@item
40339Version components may be any sequence of the relevant set of
40340characters; they are not verified for PEP 440 compliance.
40341@item
40342The @file{.whl} file extension is matched case-insensitively.
40343@end itemize")
40344 (license license:expat)))
40345
40346(define-public python-whenever
40347 (package
40348 (name "python-whenever")
40349 (version "0.9.2")
40350 (source
40351 (origin
40352 (method url-fetch)
40353 (uri (pypi-uri "whenever" version))
40354 (sha256
40355 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
40356 (build-system pyproject-build-system)
40357 (arguments
40358 (list
40359 ;; tests: 2170 passed, 3 skipped, 2 warnings
40360 #:phases
40361 #~(modify-phases %standard-phases
40362 ;; Use the pure python version
40363 (add-before 'build 'setenv
40364 (lambda _
40365 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
40366 (add-before 'check 'set-check-environment
40367 (lambda* (#:key inputs #:allow-other-keys)
40368 (setenv "TZ" "UTC")
40369 (setenv "TZDIR"
40370 (search-input-directory inputs
40371 "share/zoneinfo")))))))
40372 (propagated-inputs
40373 (list python-time-machine python-tzdata python-tzlocal))
40374 (native-inputs
40375 (list python-pytest
40376 python-setuptools
40377 tzdata-for-tests))
40378 (home-page "https://whenever.readthedocs.io/")
40379 (synopsis "Modern datetime library for Python")
40380 (description "Modern datetime library for Python. Supports:
40381@itemize
40382@item DST-safe arithmetic
40383@item Nanosecond precision
40384@item Date arithmetic
40385@end itemize")
40386 (license license:expat)))
40387
40388;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
40389(define-public python-whichcraft
40390 (package
40391 (name "python-whichcraft")
40392 (version "0.6.1")
40393 (source
40394 (origin
40395 (method url-fetch)
40396 (uri (pypi-uri "whichcraft" version))
40397 (sha256
40398 (base32
40399 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
40400 (build-system pyproject-build-system)
40401 (native-inputs
40402 (list python-pytest python-setuptools))
40403 (home-page "https://github.com/pydanny/whichcraft")
40404 (synopsis "Cross-platform cross-python shutil.which functionality")
40405 (description
40406 "This package provides a shim of the shutil.which function that's
40407designed to work across multiple versions of Python.")
40408 (license license:bsd-3)))
40409
40410(define-public python-whoosh
40411 ;; XXX: 2.7.4 was placed in 2016 and no longer copatible with how setuptools
40412 ;; parses setup.py, use the latest commit, see:
40413 ;; <https://codeberg.org/guix/guix/issues/3318>,
40414 ;; <https://github.com/whoosh-community/whoosh/issues/561>.
40415 (let ((commit "d9a3fa2a4905e7326c9623c89e6395713c189161")
40416 (revision "0"))
40417 (package
40418 (name "python-whoosh")
40419 (version (git-version "2.7.4" revision commit))
40420 (source
40421 (origin
40422 (method git-fetch)
40423 (uri (git-reference
40424 (url "https://github.com/mchaput/whoosh")
40425 (commit commit)))
40426 (file-name (git-file-name name version))
40427 (sha256
40428 (base32 "1i16229nkggl9qi57kxapbc4f2p2wpr67fswvr97w13839d6dxpp"))))
40429 (build-system pyproject-build-system)
40430 (native-inputs
40431 (list python-pytest python-setuptools))
40432 (propagated-inputs
40433 (list python-cached-property))
40434 (home-page "https://github.com/mchaput/whoosh")
40435 (synopsis "Full text indexing, search, and spell checking library")
40436 (description
40437 "Whoosh is a fast, pure-Python full text indexing, search, and spell
40438checking library.")
40439 (license license:bsd-2))))
40440
40441(define-public python-widgetsnbextension
40442 (package
40443 (name "python-widgetsnbextension")
40444 (version "4.0.14")
40445 (source
40446 (origin
40447 (method url-fetch)
40448 (uri (pypi-uri "widgetsnbextension" version))
40449 (sha256
40450 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
40451 (build-system pyproject-build-system)
40452 (arguments
40453 (list #:tests? #f)) ;no tests in PyPI or git
40454 (native-inputs
40455 (list python-jupyter-packaging
40456 python-setuptools))
40457 (home-page "https://ipython.org")
40458 (synopsis "IPython HTML widgets for Jupyter")
40459 (description "This package provides interactive HTML widgets for Jupyter
40460notebooks.")
40461 (license license:bsd-3)))
40462
40463(define-public python-wrapt
40464 (package
40465 (name "python-wrapt")
40466 (version "2.0.1")
40467 (source
40468 (origin
40469 (method url-fetch)
40470 (uri (pypi-uri "wrapt" version))
40471 (sha256
40472 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
40473 (build-system pyproject-build-system)
40474 (arguments
40475 (list
40476 ;; tests: 562 passed, 1 deselected
40477 #:test-flags
40478 ;; AssertionError: Output did not match expected for
40479 ;; mypy_function_wrapper_fn_t6.py
40480 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
40481 (native-inputs
40482 (list python-mypy ;hard dependencies in tests
40483 python-pytest
40484 python-setuptools))
40485 (home-page "https://github.com/GrahamDumpleton/wrapt")
40486 (synopsis "Module for decorators, wrappers and monkey patching")
40487 (description
40488 "The aim of the wrapt module is to provide a transparent object proxy for
40489 Python, which can be used as the basis for the construction of function
40490 wrappers and decorator functions.")
40491 (license license:bsd-2)))
40492
40493(define-public python-wurlitzer
40494 (package
40495 (name "python-wurlitzer")
40496 (version "3.1.1")
40497 (source
40498 (origin
40499 (method url-fetch)
40500 (uri (pypi-uri "wurlitzer" version))
40501 (sha256
40502 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
40503 (build-system pyproject-build-system)
40504 (arguments
40505 (list #:test-flags #~(list "test.py")))
40506 (native-inputs
40507 (list python-pytest
40508 python-setuptools))
40509 (home-page "https://github.com/minrk/wurlitzer")
40510 (synopsis "Capture C-level output in context managers")
40511 (description
40512 "This library helps to redirect @code{sys.stdout} to a stream or a file
40513while executing some piece of code, including C code running within a Python
40514process.")
40515 (license license:expat)))
40516
40517(define-public python-xattr
40518 (package
40519 (name "python-xattr")
40520 (version "1.2.0")
40521 (source
40522 (origin
40523 (method url-fetch)
40524 (uri (pypi-uri "xattr" version))
40525 (sha256
40526 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
40527 (build-system pyproject-build-system)
40528 (native-inputs
40529 (list python-pytest
40530 python-setuptools))
40531 (propagated-inputs
40532 (list python-cffi))
40533 (home-page "https://github.com/xattr/xattr")
40534 (synopsis "Python wrapper for extended file system attributes")
40535 (description "This package provides a Python wrapper for using extended
40536file system attributes. Extended attributes extend the basic attributes of files
40537and directories in the file system. They are stored as name:data pairs
40538associated with file system objects (files, directories, symlinks, etc).")
40539 (license license:expat)))
40540
40541(define-public python-xdg
40542 (package
40543 (name "python-xdg")
40544 (version "6.0.0")
40545 (source (origin
40546 (method url-fetch)
40547 (uri (pypi-uri "xdg" version))
40548 (sha256
40549 (base32
40550 "14hwk9j5zjc8rvirw95mrb07zdnpjaxjx2mj3rnq8pnlyaa809r4"))))
40551 (build-system pyproject-build-system)
40552 (arguments (list #:tests? #f)) ; No tests in PyPi tarball.
40553 (native-inputs
40554 (list python-poetry-core))
40555 (home-page "https://github.com/srstevenson/xdg-base-dirs")
40556 (synopsis "Variables defined by the XDG Base Directory Specification")
40557 (description "xdg-base-dirs is a Python module that provides functions to
40558return paths to the directories defined by the XDG Base Directory
40559Specification, to save you from duplicating the same snippet of logic in every
40560Python utility you write that deals with user cache, configuration, or data
40561files.")
40562 (license license:isc)))
40563
40564(define-public python-xlib
40565 (package
40566 (name "python-xlib")
40567 (version "0.33")
40568 (source
40569 (origin
40570 (method git-fetch)
40571 (uri (git-reference
40572 (url "https://github.com/python-xlib/python-xlib")
40573 (commit version)))
40574 (file-name (git-file-name name version))
40575 (sha256
40576 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
40577 (build-system pyproject-build-system)
40578 (arguments
40579 `(#:phases
40580 (modify-phases %standard-phases
40581 (add-before 'check 'start-xserver
40582 (lambda* (#:key inputs #:allow-other-keys)
40583 (let ((xorg-server (assoc-ref inputs "xorg-server")))
40584 ;; There must be a running X server and make check doesn't
40585 ;; start one. Therefore we must do it.
40586 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
40587 (setenv "DISPLAY" ":1")))))))
40588 (native-inputs
40589 (list python-mock
40590 python-pytest
40591 python-setuptools
40592 xorg-server))
40593 (propagated-inputs
40594 (list python-six))
40595 (home-page "https://github.com/python-xlib/python-xlib")
40596 (synopsis "Python X11 client library")
40597 (description
40598 "The Python X Library is intended to be a fully functional
40599X client library for Python programs. It is useful to implement
40600low-level X clients. It is written entirely in Python.")
40601 (license license:gpl2+)))
40602
40603(define-public python-xlrd
40604 (package
40605 (name "python-xlrd")
40606 (version "2.0.2")
40607 (source
40608 (origin
40609 (method git-fetch) ;no tests in PyPI archive
40610 (uri (git-reference
40611 (url "https://github.com/python-excel/xlrd")
40612 (commit version)))
40613 (file-name (git-file-name name version))
40614 (sha256
40615 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
40616 (build-system pyproject-build-system)
40617 (native-inputs
40618 (list python-pytest
40619 python-setuptools))
40620 (home-page "https://www.python-excel.org/")
40621 (synopsis "Library for extracting data from Excel files")
40622 (description "This package provides a library to extract data from
40623spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
40624@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
40625Unicode-aware. It is not intended as an end-user tool.")
40626 (license license:bsd-3)))
40627
40628(define-public python-xlsxwriter
40629 (package
40630 (name "python-xlsxwriter")
40631 (version "3.2.0")
40632 (source
40633 (origin
40634 ;; There are no tests in the PyPI tarball.
40635 (method git-fetch)
40636 (uri (git-reference
40637 (url "https://github.com/jmcnamara/XlsxWriter")
40638 (commit (string-append "RELEASE_" version))))
40639 (file-name (git-file-name name version))
40640 (sha256
40641 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
40642 (build-system pyproject-build-system)
40643 (native-inputs
40644 (list python-setuptools
40645 python-wheel))
40646 (home-page "https://github.com/jmcnamara/XlsxWriter")
40647 (synopsis "Python module for creating Excel XLSX files")
40648 (description
40649 "XlsxWriter is a Python module that can be used to write text, numbers,
40650formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
40651 (license license:bsd-2)))
40652
40653;;; Note: this package is unmaintained since 2018 (archived on GitHub).
40654(define-public python-xlwt
40655 (package
40656 (name "python-xlwt")
40657 (version "1.3.0")
40658 (source
40659 (origin
40660 (method url-fetch)
40661 (uri (pypi-uri "xlwt" version))
40662 (sha256
40663 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
40664 (build-system pyproject-build-system)
40665 (native-inputs (list python-pytest python-setuptools python-wheel))
40666 (home-page "https://www.python-excel.org/")
40667 (synopsis "Library for creating spreadsheet Excel files")
40668 (description
40669 "@code{xlwt} is a library for writing data and formatting information to
40670older Excel files (i.e. .xls). The package itself is pure Python with no
40671dependencies on modules or packages outside the standard Python distribution.
40672It is not intended as an end-user tool.")
40673 (license license:bsd-3)))
40674
40675(define-public python-xmldiff
40676 (package
40677 (name "python-xmldiff")
40678 (version "3.0b1")
40679 (source
40680 (origin
40681 (method git-fetch)
40682 (uri (git-reference
40683 (url "https://github.com/Shoobx/xmldiff")
40684 (commit version)))
40685 (file-name (git-file-name name version))
40686 (sha256
40687 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
40688 (build-system pyproject-build-system)
40689 (native-inputs (list python-pytest python-setuptools))
40690 (propagated-inputs (list python-lxml))
40691 (home-page "https://github.com/Shoobx/xmldiff")
40692 (synopsis "Creates diffs of XML files")
40693 (description "This Python tool figures out the differences between two
40694similar XML files, in the same way the @command{diff} utility does it.")
40695 (license license:expat)))
40696
40697(define-public python-xmlsec
40698 (package
40699 (name "python-xmlsec")
40700 (version "1.3.17")
40701 (source
40702 (origin
40703 (method git-fetch)
40704 (uri (git-reference
40705 (url "https://github.com/xmlsec/python-xmlsec")
40706 (commit version)))
40707 (file-name (git-file-name name version))
40708 (sha256
40709 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
40710 (build-system pyproject-build-system)
40711 (arguments
40712 (list
40713 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
40714 #:test-flags #~(list "-n" "1")))
40715 (inputs (list openssl libltdl libxslt libxml2))
40716 (propagated-inputs (list python-lxml xmlsec-openssl))
40717 (native-inputs (list pkg-config
40718 python-lxml
40719 python-pkgconfig
40720 python-pytest
40721 python-pytest-xdist
40722 python-setuptools
40723 python-setuptools-scm
40724 python-wheel))
40725 (home-page "https://github.com/xmlsec/python-xmlsec")
40726 (synopsis "Python bindings for the XML Security Library")
40727 (description "This package provides Python bindings for the XML Security
40728Library.")
40729 (license license:expat)))
40730
40731(define-public python-xmp-toolkit
40732 (package
40733 (name "python-xmp-toolkit")
40734 (version "2.1.0")
40735 (source
40736 (origin
40737 (method url-fetch)
40738 (uri (pypi-uri "python_xmp_toolkit" version))
40739 (sha256
40740 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
40741 (build-system pyproject-build-system)
40742 (arguments
40743 (list
40744 #:phases
40745 #~(modify-phases %standard-phases
40746 (add-after 'unpack 'patch-source
40747 (lambda* (#:key inputs #:allow-other-keys)
40748 (substitute* "libxmp/exempi.py"
40749 (("ctypes.util.find_library\\('exempi'\\)")
40750 (format #f "~s" (search-input-file
40751 inputs "lib/libexempi.so")))))))))
40752 (native-inputs
40753 (list python-pytest
40754 python-flit-core))
40755 (inputs
40756 (list exempi))
40757 (propagated-inputs
40758 (list python-pytz))
40759 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
40760 (synopsis "Python XMP Toolkit for working with metadata")
40761 (description "Python XMP Toolkit is a library for working with XMP
40762metadata, as well as reading/writing XMP metadata stored in many different
40763file formats.
40764
40765Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
40766based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
40767are easily incorporated into the library with a minimum amount of work.")
40768 (license license:bsd-3)))
40769
40770(define-public python-yamllint
40771 (package
40772 (name "python-yamllint")
40773 (version "1.37.1")
40774 (source
40775 (origin
40776 (method url-fetch)
40777 (uri (pypi-uri "yamllint" version))
40778 (sha256
40779 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
40780 (build-system pyproject-build-system)
40781 (arguments
40782 (list #:test-backend #~'unittest))
40783 (native-inputs
40784 (list python-setuptools))
40785 (propagated-inputs
40786 (list python-pathspec python-pyyaml))
40787 (home-page "https://github.com/adrienverge/yamllint")
40788 (synopsis "Linter for YAML files")
40789 (description
40790 "Yamllint is a linter for YAML files. yamllint does not only check for
40791syntax validity, but for weirdnesses like key repetition and cosmetic problems
40792such as lines length, trailing spaces, indentation, etc.")
40793 (license license:gpl3+)))
40794
40795(define-public python-yamlloader
40796 (package
40797 (name "python-yamlloader")
40798 (version "1.6.0")
40799 (source
40800 (origin
40801 (method url-fetch)
40802 (uri (pypi-uri "yamlloader" version))
40803 (sha256
40804 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
40805 (build-system pyproject-build-system)
40806 (arguments
40807 (list #:test-backend #~'unittest
40808 #:test-flags #~(list "discover" "-v")))
40809 (native-inputs
40810 (list python-hatch-vcs
40811 python-hatchling
40812 python-hypothesis
40813 python-pytest))
40814 (propagated-inputs
40815 (list python-pyyaml))
40816 (home-page "https://github.com/Phynix/yamlloader")
40817 (synopsis "Ordered YAML loader and dumper for PyYAML")
40818 (description
40819 "This package provides loaders and dumpers for PyYAML. Currently, an
40820OrderedDict loader/dumper is implemented, allowing to keep items order when
40821loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
40822dicts are supported and are the default items to be loaded to. As of Python
408233.7 preservation of insertion order is a language feature of regular dicts.)
40824It was originally mirrored from
40825@url{https://github.com/fmenabe/python-yamlordereddictloader,
40826yamlordereddict}.")
40827 (license license:expat)))
40828
40829;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
40830;; an improved version of this library with unit tests, performance
40831;; improvements (by providing access to the C implementation of PyYAML) and is
40832;; more actively developed.
40833(define-public python-yamlordereddictloader
40834 (package
40835 (name "python-yamlordereddictloader")
40836 (version "0.4.2")
40837 (source
40838 (origin
40839 (method git-fetch)
40840 (uri (git-reference
40841 (url "https://github.com/fmenabe/python-yamlordereddictloader")
40842 (commit version)))
40843 (file-name (git-file-name name version))
40844 (sha256
40845 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
40846 (build-system pyproject-build-system)
40847 (arguments
40848 (list #:tests? #f)) ;no tests
40849 (native-inputs
40850 (list python-setuptools))
40851 (propagated-inputs
40852 (list python-pyyaml))
40853 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
40854 (synopsis "Loader and a dumper for PyYAML")
40855 (description
40856 "yamlordereddictloader is a Python package that provides a loader and a
40857dumper for PyYAML allowing to keep items order when loading a file (by putting
40858them in OrderedDict objects) and to manage OrderedDict objects when dumping to
40859a file.")
40860 (license license:expat)))
40861
40862(define-public python-yapf
40863 (package
40864 (name "python-yapf")
40865 (version "0.43.0")
40866 (source
40867 (origin
40868 (method url-fetch)
40869 (uri (pypi-uri "yapf" version))
40870 (sha256
40871 (base32
40872 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
40873 (build-system pyproject-build-system)
40874 (propagated-inputs
40875 (list python-platformdirs python-tomli))
40876 (native-inputs
40877 (list python-pytest python-setuptools python-wheel))
40878 (home-page "https://github.com/google/yapf")
40879 (synopsis "Formatter for Python code")
40880 (description "YAPF is a formatter for Python code. It's based off of
40881@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
40882takes the code and reformats it to the best formatting that conforms to the
40883style guide, even if the original code didn't violate the style guide.")
40884 (license license:asl2.0)))
40885
40886(define-public python-yapsy
40887 (package
40888 (name "python-yapsy")
40889 (version "1.12.2")
40890 (source
40891 (origin
40892 (method url-fetch)
40893 (uri (pypi-uri "Yapsy" version))
40894 (sha256
40895 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
40896 (build-system pyproject-build-system)
40897 (arguments
40898 (list #:test-backend #~'unittest))
40899 (native-inputs
40900 (list python-setuptools))
40901 (home-page "https://yapsy.sourceforge.net")
40902 (synopsis "Simple plugin system for Python applications")
40903 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
40904implementing the core mechanisms needed to build a plugin system into a wider
40905application.
40906
40907The main purpose is to depend only on Python's standard libraries and to
40908implement only the basic functionalities needed to detect, load and keep track
40909of several plugins.")
40910 (license license:bsd-3)))
40911
40912(define-public python-yaspin
40913 (package
40914 (name "python-yaspin")
40915 (version "3.2.0")
40916 (source
40917 (origin
40918 (method url-fetch)
40919 (uri
40920 (pypi-uri "yaspin" version))
40921 (sha256
40922 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
40923 (build-system pyproject-build-system)
40924 ;; tests: 3007 passed, 1758 skipped
40925 (native-inputs
40926 (list python-poetry-core
40927 python-pytest
40928 python-pytest-mock))
40929 (propagated-inputs
40930 (list python-termcolor-next))
40931 (home-page "https://github.com/pavdmyt/yaspin")
40932 (synopsis "Yet Another Terminal Spinner")
40933 (description "Yaspin provides a terminal spinner to indicate the progress
40934during long operations.")
40935 (license license:expat)))
40936
40937(define-public python-yattag
40938 (package
40939 (name "python-yattag")
40940 (version "1.16.1")
40941 (source
40942 (origin
40943 (method url-fetch)
40944 (uri (pypi-uri "yattag" version))
40945 (sha256
40946 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
40947 (build-system pyproject-build-system)
40948 (native-inputs
40949 (list python-pytest
40950 python-setuptools
40951 python-wheel))
40952 (home-page "https://www.yattag.org/")
40953 (synopsis "HTML or XML generator for Python")
40954 (description
40955 "Yattag is a Python library for generating HTML or XML in a pythonic
40956way.")
40957 (license license:lgpl2.1)))
40958
40959(define-public python-yq
40960 (package
40961 (name "python-yq")
40962 (version "3.4.3")
40963 (source
40964 (origin
40965 (method url-fetch)
40966 (uri (pypi-uri "yq" version))
40967 (sha256
40968 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
40969 (build-system pyproject-build-system)
40970 (arguments
40971 (list
40972 #:test-backend #~'custom
40973 #:test-flags #~(list "test/test.py" "-v")
40974 #:phases
40975 #~(modify-phases %standard-phases
40976 (add-after 'unpack 'patch
40977 (lambda _
40978 (substitute* "yq/__init__.py"
40979 (("Popen\\(\\[\"jq")
40980 (string-append
40981 "Popen([\""
40982 #$(this-package-input "jq") "/bin/jq"))))))))
40983 (native-inputs
40984 (list python-hatchling
40985 python-hatch-vcs))
40986 (inputs
40987 (list jq))
40988 (propagated-inputs
40989 (list python-argcomplete
40990 python-pyyaml
40991 python-tomlkit
40992 python-xmltodict))
40993 (home-page "https://github.com/kislyuk/yq")
40994 (synopsis "Command-line YAML/XML processor")
40995 (description
40996 "This package provides @command{yq} and @command{xq} for processing YAML
40997and XML respectively. The processing is done through @command{jq},
40998@command{jq} filters can be used to process the data as it passes through.")
40999 (license license:asl2.0)))
41000
41001(define-public python-yte
41002 (package
41003 (name "python-yte")
41004 (version "1.8.1") ;TODO higher versions depend on uv_build
41005 (source
41006 (origin
41007 (method git-fetch)
41008 (uri (git-reference
41009 (url "https://github.com/koesterlab/yte")
41010 (commit (string-append "v" version))))
41011 (sha256
41012 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
41013 (build-system pyproject-build-system)
41014 (arguments
41015 (list
41016 #:test-flags #~(list "tests.py")
41017 #:phases
41018 '(modify-phases %standard-phases
41019 (add-after 'unpack 'set-HOME
41020 (lambda _ (setenv "HOME" "/tmp"))))))
41021 (propagated-inputs (list python-dpath python-plac python-pyyaml))
41022 (native-inputs (list python-numpy python-poetry-core python-pytest))
41023 (home-page "https://github.com/koesterlab/yte")
41024 (synopsis "YAML template engine with Python expressions")
41025 (description
41026 "This package provides a YAML template engine with Python expressions.")
41027 (license license:expat)))
41028
41029(define-public python-zarr
41030 (package
41031 (name "python-zarr")
41032 (version "2.18.7")
41033 (source
41034 (origin
41035 (method url-fetch)
41036 (uri (pypi-uri "zarr" version))
41037 (sha256
41038 (base32
41039 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
41040 (build-system pyproject-build-system)
41041 (arguments
41042 (list
41043 #:test-flags
41044 #~(list "--numprocesses" (number->string (parallel-job-count))
41045 ;; This tests are flaky. The pass several times on my laptop
41046 ;; but occasionally fail. They fail pretty reliably on the
41047 ;; build farm.
41048 "-k" (string-append "not test_lazy_loader and not open_array"
41049 ;; File not found.
41050 " and not test_filesystem_path"))
41051 #:phases
41052 #~(modify-phases %standard-phases
41053 (add-before 'build 'set-version
41054 (lambda _
41055 (substitute* "pyproject.toml"
41056 (("^version_file.*") "")
41057 (("dynamic = \\[\"version\"\\]")
41058 (string-append "version = \"" #$version "\"")))))
41059 (add-after 'unpack 'disable-service-tests
41060 (lambda _
41061 (setenv "ZARR_TEST_ABS" "0")
41062 (setenv "ZARR_TEST_MONGO" "0")
41063 (setenv "ZARR_TEST_REDIS" "0"))))))
41064 (propagated-inputs
41065 (list python-asciitree
41066 python-fasteners
41067 python-numcodecs
41068 python-numpy))
41069 (native-inputs
41070 (list python-pytest
41071 python-pytest-xdist
41072 python-setuptools
41073 python-wheel))
41074 (home-page "https://github.com/zarr-developers/zarr-python")
41075 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
41076 (description
41077 "This package provides an implementation of chunked, compressed,
41078N-dimensional arrays for Python.")
41079 (license license:expat)))
41080
41081(define-public python-zeroc-ice
41082 (package
41083 (name "python-zeroc-ice")
41084 (version "3.7.10.1")
41085 (source (origin
41086 (method url-fetch)
41087 (uri (pypi-uri "zeroc-ice" version))
41088 (sha256
41089 (base32
41090 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
41091 (build-system pyproject-build-system)
41092 (arguments
41093 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
41094 ;; tag.
41095 ;;
41096 ;; See:
41097 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
41098 ;; - File: <ice/refs/heads/main/python/allTests.py>
41099 (list #:tests? #f))
41100 (inputs (list openssl))
41101 (native-inputs (list python-setuptools))
41102 (home-page "https://zeroc.com")
41103 (synopsis "RPC framework")
41104 (description
41105 "Ice is a comprehensive RPC framework. Ice helps you network your
41106software by taking care of all interactions with low-level network programming
41107interfaces.")
41108 (license license:gpl2)))
41109
41110;; Package variant to build [email protected]
41111(define-public python-zeroc-ice-3.6
41112 (package
41113 (inherit python-zeroc-ice)
41114 (version "3.6.5")
41115 (source (origin
41116 (method url-fetch)
41117 (uri (pypi-uri "zeroc-ice" version))
41118 (sha256
41119 (base32
41120 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
41121 (patches
41122 (search-patches
41123 "python-zeroc-ice-3.6.5-python-3.11-support.patch"))))
41124 (arguments
41125 (substitute-keyword-arguments (package-arguments python-zeroc-ice)
41126 ((#:phases phases #~%standard-phases)
41127 #~(modify-phases #$phases
41128 (add-before 'build 'relax-gcc-14-strictness
41129 (lambda _
41130 (setenv "CFLAGS"
41131 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
41132
41133(define-public python-zeroconf
41134 (package
41135 (name "python-zeroconf")
41136 (version "0.38.1")
41137 (source
41138 (origin
41139 (method git-fetch)
41140 (uri (git-reference
41141 (url "https://github.com/jstasiak/python-zeroconf")
41142 (commit version)))
41143 (file-name (git-file-name name version))
41144 (sha256
41145 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
41146 (build-system pyproject-build-system)
41147 (arguments
41148 (list
41149 #:test-flags
41150 #~(list
41151 "-k" (string-append
41152 ;; XXX: Despite asyncio, this test fails.
41153 "not test_run_coro_with_timeout and not "
41154 ;; XXX: Networking isn't available.
41155 (string-join
41156 (list "test_integration_with_listener_ipv6"
41157 "test_launch_and_close_v4_v6"
41158 "test_launch_and_close_context_manager"
41159 "test_launch_and_close"
41160 "test_close_multiple_times")
41161 " and not ")))))
41162 (native-inputs
41163 (list python-pytest python-pytest-asyncio python-setuptools))
41164 (propagated-inputs
41165 (list python-ifaddr))
41166 (home-page "https://github.com/jstasiak/python-zeroconf")
41167 (synopsis "Pure Python mDNS service discovery")
41168 (description "Pure Python multicast DNS (mDNS) service discovery library
41169(Bonjour/Avahi compatible).")
41170 (license license:lgpl2.1+)))
41171
41172(define-public python-zict
41173 (package
41174 (name "python-zict")
41175 (version "3.0.0")
41176 (source
41177 (origin
41178 (method url-fetch)
41179 (uri (pypi-uri "zict" version))
41180 (sha256
41181 (base32
41182 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
41183 (build-system pyproject-build-system)
41184 (arguments
41185 (list
41186 #:test-flags
41187 ;; This uses "importorskip", but it won't skip.
41188 '(list "--ignore=tests/test_lmdb.py")))
41189 (propagated-inputs
41190 (list python-heapdict))
41191 (native-inputs
41192 (list python-pytest
41193 python-pytest-asyncio
41194 python-pytest-repeat
41195 python-pytest-timeout
41196 python-setuptools
41197 python-wheel))
41198 (home-page "https://zict.readthedocs.io/en/latest/")
41199 (synopsis "Composable mutable mapping tools")
41200 (description "This package provides abstract @code{MutableMapping} classes
41201that consume and build on other @code{MutableMappings}. Several of these can
41202be composed with one another to form intuitive interfaces over complex storage
41203systems policies.")
41204 (license license:bsd-3)))
41205
41206(define-public python-zipfly
41207 (package
41208 (name "python-zipfly")
41209 (version "6.0.5")
41210 (source
41211 (origin
41212 (method url-fetch)
41213 (uri (pypi-uri "zipfly" version))
41214 (sha256
41215 (base32
41216 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
41217 (build-system pyproject-build-system)
41218 (arguments
41219 (list #:test-backend #~'unittest))
41220 (native-inputs (list python-setuptools))
41221 (home-page "https://github.com/sandes/zipfly")
41222 (synopsis "Zip archive generator")
41223 (description "ZipFly is a zip archive generator. It was created to
41224generate very large zip archives for immediate sending out to clients, or
41225for writing large zip archives without memory inflation.")
41226 (license license:expat)))
41227
41228(define-public python-zipstream-new
41229 (package
41230 (name "python-zipstream-new")
41231 (version "1.1.8")
41232 (source
41233 (origin
41234 (method git-fetch) ; no tests in PyPI release
41235 (uri (git-reference
41236 (url "https://github.com/arjan-s/python-zipstream")
41237 (commit (string-append "v" version))))
41238 (file-name (git-file-name name version))
41239 (sha256
41240 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
41241 (build-system pyproject-build-system)
41242 (arguments
41243 (list #:test-backend #~'unittest))
41244 (native-inputs (list python-setuptools))
41245 (home-page "https://github.com/arjan-s/python-zipstream")
41246 (synopsis "Zipfile generator that takes input files as well as streams")
41247 (description "@code{zipstream.py} is a zip archive generator based on
41248@code{zipfile.py}. It was created to generate a zip file generator for
41249streaming. This is beneficial for when you want to provide a downloadable
41250archive of a large collection of regular files, which would be infeasible
41251to generate the archive prior to downloading or of a very large file that
41252you do not want to store entirely on disk or on memory.")
41253 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
41254 (license license:gpl3)))
41255
41256(define-public python2-dbus
41257 (package/inherit python-dbus-1.2
41258 (name "python2-dbus")
41259 (inputs `(("python" ,python-2)
41260 ("libxcrypt" ,libxcrypt) ;required by Python.h
41261 ,@(alist-delete "python"
41262 (package-inputs python-dbus-1.2))))
41263 (arguments
41264 `(#:configure-flags '("PYTHON_VERSION=2")))))
41265
41266(define-public python-yamlcore-0.0.2
41267 ;; This is a pinned version dependency for librelane
41268 (package
41269 (name "python-yamlcore")
41270 (version "0.0.2")
41271 (source (origin
41272 (method url-fetch)
41273 (uri (pypi-uri "yamlcore" version))
41274 (sha256
41275 (base32
41276 "0vwjiryrx58ycmlbv668izswda4jmdpw7g9cn6bsy5my3iabjblb"))))
41277 (build-system pyproject-build-system)
41278 (native-inputs (list python-setuptools))
41279 (inputs (list python-pyyaml))
41280 (home-page "https://github.com/perlpunk/pyyaml-core")
41281 (synopsis "YAML 1.2 support for PyYAML")
41282 (description "This module can be used on top of PyYAML to load YAML 1.2
41283files.")
41284 (license license:expat)))
41285
41286(define-public shrinkwrap
41287 (package
41288 (name "shrinkwrap")
41289 (version "0.1.0")
41290 (source
41291 (origin
41292 (method git-fetch)
41293 (uri (git-reference
41294 (url "https://github.com/fzakaria/shrinkwrap")
41295 (commit (string-append "v" version))))
41296 (file-name (git-file-name name version))
41297 (sha256
41298 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
41299 (build-system pyproject-build-system)
41300 (native-inputs
41301 (list python-click
41302 python-poetry-core
41303 python-pypa-build
41304 python-pytest))
41305 (inputs (list python-lief python-sh))
41306 (home-page "https://github.com/fzakaria/shrinkwrap")
41307 (synopsis "Emboss needed dependencies on the top level executable")
41308 (description
41309 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
41310shared objects, and lift them up to the executable referenced by absolute
41311path.")
41312 (license license:expat)))
41313
41314(define-public staticsite
41315 (package
41316 (name "staticsite")
41317 (version "2.5")
41318 (source
41319 (origin
41320 (method git-fetch)
41321 (uri (git-reference
41322 (url "https://github.com/spanezz/staticsite")
41323 (commit (string-append "v" version))))
41324 (file-name (git-file-name name version))
41325 (sha256
41326 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
41327 (build-system pyproject-build-system)
41328 (arguments
41329 (list
41330 #:phases
41331 #~(modify-phases %standard-phases
41332 (add-after 'unpack 'use-themes-in-output
41333 (lambda _
41334 (substitute* "staticsite/global_settings.py"
41335 (("/usr/share/staticsite") #$output))))
41336 (add-after 'install 'install-themes
41337 (lambda _
41338 (let ((themedir (string-append #$output "/themes")))
41339 (copy-recursively "themes" themedir)))))))
41340 (native-inputs
41341 (list python-hatchling
41342 python-pytest))
41343 (inputs
41344 (list perl-image-exiftool
41345 python-dateutil
41346 python-docutils
41347 python-jinja2
41348 python-markdown
41349 python-pillow
41350 python-pytz
41351 python-pyyaml
41352 python-ruamel.yaml
41353 python-slugify
41354 python-toml
41355 tzdata-for-tests))
41356 (home-page "https://github.com/spanezz/staticsite")
41357 (synopsis "Static site generator")
41358 (description
41359 "Statistic is a static site generator based on Markdown and Jinja2.")
41360 (license (list license:gpl3+ license:expat))))
41361
41362;;;
41363;;; Avoid adding new packages to the end of this file. To reduce the chances
41364;;; of a merge conflict, place them above by existing packages with similar
41365;;; functionality or similar names.
41366;;;