projects/guix·blob bootstrap-team · refs

42061 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 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-2025 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 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 © 2024 Timothee Mathieu <[email protected]>
158;;; Copyright © 2024 Ian Eure <[email protected]>
159;;; Copyright © 2024 Adriel Dumas--Jondeau <[email protected]>
160;;; Copyright © 2024 Navid Afkhami <[email protected]>
161;;; Copyright © 2024 TakeV <[email protected]>
162;;; Copyright © 2024, 2025 David Elsing <[email protected]>
163;;; Copyright © 2024 Rick Huijzer <[email protected]>
164;;; Copyright © 2024 Peter Kannewitz <[email protected]>
165;;; Copyright © 2024 Aaron Covrig <[email protected]>
166;;; Copyright © 2024 Markku Korkeala <[email protected]>
167;;; Copyright © 2025 Jordan Moore <[email protected]>
168;;; Copyright © 2025 Dariqq <[email protected]>
169;;; Copyright © 2025 Nguyễn Gia Phong <[email protected]>
170;;; Copyright © 2025, Cayetano Santos <[email protected]>
171;;; Copyright © 2025 Jake Forster <[email protected]>
172;;; Copyright © 2025 Luis Felipe López Acevedo <[email protected]>
173;;; Copyright © 2025 Josep Bigorra <[email protected]>
174;;; Copyright © 2025 Matthias Riße <[email protected]>
175;;; Copyright © 2025 Ghislain Vaillant <[email protected]>
176;;; Copyright © 2025 Allan Adair <[email protected]>
177;;; Copyright © 2025-2026 Hennadii Stepanov <[email protected]>
178;;; Copyright © 2025 Luca Kredel <[email protected]>
179;;; Copyright © 2025 Isidor Zeuner <[email protected]>
180;;; Copyright © 2025 Andy Tai <[email protected]>
181;;;
182;;; This file is part of GNU Guix.
183;;;
184;;; GNU Guix is free software; you can redistribute it and/or modify it
185;;; under the terms of the GNU General Public License as published by
186;;; the Free Software Foundation; either version 3 of the License, or (at
187;;; your option) any later version.
188;;;
189;;; GNU Guix is distributed in the hope that it will be useful, but
190;;; WITHOUT ANY WARRANTY; without even the implied warranty of
191;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
192;;; GNU General Public License for more details.
193;;;
194;;; You should have received a copy of the GNU General Public License
195;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
196
197(define-module (gnu packages python-xyz)
198 #:use-module ((guix licenses) #:prefix license:)
199 #:use-module (gnu packages)
200 #:use-module (gnu packages adns)
201 #:use-module (gnu packages algebra)
202 #:use-module (gnu packages attr)
203 #:use-module (gnu packages autotools)
204 #:use-module (gnu packages backup)
205 #:use-module (gnu packages base)
206 #:use-module (gnu packages bash)
207 #:use-module (gnu packages bdw-gc)
208 #:use-module (gnu packages bioinformatics)
209 #:use-module (gnu packages build-tools)
210 #:use-module (gnu packages nss)
211 #:use-module (gnu packages check)
212 #:use-module (gnu packages cmake)
213 #:use-module (gnu packages compression)
214 #:use-module (gnu packages c)
215 #:use-module (gnu packages cpp)
216 #:use-module (gnu packages crypto)
217 #:use-module (gnu packages databases)
218 #:use-module (gnu packages dbm)
219 #:use-module (gnu packages dictionaries)
220 #:use-module (gnu packages digest)
221 #:use-module (gnu packages django)
222 #:use-module (gnu packages djvu)
223 #:use-module (gnu packages documentation)
224 #:use-module (gnu packages duckdb)
225 #:use-module (gnu packages elf)
226 #:use-module (gnu packages emulators)
227 #:use-module (gnu packages enchant)
228 #:use-module (gnu packages file)
229 #:use-module (gnu packages fonts)
230 #:use-module (gnu packages fontutils)
231 #:use-module (gnu packages freedesktop)
232 #:use-module (gnu packages gcc)
233 #:use-module (gnu packages gdb)
234 #:use-module (gnu packages geo)
235 #:use-module (gnu packages ghostscript)
236 #:use-module (gnu packages glib)
237 #:use-module (gnu packages gnome)
238 #:use-module (gnu packages gnupg)
239 #:use-module (gnu packages graphviz)
240 #:use-module (gnu packages gsasl)
241 #:use-module (gnu packages gtk)
242 #:use-module (gnu packages guile-xyz)
243 #:use-module (gnu packages haskell-xyz)
244 #:use-module (gnu packages icu4c)
245 #:use-module (gnu packages image)
246 #:use-module (gnu packages image-processing)
247 #:use-module (gnu packages imagemagick)
248 #:use-module (gnu packages inkscape)
249 #:use-module (gnu packages iso-codes)
250 #:use-module (gnu packages java)
251 #:use-module (gnu packages javascript)
252 #:use-module (gnu packages jupyter)
253 #:use-module (gnu packages kerberos)
254 #:use-module (gnu packages less)
255 #:use-module (gnu packages libevent)
256 #:use-module (gnu packages libffi)
257 #:use-module (gnu packages libusb)
258 #:use-module (gnu packages linux)
259 #:use-module (gnu packages llvm)
260 #:use-module (gnu packages machine-learning)
261 #:use-module (gnu packages man)
262 #:use-module (gnu packages markup)
263 #:use-module (gnu packages maths)
264 #:use-module (gnu packages messaging)
265 #:use-module (gnu packages monitoring)
266 #:use-module (gnu packages multiprecision)
267 #:use-module (gnu packages ncurses)
268 #:use-module (gnu packages networking)
269 #:use-module (gnu packages ninja)
270 #:use-module (gnu packages node)
271 #:use-module (gnu packages openstack)
272 #:use-module (gnu packages pcre)
273 #:use-module (gnu packages pdf)
274 #:use-module (gnu packages perl)
275 #:use-module (gnu packages photo)
276 #:use-module (gnu packages pkg-config)
277 #:use-module (gnu packages protobuf)
278 #:use-module (gnu packages python)
279 #:use-module (gnu packages python-build)
280 #:use-module (gnu packages python-check)
281 #:use-module (gnu packages python-compression)
282 #:use-module (gnu packages python-crypto)
283 #:use-module (gnu packages python-science)
284 #:use-module (gnu packages python-web)
285 #:use-module (gnu packages qt)
286 #:use-module (gnu packages rdf)
287 #:use-module (gnu packages readline)
288 #:use-module (gnu packages regex)
289 #:use-module (gnu packages rpc)
290 #:use-module (gnu packages rust)
291 #:use-module (gnu packages rust-apps)
292 #:use-module (gnu packages scanner)
293 #:use-module (gnu packages search)
294 #:use-module (gnu packages serialization)
295 #:use-module (gnu packages shells)
296 #:use-module (gnu packages sphinx)
297 #:use-module (gnu packages ssh)
298 #:use-module (gnu packages statistics)
299 #:use-module (gnu packages tcl)
300 #:use-module (gnu packages tex)
301 #:use-module (gnu packages texinfo)
302 #:use-module (gnu packages time)
303 #:use-module (gnu packages tls)
304 #:use-module (gnu packages tree-sitter)
305 #:use-module (gnu packages version-control)
306 #:use-module (gnu packages video)
307 #:use-module (gnu packages web)
308 #:use-module (gnu packages wxwidgets)
309 #:use-module (gnu packages xml)
310 #:use-module (gnu packages xdisorg)
311 #:use-module (gnu packages xorg)
312 #:use-module (guix packages)
313 #:use-module (guix build-system cargo)
314 #:use-module (guix build-system cmake)
315 #:use-module (guix build-system copy)
316 #:use-module (guix build-system gnu)
317 #:use-module (guix build-system meson)
318 #:use-module (guix build-system pyproject)
319 #:use-module (guix build-system python)
320 #:use-module (guix deprecation)
321 #:use-module (guix download)
322 #:use-module (guix hg-download)
323 #:use-module (guix git-download)
324 #:use-module (guix gexp)
325 #:use-module (guix utils)
326 #:use-module (ice-9 match)
327 #:use-module (srfi srfi-1)
328 #:use-module (srfi srfi-26))
329
330(define-public python-anaconda-cli-base
331 (package
332 (name "python-anaconda-cli-base")
333 (version "0.5.4")
334 (source
335 (origin
336 (method url-fetch)
337 (uri (pypi-uri "anaconda_cli_base" version))
338 (sha256
339 (base32 "01kspqfyqhzlb3hkxrvdlasch5ai87lizn6yz4g25ff4x7k5b4qx"))))
340 (build-system pyproject-build-system)
341 (arguments
342 (list
343 #:phases
344 #~(modify-phases %standard-phases
345 (add-after 'unpack 'fix-pytest-config
346 (lambda _
347 (substitute* "pyproject.toml"
348 ((".*--cov.*") "")))))))
349 (native-inputs
350 (list python-hatch-vcs
351 python-hatchling
352 python-pytest
353 python-pytest-mock
354 python-setuptools-scm))
355 (propagated-inputs
356 (list python-click
357 python-packaging
358 python-pydantic-settings
359 python-readchar
360 python-rich
361 python-tomli
362 python-typer))
363 (home-page "https://anaconda.github.io/anaconda-cli-base/")
364 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
365 (description
366 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
367 (license license:bsd-3)))
368
369(define-public python-annexremote
370 (package
371 (name "python-annexremote")
372 (version "1.6.6")
373 (source
374 (origin
375 (method git-fetch)
376 (uri (git-reference
377 (url "https://github.com/Lykos153/AnnexRemote")
378 (commit (string-append "v" version))))
379 (file-name (git-file-name name version))
380 (sha256
381 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
382 (build-system pyproject-build-system)
383 (native-inputs
384 (list python-pytest
385 python-setuptools
386 python-setuptools-scm))
387 (home-page "https://github.com/Lykos153/AnnexRemote")
388 (synopsis "Helper module to easily develop git-annex special remotes")
389 (description
390 "This package provides a helper module to develop special remotes for
391git-annex. AnnexRemote implements the line-based external special remote
392protocol of git-annex, while leaving the behavior of the remote up to the
393user.")
394 (license license:gpl3)))
395
396(define-public python-annotated-doc
397 (package
398 (name "python-annotated-doc")
399 (version "0.0.4")
400 (source
401 (origin
402 (method git-fetch)
403 (uri (git-reference
404 (url "https://github.com/fastapi/annotated-doc")
405 (commit version)))
406 (file-name (git-file-name name version))
407 (sha256
408 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
409 (build-system pyproject-build-system)
410 (native-inputs
411 (list python-pytest
412 python-pdm-backend))
413 (home-page "https://github.com/fastapi/annotated-doc")
414 (synopsis "Annotated for some Python objects")
415 (description
416 "This package implements a funtionality for document parameters, class
417attributes, return types, and variables inline, with
418Annotated.")
419 (license license:expat)))
420
421(define-public python-archspec
422 (package
423 (name "python-archspec")
424 (version "0.2.5")
425 (source
426 (origin
427 (method git-fetch)
428 (uri (git-reference
429 (url "https://github.com/archspec/archspec")
430 (commit (string-append "v" version))
431 (recursive? #t)))
432 (file-name (git-file-name name version))
433 (sha256
434 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
435 (build-system pyproject-build-system)
436 (native-inputs
437 (list python-jsonschema
438 python-poetry-core
439 python-pytest))
440 (home-page "https://github.com/archspec/archspec")
441 (synopsis "Library to query system architecture")
442 (description
443 "Archspec offers human-readable labels for system architecture aspects.
444These aspects include CPU, network fabrics, etc. In addition, it offers
445APIs to detect, query, and compare them.")
446 (license license:expat)))
447
448(define-public python-asyncclick
449 (package
450 (name "python-asyncclick")
451 (version "8.3.0.3")
452 (source
453 (origin
454 (method url-fetch)
455 (uri (pypi-uri "asyncclick" version))
456 (sha256
457 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
458 (build-system pyproject-build-system)
459 ;; tests: 1418 passed, 21 skipped, 1 xfailed
460 (native-inputs
461 (list less
462 python-flit-core
463 python-pytest
464 python-trio))
465 (propagated-inputs
466 (list python-anyio))
467 (home-page "https://github.com/python-trio/asyncclick")
468 (synopsis "Python composable command line utility, trio-compatible version ")
469 (description
470 "AsyncClick is a fork of Click that works well with anyio, Trio, or
471asyncio.")
472 (license license:bsd-3)))
473
474(define-public python-asyncstdlib
475 (package
476 (name "python-asyncstdlib")
477 (version "3.13.0")
478 (source
479 (origin
480 (method url-fetch)
481 (uri (pypi-uri "asyncstdlib" version))
482 (sha256
483 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
484 (build-system pyproject-build-system)
485 (native-inputs (list python-flit-core python-pytest))
486 (home-page "https://asyncstdlib.readthedocs.io")
487 (synopsis "Compatibility layer between the Python stdlib and @code{async}
488callables")
489 (description
490 "The @code{asyncstdlib} library re-implements functions and classes of
491the Python standard library to make them compatible with @code{async}
492callables, iterables and context managers. It is fully agnostic to
493@code{async} event loops and seamlessly works with @code{asyncio}, third-party
494libraries such as @code{trio}, as well as any custom @code{async} event
495loop.")
496 (license license:expat)))
497
498(define-public python-awesomeversion
499 (package
500 (name "python-awesomeversion")
501 (version "24.6.0")
502 (source
503 (origin
504 (method git-fetch)
505 (uri (git-reference
506 (url "https://github.com/ludeeus/awesomeversion")
507 (commit version)))
508 (file-name (git-file-name name version))
509 (sha256
510 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
511 (modules '((guix build utils)))
512 (snippet #~(substitute* "pyproject.toml"
513 (("version = \"0\"")
514 (format #f "version = \"~a\"" #$version))))))
515 (build-system pyproject-build-system)
516 (native-inputs
517 (list python-poetry-core
518 python-pytest
519 python-pytest-snapshot))
520 (home-page "https://github.com/ludeeus/awesomeversion")
521 (synopsis "Create and compare version objects")
522 (description
523 "This package provides a way to make anything a version object, and
524compare against a vast section of other version formats.")
525 (license license:expat)))
526
527(define-public python-awkward-cpp
528 (package
529 (name "python-awkward-cpp")
530 ;; TODO: any higher versions need pybind11 >= 3, see:
531 ;; <https://codeberg.org/guix/guix/pulls/4696>.
532 (version "47")
533 (source
534 (origin
535 (method url-fetch)
536 (uri (pypi-uri "awkward_cpp" version))
537 (sha256
538 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
539 (build-system pyproject-build-system)
540 ;; tests: 22304 passed, 524 skipped
541 (native-inputs
542 (list cmake-minimal
543 pybind11
544 python-pytest
545 python-scikit-build-core))
546 (propagated-inputs
547 (list python-numpy))
548 (home-page "https://awkward-array.org/")
549 (synopsis "CPU kernels and compiled extensions for Awkward Array")
550 (description "Awkward CPP provides precompiled routines for the awkward
551package. It is not useful on its own, only as a dependency for awkward.")
552 (license license:bsd-3)))
553
554(define-public python-awkward
555 (package
556 (name "python-awkward")
557 (version "2.8.5")
558 (source
559 (origin
560 (method url-fetch)
561 (uri (pypi-uri "awkward" version))
562 (sha256
563 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
564 (build-system pyproject-build-system)
565 (arguments
566 (list
567 ;; tests: 2798 passed, 156 skipped
568 #:test-flags
569 ;; CUDA is and requires proprietary software.
570 #~(list "--ignore=tests-cuda-kernels/"
571 "--ignore=tests-cuda/")))
572 (native-inputs
573 (list python-hatch-fancy-pypi-readme
574 python-hatchling
575 python-pytest))
576 (propagated-inputs
577 (list python-awkward-cpp
578 python-fsspec
579 python-importlib-metadata
580 python-numpy
581 python-packaging))
582 (home-page "https://awkward-array.org/")
583 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
584 (description "Awkward Array is a library for nested, variable-sized data,
585including arbitrary-length lists, records, mixed types, and missing data,
586using NumPy-like idioms.")
587 (license license:bsd-3)))
588
589(define-public python-backports-tarfile
590 (package
591 (name "python-backports-tarfile")
592 (version "1.2.0")
593 (source
594 (origin
595 (method url-fetch)
596 (uri (pypi-uri "backports_tarfile" version))
597 (sha256
598 (base32 "14d9xibla5aahjqf9y0nmpk5vs4qds5rfy628j0invkld3104pnp"))))
599 (build-system pyproject-build-system)
600 (arguments
601 (list #:tests? #f)) ;XXX: Cycles with python-jaraco-context
602 (native-inputs
603 (list python-setuptools
604 python-setuptools-scm
605 python-wheel))
606 (home-page "https://github.com/jaraco/backports.tarfile")
607 (synopsis "Backport of CPython tarfile module")
608 (description "This package provides a backport of CPython tarfile module.")
609 (license license:expat)))
610
611(define-public python-bresenham
612 (package
613 (name "python-bresenham")
614 (version "0.2.1")
615 (source
616 (origin
617 (method git-fetch)
618 (uri (git-reference
619 (url "https://github.com/encukou/bresenham")
620 (commit (string-append "v" version))))
621 (file-name (git-file-name name version))
622 (sha256
623 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
624 (build-system pyproject-build-system)
625 (native-inputs
626 (list python-pytest
627 python-setuptools
628 python-wheel))
629 (home-page "https://github.com/encukou/bresenham")
630 (synopsis "Implementation of Bresenham's line drawing algorithm")
631 (description
632 "This package provides a Python implementation of
633@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
634line drawing algorithm}.")
635 (license license:expat)))
636
637(define-public python-calmjs-parse
638 (package
639 (name "python-calmjs-parse")
640 (version "1.3.3")
641 (source
642 (origin
643 (method git-fetch)
644 (uri (git-reference
645 (url "https://github.com/calmjs/calmjs.parse/")
646 (commit version)))
647 (file-name (git-file-name name version))
648 (sha256
649 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
650 (build-system pyproject-build-system)
651 ;; tests: 797 passed, 1 warning
652 (native-inputs (list python-pytest python-setuptools))
653 (propagated-inputs (list python-ply))
654 (home-page "https://github.com/calmjs/calmjs.parse/")
655 (synopsis "Parsers for ECMA standards")
656 (description
657 "@code{Calmjs-parse} is a collection of helper libraries for
658understanding ECMA script.")
659 (license license:expat)))
660
661(define-public python-chameleon
662 (package
663 (name "python-chameleon")
664 (version "4.6.0")
665 (source
666 (origin
667 (method url-fetch)
668 (uri (pypi-uri "Chameleon" version))
669 (sha256
670 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
671 (build-system pyproject-build-system)
672 (native-inputs
673 (list python-pytest
674 python-setuptools))
675 (home-page "https://chameleon.readthedocs.io")
676 (synopsis "Fast HTML/XML Template Compiler")
677 (description
678 "Chameleon is an HTML/XML template engine for Python. It uses the page
679templates language.")
680 ;; Project is duo licensed, see: LICENSE.txt.
681 (license (list license:zpl2.1
682 license:psfl))))
683
684(define-public python-conda-content-trust
685 (package
686 (name "python-conda-content-trust")
687 (version "0.2.0")
688 (source
689 (origin
690 (method git-fetch)
691 (uri (git-reference
692 (url "https://github.com/conda/conda-content-trust")
693 (commit version)))
694 (file-name (git-file-name name version))
695 (sha256
696 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
697 (build-system pyproject-build-system)
698 (arguments
699 (list
700 #:test-flags
701 ;; XXX: Not packaged yet:
702 ;; <https://github.com/secure-systems-lab/securesystemslib>.
703 ;;
704 ;; ImportError: The securesystemslib library is required, which appears
705 ;; to be unavailable.
706 #~(list #$@(map (lambda (test) (string-append "--deselect="
707 "tests/test_root.py::"
708 test))
709 (list "test_sign_root_metadata_dict_via_gpg"
710 "test_sign_root_metadata_via_gpg"
711 "test_gpg_pubkey_in_ssl_format")))
712 #:phases
713 #~(modify-phases %standard-phases
714 (add-after 'unpack 'fix-pytest-config
715 (lambda _
716 (substitute* "setup.cfg"
717 (("--cov.*") ""))))
718 (add-before 'build 'set-version
719 (lambda _
720 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
721 (native-inputs
722 (list python-hatch-vcs
723 python-hatchling
724 python-pytest))
725 (propagated-inputs
726 (list python-cryptography))
727 (home-page "https://github.com/conda/conda-content-trust")
728 (synopsis "Signing and verification tools for Conda")
729 (description
730 "This package implements a functionalit of signing and verification tools
731for Conda. @url{https://theupdateframework.io/, Based on The Update
732Framework (TUF)}, conda-content-trust is intended to ensure that when users in
733the conda ecosystem obtain a package or data about that package, they can know
734whether or not it is trustworthy (e.g. originally comes from a reliable source
735and has not been tampered with). A basic library and basic CLI are included
736to provide signing, verification, and trust delegation functionality.")
737 (license license:bsd-3)))
738
739(define-public python-conda-inject
740 (package
741 (name "python-conda-inject")
742 (version "1.3.2")
743 (source
744 (origin
745 (method git-fetch)
746 (uri (git-reference
747 (url "https://github.com/koesterlab/conda-inject")
748 (commit (string-append "v" version))))
749 (file-name (git-file-name name version))
750 (sha256
751 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
752 (build-system pyproject-build-system)
753 (arguments
754 (list #:tests? #f)) ; tests require setting up Conda
755 (native-inputs
756 (list python-poetry-core))
757 (propagated-inputs
758 (list python-pyyaml))
759 (home-page "https://github.com/koesterlab/conda-inject")
760 (synopsis "Inject a conda environment into the current python environment")
761 (description
762 "This package provides helper functions for injecting a conda
763environment into the current python environment (by modifying @code{sys.path},
764without actually changing the current python environment).")
765 (license license:expat)))
766
767(define-public python-copydetect
768 (package
769 (name "python-copydetect")
770 (version "0.5.0")
771 (source
772 (origin
773 (method git-fetch)
774 (uri (git-reference
775 (url "https://github.com/blingenf/copydetect")
776 (commit version)))
777 (sha256
778 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
779 (build-system pyproject-build-system)
780 (propagated-inputs (list python-jinja2
781 python-matplotlib
782 python-numpy
783 python-pygments
784 python-tqdm))
785 (native-inputs (list python-setuptools
786 python-pytest
787 python-wheel))
788 (home-page "https://github.com/blingenf/copydetect")
789 (synopsis "Code plagiarism detection tool")
790 (description "Copydetect is a tool to detect likely instances of plagiarism
791based on the winnowing algorithm. It takes a list of directories as input and
792generates an HTML report displaying copied slices as output.")
793 (license license:expat)))
794
795(define-public python-couleur
796 (package
797 (name "python-couleur")
798 (version "0.7.4")
799 (source
800 (origin
801 (method url-fetch)
802 (uri (pypi-uri "couleur" version))
803 (sha256
804 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
805 (build-system pyproject-build-system)
806 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
807 (native-inputs
808 (list python-setuptools
809 python-wheel))
810 (home-page "https://github.com/gabrielfalcao/couleur")
811 (synopsis "ANSI terminal tool for Python")
812 (description
813 "This package provides an ANSI terminal tool for Python, colored shell
814and other handy fancy features.")
815 (license license:lgpl3+)))
816
817(define-public python-crc
818 (package
819 (name "python-crc")
820 (version "7.1.0")
821 (source
822 (origin
823 (method git-fetch)
824 (uri (git-reference
825 (url "https://github.com/Nicoretti/crc/")
826 (commit version)))
827 (file-name (git-file-name name version))
828 (sha256
829 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
830 (build-system pyproject-build-system)
831 (native-inputs
832 (list python-poetry-core
833 python-pytest
834 python-wheel))
835 (home-page "https://nicoretti.github.io/crc/")
836 (synopsis "Pure Python CRC library")
837 (description
838 "This library computes and verifies @acronym{Cyclic Redundancy Check,
839CRC} checksums, using predefined and custom CRC configurations.
840
841Configurations:
842@table @asis
843@item CRC8
844 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
845@item CRC16
846 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
847@item CRC32
848 CRC32 AUTOSAR BZIP2 POSIX
849@item CRC64
850 CRC64
851@end table")
852 (license license:bsd-2)))
853
854(define-public python-cron-converter
855 (package
856 (name "python-cron-converter")
857 (version "1.3.1")
858 (source
859 (origin
860 (method git-fetch)
861 (uri (git-reference
862 (url "https://github.com/Sonic0/cron-converter")
863 (commit (string-append "v" version))))
864 (file-name (git-file-name name version))
865 (sha256
866 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
867 (build-system pyproject-build-system)
868 (arguments
869 (list #:test-backend #~'unittest
870 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
871 (native-inputs
872 (list python-dateutil
873 python-setuptools))
874 (propagated-inputs
875 (list python-dateutil))
876 (home-page "https://github.com/Sonic0/cron-converter")
877 (synopsis "Cron string parser and scheduler for Python")
878 (description
879 "Cron-converter provides a Cron string parser (from string/lists to
880string/lists) and iteration for the datetime object with a cron like format.")
881 (license license:expat)))
882
883(define-public python-curtsies
884 (package
885 (name "python-curtsies")
886 (version "0.4.3")
887 (source
888 (origin
889 (method url-fetch)
890 (uri (pypi-uri "curtsies" version))
891 (sha256
892 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
893 (build-system pyproject-build-system)
894 (native-inputs
895 (list python-pyte
896 python-pytest
897 python-setuptools
898 python-wheel))
899 (propagated-inputs
900 (list python-blessed
901 python-cwcwidth))
902 (home-page "https://github.com/bpython/curtsies")
903 (synopsis "Library for curses-like terminal interaction with colored strings")
904 (description
905 "Curtsies is a Python library for interacting with the terminal. It
906features string-like objects which carry formatting information, per-line
907fullscreen terminal rendering, and keyboard input event reporting.")
908 (license license:expat)))
909
910(define-public python-customtkinter
911 (package
912 (name "python-customtkinter")
913 (version "5.2.2")
914 (source
915 (origin
916 (method git-fetch)
917 (uri (git-reference
918 (url "https://github.com/TomSchimansky/CustomTkinter")
919 (commit (string-append "v" version))))
920 (file-name (git-file-name name version))
921 (sha256
922 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
923 (build-system pyproject-build-system)
924 (arguments
925 (list
926 #:phases
927 #~(modify-phases %standard-phases
928 (add-before 'check 'start-xorg-server
929 (lambda _
930 (setenv "HOME" "/tmp")
931 ;; The test suite requires a running X server.
932 (system "Xvfb :99 -screen 0 1024x768x24 &")
933 (setenv "DISPLAY" ":99.0")))
934 (replace 'check
935 (lambda* (#:key tests? #:allow-other-keys)
936 (when tests?
937 (with-directory-excursion "test"
938 (invoke "python" "unit_tests/test_all.py"))))))))
939 (propagated-inputs
940 (list (list python "tk")
941 python-darkdetect
942 python-packaging))
943 (native-inputs
944 (list python-setuptools
945 xorg-server-for-tests))
946 (home-page "https://customtkinter.tomschimansky.com")
947 (synopsis
948 "Python @acronym{User Interface, UI} library based on Tkinter")
949 (description
950 "CustomTkinter provides fully customizable widgets, created and used
951like normal Tkinter widgets, which can also be used in combination with normal
952Tkinter elements.")
953 (license license:expat)))
954
955(define-public python-darkdetect
956 (package
957 (name "python-darkdetect")
958 (version "0.8.0")
959 (source
960 (origin
961 (method url-fetch)
962 (uri (pypi-uri "darkdetect" version))
963 (sha256
964 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
965 (build-system pyproject-build-system)
966 (arguments
967 (list
968 #:tests? #f)) ;no tests in PyPI or Git.
969 (native-inputs (list python-setuptools))
970 (home-page "https://github.com/albertosottile/darkdetect")
971 (synopsis "Detect OS dark mode from Python")
972 (description
973 "This package allows to detect if the user is using Dark Mode.")
974 (license license:bsd-3)))
975
976(define-public python-decopatch
977 (package
978 (name "python-decopatch")
979 (version "1.4.10")
980 (source
981 (origin
982 (method url-fetch)
983 (uri (pypi-uri "decopatch" version))
984 (sha256
985 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
986 (build-system pyproject-build-system)
987 (arguments
988 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
989 (native-inputs
990 (list python-setuptools
991 python-setuptools-scm))
992 (propagated-inputs
993 (list python-makefun))
994 (home-page "https://github.com/smarie/python-decopatch")
995 (synopsis "Create decorators easily in Python")
996 (description
997 "This package provide implements a functionality to simplify writing
998decorators in Python.")
999 (license license:bsd-3)))
1000
1001(define-public python-distance
1002 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1003 (revision "0"))
1004 (package
1005 (name "python-distance")
1006 (version (git-version "0.1.3" revision commit))
1007 (source
1008 (origin
1009 (method git-fetch)
1010 (uri (git-reference
1011 (url "https://github.com/doukremt/distance")
1012 (commit commit)))
1013 (file-name (git-file-name name version))
1014 (sha256
1015 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1016 (build-system pyproject-build-system)
1017 (arguments
1018 (list #:test-backend #~'custom
1019 #:test-flags #~(list "tests/tests.py")))
1020 (native-inputs (list python-setuptools))
1021 (home-page "https://github.com/doukremt/distance")
1022 (synopsis "Utilities for comparing sequences")
1023 (description
1024 "This package provides helpers for computing similarities between
1025arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1026Sorensen distance, plus some bonuses. All distance computations are
1027implemented in pure Python, and most of them are also implemented in C.")
1028 (license license:gpl2+))))
1029
1030(define-public python-domdf-python-tools
1031 (package
1032 (name "python-domdf-python-tools")
1033 (version "3.10.0")
1034 (source
1035 (origin
1036 (method url-fetch)
1037 (uri (pypi-uri "domdf_python_tools" version))
1038 (sha256
1039 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1040 (build-system pyproject-build-system)
1041 (native-inputs (list python-hatch-requirements-txt))
1042 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1043 (propagated-inputs
1044 (list python-natsort
1045 python-typing-extensions))
1046 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1047 (synopsis "Helpful functions for Python")
1048 (description
1049 "This package provide helpfull functions for Python's testing and
1050packaging tasks.")
1051 (license license:expat)))
1052
1053(define-public python-envs
1054 (package
1055 (name "python-envs")
1056 (version "1.4")
1057 (source
1058 (origin
1059 (method url-fetch)
1060 (uri (pypi-uri "envs" version))
1061 (sha256
1062 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1063 (build-system pyproject-build-system)
1064 (arguments
1065 (list #:test-backend #~'unittest))
1066 (native-inputs
1067 (list python-poetry-core))
1068 (home-page "https://github.com/capless/envs")
1069 (synopsis "Easy access of environment variables from Python")
1070 (description
1071 "This package implements a functionality to access of environment
1072variables from Python with support for strings, booleans, list, tuples, and
1073dicts.")
1074 (license license:asl2.0)))
1075
1076(define-public python-exitcode
1077 (package
1078 (name "python-exitcode")
1079 (version "0.1.0")
1080 (source
1081 (origin
1082 (method url-fetch)
1083 (uri (pypi-uri "exitcode" version))
1084 (sha256
1085 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1086 (build-system pyproject-build-system)
1087 (arguments
1088 (list #:tests? #f)) ; no tests in PyPI or Git
1089 (native-inputs
1090 (list python-poetry-core
1091 python-setuptools))
1092 (home-page "https://github.com/rumpelsepp/exitcode")
1093 (synopsis "Preferred system exit codes as defined by sysexits.h")
1094 (description
1095 "This package implements a preferred system exit codes as defined by
1096@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1097Rust's @url{https://docs.rs/exitcode, exitcode}.")
1098 (license license:expat)))
1099
1100(define-public python-fastnumbers
1101 (package
1102 (name "python-fastnumbers")
1103 (version "5.1.1")
1104 (source
1105 (origin
1106 (method url-fetch)
1107 (uri (pypi-uri "fastnumbers" version))
1108 (sha256
1109 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1110 (build-system pyproject-build-system)
1111 (native-inputs
1112 (list python-numpy
1113 python-pytest
1114 python-setuptools
1115 python-setuptools-scm))
1116 (home-page "https://github.com/SethMMorton/fastnumbers")
1117 (synopsis "Super-fast and clean conversions to numbers")
1118 (description
1119 "This package provides provides drop-in replacements for the Python
1120built-in @code{int} and @code{float} that are on par or faster with the Python
1121equivalents.")
1122 (license license:expat)))
1123
1124(define-public python-findpython
1125 (package
1126 (name "python-findpython")
1127 (version "0.7.0")
1128 (source
1129 (origin
1130 (method url-fetch)
1131 (uri (pypi-uri "findpython" version))
1132 (sha256
1133 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1134 (build-system pyproject-build-system)
1135 (native-inputs
1136 (list python-pdm-backend
1137 python-pytest))
1138 (propagated-inputs
1139 (list python-packaging
1140 python-platformdirs))
1141 (home-page "https://github.com/frostming/findpython")
1142 (synopsis "Find Python versions the system")
1143 (description
1144 "This package provides a utility to find Python versions on the current
1145system.")
1146 (license license:expat)))
1147
1148(define-public python-flexcache
1149 (package
1150 (name "python-flexcache")
1151 (version "0.3")
1152 (source
1153 (origin
1154 (method url-fetch)
1155 (uri (pypi-uri "flexcache" version))
1156 (sha256
1157 (base32 "0mh6c3s0ykmnnhzys72xq5ls4myzpz1y86fmz0ngw6v2l3aknx0q"))))
1158 (build-system pyproject-build-system)
1159 (native-inputs
1160 (list python-pytest
1161 python-pytest-cov
1162 python-pytest-mpl
1163 python-pytest-subtests
1164 python-setuptools
1165 python-setuptools-scm
1166 python-wheel))
1167 (propagated-inputs
1168 (list python-typing-extensions))
1169 (home-page "https://github.com/hgrecco/flexcache")
1170 (synopsis "Caching transformed versions of a source object")
1171 (description
1172 "This package implements a functionality to cache on disk the result of
1173expensive calculations. It was started as part of
1174@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1175 (license license:bsd-3)))
1176
1177(define-public python-flexparser
1178 (package
1179 (name "python-flexparser")
1180 (version "0.4")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri (pypi-uri "flexparser" version))
1185 (sha256
1186 (base32 "1cpn5scxnxbd2jrnany4znzzn9im5h5gwr59bp62rglman89hv96"))))
1187 (build-system pyproject-build-system)
1188 (native-inputs
1189 (list python-pytest
1190 python-pytest-cov
1191 python-pytest-mpl
1192 python-pytest-subtests
1193 python-setuptools
1194 python-setuptools-scm
1195 python-wheel))
1196 (propagated-inputs
1197 (list python-typing-extensions))
1198 (home-page "https://github.com/hgrecco/flexparser")
1199 (synopsis "Parsing made fun ... using typing")
1200 (description "This project provides a typed parser. It was started as
1201part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1202package. ")
1203 (license license:bsd-3)))
1204
1205(define-public python-grapheme
1206 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1207 ;; branch.
1208 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1209 (revision "0"))
1210 (package
1211 (name "python-grapheme")
1212 (version (git-version "0.6.0" revision commit))
1213 (source
1214 (origin
1215 (method git-fetch)
1216 (uri (git-reference
1217 (url "https://github.com/alvinlindstam/grapheme")
1218 (commit commit)))
1219 (file-name (git-file-name name version))
1220 (sha256
1221 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1222 (build-system pyproject-build-system)
1223 (native-inputs
1224 (list python-pytest
1225 python-setuptools))
1226 (home-page "https://github.com/alvinlindstam/grapheme")
1227 (synopsis "Unicode grapheme helpers")
1228 (description
1229 "This package provides a functionality for working with user perceived
1230characters. More specifically, string manipulation and calculation functions
1231for working with grapheme cluster groups (graphemes) as defined by the
1232@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1233 (license license:expat))))
1234
1235(define-public python-halo
1236 (package
1237 (name "python-halo")
1238 (version "0.0.31")
1239 (source
1240 (origin
1241 (method url-fetch)
1242 (uri (pypi-uri "halo" version))
1243 (sha256
1244 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1245 (build-system pyproject-build-system)
1246 (arguments
1247 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1248 (native-inputs
1249 (list python-setuptools))
1250 (propagated-inputs
1251 (list python-colorama
1252 python-log-symbols
1253 python-six
1254 python-spinners
1255 python-termcolor))
1256 (home-page "https://github.com/manrajgrover/halo")
1257 (synopsis "Python library to display graphical spinners in the terminal")
1258 (description
1259 "Halo is a Python library to display graphical spinners in the terminal.
1260It also supports IPython/Jupyter.")
1261 (license license:expat)))
1262
1263(define-public python-hatch-argparse-manpage
1264 (package
1265 (name "python-hatch-argparse-manpage")
1266 (version "1.0.0")
1267 (source
1268 (origin
1269 (method url-fetch)
1270 (uri (pypi-uri "hatch_argparse_manpage" version))
1271 (sha256
1272 (base32 "1zbbww9akz1lca3br67zik80ql774xpfg22njxdxjiw4kpz5alb6"))))
1273 (build-system pyproject-build-system)
1274 (native-inputs (list python-hatchling))
1275 (propagated-inputs (list python-argparse-manpage python-rich))
1276 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1277 (synopsis "Hatch build hook plugin to generate manual pages")
1278 (description
1279 "This package provides a build hook plugin for Hatch to automatically
1280 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1281by Pavel Raiskup.")
1282 (license license:gpl3+)))
1283
1284(define-public python-hatch-gettext
1285 (package
1286 (name "python-hatch-gettext")
1287 (version "1.1.0")
1288 (source
1289 (origin
1290 (method url-fetch)
1291 (uri (pypi-uri "hatch_gettext" version))
1292 (sha256
1293 (base32 "05sh574p1c4wdf9gky965km3f5n904hxkyils07f1b0jyswlm3nh"))))
1294 (build-system pyproject-build-system)
1295 (native-inputs (list python-hatchling))
1296 (propagated-inputs (list python-rich))
1297 (home-page "https://github.com/damonlynch/hatch-gettext")
1298 (synopsis "Hatch build hook plugin for GNU gettext")
1299 (description
1300 "This package provides a build hook plugin for Hatch that compiles
1301 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1302 (license license:gpl3+)))
1303
1304;; TODO: Move to ci or task-runners, see:
1305;; <https://codeberg.org/guix/guix/issues/3096>.
1306(define-public python-huey
1307 (package
1308 (name "python-huey")
1309 (version "2.5.3")
1310 (source
1311 (origin
1312 (method git-fetch)
1313 (uri (git-reference
1314 (url "https://github.com/coleifer/huey")
1315 (commit version)))
1316 (file-name (git-file-name name version))
1317 (sha256
1318 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
1319 (build-system pyproject-build-system)
1320 (arguments
1321 (list
1322 #:phases
1323 #~(modify-phases %standard-phases
1324 (add-after 'unpack 'remove-which
1325 (lambda _
1326 (substitute* "huey/tests/test_kt_huey.py"
1327 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
1328 "has_ktserver = False"))))
1329 (replace 'check
1330 (lambda* (#:key tests? #:allow-other-keys)
1331 (when tests?
1332 (spawn "redis-server" '("redis-server"))
1333 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
1334 (native-inputs (list python-setuptools redis tzdata-for-tests))
1335 (propagated-inputs (list python-redis))
1336 (home-page "https://huey.readthedocs.io")
1337 (synopsis "Lightweight task queue for Python")
1338 (description
1339 "Huey is a lightweight task queue for Python applications. Huey
1340supports:
1341@itemize
1342@item Redis, SQLite, file-system, or in-memory storage
1343@item multi-process, multi-thread or greenlet task execution models
1344@item scheduling tasks to execute at a given time, or after a given delay
1345@item scheduling recurring tasks, like a crontab
1346@item automatically retrying tasks that fail
1347@item task prioritization
1348@item task result storage
1349@item task expiration
1350@item task locking
1351@item task pipelines and chains
1352@end itemize")
1353 (license license:expat)))
1354
1355(define-public python-id
1356 (package
1357 (name "python-id")
1358 (version "1.5.0")
1359 (source
1360 (origin
1361 (method url-fetch)
1362 (uri (pypi-uri "id" version))
1363 (sha256
1364 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
1365 (build-system pyproject-build-system)
1366 (native-inputs
1367 (list python-flit-core
1368 python-pretend
1369 python-pytest))
1370 (propagated-inputs
1371 (list python-requests))
1372 (home-page "https://github.com/di/id")
1373 (synopsis "Tool for generating OIDC identities")
1374 (description
1375 "This package provides a tool for generating @code{OIDC, OpenID Connect}
1376identities.")
1377 (license license:asl2.0)))
1378
1379(define-public python-iniparse
1380 (package
1381 (name "python-iniparse")
1382 (version "0.5.1")
1383 (source
1384 (origin
1385 (method git-fetch)
1386 (uri (git-reference
1387 (url "https://github.com/candlepin/python-iniparse")
1388 (commit version)))
1389 (file-name (git-file-name name version))
1390 (sha256
1391 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
1392 (build-system pyproject-build-system)
1393 (arguments
1394 (list
1395 #:test-backend #~'custom
1396 #:test-flags #~(list "runtests.py")
1397 #:phases
1398 #~(modify-phases %standard-phases
1399 (add-before 'check 'disable-tests
1400 (lambda _
1401 ;; XXX: Three tests failed to compare lists.
1402 (substitute* "tests/test_compat.py"
1403 (("test_read_returns_file_list")
1404 "disabled_test_read_returns_file_list")))))))
1405 (native-inputs
1406 (list python-setuptools))
1407 (home-page "https://github.com/candlepin/python-iniparse")
1408 (synopsis "Accessing and Modifying INI files")
1409 (description
1410 "iniparse is a INI parser for Python which is:
1411@itemize
1412@item Compatible with ConfigParser: Backward compatible implementations of
1413ConfigParser, RawConfigParser, and SafeConfigParser are included that are
1414API-compatible with the Python standard library.
1415@item Preserves structure of INI files: Order of sections & options,
1416indentation, comments, and blank lines are preserved as far as possible when
1417data is updated.
1418@item More convenient: Values can be accessed using dotted notation
1419(@code{cfg.user.name}), or using container syntax
1420(@code{cfg['user']['name']}).
1421@end itemize")
1422 (license license:expat)))
1423
1424(define-public python-inotify
1425 (package
1426 (name "python-inotify")
1427 (version "0.2.12")
1428 (source
1429 (origin
1430 (method git-fetch)
1431 (uri (git-reference
1432 (url "https://github.com/dsoprea/PyInotify")
1433 (commit version)))
1434 (file-name (git-file-name name version))
1435 (sha256
1436 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
1437 (build-system pyproject-build-system)
1438 (arguments
1439 (list
1440 #:phases
1441 #~(modify-phases %standard-phases
1442 (add-after 'unpack 'fix-requirements
1443 (lambda _
1444 (substitute* "inotify/resources/requirements.txt"
1445 (("build")
1446 "")))))))
1447 (native-inputs (list python-pytest python-setuptools))
1448 (home-page "https://github.com/dsoprea/PyInotify")
1449 (synopsis "Linux filesystem activity monitor library for Python")
1450 (description
1451 "This package provides an efficient and elegant inotify (Linux filesystem
1452activity monitor) library for Python.")
1453 (license license:gpl2)))
1454
1455(define-public python-intervaltree
1456 (package
1457 (name "python-intervaltree")
1458 (version "3.1.0")
1459 (source
1460 (origin
1461 (method url-fetch)
1462 (uri (pypi-uri "intervaltree" version))
1463 (sha256
1464 (base32
1465 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
1466 (build-system pyproject-build-system)
1467 (arguments
1468 `(#:phases
1469 (modify-phases %standard-phases
1470 ;; pytest seems to have a check to make sure the user is testing
1471 ;; their checked-out code and not an installed, potentially
1472 ;; out-of-date copy. This is harmless here, since we just installed
1473 ;; the package, so we disable the check to avoid skipping tests
1474 ;; entirely.
1475 (add-before 'check 'import-mismatch-error-workaround
1476 (lambda _
1477 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
1478 #t)))))
1479 (propagated-inputs
1480 (list python-sortedcontainers))
1481 (native-inputs
1482 (list python-setuptools python-pytest))
1483 (home-page "https://github.com/chaimleib/intervaltree")
1484 (synopsis "Editable interval tree data structure")
1485 (description
1486 "This package provides a mutable, self-balancing interval tree
1487implementation for Python. Queries may be by point, by range overlap, or by
1488range envelopment. This library was designed to allow tagging text and time
1489intervals, where the intervals include the lower bound but not the upper
1490bound.")
1491 (license license:asl2.0)))
1492
1493(define-public python-jschon
1494 (package
1495 (name "python-jschon")
1496 (version "0.11.1")
1497 (source
1498 (origin
1499 (method git-fetch)
1500 (uri (git-reference
1501 (url "https://github.com/marksparkza/jschon/")
1502 (commit (string-append "v" version))
1503 (recursive? #t))) ;required for tests
1504 (sha256
1505 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
1506 (file-name (git-file-name name version))))
1507 (build-system pyproject-build-system)
1508 (propagated-inputs
1509 (list python-rfc3986))
1510 (native-inputs
1511 (list python-coverage
1512 python-hypothesis
1513 python-pytest
1514 python-pytest-benchmark
1515 python-pytest-httpserver
1516 python-requests
1517 python-setuptools))
1518 (home-page "https://jschon.readthedocs.io/")
1519 (synopsis "Object-oriented JSON Schema implementation for Python")
1520 (description
1521 "This package provides a JSON toolkit for Python developers.")
1522 (license license:expat)))
1523
1524(define-public python-jsonpath-ng
1525 (package
1526 (name "python-jsonpath-ng")
1527 (version "1.7.0" )
1528 (source
1529 (origin
1530 (method url-fetch)
1531 (uri (pypi-uri "jsonpath-ng" version))
1532 (sha256
1533 (base32 "0g5bpq02pl9mv7mbqixvnagq8f9v0jab6wqmbxw9rxsz9vyzgxgn"))))
1534 (build-system pyproject-build-system)
1535 (native-inputs
1536 (list python-pytest
1537 python-setuptools
1538 python-wheel))
1539 (propagated-inputs
1540 (list python-ply))
1541 (home-page "https://github.com/h2non/jsonpath-ng")
1542 (synopsis "JSONPath Next-Generation")
1543 (description
1544 "This package provides a final implementation of @code{JSONPath} for
1545Python that aims to be standard compliant, including arithmetic and binary
1546comparison operators, as defined in the original
1547@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
1548 (license license:asl2.0)))
1549
1550(define-public python-json-log-formatter
1551 (package
1552 (name "python-json-log-formatter")
1553 (version "1.1.1")
1554 (source
1555 (origin
1556 (method git-fetch)
1557 (uri (git-reference
1558 (url "https://github.com/marselester/json-log-formatter")
1559 (commit (string-append "v" version))))
1560 (file-name (git-file-name name version))
1561 (sha256
1562 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
1563 (build-system pyproject-build-system)
1564 (arguments
1565 (list
1566 #:phases
1567 #~(modify-phases %standard-phases
1568 (replace 'check
1569 (lambda* (#:key tests? #:allow-other-keys)
1570 (when tests?
1571 (invoke "pytest" "-s" "tests.py")))))))
1572 (native-inputs (list python-django
1573 python-pytest
1574 python-setuptools
1575 python-simplejson
1576 python-ujson
1577 python-wheel))
1578 (home-page "https://github.com/marselester/json-log-formatter")
1579 (synopsis "JSON log formatter")
1580 (description "The library helps you to store logs in JSON format.")
1581 (license license:expat)))
1582
1583(define-public python-keeper-secrets-manager-core
1584 ;; released from a monorepo with other packages following various versioning
1585 ;; schemes. This commit was selected because some failing tests were fixed
1586 ;; since the most recent release of the Python SDK packages.
1587 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1588 (revision "0"))
1589 (package
1590 (name "python-keeper-secrets-manager-core")
1591 (version (git-version "17.0.0" revision commit))
1592 (source
1593 (origin
1594 (method git-fetch)
1595 (uri (git-reference
1596 (url "https://github.com/Keeper-Security/secrets-manager")
1597 (commit commit)))
1598 (file-name (git-file-name name version))
1599 (sha256
1600 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1601 (build-system pyproject-build-system)
1602 (arguments
1603 (list
1604 #:phases
1605 #~(modify-phases %standard-phases
1606 (add-after 'unpack 'chdir
1607 (lambda _
1608 (chdir "sdk/python/core"))))))
1609 (propagated-inputs
1610 (list python-cryptography
1611 python-importlib-metadata
1612 python-requests))
1613 (native-inputs
1614 (list python-pytest
1615 python-setuptools))
1616 (home-page "https://github.com/Keeper-Security/secrets-manager")
1617 (synopsis "Keeper Secrets Manager for Python SDK")
1618 (description
1619 "The Keeper Secrets Manager Python SDK provides access to
1620@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
1621Management} services.")
1622 (license license:expat))))
1623
1624(define-public python-keeper-secrets-manager-helper
1625 ;; released alongside keeper-secrets-manager-core, but with a different
1626 ;; versioning scheme.
1627 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1628 (revision "0"))
1629 (package
1630 (name "python-keeper-secrets-manager-helper")
1631 (version (git-version "1.0.6" revision commit))
1632 (source
1633 (origin
1634 (method git-fetch)
1635 (uri (git-reference
1636 (url "https://github.com/Keeper-Security/secrets-manager")
1637 (commit commit)))
1638 (file-name (git-file-name name version))
1639 (sha256
1640 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1641 (build-system pyproject-build-system)
1642 (arguments
1643 (list
1644 #:phases
1645 #~(modify-phases %standard-phases
1646 (add-after 'unpack 'chdir
1647 (lambda _
1648 (chdir "sdk/python/helper"))))))
1649 (propagated-inputs
1650 (list python-iso8601
1651 python-keeper-secrets-manager-core
1652 python-pyyaml))
1653 (native-inputs
1654 (list python-pytest
1655 python-setuptools))
1656 (home-page "https://github.com/Keeper-Security/secrets-manager")
1657 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
1658 (description
1659 "Keeper Secrets Manager SDK helper is for creating and managing secret
1660records. It is intended to be used with @code{keeper-secrets-manager-core}.")
1661 (license license:expat))))
1662
1663(define-public python-language-data
1664 (package
1665 (name "python-language-data")
1666 (version "1.3.0")
1667 (source
1668 (origin
1669 (method url-fetch)
1670 (uri (pypi-uri "language_data" version))
1671 (sha256
1672 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
1673 (build-system pyproject-build-system)
1674 (native-inputs
1675 (list python-pytest
1676 python-setuptools
1677 python-setuptools-scm))
1678 (propagated-inputs
1679 (list python-marisa-trie))
1680 (home-page "https://github.com/georgkrause/language_data")
1681 (synopsis "Supplementary data about languages used by the langcodes module")
1682 (description
1683 "language_data is a supplement to the langcodes module, for working with
1684standardized codes for human languages. It stores the more bulky and
1685hard-to-index data about languages, particularly what they are named in
1686various languages.")
1687 (license license:expat)))
1688
1689(define-public python-log-symbols
1690 (package
1691 (name "python-log-symbols")
1692 (version "0.0.14")
1693 (source
1694 (origin
1695 (method url-fetch)
1696 (uri (pypi-uri "log_symbols" version))
1697 (sha256
1698 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
1699 (build-system pyproject-build-system)
1700 (arguments
1701 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
1702 (native-inputs
1703 (list python-setuptools))
1704 (propagated-inputs
1705 (list python-colorama))
1706 (home-page "https://github.com/manrajgrover/py-log-symbols")
1707 (synopsis "Python library with graphical symbols for logging on the terminal")
1708 (description
1709 "This package provides a Python library with graphical symbols that can
1710be displayed on the terminal, with color if possible, for logging purposes.")
1711 (license license:expat)))
1712
1713(define-public python-lsprotocol
1714 (package
1715 (name "python-lsprotocol")
1716 (version "2025.0.0")
1717 (source
1718 (origin
1719 (method git-fetch)
1720 (uri (git-reference
1721 (url "https://github.com/microsoft/lsprotocol")
1722 (commit version)))
1723 (file-name (git-file-name name version))
1724 (sha256
1725 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
1726 (build-system pyproject-build-system)
1727 (arguments
1728 (list
1729 #:tests? #f ;no tests for Python package
1730 #:phases
1731 #~(modify-phases %standard-phases
1732 (add-after 'unpack 'cd-packages-python
1733 (lambda _
1734 (chdir "packages/python"))))))
1735 (native-inputs
1736 (list python-flit-core))
1737 (propagated-inputs
1738 (list python-attrs
1739 python-cattrs))
1740 (home-page "https://github.com/microsoft/lsprotocol")
1741 (synopsis "Python types for Language Server Protocol.")
1742 (description
1743 "@code{lsprotocol} is a Python implementation of object types used in
1744the Language Server Protocol (LSP). This repository contains the code
1745generator and the generated types for LSP.")
1746 (license license:expat)))
1747
1748(define-public python-marisa-trie
1749 (package
1750 (name "python-marisa-trie")
1751 (version "1.3.1")
1752 (source
1753 (origin
1754 (method url-fetch)
1755 (uri (pypi-uri "marisa_trie" version))
1756 (sha256
1757 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
1758 (build-system pyproject-build-system)
1759 (native-inputs
1760 (list python-cython
1761 python-hypothesis
1762 python-pytest
1763 python-readme-renderer
1764 python-setuptools))
1765 (home-page "https://github.com/pytries/marisa-trie")
1766 (synopsis "Static memory-efficient Trie-like structures for Python")
1767 (description
1768 "This package provides static memory-efficient and fast Trie-like structures
1769for Python.")
1770 (license license:expat)))
1771
1772(define-public python-menuinst
1773 (package
1774 (name "python-menuinst")
1775 (version "2.4.1")
1776 (source
1777 (origin
1778 (method git-fetch)
1779 (uri (git-reference
1780 (url "https://github.com/conda/menuinst")
1781 (commit version)))
1782 (file-name (git-file-name name version))
1783 (sha256
1784 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
1785 (build-system pyproject-build-system)
1786 (arguments
1787 (list
1788 #:tests? #f ;tests need conda
1789 #:phases
1790 #~(modify-phases %standard-phases
1791 (add-before 'build 'pretend-version
1792 (lambda _
1793 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
1794 (native-inputs
1795 (list python-setuptools
1796 python-setuptools-scm))
1797 (home-page "https://conda.github.io/menuinst/")
1798 (synopsis "Cross platform menu item installation")
1799 (description
1800 "This package provides cross platform menu item installation for conda
1801packages.")
1802 (license license:bsd-3)))
1803
1804(define-public python-multiplex
1805 (package
1806 (name "python-multiplex")
1807 (version "0.6.1")
1808 (source
1809 (origin
1810 (method git-fetch) ;no tests in PyPI archive
1811 (uri (git-reference
1812 (url "https://github.com/dankilman/multiplex")
1813 (commit version)))
1814 (file-name (git-file-name name version))
1815 (sha256
1816 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
1817 (build-system pyproject-build-system)
1818 (native-inputs
1819 (list python-poetry-core
1820 python-pytest
1821 python-pytest-asyncio))
1822 (propagated-inputs
1823 (list python-aiofiles
1824 python-aiostream
1825 python-click
1826 python-easy-ansi-0.3
1827 python-pyte))
1828 (home-page "https://github.com/dankilman/multiplex")
1829 (synopsis "Parallel stream of outputs from multiple processes")
1830 (description
1831 "This package provides a functionality to view output of multiple
1832processes, in parallel, in the console, with an interactive TUI.")
1833 (license license:expat)))
1834
1835(define-public python-num2words
1836 (package
1837 (name "python-num2words")
1838 (version "0.5.14")
1839 (source
1840 (origin
1841 (method git-fetch)
1842 (uri (git-reference
1843 (url "https://github.com/savoirfairelinux/num2words")
1844 (commit (string-append "v" version))))
1845 (file-name (git-file-name name version))
1846 (sha256
1847 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
1848 (build-system pyproject-build-system)
1849 (arguments
1850 (list
1851 #:test-flags
1852 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
1853 (native-inputs (list python-pytest python-setuptools))
1854 (propagated-inputs (list python-docopt))
1855 (home-page "https://github.com/savoirfairelinux/num2words")
1856 (synopsis "Convert numbers to words in multiple languages")
1857 (description
1858 "@code{num2words} is a library that converts numbers like 42 to words like
1859forty-two. It supports multiple languages, and can even generate ordinal
1860numbers like forty-second.")
1861 (license license:lgpl2.1)))
1862
1863(define-public python-orderly-set
1864 (package
1865 (name "python-orderly-set")
1866 (version "5.5.0")
1867 (source
1868 (origin
1869 (method url-fetch)
1870 (uri (pypi-uri "orderly_set" version))
1871 (sha256
1872 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
1873 (build-system pyproject-build-system)
1874 (native-inputs (list python-flit-core python-pytest))
1875 (home-page "https://github.com/seperman/orderly-set")
1876 (synopsis "Multiple implementations of Ordered Set")
1877 (description "Orderly Set is a package containing multiple implementations
1878of Ordered Set.")
1879 (license license:expat)))
1880
1881(define-public python-pandocfilters
1882 (package
1883 (name "python-pandocfilters")
1884 (version "1.5.1")
1885 (source
1886 (origin
1887 (method url-fetch)
1888 (uri (pypi-uri "pandocfilters" version))
1889 (sha256
1890 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
1891 (build-system pyproject-build-system)
1892 (arguments
1893 (list #:tests? #f)) ;require pandoc to run tests
1894 (native-inputs
1895 (list python-setuptools))
1896 (home-page "https://github.com/jgm/pandocfilters")
1897 (synopsis "Python module for writing Pandoc filters")
1898 (description "Pandoc is a powerful utility to transform various
1899input formats into a wide range of output formats. To alter the
1900exported output document, Pandoc allows the usage of filters, which
1901are pipes that read a JSON serialization of the Pandoc AST from stdin,
1902transform it in some way, and write it to stdout. It allows therefore
1903to alter the processing of Pandoc's supported input formats, for
1904instance one can add new syntax elements to markdown, etc.
1905
1906This package provides Python bindings.")
1907 (license license:bsd-3)))
1908
1909(define-public python-panflute
1910 (package
1911 (name "python-panflute")
1912 (version "2.3.1")
1913 (source
1914 (origin
1915 (method url-fetch)
1916 (uri (pypi-uri "panflute" version))
1917 (sha256
1918 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
1919 (build-system pyproject-build-system)
1920 (arguments
1921 (list #:tests? #f)) ;require pandoc to run tests
1922 (native-inputs
1923 (list python-setuptools))
1924 (propagated-inputs
1925 (list python-click
1926 python-pyyaml))
1927 (home-page "http://scorreia.com/software/panflute/")
1928 (synopsis "Pythonic Pandoc filters")
1929 (description
1930 "Panflute is a Python package that makes Pandoc filters fun to write.
1931It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
1932is heavily inspired.")
1933 (license license:bsd-3)))
1934
1935(define-public python-pastel
1936 (package
1937 (name "python-pastel")
1938 (version "0.2.1")
1939 (source
1940 (origin
1941 (method git-fetch)
1942 (uri (git-reference
1943 (url "https://github.com/sdispater/pastel")
1944 (commit version)))
1945 (file-name (git-file-name name version))
1946 (sha256
1947 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
1948 (build-system pyproject-build-system)
1949 (arguments
1950 (list
1951 #:test-flags
1952 #~(list "pastel" "tests/")
1953 #:phases
1954 #~(modify-phases %standard-phases
1955 (add-after 'unpack 'use-poetry-core
1956 (lambda _
1957 ;; Patch to use the core poetry API.
1958 (substitute* "pyproject.toml"
1959 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
1960 (native-inputs (list python-poetry-core python-pytest))
1961 (home-page "https://github.com/sdispater/pastel")
1962 (synopsis "Library to colorize strings in your terminal")
1963 (description
1964 "Pastel is a simple library to help you colorize strings in your
1965terminal.")
1966 (license license:expat)))
1967
1968(define-public python-pathlib-abc
1969 (package
1970 (name "python-pathlib-abc")
1971 (version "0.5.0")
1972 (source
1973 (origin
1974 (method url-fetch)
1975 (uri (pypi-uri "pathlib_abc" version))
1976 (sha256
1977 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
1978 (build-system pyproject-build-system)
1979 (native-inputs (list python-pytest python-hatchling))
1980 (home-page "https://github.com/barneygale/pathlib-abc")
1981 (synopsis "Python base classes for rich path objects")
1982 (description
1983 "This package is a preview of pathlib functionality planned for a future
1984release of Python; specifically, it provides three ABCs that can be used to
1985implement path classes for non-local filesystems")
1986 (license license:psfl)))
1987
1988;; XXX: It's for [email protected], remove when no longer required.
1989(define-public python-pathlib-abc-for-python-pathy
1990 (hidden-package
1991 (package
1992 (inherit python-pathlib-abc)
1993 (version "0.1.1")
1994 (source
1995 (origin
1996 (method url-fetch)
1997 (uri (pypi-uri "pathlib_abc" version))
1998 (sha256
1999 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2000
2001(define-public python-pbs-installer
2002 (package
2003 (name "python-pbs-installer")
2004 (version "2025.09.18")
2005 (source
2006 (origin
2007 (method git-fetch)
2008 (uri (git-reference
2009 (url "https://github.com/frostming/pbs-installer")
2010 (commit version)))
2011 (file-name (git-file-name name version))
2012 (sha256
2013 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2014 (build-system pyproject-build-system)
2015 (arguments
2016 (list
2017 #:tests? #f ;no tests provided
2018 #:phases
2019 #~(modify-phases %standard-phases
2020 (add-before 'build 'set-version
2021 (lambda _
2022 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2023 (native-inputs
2024 (list python-pdm-backend
2025 python-pytest))
2026 (propagated-inputs
2027 (list python-httpx
2028 python-zstandard))
2029 (home-page "https://github.com/frostming/pbs-installer")
2030 (synopsis "Installer for Python Build Standalone")
2031 (description
2032 "This package implements an installer for
2033@url{https://github.com/astral-sh/python-build-standalone, Python Build
2034Standalone}.")
2035 (license license:expat)))
2036
2037(define-public python-phply
2038 (package
2039 (name "python-phply")
2040 (version "1.2.6")
2041 (source
2042 (origin
2043 (method url-fetch)
2044 (uri (pypi-uri "phply" version))
2045 (sha256
2046 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2047 (build-system pyproject-build-system)
2048 (native-inputs
2049 (list python-pytest
2050 python-setuptools))
2051 (propagated-inputs
2052 (list python-ply))
2053 (home-page "https://github.com/viraptor/phply")
2054 (synopsis "PHP parser written in Python using PLY")
2055 (description
2056 "@code{phply} is a parser for the PHP programming language written using
2057PLY,a Lex/YACC-style parser generator toolkit for Python.")
2058 (license license:bsd-3)))
2059
2060(define-public python-puccinialin
2061 (package
2062 (name "python-puccinialin")
2063 (version "0.1.5")
2064 (source
2065 (origin
2066 (method url-fetch)
2067 (uri (pypi-uri "puccinialin" version))
2068 (sha256
2069 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2070 (build-system pyproject-build-system)
2071 (arguments
2072 (list #:tests? #f)) ;no tests in PyPI or Git
2073 (native-inputs
2074 (list python-hatchling))
2075 (propagated-inputs
2076 (list python-httpx
2077 python-platformdirs
2078 python-tqdm))
2079 (home-page "https://github.com/konstin/puccinialin")
2080 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2081 (description
2082 "This tool helps to install Rust into a temporary directory, allowing
2083support of Rust-based Python builds. Cargo and rustc are installed into a
2084cache directory, to avoid modifying the host's environment, and further
2085activated using a set of environment variables.")
2086 (license (list license:expat license:asl2.0))))
2087
2088(define-public python-pygls
2089 (package
2090 (name "python-pygls")
2091 (version "2.0.0")
2092 (source
2093 (origin
2094 (method git-fetch)
2095 (uri (git-reference
2096 (url "https://github.com/openlawlibrary/pygls")
2097 (commit (string-append "v" version))))
2098 (file-name (git-file-name name version))
2099 (sha256
2100 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
2101 (build-system pyproject-build-system)
2102 ;; tests: 265 passed, 8 skipped
2103 (native-inputs
2104 (list python-pytest
2105 python-pytest-asyncio
2106 python-poetry-core))
2107 (propagated-inputs
2108 (list python-attrs
2109 python-cattrs
2110 python-lsprotocol))
2111 (home-page "https://github.com/openlawlibrary/pygls")
2112 (synopsis "Pythonic generic language server")
2113 (description
2114 "This package provides a pythonic generic language server (pronounced
2115like pie glass').")
2116 (license license:asl2.0)))
2117
2118(define-public python-pypydispatcher
2119 (package
2120 (name "python-pypydispatcher")
2121 (version "2.1.2")
2122 (source
2123 (origin
2124 (method url-fetch)
2125 (uri (pypi-uri "PyPyDispatcher" version))
2126 (sha256
2127 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
2128 (build-system pyproject-build-system)
2129 (native-inputs
2130 (list python-pytest
2131 python-setuptools
2132 python-setuptools-scm))
2133 (home-page "https://github.com/scrapy/pypydispatcher")
2134 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
2135 (description
2136 "This package implements a functionality of pulti-producer-multi-consumer
2137signal dispatching mechanism. It's a fork of
2138http://pydispatcher.sourceforge.net/ with PyPy support.")
2139 (license license:bsd-3)))
2140
2141(define-public python-pyte
2142 (package
2143 (name "python-pyte")
2144 (version "0.8.2")
2145 (source
2146 (origin
2147 (method git-fetch)
2148 (uri (git-reference
2149 (url "https://github.com/selectel/pyte")
2150 (commit version)))
2151 (file-name (git-file-name name version))
2152 (sha256
2153 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
2154 (build-system pyproject-build-system)
2155 (propagated-inputs (list python-wcwidth))
2156 (native-inputs (list python-pytest python-setuptools python-wheel))
2157 (home-page "https://pyte.readthedocs.io/")
2158 (synopsis "Simple VTXXX-compatible terminal emulator")
2159 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
2160emulator. @var{VTxxx} stands for a series of video terminals, developed by
2161DEC between 1970 and 1995. The first and probably most famous one was the
2162VT100 terminal, which is now a de-facto standard for all virtual terminal
2163emulators.
2164
2165pyte is a fork of vt102, which was an incomplete pure Python implementation
2166of VT100 terminal.")
2167 (license license:lgpl3+)))
2168
2169(define-public python-pyxdameraulevenshtein
2170 (package
2171 (name "python-pyxdameraulevenshtein")
2172 (version "1.8.0")
2173 (source
2174 (origin
2175 (method git-fetch)
2176 (uri (git-reference
2177 (url "https://github.com/lanl/pyxDamerauLevenshtein")
2178 (commit (string-append "v" version))))
2179 (file-name (git-file-name name version))
2180 (sha256
2181 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
2182 (build-system pyproject-build-system)
2183 (native-inputs (list python-cython python-pytest python-setuptools))
2184 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
2185 (synopsis "Damerau-Levenshtein edit distance algorithm")
2186 (description
2187 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
2188edit distance algorithm for Python in Cython for high performance.")
2189 (license license:bsd-3)))
2190
2191(define-public python-represent
2192 (package
2193 (name "python-represent")
2194 (version "2.1")
2195 (source
2196 (origin
2197 (method url-fetch)
2198 (uri (pypi-uri "Represent" version))
2199 (sha256
2200 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
2201 (build-system pyproject-build-system)
2202 (native-inputs
2203 ;; XXX This might be too much for testing, maybe switch them off as it's
2204 ;; a simple middleware library.
2205 (list python-ipython
2206 python-pytest
2207 python-rich
2208 python-setuptools))
2209 (home-page "https://github.com/RazerM/represent")
2210 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
2211 (description
2212 "This package implements a functionality to generate Python
2213@code{__repr__} methods automatically or declaratively.")
2214 (license license:expat)))
2215
2216(define-public python-rich-argparse
2217 (package
2218 (name "python-rich-argparse")
2219 (version "1.7.1")
2220 (source
2221 (origin
2222 (method git-fetch)
2223 (uri (git-reference
2224 (url "https://github.com/hamdanal/rich-argparse")
2225 (commit (string-append "v" version))))
2226 (file-name (git-file-name name version))
2227 (sha256
2228 (base32
2229 "0wydhy1167yv7lm07iy3aysyhxyixc24ma1wdna36c06d24wbdc0"))))
2230 (build-system pyproject-build-system)
2231 (native-inputs
2232 (list python-pytest
2233 python-hatchling))
2234 (propagated-inputs
2235 (list python-rich))
2236 (home-page "https://github.com/hamdanal/rich-argparse")
2237 (synopsis "Format argparse and optparse help using rich")
2238 (description
2239 "This package improves the look and readability of argparse's help while
2240requiring minimal changes to the code.")
2241 (license license:expat)))
2242
2243(define-public python-rush
2244 (package
2245 (name "python-rush")
2246 (version "2021.04.0")
2247 (source
2248 (origin
2249 (method git-fetch)
2250 (uri (git-reference
2251 (url "https://github.com/sigmavirus24/rush")
2252 (commit version)))
2253 (file-name (git-file-name name version))
2254 (sha256
2255 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
2256 (build-system pyproject-build-system)
2257 (arguments
2258 (list
2259 #:test-flags
2260 ;; E ValueError: Redis URL must specify one of the following schemes
2261 ;; (redis://, rediss://, unix://)
2262 #~(list "-k" (string-append "not test_valid_url[redis://]"
2263 " and not test_valid_url[rediss://]"))))
2264 (native-inputs
2265 (list python-mock
2266 python-redis
2267 python-rfc3986
2268 python-pytest
2269 python-setuptools))
2270 (propagated-inputs
2271 (list python-attrs))
2272 (home-page "https://github.com/sigmavirus24/rush")
2273 (synopsis "Throttling and rate-limiting algorithms for Python")
2274 (description
2275 "This package provides is a small collection of algorithms that can be
2276reused when throttling user interactions with a resource (e.g., an API).")
2277 (license license:expat)))
2278
2279(define-public python-safety-schemas
2280 (package
2281 (name "python-safety-schemas")
2282 (version "0.0.14")
2283 (source
2284 (origin
2285 (method url-fetch)
2286 (uri (pypi-uri "safety_schemas" version))
2287 (sha256
2288 (base32 "0smgszbd3nb7jh61cgpycqhcvfwwdyaai5amw8mmf6g9b5x3z5a9"))))
2289 (build-system pyproject-build-system)
2290 (arguments
2291 (list
2292 #:test-flags
2293 #~(list "-k" (string-join
2294 ;; These tests are failing for unknown reasons.
2295 ;; (AssertionError).
2296 (list "not test_model[ConfigModel-ConfigModel]"
2297 "test_model[MetadataModel-MetadataModel]"
2298 "test_model[PolicyFileModel-PolicyFileModel]"
2299 "test_model[ProjectModel-ProjectModel]"
2300 "test_model[ReportModel-ReportModel]")
2301 " and not "))))
2302 (propagated-inputs (list python-dparse
2303 python-packaging
2304 python-pydantic
2305 python-ruamel.yaml
2306 python-typing-extensions))
2307 (native-inputs (list python-deepdiff python-hatchling python-pytest))
2308 ;; Source code is not yet published outside of PyPI:
2309 ;; https://github.com/pyupio/safety/issues/494
2310 (home-page "https://pypi.org/project/safety-schemas/")
2311 (synopsis "Schemas for Safety tools")
2312 (description "This package contains models and schemas used by Safety.")
2313 (license license:expat)))
2314
2315(define-public python-senf
2316 (package
2317 (name "python-senf")
2318 (version "1.5.0")
2319 (source
2320 (origin
2321 (method url-fetch)
2322 (uri (pypi-uri "senf" version))
2323 (sha256
2324 (base32 "1lcccdb4hrfksbr8vy4nljial85six1w39l5xlw16m4qx884anch"))))
2325 (build-system pyproject-build-system)
2326 (arguments
2327 (list
2328 #:test-flags
2329 '(list "--deselect" "tests/test_api.py::test_getuserdir"
2330 "--deselect" "tests/test_api.py::test_expanduser_user")))
2331 (native-inputs (list python-setuptools python-wheel python-pytest))
2332 (home-page "https://github.com/quodlibet/senf")
2333 (synopsis "Text, bytes and paths conversion functions for Python")
2334 (description "Senf introduces a new platform native string type called
2335fsnative. It adds functions to convert text, bytes and paths to and from that
2336new type and helper functions to integrate it nicely with the Python
2337stdlib.")
2338 (license license:expat)))
2339
2340(define-public python-session-info2
2341 (package
2342 (name "python-session-info2")
2343 (version "0.2")
2344 (source
2345 (origin
2346 (method url-fetch)
2347 (uri (pypi-uri "session_info2" version))
2348 (sha256
2349 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
2350 (build-system pyproject-build-system)
2351 (arguments
2352 (list
2353 #:test-flags
2354 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
2355 ;; Tests require Jupyter Client.
2356 "--ignore=tests/test_subprocess.py")))
2357 (native-inputs
2358 (list python-hatch-docstring-description
2359 python-hatch-vcs
2360 python-hatchling
2361 python-pytest
2362 python-pytest-asyncio))
2363 (home-page "https://session-info2.readthedocs.io/")
2364 (synopsis "Print versions of imported packages")
2365 (description
2366 "This package implements a functionality to print versions of imported
2367Python packages.")
2368 (license license:mpl2.0)))
2369
2370(define-public python-show-in-file-manager
2371 (package
2372 (name "python-show-in-file-manager")
2373 (version "1.1.5")
2374 (source
2375 (origin
2376 (method url-fetch)
2377 (uri (pypi-uri "show-in-file-manager" version))
2378 (sha256
2379 (base32 "111d363i7m0lr295301q39j6h0l6nfybyn2cvn7xi3yll60a24zd"))))
2380 (build-system pyproject-build-system)
2381 (native-inputs
2382 (list python-argparse-manpage
2383 python-setuptools))
2384 (propagated-inputs
2385 (list python-packaging
2386 ;; python-pywin32
2387 python-pyxdg))
2388 (home-page "https://github.com/damonlynch/showinfilemanager")
2389 (synopsis "Open the system file manager and select files in it")
2390 (description
2391 "Show in File Manager is a Python package to open the system file manager
2392and optionally select files in it. The point is not to open the files, but to
2393select them in the file manager, thereby highlighting the files and allowing
2394the user to quickly do something with them.")
2395 (license license:expat)))
2396
2397(define-public python-shxparser
2398 (package
2399 (name "python-shxparser")
2400 (version "0.0.2")
2401 (source
2402 (origin
2403 (method url-fetch)
2404 (uri (pypi-uri "shxparser" version))
2405 (sha256
2406 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
2407 (build-system pyproject-build-system)
2408 (arguments (list #:test-backend #~'unittest))
2409 (native-inputs
2410 (list python-svgelements python-setuptools))
2411 (home-page "https://github.com/tatarize/shxparser")
2412 (synopsis "SHX line font parser")
2413 (description
2414 "This is a pure python parser for SHX Hershey font files that are an
2415AutoCad format which can encode single line fonts. This format is used for
2416many CNC and laser operations.")
2417 (license license:expat)))
2418
2419(define-public python-simplify-polyline
2420 (package
2421 (name "python-simplify-polyline")
2422 (version "0.1.0")
2423 (source
2424 (origin
2425 (method url-fetch)
2426 (uri (pypi-uri "simplify_polyline" version))
2427 (sha256
2428 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
2429 (build-system pyproject-build-system)
2430 (native-inputs
2431 (list python-pytest
2432 python-setuptools
2433 python-setuptools-scm
2434 python-wheel))
2435 (propagated-inputs
2436 (list python-numpy))
2437 (home-page "https://github.com/ShayHill/simplify_polyline")
2438 (synopsis "Simplify an open or closed polyline")
2439 (description
2440 "This package implements functionality to work with plyline.
2441Features:
2442@itemize
2443@item Visvalingham-Whyatt - removes the smallest triangles formed by
2444three consecutive points in a polyline or polygon
2445@item Douglas-Peucker - gives a better representation of the convex hull
2446@end itemize")
2447 (license license:expat)))
2448
2449(define-public python-siphash24
2450 (package
2451 (name "python-siphash24")
2452 (version "1.8")
2453 (source
2454 (origin
2455 (method git-fetch)
2456 (uri (git-reference
2457 (url "https://github.com/dnicolodi/python-siphash24/")
2458 (commit (string-append "v" version))))
2459 (file-name (git-file-name name version))
2460 (sha256
2461 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
2462 (build-system pyproject-build-system)
2463 (arguments
2464 (list
2465 #:test-backend #~'custom
2466 #:test-flags #~(list "test.py")
2467 #:phases
2468 #~(modify-phases %standard-phases
2469 (add-after 'unpack 'patch-pyproject
2470 (lambda _
2471 (substitute* "pyproject.toml"
2472 ;; meson-python: error: Field `project.license` has an invalid
2473 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
2474 ;; LGPL-2.1-or-later`)
2475 (("^license = .*")
2476 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
2477 (native-inputs
2478 (list meson-python
2479 pkg-config
2480 python-cython
2481 python-pytest))
2482 (inputs
2483 (list c-siphash))
2484 (home-page "https://github.com/dnicolodi/python-siphash24/")
2485 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
2486 (description
2487 "This package provides a C-based implementation of
2488@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
2489compatible with the hash functions provided by the hashlib standard library
2490module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
2491 ;; They are in LICENSES directory:
2492 (license (list license:asl2.0
2493 license:lgpl2.1+))))
2494
2495(define-public python-snakesay
2496 (package
2497 (name "python-snakesay")
2498 (version "0.10.4")
2499 (source
2500 (origin
2501 (method git-fetch)
2502 (uri (git-reference
2503 (url "https://github.com/pythonanywhere/snakesay")
2504 (commit (string-append "v" version))))
2505 (file-name (git-file-name name version))
2506 (sha256
2507 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
2508 (build-system pyproject-build-system)
2509 (arguments
2510 ;; XXX: We don't have python-uv-build yet.
2511 (list #:build-backend "setuptools.build_meta"))
2512 (native-inputs (list python-pytest python-setuptools))
2513 (home-page "https://github.com/pythonanywhere/snakesay")
2514 (synopsis "Like @command{cowsay} but with Python flavor")
2515 (description
2516 "This package provides a simple ASCII art pictures generator of a
2517Snake with a message.")
2518 (license license:expat)))
2519
2520(define-public python-jaconv
2521 (package
2522 (name "python-jaconv")
2523 ;; Last release is not tagged.
2524 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
2525 (revision . "0")))
2526 (version (git-version "0.4.0"
2527 (assoc-ref properties 'revision)
2528 (assoc-ref properties 'commit)))
2529 (source
2530 (origin
2531 (method git-fetch)
2532 (uri (git-reference
2533 (url "https://github.com/ikegami-yukino/jaconv")
2534 (commit (assoc-ref properties 'commit))))
2535 (file-name (git-file-name name version))
2536 (sha256
2537 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
2538 (build-system pyproject-build-system)
2539 (native-inputs (list python-setuptools python-pynose))
2540 (home-page "https://github.com/ikegami-yukino/jaconv")
2541 (synopsis
2542 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
2543Hankaku, Zenkaku")
2544 (description
2545 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
2546Hankaku (half-width character) and Zenkaku (full-width character)")
2547 (license license:expat)))
2548
2549(define-public python-janus
2550 (package
2551 (name "python-janus")
2552 (version "1.0.0")
2553 (source
2554 (origin
2555 (method url-fetch)
2556 (uri (pypi-uri "janus" version))
2557 (sha256
2558 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
2559 (build-system pyproject-build-system)
2560 (native-inputs
2561 (list python-pytest python-pytest-cov python-pytest-asyncio
2562 python-setuptools python-wheel))
2563 (propagated-inputs (list python-typing-extensions))
2564 (home-page "https://github.com/aio-libs/janus/")
2565 (synopsis
2566 "Sync-async queue to interoperate between asyncio tasks and classic threads")
2567 (description
2568 "Mixed sync-async queue, supposed to be used for communicating between
2569classic synchronous (threaded) code and asynchronous (in terms of
2570@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
2571@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
2572library has two faces: synchronous and asynchronous interface. Synchronous is
2573fully compatible with
2574@url{https://docs.python.org/3/library/queue.html,standard queue},
2575asynchronous one follows
2576@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
2577design}.")
2578 (license license:asl2.0)))
2579
2580(define-public python-concurrent-log-handler
2581 (package
2582 (name "python-concurrent-log-handler")
2583 (version "0.9.25")
2584 ;; No tests in the PyPI tarball.
2585 (source
2586 (origin
2587 (method git-fetch)
2588 (uri (git-reference
2589 (url "https://github.com/Preston-Landers/concurrent-log-handler")
2590 (commit version)))
2591 (file-name (git-file-name name version))
2592 (sha256
2593 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
2594 (build-system pyproject-build-system)
2595 (arguments
2596 (list
2597 ;; XXX: Tests are broken, no new version fixing them yet.
2598 #:tests? #f))
2599 (native-inputs
2600 (list python-hatchling))
2601 (propagated-inputs
2602 (list python-portalocker))
2603 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
2604 (synopsis
2605 "Additional log handler for Python's standard @code{logging} package")
2606 (description
2607 "This package provides an additional log handler for Python's standard
2608@code{logging} package (PEP 282). This handler will write log events to a log
2609file which is rotated when the log file reaches a certain size. Multiple
2610processes can safely write to the same log file concurrently and rotated logs
2611can be gzipped if desired. An optional threaded queue logging handler is
2612provided to perform logging in the background.")
2613 (license license:asl2.0)))
2614
2615(define-public python-lazy
2616 (package
2617 (name "python-lazy")
2618 (version "1.6")
2619 (source
2620 (origin
2621 (method url-fetch)
2622 (uri (pypi-uri "lazy" version))
2623 (sha256
2624 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
2625 (build-system pyproject-build-system)
2626 (native-inputs (list python-pytest python-setuptools python-wheel))
2627 (home-page "https://github.com/stefanholek/lazy")
2628 (synopsis "Lazy attributes for Python objects")
2629 (description "This package provides a decorator to create lazy
2630attributes.")
2631 (license license:bsd-2)))
2632
2633(define-public python-logfury
2634 (package
2635 (name "python-logfury")
2636 (version "1.0.1")
2637 (source
2638 (origin
2639 (method url-fetch)
2640 (uri (pypi-uri "logfury" version))
2641 (sha256
2642 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
2643 (build-system pyproject-build-system)
2644 (native-inputs
2645 (list python-pytest
2646 python-setuptools
2647 python-setuptools-scm
2648 python-testfixtures
2649 python-wheel))
2650 (home-page "https://github.com/reef-technologies/logfury/")
2651 (synopsis "Logging of method calls for python libraries")
2652 (description
2653 "Logfury is a tool for python library maintainers. It allows for
2654responsible, low-boilerplate logging of method calls.")
2655 (license license:bsd-3)))
2656
2657(define-public python-logzero
2658 (package
2659 (name "python-logzero")
2660 (version "1.7.0")
2661 (source
2662 (origin
2663 (method git-fetch)
2664 (uri (git-reference
2665 (url "https://github.com/metachris/logzero")
2666 (commit (string-append "v" version))))
2667 (file-name (git-file-name name version))
2668 (sha256
2669 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
2670 (build-system pyproject-build-system)
2671 (native-inputs (list python-pytest python-setuptools))
2672 (home-page "https://github.com/metachris/logzero")
2673 (synopsis "Robust and effective logging for Python")
2674 (description
2675 "@code{logzero} provides a fully configured Python logger object for
2676easy logging and rotating to a console or a file.")
2677 (license license:expat)))
2678
2679(define-public python-logbook
2680 (package
2681 (name "python-logbook")
2682 (version "1.8.2")
2683 (source
2684 (origin
2685 (method url-fetch)
2686 (uri (pypi-uri "logbook" version))
2687 (sha256
2688 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
2689 (build-system pyproject-build-system)
2690 (native-inputs
2691 (list python-brotli
2692 python-cython
2693 python-pytest
2694 python-setuptools
2695 python-wheel))
2696 (home-page "https://github.com/getlogbook/logbook")
2697 (synopsis "Logbook is a logging replacement for Python")
2698 (description
2699 "Logbook is a logging system for Python that replaces the standard
2700library’s logging module. It was designed with both complex and simple
2701applications in mind and the idea to make logging fun.")
2702 (license license:bsd-3)))
2703
2704(define-public python-databind-core
2705 (package
2706 (name "python-databind-core")
2707 (version "4.4.2")
2708 (source
2709 (origin
2710 (method url-fetch)
2711 (uri (pypi-uri "databind.core" version))
2712 (sha256
2713 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
2714 (snippet
2715 #~(begin (use-modules (guix build utils))
2716 ;; The problem with python-typing-extensions >= 4.7 is only
2717 ;; with python-3.7.
2718 (substitute* "pyproject.toml"
2719 ((",<4.7.*") "\"\n"))))))
2720 (build-system pyproject-build-system)
2721 (arguments
2722 (list
2723 #:phases
2724 #~(modify-phases %standard-phases
2725 (add-after 'install 'fix-name
2726 (lambda* (#:key inputs outputs #:allow-other-keys)
2727 (let* ((sitedir (site-packages inputs outputs))
2728 (dist-info
2729 (string-append sitedir "/databind_core-" #$version ".dist-info")))
2730 (substitute* (string-append dist-info "/METADATA")
2731 (("Name: databind-core")
2732 "Name: databind.core"))
2733 (substitute* (string-append dist-info "/RECORD")
2734 (("databind_core") "databind.core"))
2735 (rename-file dist-info
2736 (string-append sitedir
2737 "/databind.core-"
2738 #$version ".dist-info"))))))))
2739 (propagated-inputs
2740 (list python-deprecated
2741 python-nr-date
2742 python-nr-stream
2743 python-typeapi
2744 python-typing-extensions))
2745 (native-inputs
2746 (list python-poetry-core python-pytest))
2747 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
2748 (synopsis
2749 "Library for de-/serializing Python dataclasses")
2750 (description
2751 "Databind is a library inspired by jackson-databind to de-/serialize
2752Python dataclasses.")
2753 (license license:expat)))
2754
2755(define-public python-databind-json
2756 (package
2757 (name "python-databind-json")
2758 (version "4.4.2")
2759 (source
2760 (origin
2761 (method url-fetch)
2762 (uri (pypi-uri "databind.json" version))
2763 (sha256
2764 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
2765 (snippet
2766 #~(begin (use-modules (guix build utils))
2767 ;; The problem with python-typing-extensions >= 4.7 is only
2768 ;; with python-3.7.
2769 (substitute* "pyproject.toml"
2770 ((",<4.7.*") "\"\n"))))))
2771 (build-system pyproject-build-system)
2772 (arguments
2773 (list
2774 #:phases
2775 #~(modify-phases %standard-phases
2776 (add-after 'install 'fix-name
2777 (lambda* (#:key inputs outputs #:allow-other-keys)
2778 (let* ((sitedir (site-packages inputs outputs))
2779 (dist-info
2780 (string-append sitedir "/databind_json-" #$version ".dist-info")))
2781 (substitute* (string-append dist-info "/METADATA")
2782 (("Name: databind-json")
2783 "Name: databind.json"))
2784 (substitute* (string-append dist-info "/RECORD")
2785 (("databind_json") "databind.json"))
2786 (rename-file dist-info
2787 (string-append sitedir
2788 "/databind.json-"
2789 #$version ".dist-info"))))))))
2790 (propagated-inputs
2791 (list python-databind-core python-nr-date
2792 python-typeapi python-typing-extensions))
2793 (native-inputs (list python-poetry-core python-pytest))
2794 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
2795 (synopsis
2796 "De-/serialize Python dataclasses to or from JSON payloads")
2797 (description
2798 "The @code{databind.json} package implements the de-/serialization to or
2799from JSON payloads using the @code{databind.core} framework.")
2800 (license license:expat)))
2801
2802(define-public python-dlmanager
2803 (package
2804 (name "python-dlmanager")
2805 (version "0.1.1")
2806 (source (origin
2807 (method git-fetch)
2808 (uri (git-reference
2809 (url "https://github.com/parkouss/dlmanager")
2810 (commit version)))
2811 (file-name (git-file-name name version))
2812 (sha256
2813 (base32
2814 "0f2j7d396z50yd5r86jx8m5bxyv2i0cw967j68xcwpcg3b216zmr"))
2815 (modules '((guix build utils)))
2816 (snippet
2817 #~(begin
2818 (substitute* "setup.py"
2819 (("pytest.main.self.pytest_args.")
2820 "pytest.main(self.pytest_args.split(' '))"))))))
2821 (build-system python-build-system)
2822 (native-inputs
2823 (list python-pytest python-mock))
2824 (propagated-inputs
2825 (list python-requests python-six))
2826 (home-page "https://github.com/parkouss/dlmanager")
2827 (synopsis "Download manager library")
2828 (description
2829 "Dlmanager is a download manager library. It can download files in
2830background and in parallel, and cancel downloads. It stores downloads in
2831a given directory, avoiding re-downloading files and limits the size of this
2832directory, removing oldest files.")
2833 (license license:gpl3+)))
2834
2835(define-public python-docspec
2836 (package
2837 (name "python-docspec")
2838 (version "2.2.1")
2839 (source
2840 (origin
2841 (method url-fetch)
2842 (uri (pypi-uri "docspec" version))
2843 (sha256
2844 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
2845 (build-system pyproject-build-system)
2846 (arguments (list #:tests? #false)) ;there are none
2847 (propagated-inputs
2848 (list python-databind-core
2849 python-databind-json
2850 python-deprecated))
2851 (native-inputs
2852 (list python-poetry-core))
2853 (home-page "https://github.com/NiklasRosenstein/python-docspec")
2854 (synopsis "Represent API documentation of programming languages")
2855 (description
2856 "Docspec is a JSON object specification for representing API
2857documentation of programming languages.")
2858 (license license:expat)))
2859
2860(define-public python-docspec-python
2861 (package
2862 (name "python-docspec-python")
2863 (version "2.2.1")
2864 (source
2865 (origin
2866 (method url-fetch)
2867 (uri (pypi-uri "docspec_python" version))
2868 (sha256
2869 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
2870 (build-system pyproject-build-system)
2871 (arguments
2872 (list #:tests? #false)) ;there are none
2873 (propagated-inputs (list python-docspec python-nr-util))
2874 (native-inputs (list python-poetry-core))
2875 (home-page "https://github.com/NiklasRosenstein/docspec/")
2876 (synopsis "Produce docspec data from Python source code")
2877 (description
2878 "This package provides a parser based on @code{lib2to3} producing
2879@code{docspec} data from Python source code.")
2880 (license license:expat)))
2881
2882(define-public python-fqdn
2883 (package
2884 (name "python-fqdn")
2885 (version "1.5.1")
2886 (source
2887 (origin
2888 (method url-fetch)
2889 (uri (pypi-uri "fqdn" version))
2890 (sha256
2891 (base32 "17yqckhymnamszhg06751c83rg3fnr5iy33a135bazvngrkx6phh"))))
2892 (build-system pyproject-build-system)
2893 (arguments (list #:tests? #false)) ;there are none
2894 (propagated-inputs (list python-cached-property))
2895 (native-inputs (list python-setuptools python-wheel))
2896 (home-page "https://github.com/ypcrts/fqdn")
2897 (synopsis "Validate domain names against RFC 1123")
2898 (description
2899 "This package validates fully-qualified domain names against RFC 1123, so
2900that they are acceptable to modern bowsers")
2901 (license license:mpl2.0)))
2902
2903(define-public python-fire
2904 (package
2905 (name "python-fire")
2906 (version "0.7.0")
2907 (source
2908 (origin
2909 (method url-fetch)
2910 (uri (pypi-uri "fire" version))
2911 (sha256
2912 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
2913 (build-system pyproject-build-system)
2914 (propagated-inputs (list python-termcolor))
2915 (native-inputs (list python-pytest python-setuptools python-wheel))
2916 (synopsis "Library for automatically generating command line interfaces")
2917 (description
2918 "Fire is a library for automatically generating command line interfaces
2919from absolutely any Python object. The following are the advantages:
2920@itemize
2921@item A simple way to create a CLI in Python.
2922@item A helpful tool for developing and debugging Python code.
2923@item Helps with exploring existing code or turning other people's code into a
2924command line interface.
2925@item Makes transitioning between Bash and Python easier.
2926@item Makes using a Python REPL easier by setting up the REPL with the modules
2927and variables you'll need already imported and created.
2928@end itemize")
2929 (home-page "https://github.com/google/python-fire")
2930 (license license:asl2.0)))
2931
2932(define-public python-fit-nbinom
2933 (package
2934 (name "python-fit-nbinom")
2935 (version "1.1")
2936 (source (origin
2937 (method url-fetch)
2938 (uri (pypi-uri "fit_nbinom" version))
2939 (sha256
2940 (base32
2941 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
2942 (build-system pyproject-build-system)
2943 (arguments
2944 (list
2945 #:tests? #false ;there are none
2946 #:phases
2947 '(modify-phases %standard-phases
2948 (add-after 'unpack 'remove-invalid-syntax
2949 (lambda _
2950 (substitute* "setup.py"
2951 ((".\\*\"") "\"")))))))
2952 (propagated-inputs (list python-numpy python-scipy))
2953 (native-inputs (list python-setuptools python-wheel))
2954 (home-page "https://github.com/joachimwolff/fit_nbinom")
2955 (synopsis "Negative binomial maximum likelihood estimator")
2956 (description "This package provides an implementation in Python using
2957scipy and numpy of negative binomial maximum likelihood estimation.")
2958 (license license:gpl3+)))
2959
2960(define-public python-docrep
2961 (package
2962 (name "python-docrep")
2963 (version "0.3.2")
2964 (source (origin
2965 (method url-fetch)
2966 (uri (pypi-uri "docrep" version))
2967 (sha256
2968 (base32
2969 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
2970 (build-system pyproject-build-system)
2971 (propagated-inputs (list python-six))
2972 (native-inputs (list python-pytest python-pytest-runner
2973 python-setuptools python-wheel))
2974 (home-page "https://github.com/Chilipp/docrep")
2975 (synopsis "Python package for docstring repetition")
2976 (description "Docrep is the documentation repetition module. This module
2977targets developers that develop complex and nested Python APIs and helps them
2978to create a well-documented piece of software.")
2979 (license license:asl2.0)))
2980
2981(define-public python-dotmap
2982 (package
2983 (name "python-dotmap")
2984 (version "1.3.30")
2985 (source
2986 (origin
2987 (method url-fetch)
2988 (uri (pypi-uri "dotmap" version))
2989 (sha256
2990 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
2991 (build-system pyproject-build-system)
2992 (arguments (list #:test-backend #~'unittest))
2993 (native-inputs (list python-setuptools))
2994 (home-page "https://github.com/drgrib/dotmap")
2995 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
2996 (description
2997 "DotMap is a dot-access dictionary subclass that has dynamic
2998hierarchy creation, can be initialized with keys, can be initialized from a
2999dictionary, can be convert to a dictionary, and is ordered by insertion.")
3000 (license license:expat)))
3001
3002(define-public python-dotty-dict
3003 (package
3004 (name "python-dotty-dict")
3005 (version "1.3.1")
3006 (source
3007 (origin
3008 (method git-fetch)
3009 (uri (git-reference
3010 (url "https://github.com/pawelzny/dotty_dict")
3011 (commit (string-append "v" version))))
3012 (sha256
3013 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
3014 (build-system pyproject-build-system)
3015 (native-inputs
3016 (list python-poetry-core
3017 python-pytest
3018 python-setuptools))
3019 (home-page "https://github.com/pawelzny/dotty_dict")
3020 (synopsis "Python library for accessing dictionaries using a dot syntax")
3021 (description "This package provides a library that wraps the traditional
3022Python dictionaries and provides a syntax to access nested dictionaries values
3023using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
3024 (license license:expat)))
3025
3026(define-public python-affine
3027 (package
3028 (name "python-affine")
3029 (version "2.4.0")
3030 (source (origin
3031 (method url-fetch)
3032 (uri (pypi-uri "affine" version))
3033 (sha256
3034 (base32
3035 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
3036 (build-system pyproject-build-system)
3037 (propagated-inputs (list python-coveralls python-flake8 python-pydocstyle
3038 python-pytest python-pytest-cov))
3039 (native-inputs (list python-flit-core))
3040 (home-page "https://github.com/rasterio/affine")
3041 (synopsis "Matrices describing affine transformation of the plane")
3042 (description "This is a package for matrices describing the affine
3043transformation of the plane.")
3044 (license license:bsd-3)))
3045
3046(define-public python-argopt
3047 (package
3048 (name "python-argopt")
3049 (version "0.9.1")
3050 (source
3051 (origin
3052 (method url-fetch)
3053 (uri (pypi-uri "argopt" version))
3054 (sha256
3055 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
3056 (build-system pyproject-build-system)
3057 (native-inputs
3058 (list python-pytest
3059 python-pytest-timeout
3060 python-setuptools
3061 python-setuptools-scm
3062 python-wheel))
3063 (home-page "https://github.com/casperdcl/argopt")
3064 (synopsis "Generate a command-line interface from a docstring")
3065 (description
3066 "This package provides tools to define a command line interface
3067from a docstring rather than the other way around.")
3068 (license license:mpl2.0)))
3069
3070(define-public python-array-api-compat
3071 (package
3072 (name "python-array-api-compat")
3073 (version "1.12.0")
3074 (source
3075 (origin
3076 (method url-fetch)
3077 (uri (pypi-uri "array_api_compat" version))
3078 (sha256
3079 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
3080 (build-system pyproject-build-system)
3081 ;; Tests would require all supported array libraries, including pytorch
3082 (arguments (list #:tests? #false))
3083 (native-inputs
3084 (list python-setuptools))
3085 (home-page "https://data-apis.org/array-api-compat/")
3086 (synopsis "Array API compatibility wrapper for NumPy et al")
3087 (description
3088 "This package provides a wrapper around @code{NumPy} and other array
3089libraries to make them compatible with the Array API standard")
3090 (license license:expat)))
3091
3092(define-public python-array-api-strict
3093 (package
3094 (name "python-array-api-strict")
3095 (version "2.4.1")
3096 (source
3097 (origin
3098 (method url-fetch)
3099 (uri (pypi-uri "array_api_strict" version))
3100 (sha256
3101 (base32 "0k1v3h54y1yny8mhgwjk6p51zf87farfk1xn9842g5lcrfhxqxvc"))))
3102 (build-system pyproject-build-system)
3103 (arguments
3104 (list
3105 ;; tests: 584 passed, 1 skipped, 2 deselected
3106 #:test-flags
3107 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
3108 #~(list "-k" (string-append "not test_disabled_extensions"
3109 " and not test_environment_variables"))))
3110 (native-inputs
3111 (list python-pytest
3112 python-setuptools
3113 python-setuptools-scm))
3114 (propagated-inputs
3115 (list python-numpy))
3116 (home-page "https://data-apis.org/array-api-strict/")
3117 (synopsis "Strict implementation of the Python array API")
3118 (description
3119 "@code{array_api_strict} is a strict, minimal implementation of the
3120@url{https://data-apis.org/array-api/latest/, Python array API}.
3121
3122The purpose of array-api-strict is to provide an implementation of the array
3123API for consuming libraries to test against so they can be completely sure
3124their usage of the array API is portable.")
3125 (license license:bsd-3)))
3126
3127(define-public python-cachetools
3128 (package
3129 (name "python-cachetools")
3130 (version "6.1.0")
3131 (source
3132 (origin
3133 (method url-fetch)
3134 (uri (pypi-uri "cachetools" version))
3135 (sha256
3136 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
3137 (build-system pyproject-build-system)
3138 (native-inputs
3139 (list python-pytest
3140 python-setuptools
3141 python-wheel))
3142 (home-page "https://github.com/tkem/cachetools/")
3143 (synopsis "Extensible memoizing collections and decorators")
3144 (description "This module provides various memoizing collections and
3145decorators, including variants of the Python standard library's
3146@code{lru_cache} function decorator.")
3147 (license license:expat)))
3148
3149(define-public python-cachetools-5
3150 (package
3151 (inherit python-cachetools)
3152 (version "5.5.2")
3153 (source
3154 (origin
3155 (method url-fetch)
3156 (uri (pypi-uri "cachetools" version))
3157 (sha256
3158 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
3159
3160(define-public python-colorclass
3161 (package
3162 (name "python-colorclass")
3163 (version "2.2.2")
3164 (source
3165 (origin
3166 (method git-fetch)
3167 (uri (git-reference
3168 (url "https://github.com/matthewdeanmartin/colorclass")
3169 (commit (string-append "v" version))))
3170 (file-name (git-file-name name version))
3171 (sha256
3172 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
3173 (build-system pyproject-build-system)
3174 (arguments
3175 (list
3176 #:test-flags
3177 #~(list "-k" "not test_piped") ; Unclear why this test fails.
3178 #:phases
3179 #~(modify-phases %standard-phases
3180 (add-after 'unpack 'use-poetry-core
3181 (lambda _
3182 ;; Patch to use the core poetry API.
3183 (substitute* "pyproject.toml"
3184 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
3185 (native-inputs (list python-poetry-core python-pytest))
3186 (home-page "https://github.com/matthewdeanmartin/colorclass")
3187 (synopsis "Colorful console applications with Python")
3188 (description
3189 "This package provides an ANSI color text library for Python. It
3190provides automatic coloring for dark or light terminals.")
3191 (license license:expat)))
3192
3193(define-public python-colorcet
3194 (package
3195 (name "python-colorcet")
3196 (version "3.1.1a1")
3197 (source
3198 (origin
3199 (method url-fetch)
3200 (uri (pypi-uri "colorcet" version))
3201 (sha256
3202 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
3203 (build-system pyproject-build-system)
3204 (native-inputs (list python-nbval
3205 python-packaging
3206 python-pytest
3207 python-pytest-mpl
3208 python-setuptools
3209 python-setuptools-scm))
3210 (home-page "https://colorcet.holoviz.org/")
3211 (synopsis "Collection of perceptually uniform colormaps")
3212 (description "Colorcet is a collection of perceptually accurate 256-color
3213colormaps for use with Python plotting programs like Bokeh, Matplotlib,
3214HoloViews, and Datashader.")
3215 (license license:cc-by4.0)))
3216
3217(define-public python-colored
3218 (package
3219 (name "python-colored")
3220 (version "2.3.0")
3221 (source (origin
3222 (method git-fetch)
3223 (uri (git-reference
3224 (url "https://gitlab.com/dslackw/colored")
3225 (commit version)))
3226 (file-name (git-file-name name version))
3227 (sha256
3228 (base32
3229 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
3230 (build-system pyproject-build-system)
3231 (arguments
3232 (list
3233 #:phases
3234 #~(modify-phases %standard-phases
3235 (add-before 'check 'pre-check
3236 (lambda _
3237 ;; Tests expect ANSI escape codes for colors.
3238 (setenv "FORCE_COLOR" "1"))))))
3239 (native-inputs (list python-flit-core python-pytest))
3240 (home-page "https://gitlab.com/dslackw/colored")
3241 (synopsis "Simple library for color and formatting to terminal")
3242 (description "This is a very simple Python library for color and
3243formatting in the terminal. It comes with a collection of color codes and
3244names for 256 color terminal setups.")
3245 (license license:expat)))
3246
3247(define-public python-colored-traceback
3248 ;; No tags in upstream repository.
3249 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
3250 (revision "0"))
3251 (package
3252 (name "python-colored-traceback")
3253 (version (git-version "0.4.2" revision commit))
3254 (source
3255 (origin
3256 (method git-fetch)
3257 (uri (git-reference
3258 (url "https://github.com/staticshock/colored-traceback.py")
3259 (commit commit)))
3260 (file-name (git-file-name name version))
3261 (sha256
3262 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
3263 (build-system pyproject-build-system)
3264 (arguments
3265 ;; Tests are incompatible with current python version.
3266 (list #:tests? #f))
3267 (propagated-inputs (list python-colorama python-pygments))
3268 (native-inputs (list python-setuptools python-wheel))
3269 (home-page "https://github.com/staticshock/colored-traceback.py")
3270 (synopsis "Automatically color uncaught exception tracebacks")
3271 (description "This package provides python utilities to automatically
3272color uncaught exception tracebacks.")
3273 (license license:isc))))
3274
3275(define-public python-colorful
3276 (package
3277 (name "python-colorful")
3278 (version "0.5.8")
3279 (source
3280 (origin
3281 (method git-fetch)
3282 (uri (git-reference
3283 (url "https://github.com/timofurrer/colorful")
3284 (commit (string-append "v" version))))
3285 (file-name (git-file-name name version))
3286 (sha256
3287 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
3288 (build-system pyproject-build-system)
3289 (native-inputs
3290 (list python-pytest
3291 python-setuptools))
3292 (propagated-inputs
3293 (list python-colorama))
3294 (home-page "http://github.com/timofurrer/colorful")
3295 (synopsis "Terminal string styling")
3296 (description "Colorful provides an array of text styles, that can be used
3297as functions or string constants to form colored terminal output.")
3298 (license license:expat)))
3299
3300(define-public python-colorthief
3301 (package
3302 (name "python-colorthief")
3303 (version "0.2.1")
3304 (source
3305 (origin
3306 (method url-fetch)
3307 (uri (pypi-uri "colorthief" version))
3308 (sha256
3309 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
3310 (build-system pyproject-build-system)
3311 (arguments
3312 (list #:tests? #f)) ;no tests in PyPI or Git
3313 (native-inputs (list python-setuptools))
3314 (propagated-inputs (list python-pillow))
3315 (home-page "https://github.com/fengsp/color-thief-py")
3316 (synopsis "Grab the color palette of an image")
3317 (description
3318 "This package provides methods to determine the dominant color
3319of an image, as well as constructing a representative color palette.")
3320 (license license:bsd-3)))
3321
3322(define-public python-construct-classes
3323 (package
3324 (name "python-construct-classes")
3325 (version "0.1.2")
3326 (source
3327 (origin
3328 (method git-fetch)
3329 (uri (git-reference
3330 (url "https://github.com/matejcik/construct-classes")
3331 (commit (string-append "v" version))))
3332 (file-name (git-file-name name version))
3333 (sha256
3334 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
3335 (build-system pyproject-build-system)
3336 (propagated-inputs
3337 (list python-construct))
3338 (native-inputs
3339 (list python-poetry-core
3340 python-pytest))
3341 (home-page "https://github.com/matejcik/construct-classes")
3342 (synopsis "Parse binary structs into dataclasses")
3343 (description "This package provides a parser to parse binary structs
3344into dataclasses.")
3345 (license license:expat)))
3346
3347(define-public python-contourpy
3348 (package
3349 (name "python-contourpy")
3350 (version "1.3.3")
3351 (source
3352 (origin
3353 (method url-fetch)
3354 (uri (pypi-uri "contourpy" version))
3355 (sha256
3356 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
3357 (build-system pyproject-build-system)
3358 (arguments
3359 (list
3360 ;; tests: 1746 passed, 17 skipped, 8 warnings
3361 #:test-flags
3362 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
3363 #~(list "-m" "not image"
3364 ;; Tests that pass but avoided for load reasons.
3365 "-k" "not test_filled_random_big and not test_lines_random_big")))
3366 (native-inputs
3367 (list cmake-minimal
3368 meson-python
3369 pkg-config
3370 pybind11
3371 python-pytest
3372 python-wurlitzer))
3373 (propagated-inputs
3374 (list python-numpy))
3375 (home-page "https://contourpy.readthedocs.io/")
3376 (synopsis
3377 "Python library for calculating contours of 2D quadrilateral grids")
3378 (description
3379 "ContourPy is a Python library for calculating contours of 2D
3380quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
3381 (license license:bsd-3)))
3382
3383(define-public python-lunr
3384 (package
3385 (name "python-lunr")
3386 (version "0.8.0")
3387 (source
3388 (origin
3389 (method url-fetch)
3390 (uri
3391 (pypi-uri "lunr" version))
3392 (sha256
3393 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
3394 (build-system pyproject-build-system)
3395 (arguments
3396 (list
3397 #:test-flags
3398 '(list "-k" "not TestLanguageSupport"
3399 "--ignore-glob=tests/acceptance_tests/*")))
3400 (native-inputs
3401 (list python-hatch-fancy-pypi-readme
3402 python-hatchling
3403 python-pytest
3404 python-pytest-timeout))
3405 (propagated-inputs
3406 (list python-nltk))
3407 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
3408 (synopsis "Full-text search library")
3409 (description "This package provides python library for full-text search.
3410It indexes documents and provides a search interface for retrieving documents
3411that best match text queries.")
3412 (license license:expat)))
3413
3414(define-public python-mdit-py-plugins
3415 (package
3416 (name "python-mdit-py-plugins")
3417 (version "0.4.2")
3418 (source (origin
3419 (method git-fetch) ;for tests
3420 (uri (git-reference
3421 (url "https://github.com/executablebooks/mdit-py-plugins")
3422 (commit (string-append "v" version))))
3423 (file-name (git-file-name name version))
3424 (sha256
3425 (base32
3426 "0lyv8k3sdm9i9am47z6zx96l9bbd9g8xp06yf2alafkmp0q873b9"))))
3427 (build-system pyproject-build-system)
3428 (propagated-inputs
3429 (list python-markdown-it-py
3430 python-attrs))
3431 (native-inputs
3432 (list python-flit-core
3433 python-pytest
3434 python-pytest-regressions))
3435 (home-page "https://github.com/executablebooks/mdit-py-plugins")
3436 (synopsis "Collection of plugins for markdown-it-py")
3437 (description "This package contains a collection of plugins for
3438@code{markdown-it-py} like:
3439@enumerate
3440@item amsmath,
3441@item attrs,
3442@item container,
3443@item definition list,
3444@item dollarmath,
3445@item field list,
3446@item footnote,
3447@item textmath, and
3448@item wordcount.
3449@end enumerate")
3450 (license license:expat)))
3451
3452(define-public python-mdurl
3453 (package
3454 (name "python-mdurl")
3455 (version "0.1.2")
3456 (source
3457 (origin
3458 (method git-fetch) ; no tests data in PyPi package
3459 (uri (git-reference
3460 (url "https://github.com/executablebooks/mdurl")
3461 (commit version)))
3462 (file-name (git-file-name name version))
3463 (sha256
3464 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
3465 (build-system pyproject-build-system)
3466 (native-inputs (list python-flit python-pytest))
3467 (home-page "https://github.com/executablebooks/mdurl")
3468 (synopsis "Markdown URL utilities")
3469 (description
3470 "This package implements a Python port of the JavaScript @code{mdurl}.")
3471 (license license:expat)))
3472
3473(define-public python-mkdocs
3474 (package
3475 (name "python-mkdocs")
3476 (version "1.3.0")
3477 (source
3478 (origin
3479 (method git-fetch)
3480 (uri (git-reference
3481 (url "https://github.com/mkdocs/mkdocs")
3482 (commit version)))
3483 (file-name (git-file-name name version))
3484 (sha256
3485 (base32 "1n5rdllrxvhnxmdrddf55p3s86dakx0rq2gg6bj6pr6jg2pn932b"))))
3486 (build-system pyproject-build-system)
3487 (arguments
3488 (list
3489 #:test-backend #~'unittest
3490 #:test-flags
3491 #~(list "discover" "-p" "*tests.py" "mkdocs" "--top-level-directory" ".")
3492 #:phases
3493 #~(modify-phases %standard-phases
3494 ;; Requirements refer to a specific version of dependencies,
3495 ;; which are too old. So we patch to refer to any later version.
3496 (add-after 'unpack 'patch-requirements
3497 (lambda _
3498 (substitute* "setup.py"
3499 (("==") ">=")))))))
3500 (native-inputs (list python-setuptools))
3501 (propagated-inputs
3502 (list python-babel
3503 python-click
3504 python-ghp-import
3505 python-importlib-metadata
3506 python-jinja2
3507 python-markdown
3508 python-markupsafe
3509 python-mdx-gh-links
3510 python-mergedeep
3511 python-packaging
3512 python-pyyaml
3513 python-pyyaml-env-tag
3514 python-watchdog))
3515 (home-page "https://www.mkdocs.org")
3516 (synopsis "Project documentation with Markdown")
3517 (description
3518 "MkDocs is a static site generator geared towards building project
3519documentation. Documentation source files are written in Markdown, and
3520configured with a single YAML configuration file.")
3521 (license license:bsd-3)))
3522
3523(define-public python-mkdocs-markdownextradata-plugin
3524 (package
3525 (name "python-mkdocs-markdownextradata-plugin")
3526 (version "0.2.5")
3527 (source
3528 (origin
3529 (method git-fetch)
3530 (uri (git-reference
3531 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
3532 (commit version)))
3533 (file-name (git-file-name name version))
3534 (sha256
3535 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
3536 (build-system pyproject-build-system)
3537 (native-inputs (list python-pytest python-setuptools))
3538 (propagated-inputs (list python-mkdocs python-pyyaml))
3539 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
3540 (synopsis "Inject extra variables into the MkDocs markdown template")
3541 (description
3542 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
3543variables into the markdown template.")
3544 (license license:expat)))
3545
3546(define-public python-docstring-to-markdown
3547 (package
3548 (name "python-docstring-to-markdown")
3549 (version "0.15")
3550 (source
3551 (origin
3552 (method url-fetch)
3553 (uri (pypi-uri "docstring-to-markdown" version))
3554 (sha256
3555 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
3556 (build-system pyproject-build-system)
3557 (arguments
3558 (list
3559 #:phases
3560 #~(modify-phases %standard-phases
3561 (add-after 'unpack 'reduce-test-coverage-since-failing
3562 (lambda _
3563 (substitute* "setup.cfg"
3564 (("(^.*cov.*$|^.*flake8.*$)") "")))))))
3565 (native-inputs
3566 (list python-pytest
3567 python-pytest-cov
3568 python-pytest-flake8
3569 python-setuptools
3570 python-wheel))
3571 (home-page "https://github.com/python-lsp/docstring-to-markdown")
3572 (synopsis "On the fly conversion of Python docstrings to markdown")
3573 (description
3574 "This module can convert Python docstrings to Markdown. It can recognise
3575reStructuredText inside docstrings and convert multiple of its features to
3576Markdown. It also includes initial support for Google-formatted docstrings.")
3577 (license license:lgpl2.1+)))
3578
3579(define-public python-mysql-connector-python
3580 (package
3581 (name "python-mysql-connector-python")
3582 (version "8.0.33")
3583 ;; The archive on PyPi does not contain a build system
3584 (source (origin
3585 (method url-fetch)
3586 (uri (string-append "https://cdn.mysql.com/Downloads/"
3587 "Connector-Python/mysql-connector-python-"
3588 version "-src.tar.gz"))
3589 (sha256
3590 (base32
3591 "00j9xgd43yzx5yiijnlmpaqpa58m5lscjglsgzg48dibhr69br0l"))))
3592 (build-system python-build-system)
3593 (arguments
3594 (list
3595 ;; tests: 1371 passed
3596 #:configure-flags
3597 #~(list (string-append "--with-mysql-capi="
3598 #$(this-package-input "mysql"))
3599 (string-append "--with-protobuf-include-dir="
3600 #$(this-package-input "protobuf")
3601 "/include/google/protobuf")
3602 (string-append "--with-protobuf-lib-dir="
3603 #$(this-package-input "protobuf")
3604 "/lib")
3605 (string-append "--with-protoc="
3606 #$(this-package-input "protobuf")
3607 "/bin/protoc"))
3608 #:phases
3609 #~(modify-phases %standard-phases
3610 (add-after 'unpack 'compatibility
3611 (lambda _
3612 (substitute* "src/mysql_capi.c"
3613 (("res = mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
3614 "res = 0;")
3615 (("mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
3616 "")
3617 (("mysql_options\\(&self->session, MYSQL_OPT_TLS_CIPHERSUITES.*")
3618 "")
3619 ;; The C API does not have mysql_bind_param, so we produce an
3620 ;; error here.
3621 (("status = mysql_bind_param.*") "status = 1;"))
3622 ;; See https://github.com/protocolbuffers/protobuf/issues/9943
3623 (substitute* "src/mysqlxpb/mysqlxpb.cc"
3624 (("google::protobuf::string") "std::string"))))
3625 (replace 'check
3626 (lambda* (#:key tests? #:allow-other-keys)
3627 (when tests?
3628 ;; Some of these tests might be failing due to the build
3629 ;; container's restrictions, others are due to the version
3630 ;; mismatch.
3631 (substitute* "tests/cext/test_cext_api.py"
3632 (("def test_change_user") "def _do_not_test_change_user")
3633 (("def test_get_character_set_info")
3634 "def _do_not_test_get_character_set_info"))
3635 (substitute* "tests/test_bugs.py"
3636 (("def test_change_user") "def _do_not_test_change_user")
3637 (("def test_lost_connection") "def _do_not_test_lost_connection")
3638 (("def test_kill_query") "def _do_not_test_kill_query")
3639 ;; These all fail because of expired certificates.
3640 (("def test_cext_verify_server_certificate")
3641 "def _do_not_test_cext_verify_server_certificate")
3642 (("def test_pure_verify_server_certificate")
3643 "def _do_not_test_pure_verify_server_certificate")
3644 (("def test_verify_server_name_cext_cnx")
3645 "def _do_not_test_verify_server_name_cext_cnx")
3646 (("def test_verify_server_name_pure_cnx")
3647 "def _do_not_test_verify_server_name_pure_cnx"))
3648 (substitute* "tests/test_connection.py"
3649 (("def test_allow_local_infile_in_path")
3650 "def _do_not_test_allow_local_infile_in_path")
3651 ;; This fails because of expired certificates.
3652 (("def test_connect_with_unix_socket")
3653 "def _do_not_test_connect_with_unix_socket"))
3654 (substitute* "tests/test_mysqlx_connection.py"
3655 ;; This fails because of expired certificates.
3656 (("def test_ssl_connection")
3657 "def _do_not_test_ssl_connection")
3658 ;; ValueError: Invalid IPv6 URL
3659 (("def test_connection_uri")
3660 "def _do_not_test_connection_uri"))
3661 (substitute* "tests/test_constants.py"
3662 (("def test_deprecated")
3663 "def _do_not_test_deprecated"))
3664 (mkdir-p "/tmp/datadir")
3665 (invoke "python3" "unittests.py"
3666 "--verbosity=3"
3667 (string-append "--with-mysql=" #$(this-package-input "mysql"))
3668 "--keep"
3669 "--mysql-topdir=/tmp/datadir"
3670 "--unix-socket=/tmp/datadir")))))))
3671 (propagated-inputs (list python-protobuf))
3672 (inputs (list mysql protobuf-3.20 openssl-1.1 zlib))
3673 (home-page "https://dev.mysql.com/doc/connector-python/en/index.html")
3674 (synopsis "MySQL driver written in Python")
3675 (description "MySQL Connector/Python enables Python programs to access
3676MySQL databases, using an API that is compliant with the Python Database API
3677Specification v2.0 (PEP 249).")
3678 (license license:gpl2)))
3679
3680(define-public python-pdoc
3681 (package
3682 (name "python-pdoc")
3683 (version "13.0.1")
3684 (source (origin
3685 (method git-fetch)
3686 (uri (git-reference
3687 (url "https://github.com/mitmproxy/pdoc")
3688 (commit (string-append "v" version))))
3689 (file-name (git-file-name name version))
3690 (sha256
3691 (base32
3692 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
3693 (build-system pyproject-build-system)
3694 (native-inputs (list python-pytest python-jinja2 python-pygments
3695 python-setuptools python-wheel))
3696 (arguments
3697 (list
3698 ;; Some tests fail, presumably because of slight version mismatches of
3699 ;; the dependencies.
3700 #:test-flags
3701 '(list "-k" (string-append "not test_var_with_raising_repr and "
3702 "not test_smoke[mock] and "
3703 "not test_snapshots[html"))))
3704 (home-page "https://pdoc.dev/")
3705 (synopsis "API documentation for Python projects")
3706 (description "pdoc auto-generates API documentation that follows your
3707project's Python module hierarchy. It requires no configuration, has
3708first-class support for type annotations, cross-links between identifiers,
3709comes with an integrated live-reloading web server, uses customizable HTML
3710templates, understands numpydoc and Google-style docstrings.")
3711 (license license:unlicense)))
3712
3713(define-public python-py4j
3714 (package
3715 (name "python-py4j")
3716 (version "0.10.9.7")
3717 (source (origin
3718 (method url-fetch)
3719 (uri (pypi-uri "py4j" version))
3720 (sha256
3721 (base32
3722 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
3723 (build-system pyproject-build-system)
3724 (arguments (list #:tests? #f)) ; Requires a running JVM?
3725 (native-inputs (list python-setuptools))
3726 (home-page "https://www.py4j.org/")
3727 (synopsis "Dynamically access arbitrary Java objects from Python")
3728 (description
3729 "This package enables Python programs to dynamically access arbitrary
3730Java objects.")
3731 (license license:bsd-3)))
3732
3733(define-public python-pymdown-extensions
3734 (package
3735 (name "python-pymdown-extensions")
3736 (version "10.16.1")
3737 (source
3738 (origin
3739 (method git-fetch)
3740 (uri (git-reference
3741 (url "https://github.com/facelessuser/pymdown-extensions")
3742 (commit version)))
3743 (file-name (git-file-name name version))
3744 (sha256
3745 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
3746 (build-system pyproject-build-system)
3747 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
3748 (arguments
3749 (list #:tests? #f))
3750 (native-inputs (list python-hatchling python-pytest python-pyyaml))
3751 (propagated-inputs (list python-markdown))
3752 (home-page "https://github.com/facelessuser/pymdown-extensions")
3753 (synopsis "Extension pack for Python Markdown")
3754 (description
3755 "PyMdown Extensions is a collection of extensions for Python Markdown.
3756All extensions are found under the module namespace of pymdownx.")
3757 (license license:expat)))
3758
3759(define-public python-plotext
3760 (package
3761 (name "python-plotext")
3762 (version "5.2.8")
3763 (source (origin
3764 (method url-fetch)
3765 (uri (pypi-uri "plotext" version))
3766 (sha256
3767 (base32
3768 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
3769 (build-system pyproject-build-system)
3770 (arguments (list #:tests? #false)) ;there are none
3771 (native-inputs (list python-setuptools python-wheel))
3772 (home-page "https://github.com/piccolomo/plotext")
3773 (synopsis "Plots in the terminal")
3774 (description "Plotext lets you plot directly to the terminal.")
3775 (license license:expat)))
3776
3777(define-public python-plotille
3778 (package
3779 (name "python-plotille")
3780 (version "5.0.0")
3781 (source
3782 (origin
3783 (method git-fetch)
3784 (uri (git-reference
3785 (url "https://github.com/tammoippen/plotille")
3786 (commit (string-append "v" version))))
3787 (file-name (git-file-name name version))
3788 (sha256
3789 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
3790 (modules '((guix build utils)))
3791 (snippet
3792 #~(begin
3793 ;; Without deleting ./imgs setuptools complains as follows: error:
3794 ;; Multiple top-level packages discovered in a flat-layout:
3795 ;; ['imgs', 'plotille'].
3796 (delete-file-recursively "./imgs")))))
3797 (build-system pyproject-build-system)
3798 (native-inputs
3799 (list python-pytest
3800 python-mock
3801 python-pendulum
3802 python-pytest-cov
3803 python-pytest-mock
3804 python-setuptools
3805 python-wheel))
3806 (home-page "https://github.com/tammoippen/plotille")
3807 (synopsis "Plot in the terminal using braille dots")
3808 (description
3809 "Plotille provides a figure class and graphing functions to create plots,
3810scatter plots, histograms and heatmaps in the terminal using braille dots.")
3811 (license license:expat)))
3812
3813(define-public python-poetry-dynamic-versioning
3814 (package
3815 (name "python-poetry-dynamic-versioning")
3816 (version "1.9.1")
3817 (source
3818 (origin
3819 (method url-fetch)
3820 (uri (pypi-uri "poetry_dynamic_versioning" version))
3821 (sha256
3822 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
3823 (build-system pyproject-build-system)
3824 (arguments
3825 (list
3826 #:test-flags
3827 #~(list "--ignore=tests/test_integration.py"
3828 "-k" (string-join
3829 ;; Tests searching for VCS back end.
3830 (list "not test__get_version__defaults"
3831 "test__enable_in_doc__project_with_dynamic"
3832 "test__enable_in_doc__project_with_version"
3833 "test__get_version__format_jinja"
3834 "test__get_version__format_jinja_imports_with_module_and_item"
3835 "test__get_version__format_jinja_imports_with_module_only"
3836 "test__get_version__format_jinja_with_enforced_style")
3837 " and not "))))
3838 (native-inputs
3839 (list python-poetry-core
3840 python-pytest))
3841 (propagated-inputs
3842 (list python-dunamai
3843 python-jinja2
3844 python-tomlkit))
3845 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
3846 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
3847 (description
3848 "This package provides a build backend that patches Poetry Core to enable
3849the versioning system in PEP 517 build frontends.")
3850 (license license:expat)))
3851
3852(define-public python-poetry-plugin-export
3853 (package
3854 (name "python-poetry-plugin-export")
3855 (version "1.8.0")
3856 (source
3857 (origin
3858 (method url-fetch)
3859 (uri (pypi-uri "poetry_plugin_export" version))
3860 (sha256
3861 (base32 "0qgw6w4xaw7cz9ykw376c5hcg9v2k30lnmna6pc9b4ymhn51d9hz"))))
3862 (build-system pyproject-build-system)
3863 (arguments
3864 (list
3865 #:tests? #f)) ;tests cycle with poetry
3866 (native-inputs
3867 (list python-poetry-core))
3868 (propagated-inputs
3869 (list python-pendulum))
3870 (home-page "https://python-poetry.org/")
3871 (synopsis "Poetry plugin to export the dependencies to various formats")
3872 (description
3873 "Poetry plugin to export the dependencies to various formats.")
3874 (license license:expat)))
3875
3876(define-public python-portpicker
3877 (package
3878 (name "python-portpicker")
3879 (version "1.6.0")
3880 (source
3881 (origin
3882 (method url-fetch)
3883 (uri (pypi-uri "portpicker" version))
3884 (sha256
3885 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
3886 (build-system pyproject-build-system)
3887 (arguments
3888 (list
3889 #:test-flags
3890 ;; This fails because portserver ends up in bin, not site-packages
3891 '(list "--ignore=src/tests/portserver_test.py")))
3892 (propagated-inputs (list python-psutil))
3893 (native-inputs (list python-pytest python-setuptools python-wheel
3894 net-tools))
3895 (home-page "https://github.com/google/python_portpicker")
3896 (synopsis "Choose unique available network ports")
3897 (description
3898 "This package provides a library to choose unique available network
3899ports.")
3900 (license license:asl2.0)))
3901
3902(define-public python-md-ulb-pwrap
3903 (package
3904 (name "python-md-ulb-pwrap")
3905 (version "0.1.3")
3906 (source
3907 (origin
3908 (method git-fetch)
3909 (uri (git-reference
3910 (url "https://github.com/mondeja/md-ulb-pwrap")
3911 (commit (string-append "v" version))))
3912 (file-name (git-file-name name version))
3913 (sha256
3914 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
3915 (build-system pyproject-build-system)
3916 (arguments
3917 (list
3918 #:imported-modules `(,@%cargo-build-system-modules
3919 ,@%pyproject-build-system-modules)
3920 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
3921 (guix build pyproject-build-system)
3922 (guix build utils))
3923 #:test-backend #~'custom
3924 #:test-flags #~(list "test.py")
3925 #:phases
3926 #~(modify-phases %standard-phases
3927 (add-after 'unpack 'prepare-cargo-build-system
3928 (lambda args
3929 (for-each
3930 (lambda (phase)
3931 (format #t "Running cargo phase: ~a~%" phase)
3932 (apply (assoc-ref cargo:%standard-phases phase)
3933 #:cargo-target #$(cargo-triplet)
3934 args))
3935 '(unpack-rust-crates
3936 configure
3937 check-for-pregenerated-files
3938 patch-cargo-checksums))))
3939 (add-after 'prepare-cargo-build-system 'chdir
3940 (lambda _
3941 (chdir "python"))))))
3942 (native-inputs
3943 (append
3944 (list maturin
3945 python-pytest
3946 python-unicode-linebreak
3947 rust
3948 `(,rust "cargo"))
3949 (or (and=> (%current-target-system)
3950 (compose list make-rust-sysroot))
3951 '())))
3952 (inputs (cargo-inputs 'md_ulb_pwrap))
3953 (home-page "https://github.com/mondeja/md-ulb-pwrap")
3954 (synopsis "Markdown paragraph wrapper")
3955 (description
3956 "This package provides a Markdown paragraph wrapper using Unicode Line
3957Breaking Algorithm written in Rust with Python bindings.")
3958 (license license:expat)))
3959
3960(define-public python-mdx-gh-links
3961 (package
3962 (name "python-mdx-gh-links")
3963 (version "0.4")
3964 (source
3965 (origin
3966 (method url-fetch)
3967 (uri (pypi-uri "mdx_gh_links" version))
3968 (sha256
3969 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
3970 (build-system pyproject-build-system)
3971 (arguments (list #:tests? #f)) ;tests connect github
3972 (native-inputs (list python-setuptools))
3973 (propagated-inputs (list python-markdown))
3974 (home-page "https://github.com/Python-Markdown/github-links/")
3975 (synopsis "Python-Markdown extension adding support for shorthand links")
3976 (description "This package is an extension to Python-Markdown which adds
3977support for shorthand links to GitHub users, repositories, issues and
3978commits.")
3979 (license license:bsd-3)))
3980
3981(define-public python-mkdocs-material
3982 (package
3983 (name "python-mkdocs-material")
3984 (version "7.1.3")
3985 (source
3986 (origin
3987 (method url-fetch)
3988 (uri
3989 (pypi-uri "mkdocs-material" version))
3990 (sha256
3991 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))
3992 (modules '((guix build utils)))
3993 (snippet
3994 ;; TODO There are still bundled assets and minified JS.
3995 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
3996 (build-system pyproject-build-system)
3997 (arguments
3998 (list
3999 #:tests? #f ; No tests.
4000 #:phases
4001 #~(let ((symlink-js
4002 (lambda (inputs)
4003 (for-each
4004 (lambda (lang)
4005 (let* ((filename (string-append "lunr." lang ".min.js"))
4006 (file (string-append "share/javascript/" filename)))
4007 (symlink (search-input-file inputs file) filename)))
4008 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
4009 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
4010 "vi")))))
4011 (modify-phases %standard-phases
4012 ;; Requirement mkdocs-material-extensions
4013 ;; in-turn requires mkdocs-material. This causes
4014 ;; circular dependency, so we remove this requirement.
4015 (add-after 'unpack 'patch-requirements
4016 (lambda _
4017 (substitute* "requirements.txt"
4018 (("mkdocs-material-extensions.*$")
4019 ""))))
4020 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
4021 (lambda* (#:key inputs #:allow-other-keys)
4022 (mkdir-p "material/assets/javascripts/min/")
4023 (with-directory-excursion "material/assets/javascripts/min/"
4024 (symlink-js inputs))))
4025 (add-after 'wrap 'replace-javascript-assets
4026 (lambda* (#:key inputs outputs #:allow-other-keys)
4027 (let* ((site (site-packages inputs outputs))
4028 (js-assets (string-append site "/material/"
4029 "assets/javascripts")))
4030 (with-directory-excursion js-assets
4031 (delete-file-recursively "min")
4032 (mkdir-p "min")
4033 (with-directory-excursion "min"
4034 (symlink-js inputs))))))))))
4035 (native-inputs (list python-setuptools))
4036 (inputs (list js-lunr-ar
4037 js-lunr-da
4038 js-lunr-de
4039 js-lunr-es
4040 js-lunr-fi
4041 js-lunr-fr
4042 js-lunr-hu
4043 js-lunr-it
4044 js-lunr-ja
4045 js-lunr-nl
4046 js-lunr-no
4047 js-lunr-pt
4048 js-lunr-ro
4049 js-lunr-ru
4050 js-lunr-sv
4051 js-lunr-tr
4052 js-lunr-vi
4053 js-lunr-multi
4054 js-lunr-stemmer-support))
4055 (propagated-inputs
4056 (list python-markdown python-mkdocs python-pygments
4057 python-pymdown-extensions))
4058 (home-page "https://squidfunk.github.io/mkdocs-material/")
4059 (synopsis "Material Design theme for MkDocs")
4060 (description "This package provides a theme plugin for the static site
4061generator MkDocs.")
4062 (license license:expat)))
4063
4064(define-public python-nanobind
4065 (package
4066 (name "python-nanobind")
4067 (version "2.10.2")
4068 (source
4069 (origin
4070 (method url-fetch)
4071 (uri (pypi-uri "nanobind" version))
4072 (sha256
4073 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
4074 (build-system pyproject-build-system)
4075 (arguments
4076 (list
4077 ;; tests: 466 passed, 27 skipped
4078 #:phases
4079 #~(modify-phases %standard-phases
4080 (add-before 'build 'configure-cmake
4081 (lambda _
4082 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
4083 (add-after 'configure-cmake 'build-c++
4084 (lambda _
4085 (invoke "cmake" "--build" "build" "-j" "2")))
4086 (add-before 'check 'pre-check
4087 (lambda _ (chdir "build"))))))
4088 (native-inputs
4089 (list cmake-minimal
4090 python-numpy
4091 python-pathspec
4092 python-pytest
4093 python-scikit-build-core
4094 python-scipy))
4095 (inputs
4096 (list eigen))
4097 (home-page "https://github.com/wjakob/nanobind/")
4098 (synopsis "Tiny and efficient C++/Python bindings")
4099 (description "Nanobind is a small binding library that exposes C++ types
4100in Python and vice versa. It is reminiscent of @code{Boost.Python} and
4101@code{pybind11} and uses near-identical syntax. In contrast to these existing
4102tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
4103of time, produce smaller binaries, and have better runtime performance.")
4104 (license license:bsd-3)))
4105
4106(define-public python-nr-date
4107 (package
4108 (name "python-nr-date")
4109 (version "2.1.0")
4110 (source
4111 (origin
4112 (method url-fetch)
4113 (uri (pypi-uri "nr_date" version))
4114 (sha256
4115 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
4116 (build-system pyproject-build-system)
4117 (arguments (list #:tests? #false)) ;there are none
4118 (native-inputs (list python-poetry-core))
4119 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
4120 (synopsis "Fast, regex-based date parsing library in plain Python")
4121 (description "This package provides a fast, regex-based date parsing
4122library in pure Python.")
4123 (license license:expat)))
4124
4125(define-public python-nr-stream
4126 (package
4127 (name "python-nr-stream")
4128 (version "1.1.5")
4129 (source
4130 (origin
4131 (method url-fetch)
4132 (uri (pypi-uri "nr_stream" version))
4133 (sha256
4134 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
4135 (build-system pyproject-build-system)
4136 (arguments (list #:tests? #false)) ;there are none
4137 (native-inputs (list python-poetry-core))
4138 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
4139 (synopsis "Stream and Optional classes for Python")
4140 (description "This package provides a @code{Stream} and @code{Optional}
4141class.")
4142 (license license:expat)))
4143
4144(define-public python-nr-util
4145 (package
4146 (name "python-nr-util")
4147 (version "0.8.12")
4148 (source
4149 (origin
4150 (method url-fetch)
4151 (uri (pypi-uri "nr.util" version))
4152 (sha256
4153 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
4154 (build-system pyproject-build-system)
4155 (arguments
4156 (list
4157 #:tests? #false ;there are none
4158 #:phases
4159 #~(modify-phases %standard-phases
4160 (add-after 'unpack 'patch-build-system
4161 (lambda _
4162 (substitute* "pyproject.toml"
4163 (("^config =.*") "config = []\n"))))
4164 (add-after 'install 'fix-name
4165 (lambda* (#:key inputs outputs #:allow-other-keys)
4166 (let* ((sitedir (site-packages inputs outputs))
4167 (dist-info
4168 (string-append sitedir "/nr_util-" #$version ".dist-info")))
4169 (substitute* (string-append dist-info "/METADATA")
4170 (("Name: nr-util")
4171 "Name: nr.util"))
4172 (substitute* (string-append dist-info "/RECORD")
4173 (("nr_util") "nr.util"))
4174 (rename-file dist-info
4175 (string-append sitedir
4176 "/nr.util-"
4177 #$version ".dist-info"))))))))
4178 (propagated-inputs (list python-deprecated python-typing-extensions))
4179 (native-inputs (list python-poetry-core))
4180 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
4181 (synopsis "General purpose Python utility library")
4182 (description "This package provides a general purpose Python utility
4183library.")
4184 (license license:expat)))
4185
4186(define-public python-slicerator
4187 (package
4188 (name "python-slicerator")
4189 (version "1.1.0")
4190 (source
4191 (origin
4192 (method url-fetch)
4193 (uri (pypi-uri "slicerator" version))
4194 (sha256
4195 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
4196 (build-system pyproject-build-system)
4197 (native-inputs
4198 (list python-numpy
4199 python-pytest
4200 python-setuptools))
4201 (home-page "https://github.com/soft-matter/slicerator")
4202 (synopsis "Lazy-loading, fancy-sliceable iterable")
4203 (description
4204 "This package provides a lazy-loading, fancy-sliceable iterable. Think
4205of it like a generator that is \"reusable\" and has a length.")
4206 (license license:bsd-3)))
4207
4208(define-public python-pytelegrambotapi
4209 (package
4210 (name "python-pytelegrambotapi")
4211 (version "4.22.0")
4212 (source
4213 (origin
4214 (method git-fetch)
4215 (uri (git-reference
4216 (url "https://github.com/eternnoir/pyTelegramBotAPI")
4217 (commit version)))
4218 (file-name (git-file-name name version))
4219 (sha256
4220 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
4221 (build-system pyproject-build-system)
4222 (arguments
4223 (list
4224 #:phases
4225 #~(modify-phases %standard-phases
4226 (replace 'check
4227 (lambda* (#:key tests? #:allow-other-keys)
4228 (when tests?
4229 (with-directory-excursion "tests"
4230 (invoke "py.test"))))))))
4231 (propagated-inputs
4232 (list python-requests))
4233 (native-inputs
4234 (list python-hatchling python-pytest))
4235 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
4236 (synopsis "Python Telegram bot api")
4237 (description "This package provides a simple, but extensible Python
4238implementation for the Telegram Bot API.")
4239 (license license:gpl2)))
4240
4241(define-public python-pytoolconfig
4242 (package
4243 (name "python-pytoolconfig")
4244 (version "1.3.1")
4245 (source
4246 (origin
4247 (method url-fetch)
4248 (uri (pypi-uri "pytoolconfig" version))
4249 (sha256
4250 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
4251 (build-system pyproject-build-system)
4252 (arguments
4253 (list
4254 #:test-flags
4255 ;; Requires Sphinx.
4256 #~(list "--ignore=tests/test_documentation.py")))
4257 (native-inputs
4258 (list python-pdm-backend
4259 python-pytest))
4260 (propagated-inputs
4261 (list python-tomli
4262 python-packaging
4263 python-platformdirs))
4264 (home-page "https://pypi.org/project/pytoolconfig/")
4265 (synopsis "Python tool configuration")
4266 (description "The goal of this project is to manage configuration for
4267Python tools, such as rope and add support for a @file{pyproject.toml}
4268configuration file.")
4269 (license license:lgpl3+)))
4270
4271(define-public python-pytooling
4272 (package
4273 (name "python-pytooling")
4274 (version "8.7.6")
4275 (source
4276 (origin
4277 (method git-fetch)
4278 (uri (git-reference
4279 (url "https://github.com/pyTooling/pyTooling/")
4280 (commit (string-append "v" version))))
4281 (file-name (git-file-name name version))
4282 (sha256
4283 (base32 "1n0idfiwcsssvy3kfwkgdpwx7zmvzp44mv0285d8argdy6rd48p0"))))
4284 (build-system pyproject-build-system)
4285 (arguments
4286 (list
4287 ;; Tests do not support linux-i686 system: Exception: Unknown
4288 ;; architecture 'linux-i686' for a native Linux.
4289 #:tests? (not (or (%current-target-system)
4290 (target-x86-32?)))
4291 #:test-flags
4292 #~(list "tests/unit"
4293 "-k" (string-join
4294 ;; Tests checking in /usr/bin and /usr/bin/git paths.
4295 (list "not test_BinaryDirectory"
4296 "test_ExecutablePath"
4297 "test_VersionFlag")
4298 " and not "))))
4299 (native-inputs
4300 (list git-minimal/pinned
4301 python-colorama
4302 python-pytest
4303 python-ruamel.yaml
4304 python-setuptools))
4305 (home-page "https://pytooling.github.io/pyTooling/")
4306 (synopsis "Miscellaneous Python tools")
4307 (description
4308 "pyTooling is a collection of (abstract) data models, lacking classes,
4309decorators, a new performance boosting meta-class, and enhanced exceptions.
4310It also provides lots of helper functions---e.g., to ease the handling of
4311package descriptions or to unify multiple existing APIs into a single API.")
4312 (license license:asl2.0)))
4313
4314(define-public python-colorlog
4315 (package
4316 (name "python-colorlog")
4317 (version "6.9.0")
4318 (source
4319 (origin
4320 (method url-fetch)
4321 (uri (pypi-uri "colorlog" version))
4322 (sha256
4323 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
4324 (build-system pyproject-build-system)
4325 (native-inputs
4326 (list python-pytest
4327 python-setuptools))
4328 (home-page "https://github.com/borntyping/python-colorlog")
4329 (synopsis "Log formatting with colors for python")
4330 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
4331with Python's logging module that outputs records using terminal colors.")
4332 (license license:expat)))
4333
4334(define-public python-pyprind
4335 (package
4336 (name "python-pyprind")
4337 (version "2.11.3")
4338 (source
4339 (origin
4340 (method url-fetch)
4341 (uri (pypi-uri "PyPrind" version))
4342 (sha256
4343 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
4344 (build-system pyproject-build-system)
4345 (native-inputs (list python-pytest python-setuptools))
4346 (propagated-inputs (list python-psutil))
4347 (home-page "https://github.com/rasbt/pyprind")
4348 (synopsis "Python Progress Bar and Percent Indicator Utility")
4349 (description
4350 "The PyPrind (Python Progress Indicator) module provides a progress bar
4351and a percentage indicator object that let you track the progress of a loop
4352structure or other iterative computation.")
4353 (license license:bsd-3)))
4354
4355(define-public python-gh-md-to-html
4356 (package
4357 (name "python-gh-md-to-html")
4358 (version "1.21.2")
4359 (source
4360 (origin
4361 (method url-fetch)
4362 (uri (pypi-uri "gh_md_to_html" version))
4363 (sha256
4364 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
4365 (build-system pyproject-build-system)
4366 (arguments
4367 (list
4368 #:tests? #false ;there are none
4369 #:phases
4370 #~(modify-phases %standard-phases
4371 (add-after 'unpack 'relax-shellescape-requirement
4372 (lambda _
4373 (substitute* "src/__init__.py"
4374 (("import shellescape")
4375 "import shlex")
4376 (("shellescape\\.quote")
4377 "shlex.quote"))
4378 (substitute* "setup.py"
4379 (("\"shellescape\",")
4380 "")))))))
4381 (propagated-inputs
4382 (list python-beautifulsoup4
4383 python-emoji-for-gh-md-to-html
4384 python-pillow
4385 python-requests
4386 python-webcolors))
4387 (native-inputs (list python-setuptools))
4388 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
4389 (synopsis "Github-flavored Markdown")
4390 (description
4391 "This package provides a feature-rich Github-flavored Markdown to HTML
4392Python library and command line interface.")
4393 (license license:expat)))
4394
4395(define-public python-gfloat
4396 (package
4397 (name "python-gfloat")
4398 (version "0.5.2")
4399 (source
4400 (origin
4401 (method url-fetch)
4402 (uri (pypi-uri "gfloat" version))
4403 (sha256
4404 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
4405 (build-system pyproject-build-system)
4406 (arguments
4407 (list
4408 #:test-flags
4409 #~(list
4410 "--ignore=test/test_array_api.py" ;requires array_api_strict
4411 "--ignore=test/test_jax.py" ;requires python-jax
4412 "--ignore=test/test_microxcaling.py" ;requires torchao
4413 ;; Jupyter.
4414 "--ignore-glob=docs/source/*.ipynb")))
4415 (propagated-inputs
4416 (list python-array-api-compat python-more-itertools python-numpy))
4417 (native-inputs (list python-nbval
4418 python-ml-dtypes
4419 python-pytest
4420 python-pytorch
4421 python-setuptools
4422 openssl))
4423 (home-page "https://github.com/graphcore-research/gfloat")
4424 (synopsis "Generic floating point handling in Python")
4425 (description
4426 "This package provides an implementation of generic floating point encode
4427and decode logic in Python. It handles various current and proposed floating
4428point types:
4429
4430@itemize
4431@item IEEE 754: Binary16, Binary32
4432@item OCP Float8: E5M2, E4M3
4433@item IEEE WG P3109
4434@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
4435@end itemize")
4436 (license license:expat)))
4437
4438(define-public python-glymur
4439 (package
4440 (name "python-glymur")
4441 (version "0.14.3")
4442 (source
4443 (origin
4444 (method git-fetch) ; no tests data in PyPi package
4445 (uri (git-reference
4446 (url "https://github.com/quintusdias/glymur")
4447 (commit (string-append "v" version))))
4448 (file-name (git-file-name name version))
4449 (sha256
4450 (base32 "0266gj8a2p8jkbgb34lgk8dwin7ib2g38vdh04b2p6yhqx8w3xg8"))))
4451 (build-system pyproject-build-system)
4452 (arguments
4453 (list
4454 #:test-flags
4455 #~(list "--numprocesses" (number->string (parallel-job-count))
4456 ;; Failing test due to inability of ctypes.util.find_library()
4457 ;; to determine library path, which is patched above.
4458 "--ignore=tests/test_config.py")
4459 #:phases
4460 #~(modify-phases %standard-phases
4461 (add-after 'unpack 'patch-library-locations
4462 (lambda* (#:key inputs #:allow-other-keys)
4463 ;; XXX: It's a workaround for Python inability to find the
4464 ;; .so libraries with ctypes.util.find_library()
4465 (substitute* '("glymur/config.py")
4466 (("path = find_library\\(libname\\)")
4467 (string-append
4468 "if libname == \"openjp2\":\n"
4469 " path = \""
4470 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
4471 " elif libname == \"tiff\":\n"
4472 " path = \""
4473 (search-input-file inputs "/lib/libtiff.so") "\"\n"
4474 " elif libname == \"c\":\n"
4475 " path = \""
4476 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
4477 (native-inputs
4478 (list python-pytest
4479 python-pytest-xdist
4480 python-scikit-image
4481 python-setuptools))
4482 (inputs
4483 (list openjpeg ; glymur/lib/openjp2.py
4484 libtiff)) ; glymur/lib/tiff.py
4485 (propagated-inputs
4486 (list python-lxml
4487 python-numpy
4488 python-pillow ))
4489 (home-page "https://github.com/quintusdias/glymur")
4490 (synopsis "Python interface to OpenJPEG and LibTIFF")
4491 (description
4492 "This package provides Python interface to the OpenJPEG library which
4493allows one to read and write JPEG 2000 files")
4494 (license license:expat)))
4495
4496(define-public python-gphoto2
4497 (package
4498 (name "python-gphoto2")
4499 (version "2.6.1")
4500 (source
4501 (origin
4502 (method git-fetch) ; no tests in PyPI
4503 (uri (git-reference
4504 (url "https://github.com/jim-easterbrook/python-gphoto2")
4505 (commit (string-append "v" version))))
4506 (file-name (git-file-name name version))
4507 (sha256
4508 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
4509 (build-system pyproject-build-system)
4510 (native-inputs
4511 (list pkg-config python-pytest python-setuptools python-wheel))
4512 (inputs
4513 (list libgphoto2))
4514 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
4515 (synopsis "Python interface to libgphoto2")
4516 (description "@code{python-gphoto2} is a comprehensive Python interface
4517(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
4518automatically generate the interface code.")
4519 (license license:lgpl3+)))
4520
4521(define-public python-colour
4522 (package
4523 (name "python-colour")
4524 (version "0.1.5")
4525 (source
4526 (origin
4527 (method git-fetch)
4528 (uri (git-reference
4529 (url "https://github.com/vaab/colour")
4530 (commit version)))
4531 (file-name (git-file-name name version))
4532 (sha256
4533 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
4534 (patches (search-patches "python-colour-remove-d2to1.patch"))))
4535 (build-system pyproject-build-system)
4536 (arguments
4537 (list
4538 #:tests? #f ; No tests.
4539 #:phases
4540 #~(modify-phases %standard-phases
4541 (add-after 'unpack 'set-version
4542 (lambda _
4543 (substitute* "autogen.sh"
4544 (("if ! \"\\$git\".*")
4545 "if false ; then\n")
4546 (("depends git grep")
4547 "depends grep")
4548 (("version=\\$\\(\"\\$git\" describe --tags\\)")
4549 (format #f "version=~s" #$version))))))))
4550 (native-inputs (list python-setuptools))
4551 (home-page "https://github.com/vaab/colour")
4552 (synopsis "Convert and manipulate various color representations")
4553 (description
4554 "This package provides a pythonic way to manipulate color representations
4555(HSL, RVB,web, X11, ...).")
4556 (license license:expat)))
4557
4558(define-public python-rapidfuzz
4559 (package
4560 (name "python-rapidfuzz")
4561 (version "3.14.1")
4562 (source
4563 (origin
4564 (method git-fetch)
4565 (uri (git-reference
4566 (url "https://github.com/rapidfuzz/RapidFuzz")
4567 (commit (string-append "v" version))))
4568 (file-name (git-file-name name version))
4569 (sha256
4570 (base32 "1kqy9paxri1ih47mwmsxwz7a222sn2si5n8qd7gxhdf1wdrpdrm7"))))
4571 (build-system pyproject-build-system)
4572 (native-inputs
4573 (list cmake-minimal
4574 python-cython
4575 python-pytest
4576 python-scikit-build-core
4577 rapidfuzz-cpp
4578 taskflow))
4579 (home-page "https://github.com/rapidfuzz/RapidFuzz")
4580 (synopsis "Rapid fuzzy string matching")
4581 (description
4582 "RapidFuzz is a fast string matching library for Python and
4583C++, which is using the string similarity calculations from FuzzyWuzzy.")
4584 (license license:expat)))
4585
4586(define-public python-easygui
4587 (package
4588 (name "python-easygui")
4589 (version "0.98.1")
4590 (source
4591 (origin
4592 (method git-fetch)
4593 (uri (git-reference
4594 (url "https://github.com/robertlugg/easygui")
4595 (commit version)))
4596 (file-name (git-file-name name version))
4597 (sha256
4598 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
4599 (build-system pyproject-build-system)
4600 (arguments
4601 ;; XXX: There seem to be no tests upstream, although the package itself
4602 ;; seems to provide a lot of demo elements.
4603 (list #:tests? #f))
4604 (native-inputs (list python-pytest python-setuptools))
4605 (propagated-inputs (list `(,python "tk")))
4606 (home-page "https://github.com/robertlugg/easygui")
4607 (synopsis "GUI programming module for Python")
4608 (description
4609 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
4610different from other GUI generators in that EasyGUI is NOT event-driven.
4611Instead, all GUI interactions are invoked by simple function calls.")
4612 (license license:bsd-3)))
4613
4614(define-public python-echo
4615 (package
4616 (name "python-echo")
4617 (version "0.8.0")
4618 (source
4619 (origin
4620 (method url-fetch)
4621 (uri (pypi-uri "echo" version))
4622 (sha256
4623 (base32 "1hr2kgjmf5gcjbg1mry03ca1dayfwy8mi8as42jfg0apsa3bfvvj"))))
4624 (build-system pyproject-build-system)
4625 (arguments
4626 (list
4627 #:phases
4628 #~(modify-phases %standard-phases
4629 (add-before 'check 'start-xorg-server
4630 (lambda _
4631 ;; The test suite requires a running X server.
4632 (system "Xvfb :99 -screen 0 1024x768x24 &")
4633 (setenv "DISPLAY" ":99.0"))))))
4634 (propagated-inputs
4635 (list python-numpy
4636 python-qtpy
4637 python-pyqt-6))
4638 (native-inputs
4639 (list python-pytest
4640 python-pytest-cov
4641 python-setuptools
4642 python-setuptools-scm
4643 python-wheel
4644 xorg-server-for-tests))
4645 (home-page "https://github.com/glue-viz/echo")
4646 (synopsis "Callback Properties in Python")
4647 (description
4648 "Echo is a small library for attaching callback functions to property
4649state changes.")
4650 (license license:expat)))
4651
4652(define-public python-pymd4c
4653 (package
4654 (name "python-pymd4c")
4655 (version "1.3.0")
4656 (source
4657 (origin
4658 (method git-fetch)
4659 (uri (git-reference
4660 (url "https://github.com/dominickpastore/pymd4c")
4661 (commit (string-append "v" version))))
4662 (file-name (git-file-name name version))
4663 (sha256
4664 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
4665 (build-system pyproject-build-system)
4666 (arguments (list #:test-flags #~(list "test")))
4667 (inputs (list md4c))
4668 (native-inputs
4669 (list pkg-config python-pkgconfig python-pytest python-setuptools))
4670 (home-page "https://github.com/dominickpastore/pymd4c")
4671 (synopsis "Python bindings for MD4C")
4672 (description
4673 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
4674to CommonMark.")
4675 (license license:expat)))
4676
4677(define-public python-pymediainfo
4678 (package
4679 (name "python-pymediainfo")
4680 (version "4.1")
4681 (source
4682 (origin
4683 (method url-fetch)
4684 (uri (pypi-uri "pymediainfo" version))
4685 (sha256
4686 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
4687 (build-system pyproject-build-system)
4688 (arguments
4689 (list
4690 ;; The only failing test requires internet access.
4691 #:test-flags
4692 #~(list "-k" "not test_parse_url")
4693 #:phases
4694 #~(modify-phases %standard-phases
4695 (add-after 'unpack 'patch-libmediainfo
4696 (lambda* (#:key inputs #:allow-other-keys)
4697 (substitute* "pymediainfo/__init__.py"
4698 (("libmediainfo.so.0")
4699 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
4700 (native-inputs (list python-pytest python-setuptools))
4701 (inputs (list libmediainfo))
4702 (home-page "https://github.com/sbraz/pymediainfo")
4703 (synopsis "Python wrapper for the mediainfo library")
4704 (description
4705 "This package provides a Python wrapper for the mediainfo library to
4706access the technical and tag data for video and audio files.")
4707 (license license:expat)))
4708
4709(define-public python-psutil
4710 (package
4711 (name "python-psutil")
4712 (version "7.0.0")
4713 (source
4714 (origin
4715 (method url-fetch)
4716 (uri (pypi-uri "psutil" version))
4717 (sha256
4718 (base32 "0mn42p9pzh0wynhk9i18iyvp8h54hbcsyczajmjcpv4blgmw7sbv"))))
4719 (build-system pyproject-build-system)
4720 (arguments
4721 ;; FIXME: some tests do not return and time out. Some tests fail because
4722 ;; some processes survive kill().
4723 '(#:tests? #f))
4724 (native-inputs
4725 (list python-setuptools))
4726 (home-page "https://github.com/giampaolo/psutil")
4727 (synopsis "Library for retrieving information on running processes")
4728 (description
4729 "@code{psutil} (Python system and process utilities) is a library for
4730retrieving information on running processes and system utilization (CPU,
4731memory, disks, network) in Python. It is useful mainly for system monitoring,
4732profiling and limiting process resources and management of running processes.
4733It implements many functionalities offered by command line tools such as: ps,
4734top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
4735iotop, uptime, pidof, tty, taskset, pmap.")
4736 (license license:bsd-3)))
4737
4738(define-public python-scapy
4739 (package
4740 (name "python-scapy")
4741 (version "2.6.1")
4742 (source (origin
4743 (method url-fetch)
4744 (uri (pypi-uri "scapy" version))
4745 (sha256
4746 (base32
4747 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
4748 (arguments
4749 '(#:tests? #f)) ; There is a test directory, but apparently no
4750 ; automatic testing framework.
4751 ;; The package has more optional dependencies such as ipython and
4752 ;; matplotlib. If functionality is missing, these should be added.
4753 ;; See
4754 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
4755 (build-system pyproject-build-system)
4756 (native-inputs (list python-setuptools python-wheel))
4757 (home-page "https://scapy.net")
4758 (synopsis "Python network packet crafting library")
4759 (description
4760 "Scapy is a Python library and executable for interactively
4761manipulating network packets. It can forge or decode packets of a number
4762of protocols, send them on the wire, capture them, store or read them
4763using pcap files, match requests and replies, and so on.
4764It can handle tasks such as scanning, tracerouting, probing, unit tests,
4765attacks or network discovery.")
4766 (license license:gpl2)))
4767
4768(define-public python-icmplib
4769 (package
4770 (name "python-icmplib")
4771 (version "3.0.4")
4772 (source
4773 (origin
4774 (method git-fetch)
4775 (uri (git-reference
4776 (url "https://github.com/ValentinBELYN/icmplib")
4777 (commit (string-append "v" version))))
4778 (file-name (git-file-name name version))
4779 (sha256
4780 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
4781 (build-system pyproject-build-system)
4782 (arguments (list #:tests? #f)) ; No tests.
4783 (native-inputs (list python-setuptools))
4784 (home-page "https://github.com/ValentinBELYN/icmplib")
4785 (synopsis
4786 "Python implementation of the Internet Control Message Protocol (ICMP)")
4787 (description
4788 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
4789ICMP is typically used for diagnostic or control purposes - well known from
4790utilities such as ping(1).")
4791 (license license:lgpl3)))
4792
4793(define-public python-iron-core
4794 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
4795 (revision "0"))
4796 (package
4797 (name "python-iron-core")
4798 (version (git-version "1.2.1" revision commit))
4799 (source
4800 (origin
4801 (method git-fetch)
4802 (uri (git-reference
4803 (url "https://www.github.com/iron-io/iron_core_python")
4804 (commit commit)))
4805 (file-name (git-file-name name version))
4806 (sha256
4807 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
4808 (build-system pyproject-build-system)
4809 (arguments
4810 (list
4811 ;; XXX: Tests are run, but they seem too old/not updated.
4812 #:tests? #f
4813 #:test-backend #~'unittest))
4814 (propagated-inputs (list python-dateutil python-requests))
4815 (native-inputs (list python-setuptools))
4816 (home-page "https://www.github.com/iron-io/iron_core_python")
4817 (synopsis "Universal classes and methods for Iron.io API wrappers")
4818 (description
4819 "This package provides universal classes and methods for the Iron.io
4820API wrappers to build on.")
4821 (license license:bsd-2))))
4822
4823(define-public python-iron-mq
4824 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
4825 (revision "0"))
4826 (package
4827 (name "python-iron-mq")
4828 (version (git-version "0.9" revision commit))
4829 (source
4830 (origin
4831 (method git-fetch)
4832 (uri (git-reference
4833 (url "https://github.com/iron-io/iron_mq_python")
4834 (commit commit)))
4835 (file-name (git-file-name name version))
4836 (sha256
4837 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
4838 (build-system pyproject-build-system)
4839 (arguments
4840 (list
4841 ;; XXX: Tests are broken and require network access.
4842 #:tests? #f
4843 #:test-backend #~'unittest))
4844 (propagated-inputs (list python-iron-core))
4845 (native-inputs (list python-setuptools))
4846 (home-page "https://github.com/iron-io/iron_mq_python")
4847 (synopsis "Client library for IronMQ, a message queue in the cloud")
4848 (description
4849 "This package provides Python language bindings for IronMQ. IronMQ is an
4850elastic message queue for managing data and event flow within cloud
4851applications and between systems.")
4852 (license license:bsd-2))))
4853
4854(define-public python-rasterio
4855 (package
4856 (name "python-rasterio")
4857 (version "1.3.7")
4858 (source (origin
4859 (method url-fetch)
4860 (uri (pypi-uri "rasterio" version))
4861 (sha256
4862 (base32
4863 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
4864 (properties
4865 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
4866 (build-system pyproject-build-system)
4867 (arguments
4868 (list
4869 #:tests? #false ;test data not present
4870 #:phases
4871 '(modify-phases %standard-phases
4872 (add-before 'check 'build-extensions
4873 (lambda _
4874 ;; Cython extensions have to be built before running the tests.
4875 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
4876 (propagated-inputs (list python-affine
4877 python-attrs
4878 python-certifi
4879 python-click
4880 python-click-plugins
4881 python-cligj
4882 python-numpy
4883 python-setuptools ; For pkg_resources.
4884 python-snuggs))
4885 (native-inputs (list gdal
4886 python-boto3
4887 python-cython
4888 python-hypothesis
4889 python-packaging
4890 python-pytest
4891 python-pytest-cov
4892 python-shapely
4893 python-wheel))
4894 (home-page "https://github.com/rasterio/rasterio")
4895 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
4896 (description "This package implements fast and direct raster I/O for use
4897with Numpy and SciPy.")
4898 (license license:bsd-3)))
4899
4900(define-public python-rich-tables
4901 (package
4902 (name "python-rich-tables")
4903 (version "0.8.0")
4904 (source
4905 (origin
4906 (method git-fetch) ; no tests data in PyPi package
4907 (uri (git-reference
4908 (url "https://github.com/snejus/rich-tables")
4909 (commit version)))
4910 (file-name (git-file-name name version))
4911 (sha256
4912 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
4913 (build-system pyproject-build-system)
4914 (arguments
4915 (list
4916 #:test-flags
4917 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
4918 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
4919 (native-inputs
4920 (list python-freezegun
4921 python-poetry-core
4922 python-pytest
4923 python-pytest-cov))
4924 (propagated-inputs
4925 (list python-funcy
4926 python-humanize
4927 python-multimethod
4928 python-platformdirs
4929 python-rgbxy
4930 python-rich
4931 python-sqlparse))
4932 (home-page "https://github.com/snejus/rich-tables")
4933 (synopsis "Ready-made rich tables for various purposes")
4934 (description
4935 "This package implements rich tables for various purposes, it's JSON
4936human-prettifier based on the @code{rich} Python library.")
4937 (license license:expat)))
4938
4939(define-public python-rich-toolkit
4940 (package
4941 (name "python-rich-toolkit")
4942 (version "0.12.0")
4943 (source
4944 (origin
4945 (method url-fetch)
4946 (uri (pypi-uri "rich_toolkit" version))
4947 (sha256
4948 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
4949 (build-system pyproject-build-system)
4950 (propagated-inputs (list python-click python-rich python-typing-extensions))
4951 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
4952 (home-page "https://pypi.org/project/rich-toolkit/")
4953 (synopsis "Rich toolkit for building command-line applications")
4954 (description "This package provides the Rich toolkit for building
4955command-line applications.")
4956 (license license:expat)))
4957
4958(define-public python-shapely
4959 (package
4960 (name "python-shapely")
4961 (version "2.1.1")
4962 (source
4963 (origin
4964 (method url-fetch)
4965 (uri (pypi-uri "shapely" version))
4966 (sha256
4967 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
4968 (build-system pyproject-build-system)
4969 (arguments
4970 (list
4971 #:phases
4972 '(modify-phases %standard-phases
4973 (add-before 'check 'build-extensions
4974 (lambda _
4975 ;; Cython extensions have to be built before running the tests.
4976 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
4977 (native-inputs
4978 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
4979 (inputs
4980 (list geos))
4981 (propagated-inputs
4982 (list python-numpy))
4983 (home-page "https://github.com/shapely/shapely")
4984 (synopsis "Library for the manipulation and analysis of geometric objects")
4985 (description "Shapely is a Python package for manipulation and analysis of
4986planar geometric objects. It is based on the @code{GEOS} library.")
4987 (license license:bsd-3)))
4988
4989(define-public python-shortuuid
4990 (package
4991 (name "python-shortuuid")
4992 (version "1.0.13")
4993 (source
4994 (origin
4995 (method url-fetch)
4996 (uri (pypi-uri "shortuuid" version))
4997 (sha256
4998 (base32
4999 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
5000 (build-system pyproject-build-system)
5001 (native-inputs
5002 (list python-poetry-core python-pytest))
5003 (home-page "https://github.com/skorokithakis/shortuuid")
5004 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
5005 (description
5006 "@code{shortuuid} is a Python library for generating concise, unambiguous
5007and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
5008module and then similar looking characters are removed.")
5009 (license license:bsd-3)))
5010
5011(define-public python-logwrap
5012 (package
5013 (name "python-logwrap")
5014 (version "11.1.1")
5015 (source
5016 (origin
5017 (method git-fetch) ; no tests in PyPI release
5018 (uri (git-reference
5019 (url "https://github.com/python-useful-helpers/logwrap")
5020 (commit version)))
5021 (file-name (git-file-name name version))
5022 (sha256
5023 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
5024 (build-system pyproject-build-system)
5025 (arguments
5026 (list
5027 #:phases
5028 #~(modify-phases %standard-phases
5029 (add-before 'build 'pretend-version
5030 ;; Indicate version to setuptools-scm
5031 (lambda _
5032 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
5033 #$(package-version this-package)))))))
5034 (native-inputs (list python-pytest
5035 python-setuptools
5036 python-setuptools-scm
5037 python-wheel))
5038 (home-page "https://github.com/python-useful-helpers/logwrap")
5039 (synopsis "Decorator for logging function arguments")
5040 (description "This package provides a decorator to log function arguments
5041and function call return values in a human-readable way.")
5042 (license license:asl2.0)))
5043
5044(define-public python-clyent
5045 (package
5046 (name "python-clyent")
5047 (version "1.2.2")
5048 (source
5049 (origin
5050 (method git-fetch)
5051 (uri (git-reference
5052 (url "https://github.com/Anaconda-Platform/clyent")
5053 (commit version)))
5054 (file-name (git-file-name name version))
5055 (sha256
5056 (base32 "0vi9nkd4hnvycwwpz9xip1drc5zn7bdwff1pz3azmyvh8v4hsias"))))
5057 (build-system pyproject-build-system)
5058 (arguments
5059 (list
5060 #:test-backend #~'unittest
5061 #:phases
5062 #~(modify-phases %standard-phases
5063 ;; Replace version manually because clyent uses
5064 ;; versioneer, which requires git metadata.
5065 (add-after 'unpack 'versioneer
5066 (lambda _
5067 (invoke "versioneer" "install")
5068 (substitute* "setup.py"
5069 (("version=versioneer.get_version\\(),")
5070 (string-append "version='" #$version "',"))))))))
5071 (native-inputs
5072 (list python-mock
5073 python-setuptools
5074 python-versioneer))
5075 (home-page "https://github.com/Anaconda-Platform/clyent")
5076 (synopsis "Command line client library")
5077 (description
5078 "Clyent is a Python command line utility library. It is used by
5079@code{binstar}, @code{binstar-build}, and @code{chalmers}.")
5080 (license license:bsd-3)))
5081
5082(define-public python-babel
5083 (package
5084 (name "python-babel")
5085 (version "2.16.0")
5086 (source
5087 (origin
5088 (method url-fetch)
5089 (uri (pypi-uri "babel" version))
5090 (sha256
5091 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
5092 (build-system pyproject-build-system)
5093 (native-inputs
5094 (list python-freezegun
5095 python-pytest
5096 python-setuptools
5097 tzdata-for-tests))
5098 (propagated-inputs
5099 (list python-pytz))
5100 (home-page "https://babel.pocoo.org/")
5101 (synopsis
5102 "Tools for internationalizing Python applications")
5103 (description
5104 "Babel is composed of two major parts:
5105- tools to build and work with gettext message catalogs
5106- a Python interface to the CLDR (Common Locale Data Repository), providing
5107access to various locale display names, localized number and date formatting,
5108etc.")
5109 (license license:bsd-3)))
5110
5111(define-public python-bidict
5112 (package
5113 (name "python-bidict")
5114 (version "0.23.1")
5115 (source
5116 (origin
5117 (method git-fetch) ; no tests in PyPI.
5118 (uri (git-reference
5119 (url "https://github.com/jab/bidict")
5120 (commit (string-append "v" version))))
5121 (file-name (git-file-name name version))
5122 (sha256
5123 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
5124 (build-system pyproject-build-system)
5125 (native-inputs
5126 (list python-pytest
5127 python-pytest-benchmark
5128 python-pytest-xdist
5129 python-setuptools
5130 python-sortedcollections
5131 python-wheel))
5132 (home-page "https://bidict.readthedocs.io")
5133 (synopsis "Bidirectional mapping library")
5134 (description "The @code{bidict} library provides several data structures
5135for working with bidirectional mappings in Python.")
5136 (license license:mpl2.0)))
5137
5138(define-public python-bip39
5139 (package
5140 (name "python-bip39")
5141 (version "0.0.2")
5142 (source
5143 (origin
5144 (method url-fetch)
5145 (uri (pypi-uri "bip39" version))
5146 (sha256
5147 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
5148 (build-system pyproject-build-system)
5149 (native-inputs (list python-pytest python-setuptools))
5150 (home-page "https://github.com/de-centralized-systems/python-bip39/")
5151 (synopsis "Self-contained and simple BIP39 implementation in Python")
5152 (description
5153 "This package provides a self-contained and simple BIP39
5154implementation written in Python. It includes a @code{bip39.py} executable.
5155
5156BIP39 is a standardized mapping between binary data (the @emph{entropy}),
5157and a list of words that are easier to remember for humans (the
5158@emph{mnemonic}).")
5159 (license license:expat)))
5160
5161(define-public python-bitarray
5162 (package
5163 (name "python-bitarray")
5164 (version "3.4.3")
5165 (source (origin
5166 (method url-fetch)
5167 (uri (pypi-uri "bitarray" version))
5168 (sha256
5169 (base32
5170 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
5171 (build-system pyproject-build-system)
5172 (arguments
5173 (list #:phases
5174 #~(modify-phases %standard-phases
5175 (replace 'check
5176 (lambda* (#:key tests? #:allow-other-keys)
5177 (when tests?
5178 ;; Step out of the source directory to avoid interference.
5179 (with-directory-excursion "/tmp"
5180 (invoke "python" "-c"
5181 "import bitarray; bitarray.test()"))))))))
5182 (native-inputs (list python-setuptools python-wheel))
5183 (home-page "https://github.com/ilanschnell/bitarray")
5184 (synopsis "Efficient arrays of booleans")
5185 (description "This package provides an object type which efficiently
5186represents an array of booleans. Bitarrays are sequence types and behave very
5187much like usual lists. Eight bits are represented by one byte in a contiguous
5188block of memory. The user can select between two representations:
5189little-endian and big-endian. All of the functionality is implemented in C.
5190Methods for accessing the machine representation are provided. This can be
5191useful when bit level access to binary files is required, such as portable
5192bitmap image files. Also, when dealing with compressed data which uses
5193variable bit length encoding, you may find this module useful.")
5194 (license license:psfl)))
5195
5196(define-public python-bitarray-2
5197 (package
5198 (inherit python-bitarray)
5199 (version "2.8.1")
5200 (source (origin
5201 (method url-fetch)
5202 (uri (pypi-uri "bitarray" version))
5203 (sha256
5204 (base32
5205 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
5206
5207(define-public python-boolean.py
5208 (package
5209 (name "python-boolean.py")
5210 (version "5.0")
5211 (source
5212 (origin
5213 (method url-fetch)
5214 (uri (pypi-uri "boolean_py" version))
5215 (sha256
5216 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
5217 (build-system pyproject-build-system)
5218 (native-inputs (list python-pytest python-setuptools python-wheel))
5219 (home-page "https://github.com/bastikr/boolean.py")
5220 (synopsis "Boolean algebra in one Python module")
5221 (description
5222 "This is a small Python library that implements boolean algebra.
5223It defines two base elements, @code{TRUE} and @code{FALSE}, and a
5224@code{Symbol} class that can take on one of these two values. Calculations
5225are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
5226compositions like @code{XOR} and @code{NAND} are emulated on top of them.
5227Expressions are constructed from parsed strings or directly in Python.")
5228 (license license:bsd-2)))
5229
5230(define-public python-h5netcdf
5231 (package
5232 (name "python-h5netcdf")
5233 (version "1.3.0")
5234 (source
5235 (origin
5236 (method url-fetch)
5237 (uri (pypi-uri "h5netcdf" version))
5238 (sha256
5239 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
5240 (build-system pyproject-build-system)
5241 (native-inputs
5242 (list python-netcdf4
5243 python-pytest
5244 python-setuptools
5245 python-setuptools-scm
5246 python-wheel))
5247 (propagated-inputs
5248 (list python-h5py python-packaging))
5249 (home-page "https://h5netcdf.org")
5250 (synopsis "Python interface for the netCDF4 file-format based on h5py")
5251 (description "This package provides a Python interface for the netCDF4
5252file-format that reads and writes local or remote HDF5 files directly via
5253@url{h5py, https://www.h5py.org/} or @url{h5pyd,
5254https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
5255library.")
5256 (license license:bsd-3)))
5257
5258(define-public python-h5py
5259 (package
5260 (name "python-h5py")
5261 (version "3.15.1")
5262 (source
5263 (origin
5264 (method url-fetch)
5265 (uri (pypi-uri "h5py" version))
5266 (sha256
5267 (base32 "0sbbw9100f2763czngbpg1jxisp5r5pkpa2swm6mcws4bka3wvn8"))))
5268 (build-system pyproject-build-system)
5269 (arguments
5270 (list
5271 ;; tests: 800 passed, 18 skipped, 4 deselected, 12 warnings
5272 #:test-flags
5273 ;; Tests requiring the build with MPI.
5274 #~(list "-k" (string-append "not test_mpio"
5275 " and not test_mpio_append"
5276 " and not test_mpi_atomic"
5277 " and not test_close_multiple_mpio_driver"))
5278 #:phases
5279 #~(modify-phases %standard-phases
5280 (add-after 'unpack 'fix-hdf5-paths
5281 (lambda _
5282 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))))
5283 (replace 'check
5284 (lambda* (#:key tests? test-flags #:allow-other-keys)
5285 (when tests?
5286 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
5287 (with-directory-excursion #$output
5288 (apply invoke "pytest" "-vv" test-flags))))))))
5289 (native-inputs
5290 (list pkg-config
5291 python-cython
5292 python-pkgconfig
5293 python-pytest
5294 python-setuptools))
5295 (inputs
5296 (list hdf5))
5297 (propagated-inputs
5298 (list python-numpy))
5299 (home-page "https://www.h5py.org/")
5300 (synopsis "Read and write HDF5 files from Python")
5301 (description
5302 "The h5py package provides both a high- and low-level interface to the
5303HDF5 library from Python. The low-level interface is intended to be a
5304complete wrapping of the HDF5 API, while the high-level component supports
5305access to HDF5 files, datasets and groups using established Python and NumPy
5306concepts.")
5307 (license license:bsd-3)))
5308
5309(define-public python-hdf5storage
5310 ;; XXX: Use the latest commit containing compatability with Pytest and Python
5311 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
5312 ;;
5313 ;; This package probably is sun setting, consider to remove when stops
5314 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
5315 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
5316 (revision "0"))
5317 (package
5318 (name "python-hdf5storage")
5319 (version (git-version "0.1.19" revision commit))
5320 (source
5321 (origin
5322 (method git-fetch)
5323 (uri (git-reference
5324 (url "https://github.com/frejanordsiek/hdf5storage")
5325 (commit commit)))
5326 (file-name (git-file-name name version))
5327 (sha256
5328 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
5329 (build-system pyproject-build-system)
5330 (native-inputs
5331 (list python-pytest
5332 python-setuptools))
5333 (propagated-inputs
5334 (list python-h5py
5335 python-numpy-1))
5336 (home-page "https://github.com/frejanordsiek/hdf5storage")
5337 (synopsis "Read and write Python data types from and to HDF5 files")
5338 (description
5339 "This Python package provides high-level utilities to read and write a
5340variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
5341formatted files. This package also provides support for MATLAB MAT v7.3
5342formatted files, which are HDF5 files with a different extension and some
5343extra metadata. Because HDF5 and MAT files might need to be read from
5344untrusted sources, pickling is avoided in this package.")
5345 (license license:bsd-2))))
5346
5347(define-public python-prctl
5348 (package
5349 (name "python-prctl")
5350 (version "1.8.1")
5351 (source (origin
5352 (method url-fetch)
5353 (uri (pypi-uri "python-prctl" version))
5354 (sha256
5355 (base32
5356 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
5357 (build-system pyproject-build-system)
5358 (arguments
5359 (list #:test-backend ''custom
5360 #:test-flags ''("test_prctl.py")
5361 #:phases
5362 #~(modify-phases %standard-phases
5363 (add-after 'unpack 'patch-tests
5364 (lambda _
5365 (substitute* "test_prctl.py"
5366 ;; actual suffix used in cpython build output dir name
5367 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
5368 ;; test_no_new_privs assumes existance of /bin/ping, but
5369 ;; can never run anyway due to it requiring setuid ping.
5370 ;; just short circuit it instead.
5371 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
5372 (inputs (list libcap))
5373 (native-inputs (list python-setuptools))
5374 (supported-systems (filter target-linux? %supported-systems))
5375 (home-page "https://pythonhosted.org/python-prctl")
5376 (synopsis "Linux capabilities library")
5377 (description "This package provides a Python library for controlling Linux
5378capabilities and attributes, similar to the prctl syscall.")
5379 (license license:gpl3+)))
5380
5381(define-public python-pyhimitsu
5382 (package
5383 (name "python-pyhimitsu")
5384 (version "0.0.9")
5385 (source (origin
5386 (method url-fetch)
5387 (uri (pypi-uri "py_himitsu" version))
5388 (sha256
5389 (base32
5390 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
5391 (build-system pyproject-build-system)
5392 (arguments
5393 (list
5394 #:phases
5395 #~(modify-phases %standard-phases
5396 (replace 'check
5397 (lambda _
5398 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
5399 (invoke "make" "check"))))))
5400 (native-inputs (list python-hatchling))
5401 (propagated-inputs (list python-pyxdg))
5402 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
5403 (synopsis "Himitsu client protocol implementation in Python")
5404 (description "This package provides a library for writing Himitsu client
5405programs in Python.")
5406 (license license:expat)))
5407
5408(define-public python-hjson
5409 ;; Using commit from master branch as the PyPI version does not contain
5410 ;; the hjson/tests/ directory.
5411 (let ((revision "0")
5412 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
5413 (package
5414 (name "python-hjson")
5415 (version (git-version "3.1.0" revision commit))
5416 (source (origin
5417 (method git-fetch)
5418 (uri (git-reference
5419 (url "https://github.com/hjson/hjson-py")
5420 (commit commit)))
5421 (file-name (git-file-name name version))
5422 (sha256
5423 (base32
5424 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))))
5425 (build-system pyproject-build-system)
5426 (native-inputs (list python-setuptools python-wheel))
5427 (home-page "https://github.com/hjson/hjson-py")
5428 (synopsis "Python package to parse HJSON documents")
5429 (description "This package provides a Python library and a command-line
5430interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
5431 (license license:expat))))
5432
5433(define-public python-hnswlib
5434 (package
5435 (name "python-hnswlib")
5436 (version "0.8.0")
5437 (source
5438 (origin
5439 (method git-fetch)
5440 (uri (git-reference
5441 (url "https://github.com/nmslib/hnswlib")
5442 (commit (string-append "v" version))))
5443 (file-name (git-file-name name version))
5444 (sha256
5445 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
5446 (build-system pyproject-build-system)
5447 (arguments
5448 (list
5449 #:phases
5450 #~(modify-phases %standard-phases
5451 (add-after 'unpack 'disable-native-optimization
5452 (lambda _
5453 (substitute* "setup.py"
5454 ((", '-march=native'")
5455 "")))))))
5456 (native-inputs
5457 (list pybind11
5458 python-pytest
5459 python-setuptools))
5460 (propagated-inputs
5461 (list python-numpy))
5462 (home-page "https://github.com/nmslib/hnswlib")
5463 (synopsis "Fast approximate nearest neighbor search")
5464 (description "Hnswlib is a header-only C++ implementation of fast
5465approximate nearest neighbor search with Python bindings.")
5466 (license license:asl2.0)))
5467
5468(define-public python-pylatexenc
5469 (package
5470 (name "python-pylatexenc")
5471 (version "2.10")
5472 (source
5473 (origin
5474 (method url-fetch)
5475 (uri (pypi-uri "pylatexenc" version))
5476 (sha256
5477 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
5478 (build-system pyproject-build-system)
5479 (native-inputs (list python-pytest python-setuptools python-wheel))
5480 (home-page "https://github.com/phfaist/pylatexenc")
5481 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
5482 (description
5483 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
5484Unicode-to-LaTeX conversion.")
5485 (license license:expat)))
5486
5487(define-public python-lsp-black
5488 (package
5489 (name "python-lsp-black")
5490 (version "2.0.0")
5491 (source
5492 (origin
5493 (method git-fetch)
5494 (uri (git-reference
5495 (url "https://github.com/python-lsp/python-lsp-black")
5496 (commit (string-append "v" version))))
5497 (file-name (git-file-name name version))
5498 (sha256
5499 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
5500 (build-system pyproject-build-system)
5501 (arguments
5502 ;; The python version is too old for these tests to pass properly.
5503 (list #:test-flags
5504 `'("-k" ,(string-append
5505 "not test_pylsp_format_document_syntax_error"
5506 " and not test_pylsp_format_range_syntax_error"
5507 " and not test_load_config_defaults"
5508 " and not test_load_config_with_skip_options"))))
5509 (propagated-inputs
5510 (list python-black python-lsp-server python-tomli))
5511 (native-inputs
5512 (list python-pytest python-setuptools python-wheel))
5513 (home-page "https://github.com/python-lsp/python-lsp-black")
5514 (synopsis "Black plugin for the Python LSP Server")
5515 (description "This package provides a plugin with support for the
5516@code{python-black} formatter for the Python LSP Server.")
5517 (license license:expat)))
5518
5519(define-public python-pylsp-mypy
5520 (package
5521 (name "python-pylsp-mypy")
5522 (version "0.6.9")
5523 (source
5524 (origin
5525 (method url-fetch)
5526 (uri (pypi-uri "pylsp_mypy" version))
5527 (sha256
5528 (base32 "1amvqzb5lhhw2011003mwm88chb8sz5aax1jrqc3jg0jpak992fj"))))
5529 (build-system pyproject-build-system)
5530 (native-inputs (list python-pytest python-setuptools python-wheel))
5531 (propagated-inputs (list python-mypy python-lsp-server))
5532 (home-page "https://github.com/python-lsp/pylsp-mypy")
5533 (synopsis "Mypy linter for the Python LSP Server")
5534 (description
5535 "Mypy linter integration for use with @code{python-lsp-server}.")
5536 (license license:expat)))
5537
5538(define-public python-sh
5539 (package
5540 (name "python-sh")
5541 (version "2.2.2")
5542 (source
5543 (origin
5544 (method url-fetch)
5545 (uri (pypi-uri "sh" version))
5546 (sha256
5547 (base32
5548 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
5549 (build-system pyproject-build-system)
5550 (arguments
5551 (list
5552 #:test-flags
5553 #~(list "-k" (string-join
5554 ;; These tests are shaky.
5555 (list "not test_bad_sig_raise_exception"
5556 "test_doesnt_execute_directories"
5557 "test_environment"
5558 "test_ok_code_ignores_bad_sig_exception"
5559 "test_unicode_path")
5560 " and not ")
5561 "tests")
5562 #:phases
5563 #~(modify-phases %standard-phases
5564 (add-before 'check 'pre-check
5565 (lambda _
5566 (setenv "HOME" "/tmp"))))))
5567 (native-inputs
5568 (list python-poetry-core python-pytest))
5569 (home-page "https://github.com/amoffat/sh")
5570 (synopsis "Python subprocess replacement")
5571 (description "This package provides a replacement for Python's
5572@code{subprocess} feature.")
5573 (license license:expat)))
5574
5575;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
5576;; that is updated.
5577(define-public python-sh-1
5578 (package
5579 (inherit python-sh)
5580 (version "1.14.2")
5581 (source
5582 (origin
5583 (method url-fetch)
5584 (uri (pypi-uri "sh" version))
5585 (sha256
5586 (base32
5587 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
5588 ;(build-system python-build-system)
5589 (arguments
5590 '(#:phases
5591 (modify-phases %standard-phases
5592 (replace 'check
5593 (lambda _
5594 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
5595 (setenv "HOME" "/tmp")
5596 (invoke "python" "sh.py" "test"))))))
5597 (native-inputs
5598 (list python-setuptools))))
5599
5600(define-public python-cftime
5601 (package
5602 (name "python-cftime")
5603 (version "1.6.5")
5604 (source
5605 (origin
5606 (method url-fetch)
5607 (uri (pypi-uri "cftime" version))
5608 (sha256
5609 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
5610 (build-system pyproject-build-system)
5611 (arguments
5612 (list #:phases
5613 #~(modify-phases %standard-phases
5614 (add-after 'unpack 'remove-unwanted-pytest-options
5615 (lambda _
5616 (substitute* "setup.cfg"
5617 (("doctest_optionflags.*")
5618 "")
5619 (("--cov.*")
5620 "")))))))
5621 (propagated-inputs
5622 (list python-numpy))
5623 (native-inputs
5624 (list python-cython
5625 python-pytest
5626 python-setuptools
5627 python-wheel))
5628 (home-page "https://unidata.github.io/cftime/")
5629 (synopsis "Library for time handling")
5630 (description
5631 "This package provides time-handling functionality that used to be part
5632of the netcdf4 package before.")
5633 (license license:expat)))
5634
5635(define-public python-netcdf4
5636 (package
5637 (name "python-netcdf4")
5638 (version "1.7.2")
5639 (source
5640 (origin
5641 (method git-fetch)
5642 (uri (git-reference
5643 (url "https://github.com/Unidata/netcdf4-python")
5644 (commit (string-append "v" version "rel"))))
5645 (file-name (git-file-name name version))
5646 (sha256
5647 (base32 "1bq0dkgq795z00j5z4xi1dqqw0chaj5j80hg5nci1piyr2ic41v9"))))
5648 (build-system pyproject-build-system)
5649 (arguments
5650 (list
5651 ;; tests: Ran 113 tests; skipped=7
5652 #:phases
5653 #~(modify-phases %standard-phases
5654 (add-before 'build 'set-configure-flags
5655 (lambda _
5656 (setenv "CFLAGS" (string-join
5657 (list "-g -O2"
5658 "-Wno-error=incompatible-pointer-types"
5659 "-Wno-error=implicit-function-declaration"
5660 "-Wno-error=int-conversion")
5661 " "))
5662 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
5663 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
5664 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
5665 (setenv "USE_NCCONFIG" "0")))
5666 (replace 'check
5667 (lambda* (#:key tests? #:allow-other-keys)
5668 (when tests?
5669 (with-directory-excursion "test"
5670 (setenv "NO_NET" "1")
5671 (setenv "NO_CDL" "1")
5672 (invoke "python" "run_all.py"))))))))
5673 (native-inputs
5674 (list python-cython
5675 python-packaging
5676 python-pytest
5677 python-setuptools
5678 python-setuptools-scm
5679 python-typing-extensions))
5680 (inputs
5681 (list netcdf
5682 hdf5
5683 zlib))
5684 (propagated-inputs
5685 (list python-certifi
5686 python-cftime
5687 python-numpy))
5688 (home-page "https://github.com/Unidata/netcdf4-python")
5689 (synopsis "Python/numpy interface to the netCDF library")
5690 (description "Netcdf4-python is a Python interface to the netCDF C
5691library. netCDF version 4 has many features not found in earlier
5692versions of the library and is implemented on top of HDF5. This module
5693can read and write files in both the new netCDF 4 and the old netCDF 3
5694format, and can create files that are readable by HDF5 clients. The
5695API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
5696to users of that module.")
5697 ;; The software is mainly ISC, but includes some files covered
5698 ;; by the Expat license.
5699 (license (list license:isc license:expat))))
5700
5701(define-public python-ncclient
5702 (package
5703 (name "python-ncclient")
5704 (version "0.6.19")
5705 (source
5706 (origin
5707 (method git-fetch) ;no tests in PyPI release
5708 (uri (git-reference
5709 (url "https://github.com/ncclient/ncclient")
5710 (commit (string-append "v" version))))
5711 (file-name (git-file-name name version))
5712 (sha256
5713 (base32
5714 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
5715 (build-system pyproject-build-system)
5716 (native-inputs
5717 (list python-pytest
5718 python-setuptools
5719 python-wheel))
5720 (propagated-inputs
5721 (list python-lxml
5722 python-paramiko))
5723 (home-page "https://github.com/ncclient/ncclient")
5724 (synopsis "Python library for NETCONF clients")
5725 (description "@code{ncclient} is a Python library that facilitates
5726client-side scripting and application development around the NETCONF
5727protocol.")
5728 (license license:asl2.0)))
5729
5730(define-public python-ncls
5731 (package
5732 (name "python-ncls")
5733 (version "0.0.68")
5734 (source (origin
5735 (method url-fetch)
5736 (uri (pypi-uri "ncls" version))
5737 (sha256
5738 (base32
5739 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
5740 (build-system pyproject-build-system)
5741 (arguments
5742 ;; Those tests fail with warnings (not errors) for the Numpy update.
5743 ;; Remove it at next python-team iteration.
5744 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
5745 "--ignore=examples/test_find_overlap_list.py")))
5746 (native-inputs (list python-cython
5747 python-pandas
5748 python-pytest
5749 python-setuptools
5750 python-wheel))
5751 (propagated-inputs (list python-numpy))
5752 (home-page "https://github.com/endrebak/ncls")
5753 (synopsis "Nested containment list data structure")
5754 (description
5755 "This package provides a wrapper for the nested containment list data
5756structure. It is a static interval-tree that is fast for both construction
5757and lookups.")
5758 (license license:bsd-3)))
5759
5760(define-public python-license-expression
5761 (package
5762 (name "python-license-expression")
5763 (version "30.1.0")
5764 (source
5765 (origin
5766 (method url-fetch)
5767 (uri (pypi-uri "license-expression" version))
5768 (sha256
5769 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
5770 (build-system pyproject-build-system)
5771 (native-inputs
5772 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
5773 (propagated-inputs
5774 (list python-boolean.py))
5775 (home-page "https://github.com/nexB/license-expression")
5776 (synopsis "Apply boolean logic to license expressions")
5777 (description
5778 "This Python module defines a tiny language to evaluate and compare
5779license expressions using boolean logic. Logical combinations of licenses can
5780be tested for equality, containment, and equivalence. They can be normalised
5781and simplified. It supports SPDX license expressions as well as other naming
5782conventions and aliases in the same expression.")
5783 (license license:gpl2+)))
5784
5785(define-public python-limits
5786 (package
5787 (name "python-limits")
5788 (version "5.5.0")
5789 (source
5790 (origin
5791 (method git-fetch)
5792 (uri (git-reference
5793 (url "https://github.com/alisaifee/limits")
5794 (commit version)))
5795 (file-name (git-file-name name version))
5796 (sha256
5797 (base32 "1ykld43q1pbvds4wsb18wagh852byzjpcjqg1xwa5cldigmkc2x0"))))
5798 (build-system pyproject-build-system)
5799 (arguments
5800 (list
5801 ;; XXX: Despite running only unit tests, pytest exits with an error code.
5802 #:tests? #f
5803 #:test-flags #~(list "-m" "unit")
5804 #:phases
5805 #~(modify-phases %standard-phases
5806 (add-after 'unpack 'ignore-K-pytest-option
5807 (lambda _
5808 (substitute* "pytest.ini"
5809 (("-K") "")))))))
5810 (propagated-inputs (list python-deprecated python-packaging))
5811 (native-inputs
5812 (list ; python-etcd3
5813 python-flaky
5814 python-pytest
5815 python-pytest-asyncio
5816 python-pytest-benchmark
5817 python-pytest-cov
5818 python-pytest-lazy-fixtures
5819 python-pytest-xdist
5820 ;; python-pymemcache
5821 ;; python-pymongo
5822 ;; python-redis
5823 python-setuptools
5824 ;; python-valkey
5825 ))
5826 (home-page "https://limits.readthedocs.io/")
5827 (synopsis "Rate limiting utilities")
5828 (description
5829 "This package provides a Python library to perform rate limiting with
5830commonly used storage backends.")
5831 (license license:expat)))
5832
5833(define-public python-lockfile
5834 (package
5835 (name "python-lockfile")
5836 (version "0.12.2")
5837 (source
5838 (origin
5839 (method url-fetch)
5840 (uri (pypi-uri "lockfile" version))
5841 (sha256
5842 (base32
5843 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
5844 (build-system python-build-system)
5845 (arguments '(#:test-target "check"))
5846 (native-inputs
5847 (list python-pbr))
5848 (home-page "https://launchpad.net/pylockfile")
5849 (synopsis "Platform-independent file locking module")
5850 (description
5851 "The lockfile package exports a LockFile class which provides a simple
5852API for locking files.")
5853 (license license:expat)))
5854
5855(define-public python-fb-re2
5856 (package
5857 (name "python-fb-re2")
5858 (version "1.0.7")
5859 (source
5860 (origin
5861 (method git-fetch)
5862 (uri (git-reference
5863 (url "https://github.com/facebook/pyre2")
5864 (commit (string-append "v" version))))
5865 (file-name (git-file-name name version))
5866 (sha256
5867 (base32
5868 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
5869 (build-system pyproject-build-system)
5870 (native-inputs
5871 (list python-pytest python-setuptools))
5872 (inputs
5873 (list re2))
5874 (home-page "https://github.com/facebook/pyre2")
5875 (synopsis "Python wrapper for RE2")
5876 (description "This package provides a Python extension that wraps Google's
5877RE2 regular expression library. It implements many of the features of
5878Python's built-in @code{re} module with compatible interfaces.")
5879 (license license:bsd-3)))
5880
5881(define-public python-filelock
5882 (package
5883 (name "python-filelock")
5884 (version "3.16.1")
5885 (source
5886 (origin
5887 (method url-fetch)
5888 (uri (pypi-uri "filelock" version))
5889 (sha256
5890 (base32
5891 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
5892 (build-system pyproject-build-system)
5893 (arguments
5894 (list
5895 ;; Break cycle with virtualenv.
5896 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
5897 (native-inputs
5898 (list python-hatch-vcs
5899 python-hatchling
5900 python-pytest
5901 python-pytest-asyncio
5902 python-pytest-mock
5903 python-setuptools-scm))
5904 (home-page "https://github.com/tox-dev/py-filelock")
5905 (synopsis "Platform independent file lock")
5906 (description "@code{filelock} contains a single module implementing
5907a platform independent file lock in Python, which provides a simple way of
5908inter-process communication.")
5909 (license license:unlicense)))
5910
5911(define-public python-filelock-next
5912 (package
5913 (inherit python-filelock)
5914 (name "python-filelock")
5915 (version "3.20.0")
5916 (source
5917 (origin
5918 (method url-fetch)
5919 (uri (pypi-uri "filelock" version))
5920 (sha256
5921 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
5922 (native-inputs
5923 (list python-hatch-vcs
5924 python-hatchling
5925 python-pytest
5926 python-pytest-asyncio
5927 python-pytest-mock
5928 python-pytest-timeout))))
5929
5930(define-public python-seedir
5931 (package
5932 (name "python-seedir")
5933 (version "0.5.0")
5934 (source
5935 (origin
5936 (method url-fetch)
5937 (uri (pypi-uri "seedir" version))
5938 (sha256
5939 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
5940 (build-system pyproject-build-system)
5941 (propagated-inputs (list python-natsort))
5942 (native-inputs (list python-pytest python-setuptools python-wheel))
5943 (home-page "https://github.com/earnestt1234/seedir")
5944 (synopsis
5945 "Package for creating, editing, and reading folder tree diagrams.")
5946 (description
5947 "This is a package for creating, editing, and reading folder tree
5948diagrams.")
5949 (license license:expat)))
5950
5951(define-public python-semantic-version
5952 (package
5953 (name "python-semantic-version")
5954 (version "2.10.0")
5955 (source
5956 (origin
5957 (method url-fetch)
5958 (uri (pypi-uri "semantic_version" version))
5959 (sha256
5960 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
5961 (build-system pyproject-build-system)
5962 (arguments (list #:test-backend #~'custom
5963 #:test-flags #~(list "-m" "nose2")))
5964 (native-inputs
5965 (list python-nose2
5966 python-setuptools))
5967 (home-page "https://github.com/rbarrois/python-semanticversion")
5968 (synopsis "Semantic versioning module for Python")
5969 (description
5970 "The @code{semantic_version} class is a small library for handling
5971@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
5972
5973It can compare versions, generate a new version that represents a bump in one
5974of the version levels, and check whether any given string is a proper semantic
5975version identifier.")
5976 (license license:bsd-3)))
5977
5978(define-public python-serpent
5979 (package
5980 (name "python-serpent")
5981 (version "1.41")
5982 (source
5983 (origin
5984 (method git-fetch)
5985 (uri (git-reference
5986 (url "https://github.com/irmen/Serpent")
5987 (commit (string-append "serpent-" version))))
5988 (file-name (git-file-name name version))
5989 (sha256
5990 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
5991 (build-system pyproject-build-system)
5992 (arguments (list #:test-backend #~'unittest
5993 #:test-flags #~(list "discover" "-s" "tests")))
5994 (native-inputs
5995 (list python-attrs python-pytz python-setuptools))
5996 (home-page "https://github.com/irmen/Serpent")
5997 (synopsis "Serializer for literal Python expressions")
5998 (description
5999 "Serpent provides @code{ast.literal_eval()}-compatible object tree
6000serialization. It serializes an object tree into bytes (an utf-8 encoded
6001string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
6002to rebuild the original object tree.
6003
6004Because only safe literals are encoded, it is safe to send serpent data to
6005other machines, such as over the network.")
6006 (license license:expat)))
6007
6008(define-public python-setuptools-declarative-requirements
6009 (package
6010 (name "python-setuptools-declarative-requirements")
6011 (version "1.3.0")
6012 (source
6013 (origin
6014 (method url-fetch)
6015 (uri (pypi-uri "setuptools-declarative-requirements" version))
6016 (sha256
6017 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
6018 (build-system pyproject-build-system)
6019 (arguments
6020 (list #:tests? #f)) ;requir dated inputs
6021 (native-inputs
6022 (list python-setuptools-scm))
6023 (propagated-inputs
6024 (list python-setuptools))
6025 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
6026 (synopsis "File support for setuptools declarative setup.cfg")
6027 (description
6028 "This package provides file support for setuptools declarative
6029@code{setup.cfg}.")
6030 (license license:asl2.0)))
6031
6032(define-public python-humanfriendly
6033 (package
6034 (name "python-humanfriendly")
6035 (version "10.0")
6036 (source
6037 (origin
6038 (method git-fetch)
6039 (uri (git-reference
6040 (url "https://github.com/xolox/python-humanfriendly")
6041 (commit version)))
6042 (file-name (git-file-name name version))
6043 (sha256
6044 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
6045 (build-system pyproject-build-system)
6046 (arguments
6047 (list
6048 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
6049 #:tests? #f))
6050 (native-inputs (list python-setuptools))
6051 (home-page "https://humanfriendly.readthedocs.io")
6052 (synopsis "Human-friendly input and output in Python")
6053 (description
6054 "The functions and classes in @code{humanfriendly} can be used to make
6055text interfaces more user-friendly. It includes tools to parse and format
6056numbers, file sizes, and timespans, timers for long-running operations, menus
6057to allow the user to choose from a list of options, and terminal interaction
6058helpers.")
6059 (license license:expat)))
6060
6061;; XXX: The project might be abandoned and this package has no users in Guix,
6062;; consider to remove if it keeps failing.
6063;; See: <https://github.com/ethanfurman/aenum/issues/45>,
6064;; <https://github.com/ethanfurman/aenum/issues/44>,
6065;; <https://github.com/ethanfurman/aenum/issues/27>.
6066(define-public python-aenum
6067 (package
6068 (name "python-aenum")
6069 (version "3.1.15")
6070 (source
6071 (origin
6072 (method url-fetch)
6073 (uri (pypi-uri "aenum" version))
6074 (sha256
6075 (base32 "0ncmbdblqhqyb2mg73d5663vx3q2xb9q8hmj77zp1y64336pdgcc"))
6076 (modules '((guix build utils)))
6077 (snippet
6078 ;; Delete the Python 2 specific files which won't compile
6079 ;; in Python 3.
6080 '(for-each delete-file (find-files "." "_py2.py$")))))
6081 (build-system pyproject-build-system)
6082 (arguments
6083 (list
6084 #:test-flags
6085 ;; These tests are defined in "aenum/test_v3.py" and require a function
6086 ;; "test_pickle_dump_load" from "aenum/test.py" which is not imported
6087 ;; into the module's scope.
6088 #~(list "-k" (string-join
6089 (list "not test_pickle_enum_function_with_qualname"
6090 "test_class_nested_enum_and_pickle_protocol_four"
6091 "test_subclasses_with_getnewargs_ex")
6092 " and not "))
6093 #:phases
6094 #~(modify-phases %standard-phases
6095 (add-after 'unpack 'fix-tests
6096 (lambda _
6097 (substitute* "aenum/test_v3.py"
6098 ;; tempdir variable is not defined in the module.
6099 (("import tempfile.*")
6100 (format #f "import tempfile~%tempdir = tempfile.mkdtemp()~%"))))))))
6101 (native-inputs
6102 (list python-pytest
6103 python-setuptools
6104 python-wheel))
6105 (home-page "https://github.com/ethanfurman/aenum")
6106 (synopsis "Advanced enumerations, namedtuples and constants for Python")
6107 (description
6108 "The aenum library includes an @code{Enum} base class, a metaclass-based
6109@code{NamedTuple} implementation and a @code{NamedConstant} class.")
6110 (license license:bsd-3)))
6111
6112(define-public python-calver
6113 (package
6114 (name "python-calver")
6115 (version "2022.06.26")
6116 (source
6117 (origin
6118 (method git-fetch)
6119 (uri (git-reference
6120 (url "https://github.com/di/calver")
6121 (commit version)))
6122 (file-name (git-file-name name version))
6123 (sha256
6124 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
6125 (build-system pyproject-build-system)
6126 (native-inputs
6127 (list python-pretend
6128 python-pytest
6129 python-setuptools
6130 python-wheel))
6131 (home-page "https://github.com/di/calver")
6132 (synopsis "Setuptools extension for CalVer package versions")
6133 (description
6134 "The calver package is a setuptools extension for automatically defining
6135your Python package version as a calendar version.")
6136 (license license:asl2.0)))
6137
6138(define-public python-can
6139 (package
6140 (name "python-can")
6141 (version "4.6.1")
6142 (source
6143 (origin
6144 (method git-fetch)
6145 (uri (git-reference
6146 (url "https://github.com/hardbyte/python-can")
6147 (commit (string-append "v" version))))
6148 (file-name (git-file-name name version))
6149 (sha256
6150 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
6151 (build-system pyproject-build-system)
6152 (arguments
6153 (list
6154 #:test-flags
6155 #~(list
6156 ;; TODO: Check if it could be packed:
6157 ;; https://github.com/projectgus/python-canalystii
6158 ;;
6159 ;; Disable tests which require specific CAN drivers we have no
6160 ;; package for in Guix.
6161 "--ignore=test/test_interface_canalystii.py"
6162 ;; These tests fail with "OSError: [Errno 19] No such device".
6163 "-k" "not BasicTestUdpMulticastBusIPv")
6164 #:phases
6165 #~(modify-phases %standard-phases
6166 (add-after 'unpack 'set-version
6167 (lambda _
6168 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
6169 (propagated-inputs (list python-packaging python-wrapt))
6170 (native-inputs
6171 (list ;; python-canalystii ; Not packed yet
6172 python-future
6173 python-hypothesis
6174 python-mock
6175 python-parameterized
6176 python-pyserial
6177 python-pytest
6178 python-pytest-cov
6179 python-pytest-timeout
6180 python-setuptools
6181 python-setuptools-scm))
6182 (home-page "https://github.com/hardbyte/python-can")
6183 (synopsis "Controller Area Network (CAN) interface module for Python")
6184 (description
6185 "This package defines the @code{can} module, which provides controller
6186area network (CAN) support for Python developers; providing common
6187abstractions to different hardware devices, and a suite of utilities for
6188sending and receiving messages on a CAN bus.")
6189 (license license:lgpl3+)))
6190
6191(define-public python-canmatrix
6192 (package
6193 (name "python-canmatrix")
6194 (version "1.2")
6195 (source
6196 (origin
6197 (method git-fetch) ; no tests data in PyPi package
6198 (uri (git-reference
6199 (url "https://github.com/ebroecker/canmatrix")
6200 (commit version)))
6201 (file-name (git-file-name name version))
6202 (sha256
6203 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
6204 (build-system pyproject-build-system)
6205 (native-inputs
6206 (list python-pytest
6207 python-pytest-cov
6208 python-pytest-timeout
6209 python-setuptools
6210 python-wheel))
6211 (propagated-inputs
6212 (list python-attrs
6213 python-canopen
6214 python-click
6215 ;; python-ldfparser
6216 python-lxml
6217 python-openpyxl
6218 python-pyyaml
6219 python-xlrd
6220 python-xlwt))
6221 (home-page "https://github.com/ebroecker/canmatrix")
6222 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
6223 (description
6224 "This package implements a @acronym{CAN, Controller Area Network} matrix
6225object in Python which describes the CAN-communication and its needed objects
6226such as board units, frames, signals, and values. It also includes two
6227command-line tools (@command{canconvert} and @command{cancompare}) for
6228converting and comparing CAN databases.")
6229 (license license:bsd-2)))
6230
6231(define-public python-canopen
6232 (package
6233 (name "python-canopen")
6234 (version "2.4.1")
6235 (source
6236 (origin
6237 (method git-fetch)
6238 (uri (git-reference
6239 (url "https://github.com/canopen-python/canopen")
6240 (commit (string-append "v" version))))
6241 (file-name (git-file-name name version))
6242 (sha256
6243 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
6244 (build-system pyproject-build-system)
6245 (native-inputs (list python-pytest python-setuptools))
6246 (propagated-inputs (list python-can))
6247 (home-page "https://github.com/canopen-python/canopen")
6248 (synopsis "CANopen stack implementation")
6249 (description
6250 "This package provides a Python implementation of the
6251@uref{https://www.can-cia.org/canopen/,CANopen standard} for
6252@acronym{CANs, controller-area networks}. The aim of the project is to
6253support the most common parts of the CiA 301 standard in a simple
6254Pythonic interface. It is mainly targeted for testing and automation
6255tasks rather than a standard compliant master implementation.")
6256 (license license:expat)))
6257
6258(define-public python-diskcache
6259 (package
6260 (name "python-diskcache")
6261 (version "5.6.3")
6262 (source
6263 (origin
6264 (method git-fetch)
6265 (uri (git-reference
6266 (url "https://github.com/grantjenks/python-diskcache")
6267 (commit (string-append "v" version))))
6268 (file-name (git-file-name name version))
6269 (sha256
6270 (base32
6271 "0mird2yj3xbh71g325admxpif9h20w0xgp9hw6ss2bdbzxsykh6m"))))
6272 (build-system pyproject-build-system)
6273 (arguments
6274 (list
6275 #:test-flags
6276 #~(list
6277 ;; Ignore flaky tests.
6278 ;; AssertionError: assert None == 100
6279 "--deselect=tests/test_core.py::test_incr_update_keyerror")
6280 #:phases
6281 #~(modify-phases %standard-phases
6282 (add-before 'check 'fix-pytest-config
6283 (lambda _
6284 (substitute* "tox.ini"
6285 ;; no python-pytest-xdist
6286 ((".*-n auto.*")
6287 "")
6288 ;; no python-pytest-cov
6289 ((".*--cov.*")
6290 "")))))))
6291 (native-inputs
6292 (list python-django
6293 python-matplotlib
6294 python-pytest
6295 python-setuptools))
6296 (home-page "https://www.grantjenks.com/docs/diskcache/")
6297 (synopsis "Disk and file backed cache library")
6298 (description "DiskCache is a disk and file backed persistent cache.")
6299 (license license:asl2.0)))
6300
6301(define-public python-optparse-pretty
6302 (package
6303 (name "python-optparse-pretty")
6304 (version "0.1.1")
6305 (source
6306 (origin
6307 (method url-fetch)
6308 (uri (pypi-uri "optparse-pretty" version))
6309 (sha256
6310 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
6311 (build-system pyproject-build-system)
6312 (arguments (list #:tests? #false)) ;There are none
6313 (native-inputs (list python-setuptools python-wheel))
6314 (home-page "https://github.com/gvalkov/optparse-pretty")
6315 (synopsis "Compact help formatter for optparse")
6316 (description
6317 "This module provides two help formatters for optparse. They provide
6318terser and more customizable option formatting in comparison to the default
6319help formatter.")
6320 (license license:bsd-3)))
6321
6322(define-public python-orjson
6323 (package
6324 (name "python-orjson")
6325 (version "3.9.7")
6326 (source (origin
6327 (method url-fetch)
6328 (uri (pypi-uri "orjson" version))
6329 (sha256
6330 (base32
6331 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
6332 (build-system cargo-build-system)
6333 (arguments
6334 (list
6335 #:imported-modules `(,@%cargo-build-system-modules
6336 ,@%pyproject-build-system-modules)
6337 #:modules '((guix build cargo-build-system)
6338 ((guix build pyproject-build-system) #:prefix py:)
6339 (guix build utils))
6340 #:phases
6341 (with-extensions (list (pyproject-guile-json))
6342 #~(modify-phases %standard-phases
6343 (add-after 'build 'build-python-module
6344 (assoc-ref py:%standard-phases 'build))
6345 (add-after 'build-python-module 'install-python-module
6346 (assoc-ref py:%standard-phases 'install))))
6347 #:install-source? #false))
6348 (inputs
6349 (cons maturin (cargo-inputs 'python-orjson)))
6350 (native-inputs
6351 (list python-wrapper))
6352 (home-page "https://github.com/ijl/orjson")
6353 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
6354 (description "Orjson is a fast, correct JSON library for Python. It
6355benchmarks as the fastest Python library for JSON and is more correct than the
6356standard @code{json} library or other third-party libraries. It serializes
6357dataclass, datetime, numpy, and UUID instances natively.")
6358 ;; Either of these licenses
6359 (license (list license:asl2.0 license:expat))))
6360
6361(define-public python-overrides
6362 (package
6363 (name "python-overrides")
6364 (version "7.7.0")
6365 (source
6366 (origin
6367 (method url-fetch)
6368 (uri (pypi-uri "overrides" version))
6369 (sha256
6370 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
6371 (build-system pyproject-build-system)
6372 (native-inputs (list python-pytest python-setuptools python-wheel))
6373 (home-page "https://github.com/mkorpela/overrides")
6374 (synopsis "Decorator to detect mismatch when overriding a method")
6375 (description
6376 "This package provides a decorator to automatically detect mismatch when
6377overriding a method.")
6378 (license license:asl2.0)))
6379
6380(define-public python-argparse-addons
6381 (package
6382 (name "python-argparse-addons")
6383 (version "0.12.0")
6384 (source
6385 (origin
6386 (method url-fetch)
6387 (uri (pypi-uri "argparse_addons" version))
6388 (sha256
6389 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
6390 (build-system pyproject-build-system)
6391 (native-inputs
6392 (list python-pytest python-setuptools))
6393 (home-page "https://github.com/eerimoq/argparse_addons")
6394 (synopsis "Extensions for Python's @code{argparse} library")
6395 (description "This Python library provides additional types and actions
6396for the standard @code{argparse} library.")
6397 (license license:expat)))
6398
6399(define-public python-bitstruct
6400 (package
6401 (name "python-bitstruct")
6402 (version "8.21.0")
6403 (source
6404 (origin
6405 (method url-fetch)
6406 (uri (pypi-uri "bitstruct" version))
6407 (sha256
6408 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
6409 (build-system pyproject-build-system)
6410 (native-inputs
6411 (list python-pytest
6412 python-setuptools
6413 python-wheel))
6414 (home-page "https://github.com/eerimoq/bitstruct")
6415 (synopsis "Python values to and C bit field structs converter")
6416 (description
6417 "This module performs conversions between Python values and C bit field
6418structs represented as Python byte strings. It is intended to have a similar
6419interface as the @code{struct} module from Python, but working on bits instead
6420of primitive data types like @code{char}, @code{int}, etc.")
6421 (license license:expat)))
6422
6423(define-public python-cantools
6424 (package
6425 (name "python-cantools")
6426 (version "40.5.0")
6427 (source
6428 (origin
6429 (method git-fetch)
6430 (uri (git-reference
6431 (url "https://github.com/eerimoq/cantools")
6432 (commit version)))
6433 (file-name (git-file-name name version))
6434 (sha256
6435 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
6436 (build-system pyproject-build-system)
6437 (arguments
6438 (list
6439 #:phases
6440 ;; TODO: Build documentation, it's failing with error:
6441 ;; importlib.metadata.PackageNotFoundError: No package metadata was
6442 ;; found for cantools.
6443 ;; See: https://github.com/eerimoq/cantools/issues/190.
6444 #~(modify-phases %standard-phases
6445 (add-before 'build 'set-version
6446 (lambda _
6447 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
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 (native-inputs
6804 (list python-lxml-4.9
6805 python-pillow
6806 python-pytest
6807 python-setuptools))
6808 (propagated-inputs
6809 (list python-et-xmlfile))
6810 (home-page "https://openpyxl.readthedocs.io")
6811 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
6812 (description
6813 "This Python library allows reading and writing to the Excel XLSX, XLSM,
6814XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
6815standard.")
6816 (license license:expat)))
6817
6818(define-public python-sinfo
6819 (package
6820 (name "python-sinfo")
6821 (version "0.3.4")
6822 (source (origin
6823 (method url-fetch)
6824 (uri (pypi-uri "sinfo" version))
6825 (sha256
6826 (base32
6827 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
6828 (build-system pyproject-build-system)
6829 (arguments
6830 (list #:tests? #f)) ; no tests in PyPI or Git
6831 (native-inputs
6832 (list python-setuptools))
6833 (propagated-inputs
6834 (list python-stdlib-list))
6835 (home-page "https://gitlab.com/joelostblom/session_info")
6836 (synopsis "Output module version information loaded in a Python session")
6837 (description "This package outputs version information for modules loaded
6838in the current session, Python, and the OS.")
6839 (license license:bsd-3)))
6840
6841(define-public python-six
6842 (package
6843 (name "python-six")
6844 (version "1.17.0")
6845 (source
6846 (origin
6847 (method url-fetch)
6848 (uri (pypi-uri "six" version))
6849 (sha256
6850 (base32 "109ajcsfhrz33lbwbb337w34crc3lb9rjnxrcpnbczlf8rfk6w7z"))))
6851 (build-system pyproject-build-system)
6852 (native-inputs
6853 (list python-pytest-bootstrap
6854 python-setuptools
6855 python-wheel))
6856 (home-page "https://pypi.org/project/six/")
6857 (synopsis "Python 2 and 3 compatibility utilities")
6858 (description
6859 "Six is a Python 2 and 3 compatibility library. It provides utility
6860functions for smoothing over the differences between the Python versions with
6861the goal of writing Python code that is compatible on both Python versions.
6862Six supports every Python version since 2.5. It is contained in only one
6863Python file, so it can be easily copied into your project.")
6864 (license license:x11)))
6865
6866(define-public python-six-bootstrap python-six)
6867
6868(define-public python-schedule
6869 (package
6870 (name "python-schedule")
6871 (version "1.2.2")
6872 (source
6873 (origin
6874 (method url-fetch)
6875 (uri (pypi-uri "schedule" version))
6876 (sha256
6877 (base32
6878 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
6879 (build-system pyproject-build-system)
6880 (native-inputs
6881 (list python-pytest python-setuptools python-wheel))
6882 (home-page "https://github.com/dbader/schedule")
6883 (synopsis "Schedule periodic function calls in Python")
6884 (description
6885 "Schedule is an in-process scheduler for periodic jobs that uses the
6886builder pattern for configuration. Schedule lets you run Python functions (or
6887any other callable) periodically at pre-determined intervals using a simple,
6888human-friendly syntax.")
6889 (license license:expat)))
6890
6891;; XXX: This project is unmaintained since 2020, see:
6892;; <https://github.com/scour-project/scour/issues/321>.
6893;;
6894;; The only user is Inkscape, see:
6895;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
6896(define-public python-scour
6897 (package
6898 (name "python-scour")
6899 (version "0.38.2")
6900 (source
6901 (origin
6902 (method git-fetch)
6903 (uri
6904 (git-reference
6905 (url "https://gitlab.com/inkscape/extras/scour")
6906 (commit
6907 (string-append "v" version))))
6908 (file-name (git-file-name name version))
6909 (sha256
6910 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
6911 (build-system pyproject-build-system)
6912 (arguments
6913 (list #:test-backend #~'custom
6914 #:test-flags #~(list "test_scour.py")))
6915 (native-inputs
6916 (list python-setuptools))
6917 (propagated-inputs
6918 (list python-six))
6919 (home-page "https://gitlab.com/inkscape/extras/scour")
6920 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
6921 (description
6922 "The goal of Scour is to output a file that renders identically at a
6923fraction of the size by removing a lot of redundant information created by
6924most SVG editors. Optimization options are typically lossless but can be
6925tweaked for more aggressive cleaning.")
6926 (license license:asl2.0)))
6927
6928(define-public python-mechanize
6929 (package
6930 (name "python-mechanize")
6931 (version "0.4.10")
6932 (source
6933 (origin
6934 (method url-fetch)
6935 (uri (pypi-uri "mechanize" version))
6936 (sha256
6937 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
6938 (build-system pyproject-build-system)
6939 (arguments
6940 ;; XXX: Unclear why tests are failing.
6941 (list #:tests? #f
6942 #:phases
6943 #~(modify-phases %standard-phases
6944 (add-before 'check 'configure-tests
6945 (lambda _
6946 (setenv "GUIX_PYTHONPATH"
6947 (string-append (getcwd) "/test-tools:"
6948 (getenv "GUIX_PYTHONPATH"))))))))
6949 (native-inputs
6950 (list python-html5-parser
6951 python-html5lib
6952 python-lxml
6953 python-service-identity
6954 python-setuptools
6955 python-six
6956 python-twisted
6957 python-wheel))
6958 (propagated-inputs
6959 (list python-html5lib))
6960 (home-page "https://github.com/python-mechanize/mechanize")
6961 (synopsis
6962 "Stateful programmatic web browsing in Python")
6963 (description
6964 "Mechanize implements stateful programmatic web browsing in Python,
6965after Andy Lester’s Perl module WWW::Mechanize.")
6966 (license license:bsd-3)))
6967
6968(define-public python-mediapy
6969 (package
6970 (name "python-mediapy")
6971 (version "1.2.2")
6972 (source
6973 (origin
6974 (method git-fetch)
6975 (uri (git-reference
6976 (url "https://github.com/google/mediapy")
6977 (commit (string-append "v" version))))
6978 (file-name (git-file-name name version))
6979 (sha256
6980 (base32 "08dj0h7xkpaj552pzjln1chshxsfxbwhv29p2npsmscy907s322l"))))
6981 (build-system pyproject-build-system)
6982 (arguments
6983 (list
6984 #:phases
6985 '(modify-phases %standard-phases
6986 (add-after 'unpack 'fix-references
6987 (lambda _
6988 (substitute* "mediapy_test.py"
6989 (("'/bin/bash")
6990 (string-append "'" (which "bash")))))))))
6991 (inputs (list ffmpeg-5))
6992 (propagated-inputs (list python-absl-py
6993 python-ipython
6994 python-matplotlib
6995 python-numpy
6996 python-pillow))
6997 (native-inputs
6998 (list python-flit-core
6999 python-pylint
7000 python-pytest
7001 python-pytest-xdist))
7002 (home-page "https://github.com/google/mediapy")
7003 (synopsis "Read/write/show images and videos in an IPython notebook")
7004 (description "This Python library makes it easy to display images and
7005videos in a notebook.")
7006 (license license:asl2.0)))
7007
7008(define-public python-simpleaudio
7009 (package
7010 (name "python-simpleaudio")
7011 (version "1.0.4")
7012 (source
7013 (origin
7014 (method git-fetch)
7015 (uri (git-reference
7016 (url "https://github.com/hamiltron/py-simple-audio")
7017 (commit version)))
7018 (file-name (git-file-name name version))
7019 (sha256
7020 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
7021 (build-system pyproject-build-system)
7022 (arguments
7023 (list
7024 #:test-backend #~'unittest
7025 #:phases
7026 #~(modify-phases %standard-phases
7027 (add-before 'check 'fix-test-run
7028 (lambda _
7029 (delete-file-recursively "simpleaudio"))))))
7030 (native-inputs (list python-setuptools))
7031 (inputs (list alsa-lib))
7032 (home-page "https://github.com/hamiltron/py-simple-audio")
7033 (synopsis "Simple, asynchronous audio playback for Python 3")
7034 (description
7035 "The @code{simplaudio} package provides cross-platform, dependency-free
7036audio playback capability for Python 3 on OSX, Windows, and Linux.")
7037 (license license:expat))) ; MIT license
7038
7039(define-public python-jsonalias
7040 (package
7041 (name "python-jsonalias")
7042 (version "0.1.2")
7043 (source (origin
7044 (method url-fetch)
7045 (uri (pypi-uri "jsonalias" version))
7046 (sha256
7047 (base32
7048 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
7049 (build-system pyproject-build-system)
7050 (arguments
7051 (list #:tests? #f)) ; no tests in PyPI or Git
7052 (native-inputs
7053 (list python-poetry-core))
7054 (home-page "https://github.com/kevinheavey/jsonalias/")
7055 (synopsis "JSON type alias for Python")
7056 (description
7057 "This package provides a microlibrary that defines a JSON type alias for
7058Python.")
7059 (license license:expat)))
7060
7061(define-public python-jsonargparse
7062 (package
7063 (name "python-jsonargparse")
7064 (version "4.37.0")
7065 (source (origin
7066 (method url-fetch)
7067 (uri (pypi-uri "jsonargparse" version))
7068 (sha256
7069 (base32
7070 "1b9w9j27phj5j00pmhp11lzf53yc4dnwknhxacv2bfyiiaq0af2s"))))
7071 (build-system pyproject-build-system)
7072 (arguments
7073 (list #:test-flags
7074 '(list "-k" "not test_env_prefix")))
7075 (propagated-inputs
7076 (list python-pyyaml))
7077 (native-inputs
7078 (list python-attrs
7079 python-pypa-build
7080 python-pydantic
7081 python-pytest
7082 python-pytest-subtests
7083 python-responses
7084 python-setuptools
7085 python-wheel))
7086 (home-page "https://github.com/omni-us/jsonargparse/")
7087 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
7088 (description
7089 "This package lets you implement minimal boilerplate CLIs derived from
7090type hints and parse from command line, config files and environment
7091variables.")
7092 (license license:expat)))
7093
7094(define-public python-pymarshal
7095 (package
7096 (name "python-pymarshal")
7097 (version "2.2.3")
7098 (source (origin
7099 (method url-fetch)
7100 (uri (pypi-uri "pymarshal" version))
7101 (sha256
7102 (base32
7103 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
7104 (build-system pyproject-build-system)
7105 (arguments
7106 ;; Test fails with this error:
7107 ;; "CovReportWarning: Failed to generate report: No data to report."
7108 (list #:tests? #f))
7109 (native-inputs
7110 (list python-pytest python-pytest-cov python-setuptools python-wheel))
7111 (propagated-inputs (list python-bson python-pyyaml))
7112 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
7113 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
7114 (description "PyMarshal replicates the feature of (un)marshalling structs
7115in Golang.")
7116 (license license:bsd-2)))
7117
7118(define-public python-simplejson
7119 (package
7120 (name "python-simplejson")
7121 (version "3.20.1")
7122 (source
7123 (origin
7124 (method url-fetch)
7125 (uri (pypi-uri "simplejson" version))
7126 (sha256
7127 (base32
7128 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
7129 (build-system pyproject-build-system)
7130 (native-inputs
7131 (list python-pytest python-setuptools))
7132 (home-page "https://simplejson.readthedocs.io/en/latest")
7133 (synopsis
7134 "Json library for Python")
7135 (description
7136 "JSON (JavaScript Object Notation) is a subset of JavaScript
7137syntax (ECMA-262 3rd edition) used as a lightweight data interchange
7138format.
7139
7140Simplejson exposes an API familiar to users of the standard library marshal
7141and pickle modules. It is the externally maintained version of the json
7142library contained in Python 2.6, but maintains compatibility with Python 2.5
7143and (currently) has significant performance advantages, even without using
7144the optional C extension for speedups. Simplejson is also supported on
7145Python 3.3+.")
7146 (license license:x11)))
7147
7148(define-public python-simple-rlp
7149 (package
7150 (name "python-simple-rlp")
7151 (version "0.1.3")
7152 (source
7153 (origin
7154 (method git-fetch)
7155 (uri (git-reference
7156 (url "https://github.com/SamuelHaidu/simple-rlp")
7157 ;; Upstream doesn't tag the git repo.
7158 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
7159 (file-name (git-file-name name version))
7160 (sha256
7161 (base32
7162 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
7163 (build-system pyproject-build-system)
7164 (native-inputs
7165 (list
7166 python-pytest
7167 python-setuptools))
7168 (home-page "https://github.com/SamuelHaidu/simple-rlp")
7169 (synopsis
7170 "Python implementation of RLP (Recursive Length Prefix) encoding")
7171 (description
7172 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
7173Prefix) - Encode and decode data structures.")
7174 (license license:expat)))
7175
7176(define-public python-pyicu
7177 (package
7178 (name "python-pyicu")
7179 (version "2.15.2")
7180 (source
7181 (origin
7182 (method url-fetch)
7183 (uri (pypi-uri "pyicu" version))
7184 (sha256
7185 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
7186 (build-system pyproject-build-system)
7187 (native-inputs
7188 (list pkg-config
7189 python-pytest
7190 python-setuptools
7191 python-six))
7192 (inputs
7193 (list icu4c))
7194 (home-page "https://gitlab.pyicu.org/main/pyicu")
7195 (synopsis "Python extension wrapping the ICU C++ API")
7196 (description
7197 "PyICU is a python extension wrapping the ICU C++ API.")
7198 (license license:x11)))
7199
7200(define-public python-dogtail
7201 (package
7202 (name "python-dogtail")
7203 (version "0.9.11")
7204 (source
7205 (origin
7206 (method url-fetch)
7207 (uri (string-append
7208 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
7209 version ".tar.gz"))
7210 (sha256
7211 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
7212 (build-system pyproject-build-system)
7213 (arguments
7214 (list
7215 #:tests? #f ;TODO Launching dbus for the tests fails
7216 #:phases
7217 #~(modify-phases %standard-phases
7218 (replace 'check
7219 (lambda* (#:key tests? #:allow-other-keys)
7220 (when tests?
7221 (system "Xvfb :1 &")
7222 (setenv "DISPLAY" ":1")
7223 (invoke "dbus-run-session" "--"
7224 "nosetests" "-v" "tests/")))))))
7225 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
7226 (native-inputs
7227 (list python-pynose
7228 gtk+
7229 xorg-server-for-tests
7230 dbus
7231 gsettings-desktop-schemas
7232 gobject-introspection
7233 python-setuptools))
7234 (home-page "https://gitlab.com/dogtail/dogtail/")
7235 (synopsis "GUI test tool and automation framework written in Python")
7236 (description
7237 "Dogtail is a GUI test tool and automation framework written in Python.
7238It uses Accessibility (a11y) technologies to communicate with desktop
7239applications. dogtail scripts are written in Python and executed like any
7240other Python program.")
7241 (license license:gpl2+)))
7242
7243(define-public python-doxyqml
7244 (package
7245 (name "python-doxyqml")
7246 (version "0.5.3")
7247 (source (origin
7248 (method url-fetch)
7249 (uri (pypi-uri "doxyqml" version))
7250 (sha256
7251 (base32
7252 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
7253 (build-system pyproject-build-system)
7254 (arguments
7255 (list #:test-backend #~'custom
7256 #:test-flags #~(list "tests/functional/tests.py")))
7257 (native-inputs
7258 (list python-setuptools))
7259 (home-page "https://agateau.com/projects/doxyqml")
7260 (synopsis "Doxygen input filter for QML files")
7261 (description
7262 "This package provides a Doxygen input filter for QML files.")
7263 (license license:bsd-3)))
7264
7265(define-public python-doxypypy
7266 (package
7267 (name "python-doxypypy")
7268 (version "0.8.8.7")
7269 (source (origin
7270 (method url-fetch)
7271 (uri (pypi-uri "doxypypy" version))
7272 (sha256
7273 (base32
7274 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
7275 (build-system pyproject-build-system)
7276 (arguments
7277 (list
7278 #:test-flags
7279 #~(list "-k" (string-join
7280 ;; Test files are not in UTF-8 format and attmet to
7281 ;; substitute shebang fails, while tests fail with error:
7282 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
7283 ;; File w[387 chars]g.')" !=
7284 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
7285 ;; chars]g.')"
7286 (list "not test_utf16be_bom"
7287 "test_utf16le_bom"
7288 "test_utf32be_bom"
7289 "test_utf32le_bom"
7290 "test_utf8_bom")
7291 " and not "))
7292 #:phases
7293 #~(modify-phases %standard-phases
7294 ;; compile-bytecode phases fails with error: SyntaxError: source
7295 ;; code string cannot contain null bytes.
7296 (add-after 'unpack 'fix-setup.py
7297 (lambda _
7298 (substitute* "setup.py"
7299 (("packages=.*") "packages=['doxypypy'],\n")))))))
7300 (native-inputs
7301 (list python-pytest
7302 python-setuptools
7303 python-wheel))
7304 (propagated-inputs
7305 (list python-chardet))
7306 (home-page "https://github.com/Feneric/doxypypy")
7307 (synopsis "Doxygen filter for Python")
7308 (description
7309 "This package provides a Doxygen filter for Python.")
7310 (license license:gpl2+)))
7311
7312(define-public python-empy
7313 (package
7314 (name "python-empy")
7315 (version "3.3.4")
7316 (source
7317 (origin
7318 (method url-fetch)
7319 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
7320 version ".tar.gz"))
7321 (sha256
7322 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
7323 (build-system pyproject-build-system)
7324 (arguments
7325 (list
7326 #:phases
7327 #~(modify-phases %standard-phases
7328 (replace 'check
7329 (lambda* (#:key tests? #:allow-other-keys)
7330 (when tests?
7331 (invoke "./test.sh")))))))
7332 (native-inputs (list python-setuptools))
7333 (home-page "http://www.alcyone.com/software/empy/")
7334 (synopsis "Templating system for Python")
7335 (description
7336 "EmPy is a system for embedding Python expressions and statements in
7337template text; it takes an EmPy source file, processes it, and produces
7338output. This is accomplished via expansions, which are special signals to the
7339EmPy system and are set off by a special prefix (by default the at sign, @@).
7340EmPy can expand arbitrary Python expressions and statements in this way, as
7341well as a variety of special forms. Textual data not explicitly delimited in
7342this way is sent unaffected to the output, allowing Python to be used in
7343effect as a markup language. Also supported are callbacks via hooks,
7344recording and playback via diversions, and dynamic, chainable filters. The
7345system is highly configurable via command line options and embedded
7346commands.")
7347 (license license:lgpl2.1+)))
7348
7349(define-public python-palettable
7350 (package
7351 (name "python-palettable")
7352 (version "3.3.3")
7353 (source (origin
7354 (method url-fetch)
7355 (uri (pypi-uri "palettable" version))
7356 (sha256
7357 (base32
7358 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
7359 (build-system pyproject-build-system)
7360 (native-inputs (list python-pytest python-setuptools python-wheel))
7361 (home-page "https://jiffyclub.github.io/palettable/")
7362 (synopsis "Color palettes for Python")
7363 (description "Palettable (formerly brewer2mpl) is a library of color
7364palettes for Python. It’s written in pure Python with no dependencies, but it
7365can supply color maps for matplotlib. You can use Palettable to customize
7366matplotlib plots or supply colors for a web application.")
7367 (license license:expat)))
7368
7369(define-public python-parse-type
7370 (package
7371 (name "python-parse-type")
7372 (version "0.6.6")
7373 (source
7374 (origin
7375 (method url-fetch)
7376 (uri (pypi-uri "parse_type" version))
7377 (sha256
7378 (base32
7379 "1cmzjw8gryc08lp9znaxrngl6csdifd3610fd46pffa82223ffji"))))
7380 (build-system pyproject-build-system)
7381 ;; tests: 332 passed, 2 skipped
7382 (native-inputs
7383 (list python-pytest
7384 python-pytest-html
7385 python-setuptools
7386 python-setuptools-scm))
7387 (propagated-inputs
7388 (list python-six ;hard dependency
7389 python-parse))
7390 (home-page "https://github.com/jenisys/parse_type")
7391 (synopsis "Extended parse module")
7392 (description "Parse_type extends the python parse module.")
7393 (license license:bsd-3)))
7394
7395(define-public python-parse
7396 (package
7397 (name "python-parse")
7398 (version "1.20.2")
7399 (source
7400 (origin
7401 (method git-fetch)
7402 (uri (git-reference
7403 (url "https://github.com/r1chardj0n3s/parse")
7404 (commit version)))
7405 (file-name (git-file-name name version))
7406 (sha256
7407 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
7408 (build-system pyproject-build-system)
7409 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7410 (home-page "https://github.com/r1chardj0n3s/parse")
7411 (synopsis "Parse strings")
7412 (description
7413 "Parse strings using a specification based on the Python @code{format()}
7414syntax.")
7415 (license license:x11)))
7416
7417(define-public python-parsley
7418 (package
7419 (name "python-parsley")
7420 (version "1.3")
7421 (source (origin
7422 ;; The source distributed on PyPI is outdated.
7423 (method git-fetch)
7424 (uri (git-reference
7425 (url "https://github.com/pyga/parsley")
7426 (commit version)))
7427 (file-name (git-file-name name version))
7428 (sha256
7429 (base32
7430 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))))
7431 (build-system pyproject-build-system)
7432 (arguments
7433 (list
7434 #:test-flags #~(list "ometa/test" "terml/test")))
7435 (native-inputs
7436 (list python-pytest
7437 python-twisted
7438 python-setuptools
7439 python-wheel))
7440 (home-page "https://launchpad.net/parsley")
7441 (synopsis "Parsing and pattern matching Python library")
7442 (description
7443 "Parsley is a parsing library using PEG algorithm, so each expression in
7444the grammar rules works like a Python expression. In particular, alternatives
7445are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
7446Parsley is an implementation of OMeta, an object-oriented pattern-matching
7447language.")
7448 (license license:expat)))
7449
7450(define-public python-petl
7451 (package
7452 (name "python-petl")
7453 (version "1.7.16")
7454 (source
7455 (origin
7456 (method url-fetch)
7457 (uri (pypi-uri "petl" version))
7458 (sha256
7459 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
7460 (build-system pyproject-build-system)
7461 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
7462 python-pytest))
7463 (home-page "https://github.com/petl-developers/petl")
7464 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
7465processing pipelines.")
7466 (description
7467 "This package provides a library for extracting, transforming and loading
7468tables of data. It can read from and write to databases or files in multiple
7469formats, including:
7470@itemize @bullet
7471@item python objects
7472@item delimited files
7473@item pickle files
7474@item text/XML/JSON/HTML files
7475@item python I/O streams
7476@item Excel XLS/XLSX files
7477@item HDF5 files
7478@end itemize")
7479 (license license:expat)))
7480
7481(define-public python-polib
7482 (package
7483 (name "python-polib")
7484 (version "1.2.0")
7485 (source
7486 (origin
7487 (method git-fetch)
7488 (uri (git-reference
7489 (url "https://github.com/izimobil/polib/")
7490 (commit version)))
7491 (file-name (git-file-name name version))
7492 (sha256
7493 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
7494 (build-system pyproject-build-system)
7495 (arguments
7496 (list #:test-backend #~'custom
7497 #:test-flags #~(list "tests/tests.py")))
7498 (native-inputs (list python-setuptools))
7499 (home-page "https://github.com/izimobil/polib/")
7500 (synopsis "Manipulate, create and modify gettext files")
7501 (description
7502 "Polib can manipulate any gettext format (po, pot and mo) files. It can
7503be used to create po files from scratch or to modify existing ones.")
7504 (license license:expat)))
7505
7506(define-public python-polling2
7507 (package
7508 (name "python-polling2")
7509 (version "0.5.0")
7510 (source
7511 (origin
7512 (method git-fetch)
7513 (uri (git-reference
7514 (url "https://github.com/ddmee/polling2")
7515 (commit (string-append "v" version))))
7516 (file-name (git-file-name name version))
7517 (sha256
7518 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
7519 (build-system pyproject-build-system)
7520 (arguments
7521 ;; XXX: Additional , in string comparison.
7522 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
7523 (native-inputs (list python-mock python-pytest python-setuptools))
7524 (home-page "https://github.com/ddmee/polling2")
7525 (synopsis "Polling utility with many configurable options")
7526 (description "Polling2 is a utility used to wait for a function to return
7527a certain expected condition.")
7528 (license license:expat)))
7529
7530(define-public python-daft
7531 (package
7532 (name "python-daft")
7533 (version "0.1.2")
7534 (source (origin
7535 (method url-fetch)
7536 (uri (pypi-uri "daft" version))
7537 (sha256
7538 (base32
7539 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
7540 (build-system pyproject-build-system)
7541 (arguments
7542 (list
7543 #:test-flags
7544 '(list "-k"
7545 (string-append
7546 ;; The following tests compare matplotlib output with
7547 ;; previously generated images. They fail due to minor
7548 ;; differences in where matplotlib places labels.
7549 "not test_bca[png]"
7550 " and not test_classic[png]"
7551 " and not test_deconvolution[png]"
7552 " and not test_exoplanets[png]"
7553 " and not test_fixed[png]"
7554 " and not test_gaia[png]"
7555 " and not test_galex[png]"
7556 " and not test_huey_p_newton[png]"
7557 " and not test_logo[png]"
7558 " and not test_no_circles[png]"
7559 " and not test_no_gray[png]"
7560 " and not test_recursive[png]"
7561 " and not test_thick_lines[png]"
7562 " and not test_weaklensing[png]"
7563 " and not test_wordy[png]"))))
7564 (native-inputs
7565 (list python-pytest
7566 python-setuptools
7567 python-wheel))
7568 (propagated-inputs (list python-matplotlib python-numpy))
7569 (home-page "https://docs.daft-pgm.org/")
7570 (synopsis "PGM rendering library")
7571 (description "Daft is a Python package that uses matplotlib to
7572render pixel-perfect probabilistic graphical models for publication in
7573a journal or on the internet. With a short Python script and an
7574intuitive model-building syntax you can design directed (Bayesian
7575Networks, directed acyclic graphs) and undirected (Markov random fields)
7576models and save them in any formats that matplotlib supports (including
7577PDF, PNG, EPS and SVG).")
7578 (license license:expat)))
7579
7580(define-public python-portalocker
7581 (package
7582 (name "python-portalocker")
7583 (version "2.7.0")
7584 (source (origin
7585 (method url-fetch)
7586 (uri (pypi-uri "portalocker" version))
7587 (sha256
7588 (base32
7589 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
7590 (build-system pyproject-build-system)
7591 (native-inputs (list python-pytest
7592 python-pytest-cov
7593 python-pytest-mypy
7594 python-pytest-timeout
7595 python-redis
7596 python-setuptools
7597 python-wheel))
7598 (home-page "https://github.com/WoLpH/portalocker")
7599 (synopsis "Python library for file locking")
7600 (description "Portalocker is a library to provide an easy API to file
7601locking..")
7602 (license license:bsd-3)))
7603
7604(define-public python-poyo
7605 (package
7606 (name "python-poyo")
7607 (version "0.5.0")
7608 (source
7609 (origin
7610 (method url-fetch)
7611 (uri (pypi-uri "poyo" version))
7612 (sha256
7613 (base32
7614 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
7615 (build-system pyproject-build-system)
7616 (native-inputs
7617 (list python-pytest python-setuptools))
7618 (home-page "https://github.com/hackebrot/poyo")
7619 (synopsis "Lightweight YAML Parser for Python")
7620 (description
7621 "This package provides a lightweight YAML Parser for Python. It supports
7622only a chosen subset of the YAML format that is required to parse cookiecutter
7623user configuration files. It does not have support for serializing into YAML
7624and is not compatible with JSON.")
7625 (license license:expat)))
7626
7627(define-public python-expandvars
7628 (package
7629 (name "python-expandvars")
7630 (version "0.12.0")
7631 (source
7632 (origin
7633 (method url-fetch)
7634 (uri (pypi-uri "expandvars" version))
7635 (sha256
7636 (base32 "0i6q4i8dzsax85w1l2hc7saymyh3fw43vkifh5flpkr8ayjxy6kx"))))
7637 (build-system pyproject-build-system)
7638 (native-inputs
7639 (list python-hatchling python-pytest))
7640 (home-page "https://pypi.org/project/expandvars/")
7641 (synopsis "Expand system variables Unix style")
7642 (description "This module is inspired by GNU bash's variable expansion
7643features. It can be used as an alternative to Python's
7644@code{os.path.expandvars} function. A good use case is reading config files
7645with the flexibility of reading values from environment variables using
7646advanced features like returning a default value if some variable is not
7647defined.")
7648 (license license:expat)))
7649
7650(define-public python-extension-helpers
7651 (package
7652 (name "python-extension-helpers")
7653 (version "1.4.0")
7654 (source
7655 (origin
7656 (method git-fetch) ; no tests in the PyPI tarball
7657 (uri (git-reference
7658 (url "https://github.com/astropy/extension-helpers")
7659 (commit (string-append "v" version))))
7660 (file-name (git-file-name name version))
7661 (sha256
7662 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
7663 (build-system pyproject-build-system)
7664 (arguments
7665 (list
7666 #:test-flags
7667 #~(list "--pyargs" "extension_helpers"
7668 "-k" (string-join
7669 ;; XXX: Tests try to check various compilation options and
7670 ;; fail with some incomparability or trying to download
7671 ;; missing modules.
7672 (list "not test_only_pyproject"
7673 "test_no_setup_py"
7674 "test_limited_api")
7675 " and not "))
7676 #:phases
7677 #~(modify-phases %standard-phases
7678 ;; LookupError: setuptools-scm was unable to detect version for
7679 ;; /tmp/guix-build-python-extension-helpers-1.2.0.drv-0/source.
7680 (add-before 'build 'set-version
7681 (lambda _
7682 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
7683 (native-inputs
7684 (list python-pytest
7685 python-setuptools-scm))
7686 (propagated-inputs
7687 (list python-setuptools))
7688 (home-page "https://extension-helpers.readthedocs.io")
7689 (synopsis "Astropy ecosystem utilities for building and installing packages")
7690 (description
7691 "The extension-helpers package includes convenience helpers to assist
7692with building Python packages with compiled C/Cython extensions. It is
7693developed by the Astropy project but is intended to be general and usable by
7694any Python package.")
7695 (license license:bsd-3)))
7696
7697(define-public python-milc
7698 (package
7699 (name "python-milc")
7700 (version "1.9.1")
7701 (source
7702 (origin
7703 (method git-fetch) ;no tests in PyPI archive
7704 (uri (git-reference
7705 (url "https://github.com/clueboard/milc")
7706 (commit version)))
7707 (file-name (git-file-name name version))
7708 (sha256
7709 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
7710 (build-system pyproject-build-system)
7711 (native-inputs
7712 (list python-pytest
7713 python-semver
7714 python-setuptools))
7715 (propagated-inputs
7716 (list python-argcomplete
7717 python-colorama
7718 python-halo
7719 python-platformdirs
7720 python-spinners
7721 python-types-colorama))
7722 (home-page "https://github.com/clueboard/milc")
7723 (synopsis "Python library for command line interface programs")
7724 (description "MILC is a Python library for developing command line
7725interface programs. This library provides features to parse arguments,
7726automatic tab-completion, color support, logging to @code{std}, etc.")
7727 (license license:expat)))
7728
7729(define-public python-extract-dtb
7730 (package
7731 (name "python-extract-dtb")
7732 (version "1.2.3")
7733 (source
7734 (origin
7735 (method git-fetch)
7736 (uri (git-reference
7737 (url "https://github.com/PabloCastellano/extract-dtb/")
7738 (commit version)))
7739 (file-name (git-file-name name version))
7740 (sha256
7741 (base32
7742 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
7743 (build-system pyproject-build-system)
7744 (arguments
7745 (list #:tests? #f)) ;no tests
7746 (native-inputs
7747 (list python-setuptools))
7748 (home-page "https://github.com/PabloCastellano/extract-dtb/")
7749 (synopsis "Extract device tree blobs (DTB) from kernel images")
7750 (description
7751 "This package provides a tool to split a kernel image with appended
7752@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
7753 (license license:gpl3+)))
7754
7755(define-public python-mimeparse
7756 (package
7757 (name "python-mimeparse")
7758 (version "2.0.0")
7759 (source
7760 (origin
7761 (method url-fetch)
7762 (uri (pypi-uri "python_mimeparse" version))
7763 (sha256
7764 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
7765 (build-system pyproject-build-system)
7766 (native-inputs
7767 (list python-pytest
7768 python-setuptools))
7769 (home-page "https://github.com/falconry/python-mimeparse")
7770 (synopsis "Python library for parsing MIME types")
7771 (description
7772 "Mimeparse provides basic functions for parsing MIME type names and
7773matching them against a list of media-ranges.")
7774 (license license:expat)))
7775
7776(define-public python-miniboa
7777 (package
7778 (name "python-miniboa")
7779 (version "1.0.9")
7780 (source
7781 (origin
7782 (method git-fetch) ;no tests in PyPI archive
7783 (uri (git-reference
7784 (url "https://github.com/shmup/miniboa")
7785 (commit (string-append "v" version))))
7786 (file-name (git-file-name name version))
7787 (sha256
7788 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
7789 (build-system pyproject-build-system)
7790 (native-inputs
7791 (list python-pytest
7792 python-setuptools
7793 python-wheel))
7794 (home-page "https://github.com/shmup/miniboa")
7795 (synopsis "Simple, single-threaded Telnet server")
7796 (description
7797 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
7798server.")
7799 (license license:asl2.0)))
7800
7801(define-public python-mir-eval
7802 (package
7803 (name "python-mir-eval")
7804 (version "0.8.2")
7805 (source (origin
7806 (method git-fetch)
7807 (uri (git-reference
7808 (url "https://github.com/mir-evaluation/mir_eval")
7809 (commit version)))
7810 (file-name (git-file-name name version))
7811 (sha256
7812 (base32
7813 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
7814 (build-system pyproject-build-system)
7815 (arguments
7816 (list
7817 #:phases
7818 #~(modify-phases %standard-phases
7819 (add-before 'check 'cd-tests
7820 (lambda _
7821 ;; Move to 'tests' directory because tests read data files from
7822 ;; a relative path.
7823 (chdir "tests"))))))
7824 (propagated-inputs (list python-decorator python-numpy python-scipy))
7825 (native-inputs (list python-matplotlib
7826 python-pytest
7827 python-pytest-cov ; used by default
7828 python-pytest-mpl
7829 python-setuptools
7830 python-wheel))
7831 (home-page "https://github.com/mir-evaluation/mir_eval")
7832 (synopsis "Common metrics for common audio/music processing tasks")
7833 (description "This is a Python library for computing common heuristic
7834accuracy scores for various music/audio information retrieval/signal
7835processing tasks.")
7836 (license license:expat)))
7837
7838(define-public python-mizani
7839 (package
7840 (name "python-mizani")
7841 (version "0.13.1")
7842 (source (origin
7843 (method git-fetch)
7844 (uri (git-reference
7845 (url "https://github.com/has2k1/mizani")
7846 (commit (string-append "v" version))))
7847 (file-name (git-file-name name version))
7848 (sha256
7849 (base32
7850 "0ij0fk4w0jyyj44ij3i2j1nfa0d7dk783w9r25cpwjkpn690xqfx"))))
7851 (build-system pyproject-build-system)
7852 (arguments
7853 (list
7854 #:phases
7855 #~(modify-phases %standard-phases
7856 (add-before 'build 'pretend-version
7857 ;; The version string is usually derived via setuptools-scm, but
7858 ;; without the git metadata available, the version string is set to
7859 ;; '999'.
7860 (lambda _
7861 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
7862 (propagated-inputs
7863 (list python-matplotlib python-numpy python-pandas python-scipy))
7864 (native-inputs
7865 (list python-setuptools python-setuptools-scm
7866 python-pytest python-pytest-cov python-wheel tzdata))
7867 (home-page "https://github.com/has2k1/mizani")
7868 (synopsis "Create data visualizations in Python")
7869 (description
7870 "Mizani is a Python package for creating data visualizations. It
7871provides functions and tools to help with the creation of visually appealing
7872and informative visualizations, including scales, transformations and color
7873palettes.")
7874 (license license:bsd-3)))
7875
7876(define-public python-miniupnpc
7877 (package
7878 (name "python-miniupnpc")
7879 (version "2.3.3")
7880 (source
7881 (origin
7882 (method git-fetch)
7883 (uri
7884 (git-reference
7885 ;; The project tags miniupnpd_ as well but with a different version,
7886 ;; where updater may select a wrong version.
7887 (url "https://github.com/miniupnp/miniupnp")
7888 (commit
7889 (string-append
7890 "miniupnpc_" (string-replace-substring version "." "_")))))
7891 (file-name
7892 (git-file-name name version))
7893 (sha256
7894 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
7895 (build-system pyproject-build-system)
7896 (arguments
7897 (list
7898 #:phases
7899 #~(modify-phases %standard-phases
7900 (add-after 'unpack 'subdir
7901 (lambda* (#:key inputs #:allow-other-keys)
7902 (chdir "miniupnpc")
7903 (setenv "CC" #$(cc-for-target))
7904 (substitute* "Makefile"
7905 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
7906 (add-before 'subdir 'remove-kernel-version
7907 ;; Avoid embedding the running kernel version for reproducible builds
7908 (lambda _
7909 (substitute*
7910 "miniupnpc/updateminiupnpcstrings.sh"
7911 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
7912 (replace 'check
7913 (lambda* (#:key tests? #:allow-other-keys)
7914 (when tests?
7915 (invoke "make" "check")))))))
7916 (native-inputs
7917 (list python-setuptools
7918 python-wheel))
7919 (inputs (list python)) ;we are building a Python extension
7920 (synopsis "UPnP client for Python")
7921 (description "Miniupnpc is a client library for Python programs to set up
7922port forwards using @acronym{UPnP, Universal Plug and Play}.")
7923 (home-page "http://miniupnp.free.fr")
7924 (license license:bsd-3)))
7925
7926;; NOTE: As taken from upstram: "this library is in maintenance mode and
7927;; should not be used in new code."
7928(define-public python-py
7929 (package
7930 (name "python-py")
7931 (version "1.11.0")
7932 (source
7933 (origin
7934 (method url-fetch)
7935 (uri (pypi-uri "py" version))
7936 (sha256
7937 (base32
7938 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
7939 (build-system pyproject-build-system)
7940 (arguments
7941 '(#:tests? #f)) ;cycle with python-pytest
7942 (native-inputs
7943 (list python-setuptools
7944 python-setuptools-scm
7945 python-wheel))
7946 (home-page "https://github.com/pytest-dev/py")
7947 (synopsis "Python library for parsing, I/O, introspection, and logging")
7948 (description
7949 "Py is a Python library for file name parsing, .ini file parsing, I/O,
7950code introspection, and logging.")
7951 (license license:expat)))
7952
7953(define-public python-pyrsistent
7954 (package
7955 (name "python-pyrsistent")
7956 (version "0.20.0")
7957 (home-page "https://github.com/tobgu/pyrsistent")
7958 (source (origin
7959 (method url-fetch)
7960 (uri (pypi-uri "pyrsistent" version))
7961 (sha256
7962 (base32
7963 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
7964 (build-system pyproject-build-system)
7965 (native-inputs
7966 (list python-pytest python-setuptools python-wheel))
7967 (synopsis "Persistent data structures for Python")
7968 (description
7969 "Pyrsistent is a number of persistent collections (by some referred to as
7970functional data structures). Persistent in the sense that they are immutable.
7971
7972All methods on a data structure that would normally mutate it instead return a
7973new copy of the structure containing the requested updates. The original
7974structure is left untouched.")
7975 (license license:expat)))
7976
7977(define-public python-exif-read
7978 (package
7979 (name "python-exif-read")
7980 (version "3.3.2")
7981 (source
7982 (origin
7983 (method git-fetch) ;PyPI doesn't contain the test images
7984 (uri (git-reference
7985 (url "https://github.com/ianare/exif-py")
7986 (commit version)))
7987 (file-name (git-file-name name version))
7988 (sha256
7989 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
7990 (build-system pyproject-build-system)
7991 (native-inputs (list python-pytest python-setuptools python-wheel))
7992 (home-page "https://github.com/ianare/exif-py")
7993 (synopsis "Python library to extract EXIF data from image files")
7994 (description
7995 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
7996files.")
7997 (license license:bsd-3)))
7998
7999(define-public python-pyld
8000 (package
8001 (name "python-pyld")
8002 (version "2.0.4")
8003 (source
8004 (origin
8005 (method git-fetch)
8006 (uri (git-reference
8007 (url "https://github.com/digitalbazaar/pyld")
8008 ;; Not all tags have the 'v' prefix.
8009 (commit (string-append "v" version))))
8010 (file-name (git-file-name name version))
8011 (sha256
8012 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
8013 (build-system pyproject-build-system)
8014 (arguments
8015 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
8016 (list #:tests? #f))
8017 (native-inputs
8018 (list python-lxml
8019 python-setuptools))
8020 (propagated-inputs
8021 (list python-aiohttp
8022 python-cachetools
8023 python-frozendict
8024 python-requests))
8025 (home-page "https://github.com/digitalbazaar/pyld")
8026 (synopsis "Python implementation of the JSON-LD specification")
8027 (description "PyLD is an implementation of the JSON-LD specification.")
8028 (license license:bsd-3)))
8029
8030(define-public python-cli-helpers
8031 (package
8032 (name "python-cli-helpers")
8033 (version "2.7.0")
8034 (source
8035 (origin
8036 (method url-fetch)
8037 (uri (pypi-uri "cli_helpers" version))
8038 (sha256
8039 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
8040 (build-system pyproject-build-system)
8041 (native-inputs
8042 (list python-pytest
8043 python-setuptools))
8044 (propagated-inputs
8045 (list python-configobj
8046 python-tabulate))
8047 (home-page "https://github.com/dbcli/cli_helpers")
8048 (synopsis "Helpers for building command-line apps")
8049 (description
8050 "CLI Helpers is a Python package that makes it easy to perform common
8051tasks when building command-line apps. It's a helper library for command-line
8052interfaces.")
8053 (license license:bsd-3)))
8054
8055(define-public python-click
8056 (package
8057 (name "python-click")
8058 (version "8.1.8")
8059 (source
8060 (origin
8061 (method git-fetch)
8062 (uri (git-reference
8063 (url "https://github.com/pallets/click")
8064 (commit version)))
8065 (file-name (git-file-name name version))
8066 (sha256
8067 (base32 "1wqkkim5gmhdrc62c79s5gbzz2x60l1bf9aacpakfv6rr1zjl054"))))
8068 (build-system pyproject-build-system)
8069 (native-inputs
8070 (list less
8071 python-flit-core
8072 python-pytest))
8073 (home-page "https://palletsprojects.com/p/click/")
8074 (synopsis "Command line library for Python")
8075 (description
8076 "Click is a Python package for creating command line interfaces in a
8077composable way with as little code as necessary. Its name stands for
8078\"Command Line Interface Creation Kit\". It's highly configurable but comes
8079with sensible defaults out of the box.")
8080 (license license:bsd-3)))
8081
8082(define-public python-click-7
8083 (package (inherit python-click)
8084 (name "python-click")
8085 (version "7.1.2")
8086 (source
8087 (origin
8088 (method url-fetch)
8089 (uri (pypi-uri "click" version))
8090 (sha256
8091 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
8092 (arguments (list #:tests? #f)) ;no tests in PyPI
8093 (native-inputs
8094 (list python-setuptools))))
8095
8096(define-public python-clickgen
8097 (package
8098 (name "python-clickgen")
8099 (version "2.2.5")
8100 (source (origin
8101 (method git-fetch)
8102 (uri (git-reference
8103 (url "https://github.com/ful1e5/clickgen")
8104 (commit (string-append "v" version))))
8105 (file-name (git-file-name name version))
8106 (sha256
8107 (base32
8108 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
8109 (build-system pyproject-build-system)
8110 (arguments
8111 (list
8112 #:test-flags
8113 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
8114 '(list "-k" "not test_clickgen_raises")))
8115 (native-inputs
8116 (list python-pytest
8117 python-setuptools))
8118 (propagated-inputs
8119 (list python-attrs
8120 python-numpy
8121 python-pillow
8122 python-pyyaml
8123 python-toml))
8124 (home-page "https://github.com/ful1e5/clickgen")
8125 (synopsis "The hassle-free cursor building toolbox")
8126 (description
8127 "Clickgen is an API for building X11 and Windows cursors from .png files.
8128clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
8129 (license license:expat)))
8130
8131(define-public python-clickhouse-connect
8132 (package
8133 (name "python-clickhouse-connect")
8134 (version "0.6.1")
8135 (source (origin
8136 (method git-fetch)
8137 (uri (git-reference
8138 (url "https://github.com/ClickHouse/clickhouse-connect")
8139 (commit (string-append "v" version))))
8140 (file-name (git-file-name name version))
8141 (sha256
8142 (base32
8143 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
8144 (build-system pyproject-build-system)
8145 (arguments
8146 (list
8147 #:test-flags
8148 ;; All these tests require docker-compose
8149 '(list "--ignore-glob=tests/integration_tests/*")
8150 #:phases
8151 '(modify-phases %standard-phases
8152 (add-after 'unpack 'patch-pyproject
8153 (lambda _
8154 ;; Our version of pytest is confused by this field.
8155 (substitute* "pyproject.toml"
8156 (("^env_files.*") ""))))
8157 (add-before 'check 'build-extensions
8158 (lambda _
8159 ;; Cython extensions have to be built before running the tests.
8160 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
8161 (propagated-inputs
8162 (list python-arrow
8163 python-certifi
8164 python-lz4
8165 python-numpy
8166 python-orjson
8167 python-pandas
8168 python-pytz
8169 python-setuptools ; For pkg_resources.
8170 python-sqlalchemy
8171 python-urllib3
8172 python-zstandard))
8173 (native-inputs
8174 (list python-cython
8175 python-pytest
8176 python-wheel))
8177 (home-page "https://github.com/ClickHouse/clickhouse-connect")
8178 (synopsis
8179 "ClickHouse database core driver for Python, Pandas, and Superset")
8180 (description
8181 "This package provides a high performance core database driver for
8182connecting ClickHouse to Python, Pandas, and Superset.")
8183 (license license:asl2.0)))
8184
8185(define-public python-cligj
8186 (package
8187 (name "python-cligj")
8188 (version "0.7.2")
8189 (source
8190 (origin
8191 (method url-fetch)
8192 (uri (pypi-uri "cligj" version))
8193 (sha256
8194 (base32
8195 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
8196 (build-system pyproject-build-system)
8197 (native-inputs
8198 (list python-pytest
8199 python-setuptools))
8200 (propagated-inputs
8201 (list python-click))
8202 (home-page "https://github.com/mapbox/cligj")
8203 (synopsis "Click params for command line interfaces to GeoJSON")
8204 (description
8205 "cligj is for Python developers who create command line interfaces
8206for geospatial data. cligj allows you to quickly build consistent,
8207well-tested and interoperable CLIs for handling GeoJSON.")
8208 (license license:bsd-3)))
8209
8210(define-public python-cloup
8211 (package
8212 (name "python-cloup")
8213 (version "2.1.1")
8214 (source (origin
8215 (method url-fetch)
8216 (uri (pypi-uri "cloup" version))
8217 (sha256
8218 (base32
8219 "05c6cjpnf9s72gyn5dckxbmd8rf2kgdzfsl7pqzrnc1lcdl13zmv"))))
8220 (build-system pyproject-build-system)
8221 (propagated-inputs (list python-click))
8222 (native-inputs (list python-pytest python-setuptools python-wheel))
8223 (home-page "https://github.com/janLuke/cloup")
8224 (synopsis "Extension library for python-click")
8225 (description
8226 "Cloup enriches Click with several features that make it more expressive
8227and configurable such as option groups, constraints, subcommand aliases,
8228subcommands sections and a themeable HelpFormatter.")
8229 (license license:bsd-3)))
8230
8231(define-public python-jsondiff
8232 (package
8233 (name "python-jsondiff")
8234 (version "2.2.1")
8235 (source
8236 (origin
8237 (method url-fetch)
8238 (uri (pypi-uri "jsondiff" version))
8239 (sha256
8240 (base32
8241 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
8242 (build-system pyproject-build-system)
8243 (arguments
8244 (list
8245 #:phases
8246 #~(modify-phases %standard-phases
8247 (add-before 'build 'set-version
8248 (lambda _
8249 (substitute* "pyproject.toml"
8250 (("^version_file.*") "")
8251 (("dynamic = \\[\"version\"\\]")
8252 (string-append "version = \"" #$version "\""))))))))
8253 (propagated-inputs (list python-pyyaml))
8254 (native-inputs
8255 (list python-hypothesis
8256 python-pytest
8257 python-setuptools
8258 python-setuptools-scm
8259 python-wheel))
8260 (home-page "https://github.com/fzumstein/jsondiff")
8261 (synopsis "Compare JSON and JSON-like structures in Python")
8262 (description "@code{jsondiff} is a Python library which lets you compare,
8263diff, and patch JSON and JSON-like structures in Python.")
8264 (license license:expat)))
8265
8266(define-public python-ddlparse
8267 (package
8268 (name "python-ddlparse")
8269 (version "1.10.0")
8270 (source
8271 (origin
8272 (method url-fetch)
8273 (uri (pypi-uri "ddlparse" version))
8274 (sha256
8275 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
8276 (build-system pyproject-build-system)
8277 (native-inputs
8278 (list python-pytest
8279 python-pytest-cov
8280 python-setuptools))
8281 (propagated-inputs (list python-pyparsing))
8282 (home-page "https://github.com/shinichi-takii/ddlparse")
8283 (synopsis "Parses and converts DDL to BigQuery JSON schema")
8284 (description "This package provides @code{ddlparse}, a Python library to parse
8285and convert DDL to BigQuery JSON schema.")
8286 (license license:bsd-3)))
8287
8288(define-public python-jsonschema
8289 (package
8290 (name "python-jsonschema")
8291 (version "4.23.0")
8292 (source
8293 (origin
8294 (method url-fetch)
8295 (uri (pypi-uri "jsonschema" version))
8296 (sha256
8297 (base32 "1i3b4sckkc3v8vckqa11xbrj695qzrzsfzrkclra6lb3ybz9f56p"))))
8298 (build-system pyproject-build-system)
8299 (arguments
8300 (list
8301 #:phases
8302 #~(modify-phases %standard-phases
8303 (add-before 'check 'pre-check
8304 (lambda _
8305 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
8306 (native-inputs
8307 (list python-hatchling
8308 python-hatch-fancy-pypi-readme
8309 python-hatch-vcs
8310 ;; For <tests/test_cli.py::TestCLIIntegration::test_license>.
8311 python-pip
8312 python-pytest))
8313 (propagated-inputs
8314 (list python-attrs
8315 python-fqdn
8316 python-idna
8317 python-importlib-resources
8318 python-isoduration
8319 python-jsonpointer
8320 python-jsonschema-specifications
8321 python-rfc3339-validator
8322 python-rfc3986-validator
8323 python-referencing-bootstrap
8324 python-rpds-py
8325 python-uri-template
8326 python-webcolors))
8327 (home-page "https://github.com/Julian/jsonschema")
8328 (synopsis "Implementation of JSON Schema for Python")
8329 (description
8330 "Jsonschema is an implementation of JSON Schema for Python.")
8331 (license license:expat)))
8332
8333;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
8334;; version.
8335(define-public python-jsonschema-3
8336 (package
8337 (inherit python-jsonschema)
8338 (version "3.2.0")
8339 (source (origin
8340 (method url-fetch)
8341 (uri (pypi-uri "jsonschema" version))
8342 (sha256
8343 (base32
8344 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
8345 (arguments
8346 (substitute-keyword-arguments (package-arguments python-jsonschema)
8347 ((#:tests? _ #t) #f)))
8348 (propagated-inputs
8349 (list python-attrs
8350 python-importlib-metadata
8351 python-pyrsistent
8352 python-typing-extensions))
8353 (native-inputs
8354 (list python-setuptools-scm python-twisted
8355 python-setuptools python-wheel))))
8356
8357(define-public python-jsonschema-path
8358 (package
8359 (name "python-jsonschema-path")
8360 (version "0.3.2")
8361 (source
8362 (origin
8363 (method url-fetch)
8364 (uri (pypi-uri "jsonschema_path" version))
8365 (sha256
8366 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
8367 (build-system pyproject-build-system)
8368 (arguments
8369 (list
8370 #:tests? #false ;there are none
8371 #:phases
8372 '(modify-phases %standard-phases
8373 (add-after 'unpack 'relax-requirements
8374 (lambda _
8375 (substitute* "pyproject.toml"
8376 (("referencing = \">=0.28.0,<0.32.0\"")
8377 "referencing = \">=0.28.0\"")))))))
8378 (propagated-inputs (list python-pathable python-pyyaml python-referencing
8379 python-requests))
8380 (native-inputs (list python-poetry-core))
8381 (home-page "https://github.com/p1c2u/jsonschema-path")
8382 (synopsis "JSONSchema Spec with object-oriented paths")
8383 (description "This package implements object-oriented JSONSchema. It lets
8384you traverse a schema like paths and access a schema on demand with separate
8385dereferencing accessor layer.")
8386 (license license:asl2.0)))
8387
8388(define-public python-jsonschema-objects
8389 (package
8390 (name "python-jsonschema-objects")
8391 (version "0.5.7")
8392 (source
8393 (origin
8394 (method git-fetch)
8395 (uri (git-reference
8396 (url "https://github.com/cwacek/python-jsonschema-objects/")
8397 (commit version)))
8398 (file-name (git-file-name name version))
8399 (sha256
8400 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
8401 (build-system pyproject-build-system)
8402 (native-inputs
8403 (list python-pytest
8404 python-pytest-mock
8405 python-setuptools))
8406 (propagated-inputs
8407 (list python-inflection
8408 python-jsonschema
8409 python-markdown))
8410 (home-page "http://python-jsonschema-objects.readthedocs.org/")
8411 (synopsis "Automatic Python binding generation from JSON schemas")
8412 (description
8413 "This package provides an automatic class-based binding to JSON
8414Schemas for use in python.")
8415 (license license:expat)))
8416
8417(define-public python-jsonschema-specifications
8418 (package
8419 (name "python-jsonschema-specifications")
8420 (version "2024.10.1")
8421 (source
8422 (origin
8423 (method url-fetch)
8424 (uri (pypi-uri "jsonschema_specifications" version))
8425 (sha256
8426 (base32 "0wp2g90jsaa48g1v0n6m43ywhh9cj1ig19q25lay334m74vbhf0g"))))
8427 (build-system pyproject-build-system)
8428 (native-inputs
8429 (list python-hatch-vcs
8430 python-hatchling
8431 python-pytest))
8432 (propagated-inputs
8433 (list python-importlib-resources
8434 python-referencing-bootstrap))
8435 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
8436 (synopsis
8437 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
8438 (description
8439 "This package provides JSON support files from the JSON Schema
8440Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
8441from Python as a referencing-based Schema Registry.")
8442 (license license:expat)))
8443
8444(define-public python-schema
8445 (package
8446 (name "python-schema")
8447 (version "0.7.7")
8448 (source
8449 (origin
8450 (method url-fetch)
8451 (uri (pypi-uri "schema" version))
8452 (sha256
8453 (base32
8454 "01qq1amzbjm1kvjrnnhpjs8v761kwp6qihs74pf1k2lmsamm79bx"))))
8455 (build-system pyproject-build-system)
8456 (native-inputs
8457 (list python-pytest
8458 python-setuptools
8459 python-wheel))
8460 (home-page "https://github.com/keleshev/schema")
8461 (synopsis "Simple data validation library")
8462 (description
8463 "@code{python-schema} is a library for validating Python data
8464structures, such as those obtained from config-files, forms, external
8465services or command-line parsing, converted from JSON/YAML (or
8466something else) to Python data-types.")
8467 (license license:psfl)))
8468
8469;; It may be removed after 2025-11-29.
8470(define-deprecated/public-alias python-schema-0.5 python-schema)
8471
8472(define-public python-kitchen
8473 (package
8474 (name "python-kitchen")
8475 (version "1.2.6")
8476 (source
8477 (origin
8478 (method git-fetch)
8479 (uri (git-reference
8480 (url "https://github.com/fedora-infra/kitchen")
8481 (commit version)))
8482 (file-name (git-file-name name version))
8483 (sha256
8484 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
8485 (build-system pyproject-build-system)
8486 (arguments
8487 (list
8488 #:test-flags
8489 #~(list "kitchen3"
8490 ;; XXX: Unclear why these tests fail.
8491 "-e" "test_invalid_fallback_no_raise"
8492 "-e" "test_internal_generate_combining_table"
8493 "-e" "test_lgettext"
8494 "-e" "test_lngettext"
8495 "-e" "test_easy_gettext_setup_non_unicode")
8496 #:phases
8497 #~(modify-phases %standard-phases
8498 (add-before 'check 'delete-broken-test-files
8499 (lambda _
8500 (delete-file "kitchen3/tests/test__all__.py")
8501 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
8502 (native-inputs (list python-pynose python-setuptools))
8503 (home-page "https://github.com/fedora-infra/kitchen")
8504 (synopsis "Python API for snippets")
8505 (description
8506 "@code{kitchen} module provides a python API for all sorts of little
8507useful snippets of code that everybody ends up writing for their projects but
8508never seem big enough to build an independent release. Use kitchen and stop
8509cutting and pasting that code over and over.")
8510 (license (list license:lgpl2.1+
8511 ;; subprocess.py, test_subprocess.py,
8512 ;; kitchen/pycompat25/defaultdict.py:
8513 license:psfl))))
8514
8515(define-public python-roman
8516 (package
8517 (name "python-roman")
8518 (version "5.2")
8519 (source
8520 (origin
8521 (method git-fetch)
8522 (uri (git-reference
8523 (url "https://github.com/zopefoundation/roman")
8524 (commit version)))
8525 (file-name (git-file-name name version))
8526 (sha256
8527 (base32
8528 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
8529 (build-system pyproject-build-system)
8530 (arguments
8531 (list
8532 #:test-backend #~'unittest))
8533 (native-inputs (list python-setuptools))
8534 (home-page "https://github.com/zopefoundation/roman")
8535 (synopsis "Integer to Roman numerals converter")
8536 (description
8537 "This package provides a small helper library to convert Arabic Numbers
8538to Roman Numerals.")
8539 (license license:zpl2.1)))
8540
8541(define-public python-rollbar
8542 (package
8543 (name "python-rollbar")
8544 (version "1.3.0")
8545 (source (origin
8546 (method url-fetch)
8547 (uri (pypi-uri "rollbar" version))
8548 (sha256
8549 (base32
8550 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
8551 (build-system pyproject-build-system)
8552 (native-inputs (list python-httpx
8553 python-pytest
8554 python-setuptools
8555 python-webob
8556 python-wheel))
8557 (inputs (list python-requests))
8558 (home-page "https://github.com/rollbar/pyrollbar")
8559 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
8560 (description
8561 "Python SDK for reporting exceptions, errors, and log messages
8562to @url{https://rollbar.com/, Rollbar}.
8563
8564Capabilities include:
8565
8566@itemize @bullet
8567@item Sending messages and exceptions with arbitrary context
8568@item Getting back aggregates
8569@item Debugging production issues
8570@end itemize")
8571 (license license:expat)))
8572
8573(define-public python-pyjwt
8574 (package
8575 (name "python-pyjwt")
8576 (version "2.10.1")
8577 (source
8578 (origin
8579 (method url-fetch)
8580 (uri (pypi-uri "pyjwt" version))
8581 (sha256
8582 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
8583 (build-system pyproject-build-system)
8584 (arguments
8585 (list
8586 ;; tests: 286 passed, 4 skipped, 1 deselected
8587 ;;
8588 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
8589 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
8590 ;; resolution>"
8591 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
8592 (native-inputs
8593 (list python-pytest
8594 python-setuptools))
8595 (propagated-inputs
8596 (if (supported-package? python-cryptography)
8597 (list python-cryptography)
8598 '()))
8599 (home-page "https://github.com/progrium/pyjwt")
8600 (synopsis "JSON Web Token implementation in Python")
8601 (description
8602 "PyJWT is a JSON Web Token implementation written in Python.")
8603 (license license:expat)))
8604
8605(define-public python-pymsgbox
8606 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
8607 (revision "1"))
8608 (package
8609 (name "python-pymsgbox")
8610 (version (git-version "1.0.6" revision commit))
8611 (source
8612 (origin
8613 (method git-fetch)
8614 (uri (git-reference
8615 (url "https://github.com/asweigart/PyMsgBox")
8616 (commit commit)))
8617 (file-name (git-file-name name version))
8618 (sha256
8619 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
8620 (build-system pyproject-build-system)
8621 (arguments
8622 ;; Circular dependency to run tests:
8623 ;; Tests need pyautogui, which depends on pymsgbox.
8624 '(#:tests? #f))
8625 (native-inputs (list python-setuptools python-wheel))
8626 (home-page "https://github.com/asweigart/PyMsgBox")
8627 (synopsis "Python module for JavaScript-like message boxes")
8628 (description
8629 "PyMsgBox is a simple, cross-platform, pure Python module for
8630JavaScript-like message boxes. Types of dialog boxes include:
8631@enumerate
8632@item alert
8633@item confirm
8634@item prompt
8635@item password
8636@end enumerate
8637")
8638 (license license:bsd-3))))
8639
8640(define-public python-pympler
8641 (package
8642 (name "python-pympler")
8643 (version "1.1")
8644 (source
8645 (origin
8646 (method url-fetch)
8647 (uri (pypi-uri "pympler" version))
8648 (sha256
8649 (base32 "090403k1wvqyddjwbla4843dylysrkd8yw7i62222b4rp1y8dahy"))))
8650 (build-system pyproject-build-system)
8651 (arguments
8652 (list
8653 ;; One test fails with error: 'function (test.muppy.test_summary.func)'
8654 ;; != 'function (muppy.test_summary.func)'.
8655 ;; See <https://github.com/pympler/pympler/issues/134>.
8656 #:test-flags #~(list "-k" "not test_repr_function")))
8657 (native-inputs
8658 (list python-pytest
8659 python-setuptools
8660 python-wheel))
8661 (home-page "https://pythonhosted.org/Pympler/")
8662 (synopsis "Measure, monitor and analyze memory behavior")
8663 (description
8664 "Pympler is a development tool to measure, monitor and analyze
8665the memory behavior of Python objects in a running Python application.
8666
8667By pympling a Python application, detailed insight in the size and the
8668lifetime of Python objects can be obtained. Undesirable or unexpected
8669runtime behavior like memory bloat and other @samp{pymples} can easily
8670be identified.
8671
8672A web profiling frontend exposes process statistics, garbage
8673visualisation and class tracker statistics.")
8674 (license license:asl2.0)))
8675
8676(define-public python-itsdangerous
8677 (package
8678 (name "python-itsdangerous")
8679 (version "2.2.0")
8680 (source
8681 (origin
8682 (method url-fetch)
8683 (uri (pypi-uri "itsdangerous" version))
8684 (sha256
8685 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
8686 (build-system pyproject-build-system)
8687 (native-inputs
8688 (list python-flit-core
8689 python-freezegun
8690 python-pytest))
8691 (home-page "https://palletsprojects.com/p/itsdangerous/")
8692 (synopsis "Python library for passing data to/from untrusted environments")
8693 (description
8694 "Itsdangerous provides various helpers to pass trusted data to untrusted
8695environments and back.")
8696 (license license:bsd-3)))
8697
8698;; WARNING: This package is a dependency of mesa.
8699(define-public python-pyyaml
8700 (package
8701 (name "python-pyyaml")
8702 (version "6.0.2")
8703 (source
8704 (origin
8705 (method url-fetch)
8706 (uri (pypi-uri "PyYAML" version))
8707 (sha256
8708 (base32 "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m"))))
8709 (build-system pyproject-build-system)
8710 (native-inputs
8711 (list python-cython
8712 python-pytest
8713 python-setuptools
8714 python-wheel))
8715 (inputs
8716 (list libyaml))
8717 (home-page "https://pyyaml.org")
8718 (synopsis "YAML parser and emitter for Python")
8719 (description
8720 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
8721complete YAML 1.1 parser, Unicode support, pickle support, capable extension
8722API, and sensible error messages. PyYAML supports standard YAML tags and
8723provides Python-specific tags that represent an arbitrary Python object.")
8724 (license license:expat)))
8725
8726(define-public python-crossenv
8727 (package
8728 (name "python-crossenv")
8729 (version "1.6.1")
8730 (source
8731 (origin
8732 (method git-fetch)
8733 (uri (git-reference
8734 (url "https://github.com/benfogle/crossenv")
8735 (commit (string-append "v" version))))
8736 (file-name (git-file-name name version))
8737 (sha256
8738 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
8739 (build-system pyproject-build-system)
8740 (arguments
8741 (list
8742 ;; XXX: Running test require setting environment variables for
8743 ;; architectures.
8744 #:tests? #f))
8745 (native-inputs (list python-hatchling))
8746 (home-page "https://github.com/benfogle/crossenv")
8747 (synopsis "Cross-compiling virtualenv for Python")
8748 (description
8749 "This package is a tool for cross-compiling extension modules. It
8750creates a special virtual environment such that @command{pip} or
8751@file{setup.py} will cross compile packages for you, usually with no further
8752work on your part.")
8753 (license license:expat)))
8754
8755(define-public python-linkify-it-py
8756 (package
8757 (name "python-linkify-it-py")
8758 (version "2.0.0")
8759 (source (origin
8760 (method git-fetch) ;for tests
8761 (uri (git-reference
8762 (url "https://github.com/tsutsu3/linkify-it-py")
8763 (commit (string-append "v" version))))
8764 (file-name (git-file-name name version))
8765 (sha256
8766 (base32
8767 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
8768 (build-system pyproject-build-system)
8769 (propagated-inputs (list python-uc-micro-py))
8770 (native-inputs (list python-pytest python-setuptools python-wheel))
8771 (home-page "https://github.com/tsutsu3/linkify-it-py")
8772 (synopsis "Links recognition library with full Unicode support")
8773 (description "This is Python port of
8774@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
8775recognition library with full Unicode support. It has features like:
8776@itemize
8777@item Full unicode support, with @i{astral} characters
8778@item International domains support
8779@item Allows rules extension and custom normalizers.
8780@end itemize")
8781 (license license:expat)))
8782
8783(define-public python-makefun
8784 (package
8785 (name "python-makefun")
8786 (version "1.15.1")
8787 (source (origin
8788 (method url-fetch)
8789 (uri (pypi-uri "makefun" version))
8790 (sha256
8791 (base32
8792 "19a8dga8rnmjn5gy1cy1wdi28swbkdkypwbqikbxil6ynqcg3c20"))))
8793 (build-system pyproject-build-system)
8794 (native-inputs
8795 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
8796 (home-page "https://github.com/smarie/python-makefun")
8797 (synopsis "Library to dynamically create python functions")
8798 (description "@code{makefun} helps create functions dynamically with a
8799given signature. It was largely inspired by @code{python-decorator} and
8800@code{functools}.")
8801 (license license:bsd-3)))
8802
8803(define-public python-markdown-it-py
8804 (package
8805 (name "python-markdown-it-py")
8806 (version "3.0.0")
8807 (source (origin
8808 (method url-fetch)
8809 (uri (pypi-uri "markdown-it-py" version))
8810 (sha256
8811 (base32
8812 "1swgvyiavak0nmfb31lq5zck5chwhmyf6qb6qwpcav86zaa0mxp3"))))
8813 (build-system pyproject-build-system)
8814 (arguments (list #:tests? #f)) ;pypi source does not contains tests
8815 (native-inputs (list python-flit-core))
8816 (propagated-inputs
8817 (list python-commonmark
8818 python-linkify-it-py
8819 python-markdown
8820 python-mdurl
8821 python-mistletoe
8822 python-mistune
8823 python-panflute
8824 python-psutil
8825 python-pyyaml))
8826 (home-page "https://github.com/executablebooks/markdown-it-py")
8827 (synopsis "Python port of markdown-it")
8828 (description
8829 "This is a Python port of @code{markdown-it}, and some of its associated
8830plugins. The driving design philosophy of the port has been to change as
8831little of the fundamental code structure (file names, function name, etc) as
8832possible.")
8833 (license license:expat)))
8834
8835(define-public python-markupsafe
8836 (package
8837 (name "python-markupsafe")
8838 (version "3.0.2")
8839 (source
8840 (origin
8841 (method url-fetch)
8842 (uri (pypi-uri "markupsafe" version))
8843 (sha256
8844 (base32 "1w1b1a5pskpqhx1mb53rgpv9srplhrrkr4hsl67f8rq1z3nx6mgf"))))
8845 (build-system pyproject-build-system)
8846 (native-inputs (list python-pytest python-setuptools python-wheel))
8847 (home-page "https://markupsafe.palletsprojects.com")
8848 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
8849 (description
8850 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
8851for Python.")
8852 (license license:bsd-3)))
8853
8854(define-public python-jinja2
8855 (package
8856 (name "python-jinja2")
8857 (version "3.1.2")
8858 (source
8859 (origin
8860 (method url-fetch)
8861 (uri (pypi-uri "Jinja2" version))
8862 (sha256
8863 (base32 "0lp86yadzf8dph67f6g3yxmvnhrzzi863z58jmsrx2j059q1ld9i"))))
8864 (build-system pyproject-build-system)
8865 (native-inputs (list python-pytest python-setuptools python-wheel))
8866 (propagated-inputs (list python-markupsafe))
8867 (home-page "https://jinja.palletsprojects.com/")
8868 (synopsis "Python template engine")
8869 (description
8870 "Jinja2 is a small but fast and easy to use stand-alone template engine
8871written in pure Python.")
8872 (license license:bsd-3)))
8873
8874(define-public python-jinja2-time
8875 ;; XXX: No rleases since 2016, see:
8876 ;; <https://codeberg.org/guix/guix/issues/5546>.
8877 (package
8878 (name "python-jinja2-time")
8879 (version "0.2.0")
8880 (source
8881 (origin
8882 (method git-fetch)
8883 (uri (git-reference
8884 (url "https://github.com/hackebrot/jinja2-time")
8885 (commit version)))
8886 (file-name (git-file-name name version))
8887 (sha256
8888 (base32 "1i7qihrs7wix7wjxlpif3iirhmbyahywpy5haj8abv4r3zbfafna"))))
8889 (build-system pyproject-build-system)
8890 (arguments
8891 (list #:tests? #f)) ;all tests are broken
8892 (native-inputs
8893 (list python-setuptools))
8894 (propagated-inputs
8895 (list python-arrow
8896 python-jinja2))
8897 (home-page "https://github.com/hackebrot/jinja2-time")
8898 (synopsis "Jinja2 Extension for Dates and Times")
8899 (description
8900 "This package provides an extension for the template engine Jinja2. It
8901adds a 'now' tag providing a convenient access to the arrow.now() API from
8902templates. A format string can be provided to control the output.")
8903 (license license:expat)))
8904
8905(define-public python-pypugjs
8906 (package
8907 (name "python-pypugjs")
8908 (version "5.12.0")
8909 (source
8910 (origin
8911 (method git-fetch)
8912 (uri (git-reference
8913 (url "https://github.com/kakulukia/pypugjs")
8914 (commit (string-append "v" version))))
8915 (file-name (git-file-name name version))
8916 (sha256
8917 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
8918 (build-system pyproject-build-system)
8919 (native-inputs (list python-django
8920 python-jinja2
8921 python-flask
8922 python-mako
8923 python-poetry-core
8924 python-pytest
8925 python-tornado-6))
8926 (propagated-inputs (list python-charset-normalizer python-six))
8927 (home-page "https://github.com/kakulukia/pypugjs")
8928 (synopsis "Convert Pug source files into different template languages")
8929 (description
8930 "PyPugJS is a high-performance port of PugJS for Python, that converts
8931any @file{.pug} source into different template languages: Django, Jinja2,
8932Mako, and Tornado.")
8933 (license license:expat))) ;; MIT
8934
8935(define-public python-pystache
8936 (package
8937 (name "python-pystache")
8938 (version "0.6.8")
8939 (source (origin
8940 (method url-fetch)
8941 (uri (pypi-uri "pystache" version))
8942 (sha256
8943 (base32
8944 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
8945 (build-system pyproject-build-system)
8946 (native-inputs (list python-pytest python-setuptools python-wheel))
8947 (home-page "http://defunkt.io/pystache/")
8948 (synopsis "Python logic-less template engine")
8949 (description
8950 "Pystache is a Python implementation of the framework agnostic,
8951logic-free templating system Mustache.")
8952 (license license:expat)))
8953
8954(define-public python-pystitcher
8955 (package
8956 (name "python-pystitcher")
8957 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
8958 (revision . "0")
8959 (upstream-version . "1.0.5")))
8960 (version (git-version (assoc-ref properties 'upstream-version)
8961 (assoc-ref properties 'revision)
8962 (assoc-ref properties 'commit)))
8963 (source
8964 (origin
8965 (method git-fetch)
8966 (uri (git-reference
8967 (url "https://github.com/captn3m0/pystitcher")
8968 (commit (assoc-ref properties 'commit))))
8969 (file-name (git-file-name name version))
8970 (sha256
8971 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
8972 (build-system pyproject-build-system)
8973 (arguments
8974 (list
8975 #:phases
8976 #~(modify-phases %standard-phases
8977 (add-after 'unpack 'set-version
8978 (lambda _
8979 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
8980 #$(assoc-ref properties 'upstream-version)))))))
8981 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
8982 (inputs (list python-html5lib
8983 python-importlib-metadata
8984 python-markdown
8985 python-pypdf
8986 python-validators))
8987 (home-page "https://github.com/captn3m0/pystitcher")
8988 (synopsis "Declaratively stitch together a PDF file from multiple sources")
8989 (description
8990 "This package stitches your PDF files together, generating customizable
8991bookmarks using a declarative input in the form of a markdown file.")
8992 (license license:expat)))
8993
8994(define-public python-joblib
8995 (package
8996 (name "python-joblib")
8997 (version "1.5.2")
8998 (source
8999 (origin
9000 (method url-fetch)
9001 (uri (pypi-uri "joblib" version))
9002 (sha256
9003 (base32 "0mbvch9pzadf0vrm666381ic0ryy5zsv5abxak506bsb0lwmraiz"))))
9004 (build-system pyproject-build-system)
9005 (arguments
9006 (list
9007 #:test-flags
9008 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9009 ;; Disabled to avoid having to depend on ipython/jupyter.
9010 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
9011 (native-inputs
9012 (list python-pytest
9013 python-pytest-asyncio
9014 python-pytest-xdist
9015 python-setuptools
9016 python-wheel))
9017 (home-page "https://joblib.readthedocs.io/")
9018 (synopsis "Using Python functions as pipeline jobs")
9019 (description
9020 "Joblib is a set of tools to provide lightweight pipelining in Python.
9021In particular, joblib offers: transparent disk-caching of the output values
9022and lazy re-evaluation (memoize pattern), easy simple parallel computing
9023logging and tracing of the execution.")
9024 (license license:bsd-3)))
9025
9026(define-public python-daemon
9027 (package
9028 (name "python-daemon")
9029 (version "3.1.2")
9030 (source
9031 (origin
9032 (method git-fetch)
9033 (uri (git-reference
9034 (url "https://pagure.io/python-daemon")
9035 (commit (string-append "release/" version))))
9036 (file-name (git-file-name name version))
9037 (sha256
9038 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
9039 (patches
9040 (search-patches "python-daemon-relax-lockfile.patch"))))
9041 (build-system pyproject-build-system)
9042 (arguments
9043 (list
9044 #:phases
9045 #~(modify-phases %standard-phases
9046 (add-after 'unpack 'discard-dynamic-metadata
9047 (lambda _
9048 (substitute* "pyproject.toml"
9049 (("^dynamic = " all)
9050 (format #f "version = ~s~%~a" #$version all))
9051 (("\"(description|readme|version|maintainers)\",")
9052 ""))
9053 (for-each delete-file
9054 '("setup.py"
9055 "test/test_util_metadata.py"
9056 "test/test_setup.py")))))))
9057 (propagated-inputs (list python-filelock))
9058 (native-inputs (list python-testscenarios python-setuptools))
9059 (home-page "https://pagure.io/python-daemon/")
9060 (synopsis "Python library for making a Unix daemon process")
9061 (description
9062 "Python-daemon is a library that assists a Python program to turn itself
9063into a well-behaved Unix daemon process, as specified in PEP 3143.
9064
9065This library provides a @code{DaemonContext} class that manages the following
9066important tasks for becoming a daemon process:
9067@enumerate
9068@item Detach the process into its own process group.
9069@item Set process environment appropriate for running inside a chroot.
9070@item Renounce suid and sgid privileges.
9071@item Close all open file descriptors.
9072@item Change the working directory, uid, gid, and umask.
9073@item Set appropriate signal handlers.
9074@item Open new file descriptors for stdin, stdout, and stderr.
9075@item Manage a specified PID lock file.
9076@item Register cleanup functions for at-exit processing.
9077@end enumerate")
9078 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
9079 (license (list license:asl2.0 license:gpl3+))))
9080
9081(define-public python-annotated-types
9082 (package
9083 (name "python-annotated-types")
9084 (version "0.7.0")
9085 (source
9086 (origin
9087 (method url-fetch)
9088 (uri (pypi-uri "annotated_types" version))
9089 (sha256
9090 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
9091 (build-system pyproject-build-system)
9092 (native-inputs
9093 (list python-hatchling
9094 python-pytest))
9095 (propagated-inputs (list python-typing-extensions))
9096 (home-page "https://github.com/annotated-types/annotated-types")
9097 (synopsis "Reusable constraint types to use with typing.Annotated")
9098 (description "This package provides metadata objects which can be used to
9099represent common constraints such as upper and lower bounds on scalar values and
9100collection sizes, a Predicate marker for runtime checks, and descriptions of how
9101we intend these metadata to be interpreted. In some cases, we also note
9102alternative representations which do not require this package.")
9103 (license license:expat)))
9104
9105(define-public python-anytree
9106 (package
9107 (name "python-anytree")
9108 (version "2.13.0")
9109 (source
9110 (origin
9111 (method git-fetch) ; no tests data in PyPi package
9112 (uri (git-reference
9113 (url "https://github.com/c0fec0de/anytree")
9114 (commit version)))
9115 (file-name (git-file-name name version))
9116 (sha256
9117 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
9118 (build-system pyproject-build-system)
9119 (arguments
9120 (list
9121 #:phases
9122 #~(modify-phases %standard-phases
9123 (add-before 'check 'pre-check
9124 (lambda _
9125 ;; Tests need to write to that direcroty.
9126 (mkdir-p "tests/dotexport/"))))))
9127 (native-inputs
9128 (list graphviz ;for 'dot'
9129 python-pdm-backend
9130 python-pytest
9131 python-pytest-cov
9132 python-pyyaml
9133 python-test2ref))
9134 (home-page "https://github.com/c0fec0de/anytree")
9135 (synopsis "Lightweight tree data library")
9136 (description
9137 "@code{anytree} is a simple, lightweight, and extensible tree data
9138structure for Python.")
9139 (license license:asl2.0)))
9140
9141(define-public kalamine
9142 (package
9143 (name "kalamine")
9144 (version "0.38")
9145 (source
9146 (origin
9147 (method url-fetch)
9148 (uri (pypi-uri "kalamine" version))
9149 (sha256
9150 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
9151 (build-system pyproject-build-system)
9152 (arguments
9153 (list
9154 #:phases
9155 #~(modify-phases %standard-phases
9156 (add-before 'check 'make-test-layouts
9157 (lambda _
9158 (apply invoke
9159 (cons* "python" "-m" "kalamine.cli" "build"
9160 (find-files "layouts" "\\.toml")))
9161 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
9162 (propagated-inputs
9163 (list python-click
9164 python-livereload
9165 python-lxml
9166 python-progress
9167 python-pyyaml
9168 python-tomli))
9169 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
9170 ;; packaged.
9171 (native-inputs
9172 (list python-hatchling python-mypy python-pytest))
9173 (home-page "https://github.com/OneDeadKey/kalamine")
9174 (synopsis "Keyboard layout maker")
9175 (description
9176 "Kalamine provides a CLI to create advanced keyboard layout from a
9177textual portable description. It also supports layout emulation via web
9178browser.")
9179 (license license:expat)))
9180
9181(define-public python-dm-tree
9182 (package
9183 (name "python-dm-tree")
9184 (version "0.1.9")
9185 (source
9186 (origin
9187 (method url-fetch)
9188 (uri (pypi-uri "dm_tree" version))
9189 (sha256
9190 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
9191 (build-system pyproject-build-system)
9192 (arguments
9193 (list #:tests? #f
9194 #:phases
9195 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
9196 ;; and USE_SYSTEM_PYBIND11=true.
9197 #~(modify-phases %standard-phases
9198 (add-before 'build 'build-shared-lib
9199 (lambda _
9200 (let* ((pybind11 #$(this-package-input "pybind11"))
9201 (python #$(this-package-input "python"))
9202 (version (python-version python))
9203 (abseil-cpp #$(this-package-input "abseil-cpp")))
9204 ;; Delete default cmake build.
9205 (substitute* "setup.py"
9206 (("ext_modules.*") "")
9207 (("cmdclass.*") ""))
9208 ;; Actual build phase.
9209 (mkdir-p "build/temp/tree/")
9210 (invoke
9211 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
9212 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
9213 "-fno-semantic-interposition" "-fPIC"
9214 "-I" (string-append pybind11
9215 "/lib/python" version
9216 "/site-packages/pybind11/include")
9217 "-I" (string-append python "/include/python"
9218 version)
9219 "-I" (string-append abseil-cpp "/include")
9220 "-c" "tree/tree.cc"
9221 "-o" "build/temp/tree/tree.o"
9222 "-fvisibility=hidden" "-g0")
9223 (mkdir-p "build/lib/tree")
9224 (invoke
9225 "g++" "-pthread" "-shared"
9226 (string-append "-Wl," "-rpath=" python "/lib")
9227 "-fno-semantic-interposition"
9228 "build/temp/tree/tree.o"
9229 "-L" (string-append python "/lib")
9230 (string-append abseil-cpp "/lib/libabsl_int128.a")
9231 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
9232 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
9233 (string-append abseil-cpp "/lib/libabsl_strings.a")
9234 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
9235 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
9236 "-o" "build/lib/tree/_tree.so")))))))
9237 ;; We link the static abseil libraries here to avoid problems in
9238 ;; downstream libraries using potentially different variants of
9239 ;; abseil-cpp. This is also what's done in the upstream CMake build.
9240 (native-inputs
9241 (list python-setuptools))
9242 (inputs
9243 (list pybind11
9244 static-abseil-cpp
9245 python))
9246 (propagated-inputs
9247 (list python-absl-py
9248 python-attrs
9249 python-numpy
9250 python-wrapt))
9251 (home-page "https://github.com/deepmind/tree")
9252 (synopsis "Work with nested data structures in Python")
9253 (description "Tree is a python library for working with nested data
9254structures. In a way, @code{tree} generalizes the builtin @code{map} function
9255which only supports flat sequences, and allows you to apply a function to each
9256leaf preserving the overall structure.")
9257 (license license:asl2.0)))
9258
9259(define-public python-pyment
9260 (package
9261 (name "python-pyment")
9262 (version "0.3.4")
9263 (source
9264 (origin
9265 (method git-fetch)
9266 (uri
9267 (git-reference
9268 (url "https://github.com/dadadel/pyment")
9269 (commit (string-append "v" version))))
9270 (file-name (git-file-name name version))
9271 (sha256
9272 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
9273 (build-system pyproject-build-system)
9274 (native-inputs (list python-pytest python-setuptools))
9275 (home-page "https://github.com/dadadel/pyment/")
9276 (synopsis "Convert Python docstrings automatically")
9277 (description "Pyment is a command line tool and library that can be
9278used to convert between several docstring styles.")
9279 (license license:gpl3+)))
9280
9281(define-public python-docstring-parser
9282 (package
9283 (name "python-docstring-parser")
9284 (version "0.15")
9285 (source (origin
9286 (method url-fetch)
9287 (uri (pypi-uri "docstring_parser" version))
9288 (sha256
9289 (base32
9290 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
9291 (build-system pyproject-build-system)
9292 (native-inputs (list python-poetry-core python-pytest))
9293 (home-page "https://github.com/rr-/docstring_parser")
9294 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
9295 (description "This package lets you parse Python docstrings in reST,
9296Google and Numpydoc format.")
9297 (license license:expat)))
9298
9299(define-public python-docutils
9300 (package
9301 (name "python-docutils")
9302 (version "0.21.2")
9303 (source
9304 (origin
9305 (method url-fetch)
9306 (uri (pypi-uri "docutils" version))
9307 (sha256
9308 (base32 "0vwqzbmzdvwx23myx4cg8s8mdkrqnfxpa9yi7jm2s66z5rrihsrs"))))
9309 (build-system pyproject-build-system)
9310 (arguments
9311 (list
9312 #:test-backend #~'custom
9313 #:test-flags #~(list "test/alltests.py")))
9314 (native-inputs
9315 (list python-flit-core))
9316 (home-page "https://docutils.sourceforge.net/")
9317 (synopsis "Python Documentation Utilities")
9318 (description
9319 "Docutils is a modular system for processing documentation into useful
9320formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
9321easy to use markup language, for input.
9322
9323This package provides tools for converting @file{.rst} files to other formats
9324via commands such as @command{rst2man}, as well as supporting Python code.")
9325 ;; Most of the source code is public domain, but some source files are
9326 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
9327 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
9328
9329;; awscli refuses to be built with docutils < 0.17.
9330(define-public python-docutils-0.16
9331 (package
9332 (inherit python-docutils)
9333 (version "0.16")
9334 (source (origin
9335 (method url-fetch)
9336 (uri (pypi-uri "docutils" version))
9337 (sha256
9338 (base32
9339 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
9340 ;; tests contain Python 2 syntax.
9341 (arguments '(#:tests? #false))
9342 (native-inputs
9343 (list python-setuptools python-wheel))))
9344
9345(define-public python-docutils-0.19
9346 (hidden-package
9347 (package
9348 (inherit python-docutils)
9349 (version "0.19")
9350 (source (origin
9351 (method url-fetch)
9352 (uri (pypi-uri "docutils" version))
9353 (sha256
9354 (base32
9355 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
9356 (native-inputs
9357 (list python-setuptools python-wheel)))))
9358
9359(define-public python-docx
9360 (package
9361 (name "python-docx")
9362 (version "1.2.0")
9363 (source (origin
9364 (method url-fetch)
9365 (uri (pypi-uri "python_docx" version))
9366 (sha256
9367 (base32
9368 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
9369 (build-system pyproject-build-system)
9370 (native-inputs
9371 (list behave
9372 python-pyparsing
9373 python-pytest
9374 python-setuptools
9375 python-wheel))
9376 (propagated-inputs
9377 (list python-lxml python-typing-extensions))
9378 (home-page "https://github.com/python-openxml/python-docx/")
9379 (synopsis "Python library to create and modify Microsoft Word documents")
9380 (description "This Python library can be used to create and update
9381Microsoft Word (.docx) documents.")
9382 (license license:expat)))
9383
9384(define-public python-repoze-lru
9385 (package
9386 (name "python-repoze-lru")
9387 (version "0.7")
9388 (source
9389 (origin
9390 (method url-fetch)
9391 (uri (pypi-uri "repoze.lru" version))
9392 (sha256
9393 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
9394 (build-system pyproject-build-system)
9395 (arguments
9396 (list
9397 #:test-backend #~'unittest
9398 #:test-flags #~(list "discover" "repoze")))
9399 (native-inputs
9400 (list python-setuptools))
9401 (home-page "https://www.repoze.org")
9402 (synopsis "Tiny LRU cache implementation and decorator")
9403 (description
9404 "This package provides a tiny LRU cache implementation and decorator.")
9405 (license license:bsd-4)))
9406
9407(define-public python-reretry
9408 (package
9409 (name "python-reretry")
9410 (version "0.11.8")
9411 (source
9412 (origin
9413 (method git-fetch)
9414 (uri (git-reference
9415 (url "https://github.com/leshchenko1979/reretry")
9416 (commit version)))
9417 (file-name (git-file-name name version))
9418 (sha256
9419 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
9420 (build-system pyproject-build-system)
9421 (native-inputs
9422 (list python-pytest python-pytest-asyncio python-setuptools))
9423 (home-page "https://github.com/leshchenko1979/reretry")
9424 (synopsis "Functional decorator for retrying on exceptions")
9425 (description
9426 "This package is a fork from the retry package, but with some of added
9427community-sourced features. It provides an easy to use, but functional
9428decorator for retrying on exceptions.")
9429 (license license:asl2.0)))
9430
9431(define-public python-restructuredtext-lint
9432 (package
9433 (name "python-restructuredtext-lint")
9434 (version "1.4.0")
9435 (source
9436 (origin
9437 (method git-fetch)
9438 (uri (git-reference
9439 (url "https://github.com/twolfson/restructuredtext-lint")
9440 (commit version)))
9441 (file-name (git-file-name name version))
9442 (sha256
9443 (base32 "19ncbmnq2rnkqxhc9wf0q9whji34iyfv1pz6z61vnv4qhhdrn33v"))))
9444 (build-system pyproject-build-system)
9445 (arguments (list #:test-backend #~'unittest))
9446 (propagated-inputs (list python-docutils))
9447 (native-inputs (list python-setuptools))
9448 (home-page "https://github.com/twolfson/restructuredtext-lint")
9449 (synopsis "Linter")
9450 (description
9451 "This package provides a linter for the reStructuredText format.")
9452 (license license:unlicense)))
9453
9454(define-public python-click-repl
9455 (package
9456 (name "python-click-repl")
9457 (version "0.3.0")
9458 (source
9459 (origin
9460 (method git-fetch) ; no tests in PyPI release
9461 (uri (git-reference
9462 (url "https://github.com/click-contrib/click-repl")
9463 (commit version)))
9464 (file-name (git-file-name name version))
9465 (sha256
9466 (base32 "08asy80wdplbrfff7q7qb9k3kkaw5jxqvy9jnkfvsqy3831zf964"))))
9467 (build-system pyproject-build-system)
9468 (native-inputs (list python-pytest
9469 python-pytest-cov ; used by default
9470 python-setuptools
9471 python-wheel))
9472 (propagated-inputs
9473 (list python-click python-prompt-toolkit))
9474 (home-page "https://github.com/click-contrib/click-repl")
9475 (synopsis "REPL plugin for Click")
9476 (description "This package provides a REPL plugin for Click.")
9477 (license license:expat)))
9478
9479(define-public python-pygdbmi
9480 (package
9481 (name "python-pygdbmi")
9482 (version "0.11.0.0")
9483 (source
9484 (origin
9485 (method url-fetch)
9486 (uri (pypi-uri "pygdbmi" version))
9487 (sha256
9488 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
9489 (build-system pyproject-build-system)
9490 (arguments (list #:tests? #f)) ;no tests in PyPI archive
9491 (native-inputs (list python-setuptools python-wheel))
9492 (home-page "https://github.com/cs01/pygdbmi")
9493 (synopsis "Parse gdb machine interface output with Python")
9494 (description "This package provides a parse gdb machine interface output
9495with Python.")
9496 (license license:expat)))
9497
9498(define-public python-pygments
9499 (package
9500 (name "python-pygments")
9501 (version "2.19.1")
9502 (source
9503 (origin
9504 (method url-fetch)
9505 (uri (pypi-uri "pygments" version))
9506 (sha256
9507 (base32
9508 "07qm8mx3y5r8ri6zpn0hp9zx5g02bydhi7pkv54hdp3nhlm6vhb1"))))
9509 (build-system pyproject-build-system)
9510 (arguments
9511 (list
9512 #:test-flags
9513 ;; 4568 passed, 16 skipped, 597 deselected
9514 ;;
9515 ;; Ignore tests requiring "wcag_contrast_ratio"
9516 #~(list "--ignore=tests/contrast/test_contrasts.py"
9517 ;; Tests fail with not matched diff.
9518 "--ignore=tests/examplefiles/awk/test.awk"
9519 "--ignore=tests/examplefiles/bash/example.sh"
9520 "--ignore=tests/examplefiles/make/Makefile"
9521 "--ignore=tests/examplefiles/phix/example.exw"
9522 "--ignore=tests/examplefiles/sed/all_sorts_of_syntax.sed"
9523 "--ignore=tests/examplefiles/sed/count_words.sed"
9524 "--ignore=tests/examplefiles/sed/increment_number.sed"
9525 "--ignore=tests/examplefiles/sed/reverse.sed"
9526 "--ignore=tests/examplefiles/slurm/example.sl"
9527 ;; Assertion error to find example file by following symlink:
9528 ;; assert p.is_file(), f"Example file {p} not found"
9529 "--deselect=tests/test_basic_api.py::test_lexer_classes")))
9530 (native-inputs
9531 (list python-hatchling python-pytest-bootstrap))
9532 (home-page "https://pygments.org/")
9533 (synopsis "Syntax highlighting")
9534 (description
9535 "Pygments is a syntax highlighting package written in Python.")
9536 (license license:bsd-2)))
9537
9538(define-public python-pygments-bootstrap
9539 (package/inherit python-pygments
9540 (name "python-pygments-bootstrap")
9541 (native-inputs
9542 (list python-hatchling))
9543 (arguments `(#:tests? #f))))
9544
9545(define-public python-pygtrie
9546 (package
9547 (name "python-pygtrie")
9548 (version "2.5.0")
9549 (source
9550 (origin
9551 (method git-fetch)
9552 (uri (git-reference
9553 (url "https://github.com/mina86/pygtrie")
9554 (commit (string-append "v" version))))
9555 (file-name (git-file-name name version))
9556 (sha256
9557 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
9558 (build-system pyproject-build-system)
9559 (arguments
9560 (list
9561 #:test-backend #~'unittest
9562 #:phases
9563 #~(modify-phases %standard-phases
9564 (add-after 'unpack 'set-version
9565 (lambda _
9566 (delete-file "version.py")
9567 (substitute* "setup.py"
9568 (("import version")
9569 "")
9570 (("version\\.get_version\\(\\)")
9571 (format #f "~s" #$version))))))))
9572 (native-inputs (list python-setuptools))
9573 (home-page "https://github.com/mina86/pygtrie")
9574 (synopsis "Pure Python trie data structure implementation")
9575 (description
9576 "This package provides a pure Python trie data structure implementation.")
9577 (license license:asl2.0)))
9578
9579(define-public python-bump2version
9580 (package
9581 (name "python-bump2version")
9582 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
9583 (revision . "1")))
9584 (version (git-version "1.0.1"
9585 (assoc-ref properties 'revision)
9586 (assoc-ref properties 'commit)))
9587 (source
9588 (origin
9589 (method git-fetch)
9590 (uri (git-reference
9591 (url "https://github.com/c4urself/bump2version")
9592 (commit (assoc-ref properties 'commit))))
9593 (file-name (git-file-name name version))
9594 (sha256
9595 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
9596 (build-system pyproject-build-system)
9597 (arguments
9598 ;; XXX: Single flaky failing test.
9599 (list #:test-flags #~(list "-k" "not test_usage_string")))
9600 (native-inputs (list python-pytest python-setuptools python-testfixtures))
9601 (home-page "https://github.com/c4urself/bump2version")
9602 (synopsis "Version-bump your software with a single command!")
9603 (description
9604 "This package provides a small command line tool to simplify releasing
9605software by updating all version strings in your source code by the correct
9606increment. It also creates commits and tags.")
9607 (license license:expat)))
9608
9609(define-public python-deprecated
9610 (package
9611 (name "python-deprecated")
9612 (version "1.2.14")
9613 (source
9614 (origin
9615 (method git-fetch)
9616 (uri (git-reference
9617 (url "https://github.com/tantale/deprecated")
9618 (commit (string-append "v" version))))
9619 (file-name (git-file-name name version))
9620 (sha256
9621 (base32
9622 "0knjsacv0r4gyz6ngjn3ih6352yz05r63ll73y2cg162bzcak48z"))))
9623 (build-system pyproject-build-system)
9624 (propagated-inputs
9625 (list python-wrapt))
9626 (native-inputs
9627 (list python-pytest python-setuptools python-wheel))
9628 (home-page "https://github.com/tantale/deprecated")
9629 (synopsis "Python decorator to deprecate classes, functions or methods")
9630 (description "The @code{deprecated} decorator provides a convenient way to deprecate
9631to deprecate classes, functions or methods.")
9632 (license license:expat)))
9633
9634(define-public python-pygithub
9635 (package
9636 (name "python-pygithub")
9637 (version "2.8.1")
9638 (source
9639 (origin
9640 (method git-fetch)
9641 (uri (git-reference
9642 (url "https://github.com/PyGithub/PyGithub")
9643 (commit (string-append "v" version))))
9644 (file-name (git-file-name name version))
9645 (sha256
9646 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
9647 (build-system pyproject-build-system)
9648 (arguments
9649 (list
9650 #:phases
9651 #~(modify-phases %standard-phases
9652 (add-after 'unpack 'set-version
9653 (lambda _
9654 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
9655 (propagated-inputs
9656 (list python-pyjwt
9657 python-pynacl
9658 python-requests
9659 python-typing-extensions
9660 python-urllib3))
9661 (native-inputs
9662 (list python-responses
9663 python-pytest
9664 python-setuptools
9665 python-setuptools-scm))
9666 (home-page "https://pygithub.readthedocs.io/en/latest/")
9667 (synopsis "Python library for the GitHub API")
9668 (description "This library allows managing GitHub resources such as
9669repositories, user profiles, and organizations in your Python applications,
9670using version 3 of the GitHub application programming interface (API).")
9671 (license license:lgpl3+)))
9672
9673(define-public python-rellu
9674 (package
9675 (name "python-rellu")
9676 (version "0.7")
9677 (source
9678 (origin
9679 (method git-fetch)
9680 (uri (git-reference
9681 (url "https://github.com/robotframework/rellu")
9682 (commit (string-append "v" version))))
9683 (file-name (git-file-name name version))
9684 (sha256
9685 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
9686 (build-system pyproject-build-system)
9687 (native-inputs (list python-pytest python-setuptools))
9688 (propagated-inputs (list python-invoke python-pygithub))
9689 (home-page "https://github.com/robotframework/rellu")
9690 (synopsis "Utilities to create PyPI releases")
9691 (description
9692 "This collection of utilities contains tooling and templates to assist in
9693creating releases on GitHub and publishing them on PyPI. It is designed to be
9694used by Robot Framework and tools and libraries in its ecosystem, but can
9695naturally be used also by other projects.")
9696 (license license:asl2.0)))
9697
9698(define-public python-robotframework
9699 (package
9700 (name "python-robotframework")
9701 (version "7.3.2")
9702 (source
9703 (origin
9704 (method git-fetch) ; no tests in the PyPI archive
9705 (uri (git-reference
9706 (url "https://github.com/robotframework/robotframework")
9707 (commit (string-append "v" version))))
9708 (file-name (git-file-name name version))
9709 (sha256
9710 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
9711 (outputs '("out" "doc"))
9712 (build-system pyproject-build-system)
9713 (arguments
9714 (list
9715 #:modules '((guix build pyproject-build-system)
9716 (guix build utils)
9717 (ice-9 ftw)
9718 (ice-9 match)
9719 (srfi srfi-26))
9720 #:phases
9721 #~(modify-phases %standard-phases
9722 (add-before 'build 'build-and-install-doc
9723 (lambda* (#:key outputs #:allow-other-keys)
9724 (let ((doc (string-append #$output:doc
9725 "/share/doc/robotframework")))
9726 (invoke "invoke" "library-docs" "all")
9727 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
9728 (mkdir-p doc)
9729 (with-directory-excursion "dist"
9730 (define user-guide-dir
9731 (match (scandir "." (cut string-prefix?
9732 "robotframework-userguide-" <>))
9733 ((dir) dir)
9734 (_ (error "could not find the user guide directory"))))
9735 (copy-recursively user-guide-dir doc)))))
9736 (replace 'check
9737 (lambda* (#:key tests? #:allow-other-keys)
9738 (when tests?
9739 ;; TODO: Some acceptance faile and took near 30min to
9740 ;; complete: 6765 tests, 6745 passed, 20 failed; findout how
9741 ;; to skip failing ones.
9742 (format #t "Running unit tests...~%")
9743 (invoke "utest/run.py")))))))
9744 (native-inputs
9745 (list python-docutils
9746 python-invoke
9747 python-jsonschema
9748 python-pygments
9749 python-rellu
9750 python-typing-extensions
9751 python-setuptools
9752 `(,python "tk") ;used when building the HTML doc
9753 python-wheel))
9754 (home-page "https://robotframework.org")
9755 (synopsis "Generic automation framework")
9756 (description "Robot Framework is a generic automation framework for
9757acceptance testing, acceptance test driven development (ATDD), and robotic
9758process automation (RPA).")
9759 (license license:asl2.0)))
9760
9761(define-public python-robotframework-datadriver
9762 (package
9763 (name "python-robotframework-datadriver")
9764 (version "1.11.2")
9765 (source
9766 (origin
9767 (method git-fetch) ; no tests in PyPI release
9768 (uri (git-reference
9769 (url "https://github.com/Snooz82/robotframework-datadriver")
9770 (commit version)))
9771 (file-name (git-file-name name version))
9772 (sha256
9773 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
9774 (build-system pyproject-build-system)
9775 (arguments
9776 (list
9777 #:phases
9778 #~(modify-phases %standard-phases
9779 (add-before 'check 'skip-problematic-tests
9780 (lambda _
9781 (for-each delete-file-recursively
9782 (list
9783 ;; The test file 'tab-csv-file-name.tsv' contains
9784 ;; special characters for which there is no locale
9785 ;; in the build environment, causing one test to
9786 ;; fail.
9787 "atest/TestCases/csv_reader_config"
9788 ;; Error in file on line 6: Non-existing setting
9789 ;; 'Test Tags'.
9790 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
9791 (replace 'check
9792 (lambda* (#:key tests? #:allow-other-keys)
9793 (when tests?
9794 (with-directory-excursion "atest"
9795 (invoke "sh" "run_atest.sh"))))))))
9796 (native-inputs
9797 (list python-docutils
9798 python-robotframework-stacktrace
9799 python-setuptools
9800 python-wheel))
9801 (propagated-inputs
9802 (list python-openpyxl
9803 python-pandas
9804 python-pygments
9805 python-robotframework))
9806 (home-page "https://github.com/Snooz82/robotframework-datadriver")
9807 (synopsis "Data-driven test extension for Robot Framework")
9808 (description "DataDriver is a data-driven extension for Robot Framework.
9809DataDriver uses the Listener Interface of Robot Framework to create new test
9810cases based on a data file that contains the test data. DataDriver supports
9811data files in the CSV, XLS or XLSX formats.")
9812 (license license:asl2.0)))
9813
9814(define-public python-robotframework-lint
9815 ;; There is no properly tagged release; the commit below seems to correspond
9816 ;; to the 0.9 stable release available from PyPI. The tests are not
9817 ;; included in the PyPI archive, so we fetch the sources from the upstream
9818 ;; Git repo.
9819 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
9820 (revision "0"))
9821 (package
9822 (name "python-robotframework-lint")
9823 (version (git-version "1.1" ;version taken from 'rflint/version.py'
9824 revision commit))
9825 (source
9826 (origin
9827 (method git-fetch)
9828 (uri (git-reference
9829 (url "https://github.com/boakley/robotframework-lint")
9830 (commit commit)))
9831 (file-name (git-file-name name version))
9832 (sha256
9833 (base32
9834 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
9835 (build-system python-build-system)
9836 (arguments
9837 `(#:phases
9838 (modify-phases %standard-phases
9839 (replace 'check
9840 (lambda _
9841 (invoke "python" "-m" "robot" "-A"
9842 "tests/conf/default.args" "tests"))))))
9843 (propagated-inputs
9844 (list python-robotframework))
9845 (home-page "https://github.com/boakley/robotframework-lint/")
9846 (synopsis "Static analysis tool (linter) for Robot Framework")
9847 (description "This package provides the @code{rflint} command-line
9848utility, a static analysis tool (linter) for Robot Framework source files.")
9849 (license license:asl2.0))))
9850
9851(define-public python-robotframework-pabot
9852 (package
9853 (name "python-robotframework-pabot")
9854 (version "4.2.0")
9855 (source
9856 (origin
9857 ;; There are no tests in the PyPI archive.
9858 (method git-fetch)
9859 (uri (git-reference
9860 (url "https://github.com/mkorpela/pabot")
9861 (commit version)))
9862 (file-name (git-file-name name version))
9863 (sha256
9864 (base32
9865 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
9866 (build-system pyproject-build-system)
9867 (arguments
9868 (list
9869 #:test-flags
9870 #~(list "-k" (string-join
9871 ;; XXX: Maybe it's a bad idea to skip these tests which
9872 ;; failing assertions highlight incomparability issues.
9873 ;;
9874 ;; 93 passed, 23 deselected, 11 warnings
9875 (list "not test_argumentfile_outputs"
9876 "test_dependency_ok"
9877 "test_longnames_in_tests"
9878 "test_multiple_dependencies_ok"
9879 "test_orders"
9880 "test_pabotprerunmodifier"
9881 "test_pabotprerunmodifier_with_prerunmodifier"
9882 "test_pabotprerunmodifier_with_testlevelsplit"
9883 "test_pabotprerunmodifier_with_testlevelsplit_and_"
9884 "test_parallel_execution"
9885 "test_parallel_execution_with_testlevelsplit"
9886 "test_pre_run_with_new_name"
9887 "test_pre_run_with_new_tag"
9888 "test_run_dir_2_then_dir_3"
9889 "test_run_dir_3_then_dir_2"
9890 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
9891 "test_sleep_test_cases_and_group"
9892 "test_stdout_should_display_passed_test"
9893 "test_stdout_should_display_passed_test"
9894 "test_stdout_should_display_passed_test_and_not_"
9895 "test_testlevelsplit_output_task_order"
9896 "test_too_big_testname"
9897 "test_two_orders")
9898 " and not "))
9899 #:phases
9900 #~(modify-phases %standard-phases
9901 (add-after 'unpack 'relax-requirements
9902 (lambda _
9903 (substitute* "setup.cfg"
9904 ;; natsort>=8.2.0
9905 ((">=8.2.0") "")))))))
9906 (native-inputs
9907 (list python-pytest
9908 python-setuptools
9909 python-wheel))
9910 (propagated-inputs
9911 (list python-natsort
9912 python-robotframework
9913 python-robotframework-stacktrace))
9914 (home-page "https://pabot.org")
9915 (synopsis "Parallel test runner for Robot Framework")
9916 (description "Pabot is a parallel executor for Robot Framework tests.")
9917 (license license:asl2.0)))
9918
9919(define-public python-robotframework-stacktrace
9920 (package
9921 (name "python-robotframework-stacktrace")
9922 (version "0.4.1")
9923 (source
9924 (origin
9925 (method git-fetch)
9926 (uri (git-reference
9927 (url "https://github.com/MarketSquare/robotframework-stacktrace")
9928 (commit version)))
9929 (file-name (git-file-name name version))
9930 (sha256
9931 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
9932 (build-system pyproject-build-system)
9933 (arguments
9934 ;; XXX: The test suite fails (see:
9935 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
9936 (list
9937 #:tests? #f
9938 #:phases
9939 #~(modify-phases %standard-phases
9940 (add-after 'unpack 'set-version
9941 (lambda _
9942 (substitute* "setup.py"
9943 (("VERSION =.*")
9944 (string-append "VERSION = '" #$version "'"))))))))
9945 (native-inputs (list python-setuptools))
9946 (propagated-inputs (list python-robotframework))
9947 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
9948 (synopsis "Robot Framework listener to print a stack trace on error")
9949 (description "StackTrace is a Robot Framework listener that prints a stack
9950trace directly to the terminal to ease debugging.")
9951 (license license:asl2.0)))
9952
9953(define-public python-robotframework-sshlibrary
9954 (package
9955 (name "python-robotframework-sshlibrary")
9956 (version "3.8.0")
9957 ;; There are no tests in the PyPI archive.
9958 (source
9959 (origin
9960 (method git-fetch)
9961 (uri (git-reference
9962 (url "https://github.com/robotframework/SSHLibrary")
9963 (commit (string-append "v" version))))
9964 (file-name (git-file-name name version))
9965 (sha256
9966 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
9967 (patches (search-patches
9968 "python-robotframework-sshlibrary-rf5-compat.patch"))))
9969 (build-system pyproject-build-system)
9970 (arguments
9971 (list
9972 #:phases
9973 #~(modify-phases %standard-phases
9974 (add-before 'build 'build-and-install-doc
9975 (lambda _
9976 (let ((doc (string-append #$output:doc
9977 "/share/doc/robotframework-sshlibrary")))
9978 (invoke "chmod" "-R" "+w" "docs")
9979 (invoke "invoke" "kw-docs" "project-docs")
9980 (mkdir-p doc)
9981 (for-each delete-file
9982 (find-files "docs" "\\.rst"))
9983 (copy-recursively "docs" doc))))
9984 (replace 'check
9985 (lambda* (#:key tests? #:allow-other-keys)
9986 (when tests?
9987 ;; Some tests require an SSH server; we remove them.
9988 (delete-file "utest/test_client_api.py")
9989 (delete-file "utest/test_scp.py")
9990 (invoke "python" "utest/run.py")))))))
9991 (propagated-inputs
9992 (list python-robotframework python-paramiko python-scp))
9993 (native-inputs
9994 (list openssh
9995 which
9996 ;; To generate the documentation
9997 python-docutils
9998 python-invoke
9999 python-pygments
10000 python-rellu
10001 python-setuptools))
10002 (outputs '("out" "doc"))
10003 (home-page "https://github.com/robotframework/SSHLibrary")
10004 (synopsis "Robot Framework library for SSH and SFTP")
10005 (description
10006 "SSHLibrary is a Robot Framework library providing support for SSH and
10007SFTP. It has the following main usages:
10008@itemize @bullet
10009@item Executing commands on the remote machine, either blocking or non-blocking.
10010@item Writing and reading in an interactive shell.
10011@item Transferring files and directories over SFTP.
10012@item Ensuring that files and directories exist on the remote machine.
10013@end itemize")
10014 (license license:asl2.0)))
10015
10016(define-public python-robotframework-pythonlibcore
10017 (package
10018 (name "python-robotframework-pythonlibcore")
10019 (version "4.4.1")
10020 (source
10021 (origin
10022 (method git-fetch) ;no tests in pypi archive
10023 (uri (git-reference
10024 (url "https://github.com/robotframework/PythonLibCore")
10025 (commit (string-append "v" version))))
10026 (file-name (git-file-name name version))
10027 (sha256
10028 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
10029 (build-system pyproject-build-system)
10030 (arguments
10031 (list
10032 #:test-backend #~'custom
10033 #:test-flags #~(list "utest/run.py")))
10034 (native-inputs
10035 (list python-approvaltests
10036 python-pytest
10037 python-pytest-cov
10038 python-pytest-mockito
10039 python-robotframework
10040 python-setuptools))
10041 (home-page "https://github.com/robotframework/PythonLibCore")
10042 (synopsis "Robot Framework Python library tools")
10043 (description
10044 "PythonLibCore provides tools for creating larger test libraries for
10045Robot Framework using Python. The Robot Framework hybrid and dynamic library
10046APIs give more flexibility for library than the static library API, but they
10047also set requirements for libraries which need to be implemented in the
10048library side. PythonLibCore eases the problem by providing a simpler
10049interface and by handling all the requirements towards the Robot Framework
10050library APIs.")
10051 (license license:asl2.0)))
10052
10053(define-public python-robotframework-seleniumlibrary
10054 (package
10055 (name "python-robotframework-seleniumlibrary")
10056 (version "6.8.0")
10057 (source
10058 (origin
10059 (method git-fetch)
10060 (uri (git-reference
10061 (url "https://github.com/robotframework/SeleniumLibrary")
10062 (commit (string-append "v" version))))
10063 (file-name (git-file-name name version))
10064 (sha256
10065 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
10066 (build-system pyproject-build-system)
10067 (arguments
10068 (list
10069 #:test-flags
10070 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
10071 "-k" (string-join
10072 (list "not test_create_firefox_with_options"
10073 "test_create_headless_firefox_with_options"
10074 "test_create_driver_firefox")
10075 " and not "))))
10076 (native-inputs
10077 (list python-approvaltests
10078 python-pytest
10079 python-pytest-mockito
10080 python-setuptools))
10081 (propagated-inputs
10082 (list python-click
10083 python-robotframework
10084 python-robotframework-pythonlibcore
10085 python-selenium))
10086 (home-page "https://github.com/robotframework/SeleniumLibrary")
10087 (synopsis "Web testing library for Robot Framework")
10088 (description "SeleniumLibrary is a web testing library for Robot Framework
10089that utilizes the Selenium tool internally.")
10090 (license license:asl2.0)))
10091
10092(define-public python-robotframework-seleniumscreenshots
10093 (package
10094 (name "python-robotframework-seleniumscreenshots")
10095 (version "0.9.5")
10096 (source
10097 (origin
10098 (method git-fetch)
10099 (uri (git-reference
10100 (url
10101 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10102 (commit version)))
10103 (file-name (git-file-name name version))
10104 (sha256
10105 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
10106 (build-system pyproject-build-system)
10107 (arguments
10108 ;; XXX: The tests require a relatively complicated setup configured in
10109 ;; their CI with Nix (!).
10110 `(#:tests? #f))
10111 (native-inputs (list python-setuptools))
10112 (propagated-inputs
10113 (list python-robotframework python-robotframework-seleniumlibrary))
10114 (home-page
10115 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10116 (synopsis
10117 "Robot Framework library for annotating and cropping screenshots")
10118 (description
10119 "The SeleniumScreenshots library for Robot Framework provides keywords
10120for annotating and cropping screenshots taken with SeleniumLibrary. It is
10121useful for scripting automatically updated screenshots for documentation or
10122for visual regression testing purposes.")
10123 (license license:bsd-3)))
10124
10125(define-public python-rstr
10126 (package
10127 (name "python-rstr")
10128 (version "3.2.2")
10129 (source
10130 (origin
10131 (method git-fetch)
10132 (uri (git-reference
10133 (url "https://github.com/leapfrogonline/rstr")
10134 (commit version)))
10135 (file-name (git-file-name name version))
10136 (sha256
10137 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
10138 (build-system pyproject-build-system)
10139 (arguments
10140 (list
10141 #:phases
10142 #~(modify-phases %standard-phases
10143 (add-before 'build 'pretend-version
10144 ;; The version string is usually derived via setuptools-scm, but
10145 ;; without the git metadata available, the version string is set to
10146 ;; '0.0.0'.
10147 (lambda _
10148 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
10149 (native-inputs (list python-pytest
10150 python-setuptools
10151 python-setuptools-scm
10152 python-wheel))
10153 (home-page "https://github.com/leapfrogonline/rstr")
10154 (synopsis "Generate random strings in Python")
10155 (description "This package provides a python module for generating
10156random strings of various types. It could be useful for fuzz testing,
10157generating dummy data, or other applications. It has no dependencies
10158outside the standard library.")
10159 (license license:bsd-3)))
10160
10161(define-public python-scp
10162 (package
10163 (name "python-scp")
10164 (version "0.15.0")
10165 (source
10166 (origin
10167 (method git-fetch)
10168 (uri (git-reference
10169 (url "https://github.com/jbardin/scp.py")
10170 (commit (string-append "v" version))))
10171 (file-name (git-file-name name version))
10172 (sha256
10173 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
10174 (build-system pyproject-build-system)
10175 (arguments (list #:tests? #f)) ;tests require an SSH server
10176 (native-inputs (list python-setuptools))
10177 (propagated-inputs (list python-paramiko))
10178 (home-page "https://github.com/jbardin/scp.py")
10179 (synopsis "SCP protocol module for Python and Paramiko")
10180 (description
10181 "The scp module extends the Paramiko library to send and receive files
10182via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
10183 (license license:gpl2+)))
10184
10185(define-public python-rst-linker
10186 (package
10187 (name "python-rst-linker")
10188 (version "2.6.0")
10189 (source
10190 (origin
10191 (method git-fetch)
10192 (uri (git-reference
10193 (url "https://github.com/jaraco/rst.linker")
10194 (commit (string-append "v" version))))
10195 (file-name (git-file-name name version))
10196 (sha256
10197 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
10198 (build-system pyproject-build-system)
10199 (arguments
10200 (list
10201 #:phases
10202 #~(modify-phases %standard-phases
10203 (add-after 'unpack 'set-version
10204 (lambda _
10205 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
10206 (propagated-inputs (list python-jaraco-context))
10207 (native-inputs
10208 (list python-path
10209 python-jaraco-vcs
10210 python-pytest
10211 python-pytest-subprocess
10212 python-setuptools-scm
10213 python-setuptools))
10214 (home-page "https://github.com/jaraco/rst.linker")
10215 (synopsis "Sphinx plugin to add links and timestamps")
10216 (description
10217 "rst.linker automatically replaces text by a reStructuredText external
10218reference or timestamps. It's primary purpose is to augment the changelog,
10219but it can be used for other documents, too.")
10220 (license license:expat)))
10221
10222(define-public python-feedgenerator
10223 (package
10224 (name "python-feedgenerator")
10225 (version "2.1.0")
10226 (source
10227 (origin
10228 (method url-fetch)
10229 (uri (pypi-uri "feedgenerator" version))
10230 (sha256
10231 (base32
10232 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
10233 (build-system pyproject-build-system)
10234 (native-inputs
10235 (list python-pytest python-pytest-cov python-setuptools python-wheel))
10236 (propagated-inputs
10237 (list python-pytz))
10238 (home-page "https://github.com/getpelican/feedgenerator")
10239 (synopsis
10240 "Standalone version of Django's Atom/RSS feed generator")
10241 (description
10242 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
10243which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
10244 (license license:bsd-3)))
10245
10246(define-public python-lsp-jsonrpc
10247 (package
10248 (name "python-lsp-jsonrpc")
10249 (version "1.1.2")
10250 (source
10251 (origin
10252 (method url-fetch)
10253 (uri (pypi-uri "python-lsp-jsonrpc" version))
10254 (sha256
10255 (base32
10256 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
10257 (build-system pyproject-build-system)
10258 (native-inputs
10259 (list python-coverage
10260 python-pycodestyle
10261 python-pyflakes
10262 python-pylint
10263 python-pytest
10264 python-pytest-cov
10265 python-setuptools
10266 python-setuptools-scm
10267 python-wheel))
10268 (propagated-inputs
10269 (list python-ujson))
10270 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
10271 (synopsis "JSON RPC 2.0 server library")
10272 (description
10273 "This package provides a JSON RPC 2.0 server library for Python.")
10274 (license license:expat)))
10275
10276(define-deprecated-package python-jsonrpc-server
10277 python-lsp-jsonrpc)
10278
10279(define-public python-pydantic
10280 (package
10281 (name "python-pydantic")
10282 (version "2.12.5")
10283 (source
10284 (origin
10285 (method git-fetch)
10286 (uri (git-reference
10287 (url "https://github.com/samuelcolvin/pydantic")
10288 (commit (string-append "v" version))))
10289 (file-name (git-file-name name version))
10290 (sha256
10291 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
10292 (build-system pyproject-build-system)
10293 (arguments
10294 (list
10295 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
10296 #:test-flags
10297 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
10298 (native-inputs
10299 (list tzdata-for-tests
10300 python-dirty-equals
10301 python-faker
10302 python-hatch-fancy-pypi-readme
10303 python-hatchling
10304 python-jsonschema
10305 python-pytest
10306 python-pytest-benchmark
10307 python-pytest-examples
10308 python-pytest-mock
10309 python-pytest-run-parallel))
10310 (propagated-inputs
10311 (list python-annotated-types
10312 python-pydantic-core ;it's hard == requirement, keep it in sync
10313 python-typing-extensions
10314 python-typing-inspection))
10315 (home-page "https://github.com/samuelcolvin/pydantic")
10316 (synopsis "Python data validation and settings management")
10317 (description
10318 "Pydantic enforces type hints at runtime, and provides user friendly
10319errors when data is invalid.")
10320 (license license:expat)))
10321
10322(define-public python-pydantic-1
10323 (package
10324 (inherit python-pydantic)
10325 (name "python-pydantic")
10326 (version "1.10.19")
10327 (source
10328 (origin
10329 (method git-fetch)
10330 (uri (git-reference
10331 (url "https://github.com/samuelcolvin/pydantic")
10332 (commit (string-append "v" version))))
10333 (file-name (git-file-name name version))
10334 (sha256
10335 (base32 "0swcpfq1y0h5dcj82idls8k5la4xh4c0vz47y7jci2qass8gjffc"))))
10336 (build-system pyproject-build-system)
10337 (arguments
10338 (list
10339 #:test-flags
10340 ;; One test fails with not equal assertion.
10341 #~(list "--deselect=tests/test_validators.py::test_assert_raises_validation_error")))
10342 (native-inputs
10343 (list python-pytest
10344 python-pytest-mock
10345 python-setuptools))
10346 (propagated-inputs
10347 (list python-typing-extensions))))
10348
10349;; It may be removed after 2026-01-05.
10350(define-deprecated/public-alias python-pydantic-2 python-pydantic)
10351
10352(define-public python-pydantic-core
10353 (package
10354 (name "python-pydantic-core")
10355 (version "2.41.5")
10356 (source
10357 (origin
10358 (method url-fetch)
10359 (uri (pypi-uri "pydantic_core" version))
10360 (sha256
10361 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
10362 (build-system pyproject-build-system)
10363 (arguments
10364 (list
10365 #:imported-modules `(,@%cargo-build-system-modules
10366 ,@%pyproject-build-system-modules)
10367 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
10368 (guix build pyproject-build-system)
10369 (guix build utils))
10370 ;; tests: 5318 passed, 123 skipped, 10 xfailed
10371 #:test-flags
10372 #~(list "--ignore=tests/benchmarks"
10373 ;; XXX: It cycles, bootstrap variant needs to be introduced:
10374 ;; python-pydantic-core -> python-pydantic ->
10375 ;; python-inline-snapshot -> python-pydantic-core
10376 "--ignore=tests/test_docstrings.py"
10377 "--ignore=tests/test_hypothesis.py"
10378 "--ignore=tests/validators/test_allow_partial.py"
10379 "--ignore=tests/validators/test_frozenset.py"
10380 "--ignore=tests/validators/test_list.py"
10381 "--ignore=tests/validators/test_set.py")
10382 #:phases
10383 #~(modify-phases %standard-phases
10384 (add-after 'unpack 'prepare-cargo-build-system
10385 (lambda args
10386 (for-each (lambda (phase)
10387 (format #t "Running cargo phase: ~a~%" phase)
10388 (apply (assoc-ref cargo:%standard-phases phase)
10389 #:cargo-target #$(cargo-triplet)
10390 args))
10391 '(unpack-rust-crates
10392 configure
10393 check-for-pregenerated-files
10394 patch-cargo-checksums))))
10395 (add-after 'unpack 'patch-pyproject
10396 (lambda _
10397 ;; maturin failed to parce pyproject.toml.
10398 (substitute* "pyproject.toml"
10399 (("^license-files = .*") "")))))))
10400 (native-inputs
10401 (append
10402 (list maturin
10403 python-dirty-equals
10404 python-pytest
10405 python-pytest-benchmark ;TODO: disable in pyproject.toml
10406 python-pytest-mock
10407 python-pytest-timeout
10408 python-typing-inspection
10409 python-tzdata
10410 rust
10411 `(,rust "cargo"))
10412 (or (and=> (%current-target-system)
10413 (compose list make-rust-sysroot))
10414 '())))
10415 (inputs
10416 (cargo-inputs 'python-pydantic-core))
10417 (propagated-inputs
10418 (list python-typing-extensions))
10419 (home-page "https://github.com/pydantic/pydantic-core")
10420 (synopsis "Core validation logic for pydantic")
10421 (description "This package provides the core functionality for pydantic
10422validation and serialization.")
10423 (license license:expat)))
10424
10425(define-public python-pydantic-cli
10426 (package
10427 (name "python-pydantic-cli")
10428 (version "9.1.0")
10429 (source
10430 (origin
10431 (method git-fetch) ;for tests
10432 (uri (git-reference
10433 (url "https://github.com/mpkocher/pydantic-cli")
10434 (commit (string-append "v" version))))
10435 (file-name (git-file-name name version))
10436 (sha256
10437 (base32
10438 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
10439 (build-system pyproject-build-system)
10440 (propagated-inputs
10441 (list python-pydantic))
10442 (native-inputs
10443 (list python-hatchling python-pytest))
10444 (home-page "https://github.com/mpkocher/pydantic-cli")
10445 (synopsis "Turn Pydantic defined data models into CLI tools")
10446 (description
10447 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
10448Interfaces} via data models provided in the JSON format.")
10449 (license license:expat)))
10450
10451(define-public python-pydantic-extra-types
10452 (package
10453 (name "python-pydantic-extra-types")
10454 (version "2.10.6")
10455 (source
10456 (origin
10457 (method git-fetch)
10458 (uri (git-reference
10459 (url "https://github.com/pydantic/pydantic-extra-types")
10460 (commit (string-append "v" version))))
10461 (file-name (git-file-name name version))
10462 (sha256
10463 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
10464 (build-system pyproject-build-system)
10465 (arguments
10466 (list
10467 ;; tests: 13079 passed, 1 deselected
10468 #:test-flags
10469 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
10470 #~(list "--ignore=tests/test_s3.py"
10471 "--deselect=tests/test_coordinate.py::test_json_schema"
10472 ;; XXX: The most of the tests fail, pendulum is optional package
10473 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
10474 ;; requires Rust.
10475 "--ignore=tests/test_pendulum_dt.py"
10476 "--ignore=tests/test_json_schema.py")
10477 #:phases
10478 #~(modify-phases %standard-phases
10479 (add-before 'check 'pre-check
10480 (lambda* (#:key inputs #:allow-other-keys)
10481 (setenv "TZ" "UTC")
10482 (setenv "TZDIR" (search-input-directory inputs
10483 "share/zoneinfo")))))))
10484 (native-inputs
10485 (list python-pytest
10486 python-hatchling
10487 tzdata-for-tests))
10488 (propagated-inputs
10489 (list python-pydantic
10490 python-typing-extensions
10491 ;; [optional]
10492 python-cron-converter
10493 ;; python-pendulum
10494 python-phonenumbers
10495 python-pycountry
10496 python-pymongo
10497 python-pytz
10498 python-semver
10499 python-tzdata
10500 python-ulid))
10501 (home-page "https://github.com/pydantic/pydantic-extra-types")
10502 (synopsis "Extra Pydantic types")
10503 (description "This package provides sxtra types for Pydantic.")
10504 (license license:expat)))
10505
10506(define-public python-pydantic-settings
10507 (package
10508 (name "python-pydantic-settings")
10509 (version "2.12.0")
10510 (source
10511 (origin
10512 (method url-fetch)
10513 (uri (pypi-uri "pydantic_settings" version))
10514 (sha256
10515 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
10516 (build-system pyproject-build-system)
10517 (arguments
10518 (list
10519 ;; tests: 399 passed, 27 skipped
10520 #:test-flags
10521 ;; XXX: Ignore tests requiring python-ruff.
10522 #~(list "--ignore=tests/test_docs.py")
10523 #:phases
10524 #~(modify-phases %standard-phases
10525 (add-before 'check 'set-home
10526 (lambda _
10527 ;; FileNotFoundError: [Errno 2] No such file or directory:
10528 ;; '/homeless-shelter/
10529 (setenv "HOME" "/tmp"))))))
10530 (native-inputs
10531 (list python-hatchling
10532 python-pytest
10533 python-pytest-examples
10534 python-pytest-mock))
10535 (propagated-inputs
10536 (list python-dotenv
10537 python-pydantic
10538 python-typing-inspection
10539 ;; [optional]
10540 python-pyyaml
10541 python-tomli))
10542 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
10543 (synopsis "Settings management using Pydantic")
10544 (description
10545 "Pydantic Settings provides optional Pydantic features for loading a
10546settings or config class from environment variables or secrets files.")
10547 (license license:expat)))
10548
10549(define-public python-pydoc-markdown
10550 (package
10551 (name "python-pydoc-markdown")
10552 (version "4.8.2")
10553 (source
10554 (origin
10555 (method url-fetch)
10556 (uri (pypi-uri "pydoc_markdown" version))
10557 (sha256
10558 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
10559 (build-system pyproject-build-system)
10560 (arguments
10561 (list
10562 #:tests? #false ;there are none
10563 #:phases
10564 '(modify-phases %standard-phases
10565 ;; This is probably not a good idea, but it wants a rather old
10566 ;; version of docstring-parser.
10567 (add-after 'unpack 'relax-requirements
10568 (lambda _
10569 (substitute* "pyproject.toml"
10570 (("docstring-parser = .*")
10571 "docstring-parser = \"^0\"\n")))))))
10572 (propagated-inputs (list python-click
10573 python-databind-core
10574 python-databind-json
10575 python-docspec
10576 python-docspec-python
10577 python-docstring-parser
10578 python-jinja2
10579 python-nr-util
10580 python-pyyaml
10581 python-requests
10582 python-tomli
10583 python-tomli-w
10584 python-watchdog
10585 python-yapf))
10586 (native-inputs (list python-poetry-core))
10587 (home-page "https://pypi.org/project/pydoc-markdown/")
10588 (synopsis "Create Python API documentation in Markdown format")
10589 (description "Pydoc-Markdown is a tool to create Python API documentation
10590in Markdown format. Instead of executing your Python code like so many other
10591documentation tools, it parses it using docspec instead.")
10592 (license license:expat)))
10593
10594;; XXX: The project is deprecated upstream, still in use by some packages,
10595;; consider to remove when nothing depends on it.
10596(define-public python-pydocstyle
10597 (package
10598 (name "python-pydocstyle")
10599 (version "6.3.0")
10600 (source
10601 (origin
10602 (method git-fetch) ;no tests in PyPI archive
10603 (uri (git-reference
10604 (url "https://github.com/PyCQA/pydocstyle")
10605 (commit version)))
10606 (file-name (git-file-name name version))
10607 (sha256
10608 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
10609 (patches (search-patches
10610 "python-pydocstyle-add-support-for-pep701.patch"))))
10611 (build-system pyproject-build-system)
10612 (arguments
10613 (list
10614 ;; It tries to install with pip.
10615 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
10616 #:phases
10617 #~(modify-phases %standard-phases
10618 (add-after 'unpack 'set-version
10619 (lambda _
10620 (substitute* "pyproject.toml"
10621 (("0.0.0-dev") #$version)))))))
10622 (native-inputs
10623 (list python-poetry-core
10624 python-pytest
10625 python-tomli))
10626 (propagated-inputs
10627 (list python-six
10628 python-snowballstemmer))
10629 (home-page "https://github.com/PyCQA/pydocstyle/")
10630 (synopsis "Python docstring style checker")
10631 (description
10632 "This package provides a style checker for the Python Language
10633Server (PLS).")
10634 (license license:expat)))
10635
10636(define-public python-lsp-server
10637 (package
10638 (name "python-lsp-server")
10639 (version "1.13.0")
10640 (source
10641 (origin
10642 (method url-fetch)
10643 (uri (pypi-uri "python_lsp_server" version))
10644 (sha256
10645 (base32
10646 "0s8dipxkdshg27a7a2nnkgg3kmksvbkfa7g39n310k6g7sv2d3rp"))))
10647 (build-system pyproject-build-system)
10648 (arguments
10649 (list
10650 #:test-flags
10651 '(list "-c" "/dev/null" ;avoid coverage
10652 "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
10653 "-k"
10654 (string-append
10655 "not test_concurrent_ws_requests " ; flaky
10656 "and not test_pyqt_completion " ; avoid pyqt5
10657 "and not test_pandas_completion")) ; avoid pandas
10658 #:phases
10659 '(modify-phases %standard-phases
10660 (add-before 'check 'set-HOME
10661 (lambda _ (setenv "HOME" "/tmp"))))))
10662 (propagated-inputs
10663 (list python-black
10664 python-docstring-to-markdown
10665 python-importlib-metadata
10666 python-jedi
10667 python-lsp-jsonrpc
10668 python-pluggy
10669 python-pycodestyle
10670 python-pydocstyle
10671 python-ujson
10672 python-whatthepatch
10673 python-yapf))
10674 (native-inputs
10675 (list python-flake8
10676 python-flaky
10677 python-matplotlib
10678 python-pylint
10679 python-pytest
10680 python-rope
10681 python-setuptools
10682 python-setuptools-scm
10683 python-websockets
10684 python-wheel))
10685 (home-page "https://github.com/python-lsp/python-lsp-server")
10686 (synopsis "Python implementation of the Language Server Protocol")
10687 (description
10688 "The Python Language Server @command{pylsp} is an implementation of the
10689Python 3 language specification for the Language Server Protocol (LSP).
10690This tool is used in text editing environments to provide a complete
10691and integrated feature-set for programming Python effectively.")
10692 (license license:expat)))
10693
10694(define-deprecated-package python-language-server
10695 python-lsp-server)
10696
10697(define-public python-black
10698 (package
10699 (name "python-black")
10700 (version "25.1.0")
10701 (source
10702 (origin
10703 (method url-fetch)
10704 (uri (pypi-uri "black" version))
10705 (sha256
10706 (base32
10707 "0ri6xhcrm39c7q5si4wvx1fkq98mvbl4larmj4rxfai2s5f6sj9k"))))
10708 (build-system pyproject-build-system)
10709 (arguments
10710 (list
10711 #:test-flags
10712 ;; On the build farm we run out of resources if we let the build system
10713 ;; autodetect the number of parallel processes.
10714 '(list "--numprocesses" (number->string (min (parallel-job-count) 8)))
10715 #:phases
10716 '(modify-phases %standard-phases
10717 (add-after 'patch-source-shebangs 'use-absolute-file-names
10718 (lambda* (#:key inputs #:allow-other-keys)
10719 (substitute* (find-files "tests" "\\.py$")
10720 (("#!/usr/bin/env python3")
10721 (string-append
10722 "#!" (search-input-file inputs "/bin/python3")))))))))
10723 (propagated-inputs
10724 (list python-aiohttp
10725 python-click
10726 python-mypy-extensions
10727 python-packaging
10728 python-pathspec
10729 python-platformdirs))
10730 (native-inputs
10731 (list python-pytest
10732 python-pytest-xdist
10733 python-hatch-fancy-pypi-readme
10734 python-hatch-vcs
10735 python-hatchling))
10736 (home-page "https://github.com/psf/black")
10737 (synopsis "The uncompromising code formatter")
10738 (description "Black is the uncompromising Python code formatter.")
10739 (license license:expat)))
10740
10741(define-public python-black-macchiato
10742 (package
10743 (name "python-black-macchiato")
10744 (version "1.3.0")
10745 (source
10746 (origin
10747 (method git-fetch)
10748 (uri (git-reference
10749 (url "https://github.com/wbolster/black-macchiato")
10750 (commit version)))
10751 (file-name (git-file-name name version))
10752 (sha256
10753 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
10754 (build-system pyproject-build-system)
10755 (arguments
10756 (list
10757 #:phases
10758 #~(modify-phases %standard-phases
10759 (add-after 'unpack 'ignore-failing-tests
10760 (lambda _
10761 (substitute* "test_macchiato.py"
10762 (("\\(.*\\n'\\)," all)
10763 (string-append "# " all))))))))
10764 (native-inputs (list python-pytest python-setuptools))
10765 (propagated-inputs (list python-black))
10766 (home-page "https://github.com/wbolster/black-macchiato")
10767 (synopsis "Partial @code{python-black} formatting")
10768 (description
10769 "This package is built on top the @code{python-black} code formatter to
10770enable formatting of partial files.")
10771 (license license:bsd-3)))
10772
10773(define-public python-blinker
10774 (package
10775 (name "python-blinker")
10776 (version "1.9.0")
10777 (source
10778 (origin
10779 (method url-fetch)
10780 (uri (pypi-uri "blinker" version))
10781 (sha256
10782 (base32
10783 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
10784 (build-system pyproject-build-system)
10785 (native-inputs
10786 (list python-flit-core
10787 python-pytest
10788 python-pytest-asyncio))
10789 (home-page "https://pythonhosted.org/blinker/")
10790 (synopsis "Fast, simple object-to-object and broadcast signaling")
10791 (description
10792 "Blinker provides a fast dispatching system that allows any number of
10793interested parties to subscribe to events, or \"signals\".")
10794 (license license:expat)))
10795
10796(define-public pelican
10797 (package
10798 (name "pelican")
10799 (version "4.11.0")
10800 (source
10801 (origin
10802 (method url-fetch)
10803 (uri (pypi-uri "pelican" version))
10804 (sha256
10805 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
10806 (build-system pyproject-build-system)
10807 (arguments
10808 (list
10809 #:test-flags #~(list "-k" (string-append
10810 ;; These tests failed with AssertionError.
10811 "not test_typogrify_ignore_filters"
10812 " and not test_typogrify_ignore_tags"
10813 " and not test_error_on_warning"))))
10814 (native-inputs
10815 (list python-anyio
10816 python-beautifulsoup4
10817 python-lxml
10818 python-pdm-backend
10819 python-pytest
10820 python-smartypants
10821 python-typogrify))
10822 (inputs
10823 (list python-blinker
10824 python-dateutil
10825 ;; Ignoring `guix lint` warning as python-docutils is used to support
10826 ;; reStructuredText processing at runtime.
10827 python-docutils
10828 python-feedgenerator
10829 python-jinja2
10830 python-ordered-set
10831 python-pygments
10832 python-rich
10833 python-tzdata
10834 python-unidecode
10835 python-watchfiles))
10836 (home-page "https://blog.getpelican.com/")
10837 (synopsis "Python-based static site publishing system")
10838 (description
10839 "Pelican is a tool to generate a static blog from reStructuredText,
10840Markdown input files, and more. Pelican uses Jinja2 for templating
10841and is very extensible.")
10842 (license license:agpl3+)))
10843
10844(define-public python-cykhash
10845 (package
10846 (name "python-cykhash")
10847 (version "2.0.1")
10848 (source
10849 (origin
10850 (method url-fetch)
10851 (uri (pypi-uri "cykhash" version))
10852 (sha256
10853 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
10854 (build-system pyproject-build-system)
10855 (arguments
10856 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
10857 (native-inputs
10858 (list python-cython
10859 python-setuptools))
10860 (home-page "https://github.com/realead/cykhash")
10861 (synopsis "Khash-sets and maps")
10862 (description
10863 "This package is a Cython wrapper for khash-sets/maps. It brings
10864functionality of
10865@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
10866Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
10867world is lacking the concept of a (hash-)set. This shortcoming is fixed and
10868efficient (memory- and speedwise compared to pandas) @code{unique} and
10869@code{isin} are implemented. Python-set/dict have a big memory-footprint.
10870For some datatypes the overhead can be reduced by using khash by factor 4-8.")
10871 (license license:expat)))
10872
10873(define-public python-cython
10874 ;; TODO: Move to python-build.
10875 (package
10876 (name "python-cython")
10877 (version "3.1.7")
10878 (source
10879 (origin
10880 (method url-fetch)
10881 (uri (pypi-uri "cython" version))
10882 (sha256
10883 (base32 "0gaslzb3virk4v6yh5a7dp6ka1lm267v994g8r25lck1702vjy3g"))))
10884 (build-system pyproject-build-system)
10885 (arguments
10886 (list
10887 #:test-backend #~'custom
10888 #:test-flags
10889 #~(list "runtests.py"
10890 "-vv"
10891 "-j" (number->string (parallel-job-count))
10892 "-x" (string-join
10893 (list "annotate_html"
10894 "Debugger"
10895 ;; It introduces cycle.
10896 "numpy_test"
10897 ;; It fails with AssertionError: Failed doctest test
10898 ;; for complex_numbers_cpp.double_abs.
10899 "complex_numbers_cpp"
10900 ;; This test fails when running on 24 cores.
10901 "cpp_stl_conversion"
10902 #$@(if (not (target-64bit?))
10903 ;; XXX: On 32-bit architectures, running the
10904 ;; parallel tests fails on many-core systems.
10905 ;; See: <https://github.com/cython/cython/issues/2807>.
10906 '("run.parallel"
10907 ;; Test cpp_stl_any.cast_test fails.
10908 ;; See: <https://github.com/cython/cython/issues/5928>.
10909 "cpp_stl_any")
10910 '())
10911 #$@(if (system-hurd?)
10912 '("test_class_ref"
10913 "test_compiler_directives"
10914 "test_lang_version")
10915 '()))
10916 "|"))
10917 #:phases
10918 #~(modify-phases %standard-phases
10919 (add-before 'check 'pre-check
10920 (lambda* (#:key tests? test-flags #:allow-other-keys)
10921 ;; Disable compiler optimizations to greatly reduce the running
10922 ;; time of the test suite.
10923 (setenv "CFLAGS" "-O0")
10924 ;; Some tests require access to "$HOME/.cython".
10925 (setenv "HOME" "/tmp"))))))
10926 (native-inputs
10927 (list libxcrypt
10928 python-setuptools
10929 python-wheel))
10930 ;; we need the full python package and not just the python-wrapper
10931 ;; because we need libpython3.3m.so
10932 (inputs
10933 (list python))
10934 (home-page "https://cython.org/")
10935 (synopsis "C extensions for Python")
10936 (description "Cython is an optimising static compiler for both the Python
10937programming language and the extended Cython programming language. It makes
10938writing C extensions for Python as easy as Python itself.")
10939 (license license:asl2.0)))
10940
10941(define-public python-cython-0
10942 (package
10943 (inherit python-cython)
10944 ;; It's the latest version of 0.29. See
10945 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
10946 (version "0.29.37")
10947 (source
10948 (origin
10949 (method url-fetch)
10950 (uri (pypi-uri "Cython" version))
10951 (sha256
10952 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
10953 (arguments
10954 (list
10955 #:test-backend #~'custom
10956 #:test-flags
10957 #~(list "runtests.py"
10958 "-vv"
10959 "-j" (number->string (parallel-job-count))
10960 ;; XXX: On 32-bit architectures, running the parallel tests
10961 ;; fails on many-core systems, see
10962 ;; <https://github.com/cython/cython/issues/2807>.
10963 #$@(if (not (target-64bit?))
10964 #~("-x" "run.parallel")
10965 #~())
10966 #$@(if (system-hurd?)
10967 #~("-x" "test_class_ref"
10968 "-x" "test_compiler_directives"
10969 "-x" "test_lang_version")
10970 #~())
10971 ;; This test fails when running on 24 cores.
10972 "-x" "cpp_stl_conversion")
10973 #:phases
10974 #~(modify-phases %standard-phases
10975 (add-before 'check 'pre-check
10976 ;; some tests require access to "$HOME/.cython"
10977 (lambda _
10978 (setenv "HOME" "/tmp")
10979 ;; Disable compiler optimizations to greatly reduce the running
10980 ;; time of the test suite.
10981 (setenv "CFLAGS" "-O0"))))))))
10982
10983(define-public python-cython-next
10984 (package
10985 (inherit python-cython)
10986 (version "3.2.2")
10987 (source
10988 (origin
10989 (method url-fetch)
10990 (uri (pypi-uri "cython" version))
10991 (sha256
10992 (base32 "0d0n0yyicr7icd4f5kn1wwbjqyad6j4m640xlqlk3ixchgad7bf3"))))))
10993
10994;; It may be removed after 2026-01-24.
10995(define-deprecated/public-alias python-cython-3 python-cython)
10996
10997;; NOTE: when upgrading numpy please make sure that python-numba,
10998;; python-pandas and python-scipy still build, as these three packages are
10999;; often used together.
11000(define-public python-numpy
11001 (package
11002 (name "python-numpy")
11003 (version "2.3.1")
11004 (source
11005 (origin
11006 (method url-fetch)
11007 (uri (string-append
11008 "https://github.com/numpy/numpy/releases/download/v"
11009 version "/numpy-" version ".tar.gz"))
11010 (sha256
11011 (base32 "0aqx8hsw54wfp7iv0h0ljlpsygvmrmi3rjic6rsa6v92lhhaxj8y"))))
11012 (build-system pyproject-build-system)
11013 (arguments
11014 (list
11015 #:modules '((guix build utils)
11016 (guix build pyproject-build-system)
11017 (ice-9 format))
11018 #:test-flags
11019 #~(list "-m" "not slow"
11020 "--numprocesses" (number->string (min 8 (parallel-job-count)))
11021 ;; See: <https://github.com/numpy/numpy/issues/27531>,
11022 ;; <https://github.com/numpy/numpy/issues/17685>,
11023 ;; <https://github.com/numpy/numpy/issues/17635>.
11024 "-k" "not test_api_importable")
11025 #:phases
11026 #~(modify-phases %standard-phases
11027 (add-after 'unpack 'fix-executable-paths
11028 (lambda _
11029 (substitute* "numpy/distutils/exec_command.py"
11030 (("'/bin/sh'")
11031 (format #f "~s" (which "bash"))))
11032 (substitute* "numpy/meson.build"
11033 ;; Relay on python from the PATH instead of full reference
11034 ;; stored in built wheel.
11035 (("'py.full_path\\(\\)'") "'python'"))))
11036 ;; This isn't architecture specific.
11037 ;; TODO: Remove this conditional and apply for all builds.
11038 #$@(if (target-ppc64le?)
11039 #~((add-after 'unpack 'patch-bin-true
11040 (lambda* (#:key inputs #:allow-other-keys)
11041 (substitute* "numpy/_core/tests/test_cpu_features.py"
11042 (("/bin/true")
11043 (search-input-file inputs "bin/true"))))))
11044 #~())
11045 (add-before 'build 'parallelize-build
11046 (lambda _
11047 (setenv "OMP_NUM_THREAD"
11048 (number->string (parallel-job-count)))
11049 (setenv "NPY_NUM_BUILD_JOBS"
11050 (number->string (parallel-job-count)))))
11051 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11052 ;; when the gfortran header is used. Remove gfortran from
11053 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11054 ;; <https://issues.guix.gnu.org/73439#45>.
11055 (add-after 'set-paths 'hide-gfortran
11056 (lambda* (#:key inputs #:allow-other-keys)
11057 (let ((gfortran (assoc-ref inputs "gfortran")))
11058 (setenv "CPLUS_INCLUDE_PATH"
11059 (string-join
11060 (delete (string-append gfortran "/include/c++")
11061 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11062 ":")))))
11063 (add-before 'build 'configure-blas
11064 (lambda* (#:key inputs #:allow-other-keys)
11065 (call-with-output-file "site.cfg"
11066 (lambda (port)
11067 (format port
11068 "[openblas]
11069libraries = openblas
11070library_dirs = ~a/lib
11071include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
11072 (replace 'check
11073 (lambda* (#:key tests? test-flags #:allow-other-keys)
11074 (when tests?
11075 (with-directory-excursion #$output
11076 (apply invoke "pytest" test-flags))))))))
11077 (native-inputs
11078 (list gfortran
11079 meson-python
11080 ninja
11081 pkg-config
11082 python-hypothesis
11083 python-mypy
11084 python-pytest
11085 python-pytest-xdist
11086 python-setuptools
11087 python-setuptools
11088 python-typing-extensions
11089 python-wheel))
11090 (home-page "https://numpy.org")
11091 (synopsis "Fundamental package for scientific computing with Python")
11092 (description "NumPy is the fundamental package for scientific computing
11093with Python. It contains among other things: a powerful N-dimensional array
11094object, sophisticated (broadcasting) functions, tools for integrating C/C++
11095and Fortran code, useful linear algebra, Fourier transform, and random number
11096capabilities.")
11097 (properties
11098 '((upstream-name . "numpy")))
11099 (license license:bsd-3)))
11100
11101(define-public python-numpy-1
11102 (package
11103 (inherit python-numpy)
11104 (name "python-numpy")
11105 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
11106 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
11107 ;; in upstream Meson.
11108 ;;
11109 ;; See:
11110 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
11111 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
11112 ;; - file <doc/source/building/understanding_meson.rst>
11113 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
11114 (source
11115 (origin
11116 (method url-fetch)
11117 (uri (string-append
11118 "https://github.com/numpy/numpy/releases/download/v"
11119 version "/numpy-" version ".tar.gz"))
11120 (sha256
11121 (base32
11122 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
11123 (patches (search-patches "python-numpy-gcc-14.patch"))))
11124 (arguments
11125 (list
11126 #:modules '((guix build utils)
11127 (guix build pyproject-build-system)
11128 (ice-9 format))
11129 #:phases
11130 #~(modify-phases %standard-phases
11131 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11132 ;; when the gfortran header is used. Remove gfortran from
11133 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11134 ;; <https://issues.guix.gnu.org/73439#45>.
11135 (add-after 'set-paths 'hide-gfortran
11136 (lambda* (#:key inputs #:allow-other-keys)
11137 (let ((gfortran (assoc-ref inputs "gfortran")))
11138 (setenv "CPLUS_INCLUDE_PATH"
11139 (string-join
11140 (delete (string-append gfortran "/include/c++")
11141 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11142 ":")))))
11143 (add-before 'build 'relax-gcc-14-strictness
11144 (lambda _
11145 (setenv "CFLAGS"
11146 "-g -O2 -Wno-error=implicit-function-declaration")))
11147 (add-before 'build 'parallelize-build
11148 (lambda _
11149 (setenv "NPY_NUM_BUILD_JOBS"
11150 (number->string (parallel-job-count)))))
11151 (add-before 'build 'configure-blas
11152 (lambda* (#:key inputs #:allow-other-keys)
11153 (call-with-output-file "site.cfg"
11154 (lambda (port)
11155 (format port
11156 "\
11157[openblas]
11158libraries = openblas
11159library_dirs = ~a/lib
11160include_dirs = ~:*~a/include~%"
11161 (dirname (dirname
11162 (search-input-file
11163 inputs "include/openblas_config.h"))))))))
11164 (add-before 'build 'fix-executable-paths
11165 (lambda* (#:key inputs #:allow-other-keys)
11166 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
11167 ;; instead of /bin/sh.
11168 (substitute* "numpy/distutils/exec_command.py"
11169 (("'/bin/sh'")
11170 (format #f "~s" (search-input-file inputs "bin/bash"))))
11171 ;; Don't try to call '/bin/true' specifically.
11172 (substitute* "numpy/core/tests/test_cpu_features.py"
11173 (("/bin/true") (search-input-file inputs "bin/true")))))
11174 (replace 'check
11175 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
11176 (when tests?
11177 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
11178 "-j" (number->string (parallel-job-count))
11179 ;; Contrary to scipy, the runtests.py script of numpy
11180 ;; does *not* automatically provide -n when -j is used
11181 ;; (see: https://github.com/numpy/numpy/issues/21359).
11182 "--" "-n" (number->string (parallel-job-count))
11183 ;; Disable Pytest Warnings, they are resolved in the
11184 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
11185 ;; applied to fixtures have no effect,
11186 ;; DeprecationWarning.
11187 "-p" "no:warnings"
11188 "-k" (string-append
11189 ;; These tests may fail on 32-bit systems (see:
11190 ;; https://github.com/numpy/numpy/issues/18387).
11191 "not test_float_remainder_overflow "
11192 "and not test_pareto "
11193 ;; The 'test_rint_big_int' test fails on older
11194 ;; x86_64 CPUs such as the Core 2 Duo (see:
11195 ;; https://github.com/numpy/numpy/issues/22170).
11196 "and not test_rint_big_int "
11197 ;; They fail to detect compiler.
11198 "and not test_compile1 "
11199 "and not test_compile2 "
11200 ;; Due to disabled warnings
11201 "and not test_getattr_warning "
11202 "and not test_integer_signs "
11203 "and not test_implicit_cast_float_to_int_fails "
11204 "and not test_integer_signs "
11205 ;; The huge_array test is too large for 32-bit (see:
11206 ;; https://bugs.gentoo.org/843599 and
11207 ;; https://bugs.gentoo.org/846548).
11208 ;; TestKind.test_all is a Fortran type failure
11209 ;; that may be toolchain or environment related.
11210 #$@(if (or (target-x86?) (target-arm32?))
11211 `(" and not test_identityless_reduction_huge_array"
11212 " and not (TestKind and test_all)")
11213 '())
11214 ;; This test fails with a Fortran failure (16
11215 ;; expected but got -1), due to the fact that it
11216 ;; requires a 64-bit system.
11217 #$@(if (or (target-x86-32?) (target-arm32?))
11218 `(" and not test_int")
11219 '())
11220 ;; These tests fail when building from aarch64-linux.
11221 #$@(if (target-arm32?)
11222 `(" and not test_features"
11223 " and not test_unary_spurious_fpexception")
11224 '())
11225 ;; These tests seem to fail on machines without
11226 ;; an FPU is still under investigation upstream.
11227 ;; https://github.com/numpy/numpy/issues/20635
11228 #$@(if (target-riscv64?)
11229 `(" and not test_fp_noncontiguous")
11230 '())
11231 ;; They also fail with gcc-14
11232 " and not test_float"
11233 " and not test_fpclass"
11234
11235 ;; These tests fail with gcc-14
11236 " and not test_context_locality"
11237 " and not test_cosh"
11238 " and not test_default_policy_singleton"
11239 " and not test_exp_exceptions"
11240 " and not test_half_fpe"
11241 " and not test_owner_is_base"
11242 " and not test_policy_propagation"
11243 " and not test_set_policy"
11244 " and not test_sinh"
11245 " and not test_square_values"
11246 " and not test_sum"
11247 " and not test_switch_owner"
11248 " and not test_thread_locality"))))))))
11249 (native-inputs
11250 (list meson-python
11251 pkg-config
11252 python-cython
11253 python-hypothesis
11254 python-mypy
11255 python-pytest
11256 python-pytest-xdist
11257 python-setuptools-67 ;see: <https://github.com/numpy/numpy/issues/27531>
11258 python-typing-extensions
11259 python-wheel-0.40
11260 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
11261 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
11262 ;; <https://github.com/numpy/numpy/issues/24318>.
11263 gcc ;fevn.h c[++] include must precede fortran's
11264 gfortran))
11265 (inputs (list bash openblas))))
11266
11267(define-deprecated/public-alias python-numpy-2 python-numpy)
11268
11269(define-public python-numpysane
11270 (package
11271 (name "python-numpysane")
11272 (version "0.42")
11273 (source
11274 (origin
11275 (method git-fetch)
11276 (uri (git-reference
11277 (url "https://github.com/dkogan/numpysane.git")
11278 (commit (string-append "v" version))))
11279 (file-name (git-file-name name version))
11280 (sha256
11281 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
11282 (build-system pyproject-build-system)
11283 (arguments
11284 (list
11285 #:phases
11286 #~(modify-phases %standard-phases
11287 (add-after 'unpack 'patch
11288 (lambda* (#:key inputs outputs #:allow-other-keys)
11289 (let* ((numpy (assoc-ref inputs "python-numpy"))
11290 (site (site-packages inputs `(("out" . ,numpy)))))
11291 (substitute* "Makefile.common.header"
11292 ;; numpy 2.0 has this--but we don't use numpy 2.0.
11293 (("pkg-config --cflags-only-I numpy")
11294 (format #f "echo -I~a/numpy/core/include" site))))))
11295 (replace 'check
11296 (lambda _
11297 (setenv "CC"
11298 #$(cc-for-target))
11299 (invoke "make" "check"))))))
11300 (propagated-inputs (list python-numpy-1))
11301 (native-inputs (list perl pkg-config python-setuptools))
11302 (home-page "https://github.com/dkogan/numpysane")
11303 (synopsis "More-reasonable core functionality for numpy")
11304 (description
11305 "This package provides more-reasonable core functionality for numpy.
11306
11307A lot of numpysane functionality is inspired by PDL (Perl Data Language).
11308
11309numpysane has:
11310@itemize
11311@item easier broadcasting
11312@item nicer array manipulation
11313@item array concatenation
11314@item manipulation of dimensions
11315@item broadcast-aware inner product
11316@item broadcast-aware outer product
11317@item broadcast-aware 2-norm
11318@item broadcast-aware matrix multiplication
11319@end itemize
11320")
11321 (license license:lgpl2.0+)))
11322
11323(define-public python-numpy-documentation
11324 (package
11325 (inherit python-numpy)
11326 (name "python-numpy-documentation")
11327 (arguments
11328 (list
11329 #:tests? #f ;we're only generating the documentation
11330 #:phases
11331 #~(modify-phases %standard-phases
11332 (add-after 'unpack 'avoid-external-deps
11333 (lambda _
11334 ;; XXX: Avoid theme-switcher to avoid sphinx error
11335 ;; TemplateNotFound('theme-switcher.html')
11336 ;; XXX: Avoid version-switcher because it depends on the value
11337 ;; of external https://numpy.org/doc/_static/versions.json
11338 (substitute* "doc/source/conf.py"
11339 (("\
11340\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
11341 "\"navbar_end\": ["))))
11342 (add-before 'build 'add-gnu-freefont-to-texmf
11343 (lambda _
11344 ;; XXX: The Sphinx-generated tex output specifies the GNU
11345 ;; FreeFont font to be searched via its extension, which uses
11346 ;; kpathsea instead of fontconfig and fail (see:
11347 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
11348 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
11349 ;; GUIX_TEXMF.
11350 (mkdir-p "texmf-dist/fonts/opentype/public")
11351 (symlink (string-append
11352 #$(this-package-native-input "font-gnu-freefont")
11353 "/share/fonts/opentype")
11354 (string-append
11355 (getcwd) "/"
11356 "texmf-dist/fonts/opentype/public/gnu-freefont"))
11357 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
11358 (getcwd) "/texmf-dist"))))
11359 (replace 'build
11360 (lambda _
11361 (chdir "doc")
11362 (let ((sphinxopts (string-append
11363 "SPHINXOPTS=-j"
11364 (number->string (parallel-job-count)))))
11365 ;; Do not treat warnings as errors.
11366 (substitute* "Makefile"
11367 ((" -WT ") " -T "))
11368 (setenv "HOME" "/tmp")
11369 ;; Build the PDF documentation.
11370 (invoke "make" "latex-build" sphinxopts)
11371 ;; FIXME: PDF build fails
11372 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
11373 ;; Build the HTML documentation
11374 (invoke "make" "html" sphinxopts)
11375 ;; Build the Info documentation. The issues worked around
11376 ;; below can be tracked at
11377 ;; https://github.com/numpy/numpy/issues/12278.
11378 (substitute* "source/conf.py"
11379 ;; The root document should be "index", not "contents".
11380 (("\"contents\"") "'index'")
11381 ;; Disable Sphinx extensions that produce broken Texinfo.
11382 ((".*'numpydoc'.*") "")
11383 ((".*'sphinx.ext.autodoc'.*") "")
11384 ((".*'sphinx.ext.autosummary'.*") ""))
11385 (invoke "make" "info" sphinxopts))))
11386 (replace 'install
11387 (lambda _
11388 (let* ((data (string-append #$output "/share"))
11389 (doc (string-append data "/doc/numpy"))
11390 (html (string-append doc "/html"))
11391 (info (string-append data "/info")))
11392 ;; Install the HTML documentation.
11393 (mkdir-p html)
11394 (copy-recursively "build/html" html)
11395 ;; Install the PDF reference and user manuals.
11396 ;; FIXME:
11397 ;; (install-file "build/latex/numpy-ref.pdf" doc)
11398 ;; (install-file "build/latex/numpy-user.pdf" doc)
11399 ;; Install the info manual.
11400 (install-file "build/texinfo/numpy.info" info)
11401 (symlink (string-append html "/_images")
11402 (string-append info "/numpy-figures"))))))))
11403 (native-inputs
11404 (list font-gnu-freefont
11405 perl
11406 python-breathe
11407 python-ipython
11408 python-matplotlib
11409 python-numpy
11410 python-numpydoc
11411 python-pandas
11412 python-pydata-sphinx-theme
11413 python-scipy ;used by matplotlib
11414 python-sphinx
11415 python-sphinx-design
11416 texinfo
11417 (texlive-local-tree
11418 (list texlive-cbfonts
11419 texlive-cm-super
11420 texlive-cmap
11421 texlive-expdlist
11422 texlive-fandol
11423 texlive-greek-fontenc
11424 texlive-latexmk
11425 texlive-polyglossia
11426 texlive-xetex
11427 texlive-xindy))))
11428 (inputs '())
11429 (propagated-inputs '())
11430 (synopsis "Documentation for the @code{python-numpy} package")
11431 (description "This package provides the complete NumPy documentation in
11432the Texinfo, and HTML formats.")))
11433
11434(define-public python-numpy-stl
11435 (package
11436 (name "python-numpy-stl")
11437 (version "3.2.0")
11438 (source
11439 (origin
11440 (method url-fetch)
11441 (uri (pypi-uri "numpy_stl" version))
11442 (sha256
11443 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
11444 (build-system pyproject-build-system)
11445 (native-inputs
11446 (list python-cython
11447 python-pytest
11448 python-setuptools
11449 python-wheel))
11450 (propagated-inputs
11451 (list python-numpy
11452 python-utils))
11453 (home-page "https://github.com/WoLpH/numpy-stl/")
11454 (synopsis "Read, write and modify binary/ASCII STL files library")
11455 (description
11456 "Library to make reading, writing and modifying both binary and ascii STL
11457files, file format native to the stereolithography CAD software created by 3D
11458Systems, easy.")
11459 (license license:bsd-3)))
11460
11461(define-public python-npx
11462 (package
11463 (name "python-npx")
11464 (version "0.1.6")
11465 (source
11466 (origin
11467 (method git-fetch) ; no source archive in PyPI
11468 (uri (git-reference
11469 (url "https://github.com/sigma-py/npx")
11470 (commit (string-append "v" version))))
11471 (file-name (git-file-name name version))
11472 (sha256
11473 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
11474 (build-system pyproject-build-system)
11475 (native-inputs
11476 (list python-networkx
11477 python-pytest
11478 python-setuptools
11479 python-wheel))
11480 (propagated-inputs
11481 (list python-numpy))
11482 (home-page "https://github.com/nschloe/npx")
11483 (synopsis "Extensions for NumPy")
11484 (description "NumPy is a large library used everywhere in scientific
11485computing. That's why breaking backwards-compatibility comes at a
11486significant cost and is almost always avoided, even if the API of some
11487methods is arguably lacking. This package provides drop-in wrappers
11488\"fixing\" those.")
11489 (license license:bsd-3)))
11490
11491(define-public python-munch
11492 (package
11493 (name "python-munch")
11494 (version "4.0.0")
11495 (source
11496 (origin
11497 (method url-fetch)
11498 (uri (pypi-uri "munch" version))
11499 (sha256
11500 (base32
11501 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
11502 (build-system pyproject-build-system)
11503 (native-inputs
11504 (list python-astroid
11505 python-pytest
11506 python-setuptools
11507 python-wheel))
11508 (home-page "https://github.com/Infinidat/munch")
11509 (synopsis "Dot-accessible dictionary")
11510 (description "Munch is a dot-accessible dictionary similar to JavaScript
11511objects.")
11512 (license license:expat)))
11513
11514(define-public python-colormath2
11515 (package
11516 (name "python-colormath2")
11517 (version "3.0.3")
11518 (source
11519 (origin
11520 (method git-fetch)
11521 (uri (git-reference
11522 (url "https://github.com/bkmgit/python-colormath2")
11523 (commit version)))
11524 (file-name (git-file-name name version))
11525 (sha256
11526 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
11527 (build-system pyproject-build-system)
11528 (propagated-inputs (list python-networkx python-numpy))
11529 (native-inputs (list python-nose2 python-setuptools))
11530 (home-page "https://github.com/bkmgit/python-colormath2")
11531 (synopsis "Color math and conversion library")
11532 (description
11533 "This is a Python library for color math and conversions.")
11534 (license license:bsd-3)))
11535
11536(define-public python-spectra
11537 (package
11538 (name "python-spectra")
11539 (version "0.1.0")
11540 (source
11541 (origin
11542 (method url-fetch)
11543 (uri (pypi-uri "spectra" version))
11544 (sha256
11545 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
11546 (build-system pyproject-build-system)
11547 (propagated-inputs
11548 (list python-colormath2))
11549 (native-inputs
11550 (list python-pytest python-setuptools python-wheel))
11551 (home-page "https://github.com/jsvine/spectra")
11552 (synopsis "Color scales and color conversion")
11553 (description
11554 "This package provides a Python library intended to make color math,
11555color scales, and color space conversion easy. It has support for:
11556
11557@enumerate
11558@item Color scales
11559@item Color ranges
11560@item Color blending
11561@item Brightening/darkening colors
11562@item Saturating/desaturating colors
11563@item Conversion to/from multiple color spaces.
11564@end enumerate\n")
11565 (license license:expat)))
11566
11567(define-public python-pyspnego
11568 (package
11569 (name "python-pyspnego")
11570 (version "0.8.0")
11571 (source (origin
11572 (method url-fetch)
11573 (uri (pypi-uri "pyspnego" version))
11574 (sha256
11575 (base32
11576 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
11577 (build-system pyproject-build-system)
11578 (native-inputs
11579 (list python-pytest python-pytest-mock python-setuptools python-wheel))
11580 (propagated-inputs
11581 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
11582 (home-page "https://github.com/jborean93/pyspnego")
11583 (synopsis "Python SPNEGO library")
11584 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
11585Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
11586parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
11587readable format.")
11588 (license license:expat)))
11589
11590(define-public python-pygit2-1.11
11591 (package
11592 (name "python-pygit2")
11593 (version "1.11.1")
11594 (source
11595 (origin
11596 (method url-fetch)
11597 (uri (pypi-uri "pygit2" version))
11598 (sha256
11599 (base32 "1v34xdvh6i5cn5srwicvp0i2kvv8fzsv0v9p72ng081nsczmhgvr"))))
11600 (build-system pyproject-build-system)
11601 (propagated-inputs (list python-cffi libgit2-1.5))
11602 (native-inputs (list python-pytest python-setuptools python-wheel))
11603 (home-page "https://github.com/libgit2/pygit2")
11604 (synopsis "Python bindings for libgit2")
11605 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
11606 ;; GPL2.0 only, with linking exception.
11607 (license license:gpl2)))
11608
11609(define-public python-pygit2
11610 (package/inherit python-pygit2-1.11
11611 (name "python-pygit2")
11612 (version "1.18.2")
11613 (source
11614 (origin
11615 (method url-fetch)
11616 (uri (pypi-uri "pygit2" version))
11617 (sha256
11618 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
11619 (propagated-inputs (list python-cffi libgit2))))
11620
11621(define-public python-patiencediff
11622 (package
11623 (name "python-patiencediff")
11624 (version "0.2.15")
11625 (source
11626 (origin
11627 (method url-fetch)
11628 (uri (pypi-uri "patiencediff" version))
11629 (sha256
11630 (base32
11631 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
11632 (build-system pyproject-build-system)
11633 (arguments
11634 (list
11635 #:phases #~(modify-phases %standard-phases
11636 ;; Fails because bin/patiencediff expects two files to diff
11637 (delete 'sanity-check))))
11638 (native-inputs (list python-pytest python-setuptools python-wheel))
11639 (home-page "https://www.breezy-vcs.org/")
11640 (synopsis "Python implementation of the patiencediff algorithm")
11641 (description
11642 "This package contains a Python implementation of the @code{patiencediff}
11643algorithm. Patiencediff provides a good balance of performance, nice output for
11644humans, and implementation simplicity.")
11645 (license license:gpl2+)))
11646
11647(define-public python-merge3
11648 (package
11649 (name "python-merge3")
11650 (version "0.0.15")
11651 (source
11652 (origin
11653 (method git-fetch)
11654 (uri (git-reference
11655 (url "https://github.com/breezy-team/merge3")
11656 (commit (string-append "v" version))))
11657 (file-name (git-file-name name version))
11658 (sha256
11659 (base32 "0p52fdzra86d03p5gwz7wmb2pgzkv0frgdhhg9wfld8qr0611wp4"))))
11660 (build-system pyproject-build-system)
11661 (arguments (list #:test-backend #~'unittest))
11662 (native-inputs (list python-setuptools))
11663 (home-page "https://github.com/breezy-team/merge3")
11664 (synopsis "Python implementation of 3-way merge")
11665 (description "This Python library implements 3-way merge for text.")
11666 (license license:gpl2+)))
11667
11668(define-public python-fancycompleter
11669 (package
11670 (name "python-fancycompleter")
11671 (version "0.9.1")
11672 (source
11673 (origin
11674 (method git-fetch)
11675 (uri (git-reference
11676 (url "https://github.com/pdbpp/fancycompleter")
11677 (commit version)))
11678 (file-name (git-file-name name version))
11679 (sha256
11680 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
11681 (build-system pyproject-build-system)
11682 (arguments
11683 (list
11684 #:phases
11685 #~(modify-phases %standard-phases
11686 (add-after 'unpack 'fix-setup.py
11687 (lambda _
11688 (substitute* "setup.py"
11689 ((".*setupmeta.*")
11690 "")
11691 (("versioning=.*")
11692 (string-append "version='" #$version "',"))
11693 ((".*pyrepl.*") ; broken on Python 3
11694 "")))))))
11695 (native-inputs (list python-pytest python-setuptools))
11696 (home-page "https://github.com/pdbpp/fancycompleter")
11697 (synopsis "TAB completion library for Python")
11698 (description
11699 "@code{fancycompleter} is a module that adds TAB completion to the
11700interactive prompt. It is an extension of the @code{rlcompleter} module from
11701the standard Python library.")
11702 (license license:bsd-3)))
11703
11704(define-public python-ipdb
11705 (package
11706 (name "python-ipdb")
11707 (version "0.13.13")
11708 (source
11709 (origin
11710 (method git-fetch)
11711 (uri (git-reference
11712 (url "https://github.com/gotcha/ipdb")
11713 (commit version)))
11714 (file-name (git-file-name name version))
11715 (sha256
11716 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
11717 (build-system pyproject-build-system)
11718 (arguments (list #:test-backend #~'unittest))
11719 (native-inputs (list python-setuptools))
11720 (propagated-inputs (list python-ipython python-toml python-decorator))
11721 (home-page "https://github.com/gotcha/ipdb")
11722 (synopsis "IPython-enhanced Python debugger (pdb)")
11723 (description
11724 "@code{ipdb} exports functions to access the IPython debugger, which
11725features tab completion, syntax highlighting, better tracebacks and better
11726introspection than Python's standard @command{pdb} debugger, with which it
11727shares the same interface.")
11728 (license license:bsd-3)))
11729
11730(define-public python-ipfsspec
11731 (package
11732 (name "python-ipfsspec")
11733 (version "0.4.0")
11734 (source
11735 (origin
11736 (method url-fetch)
11737 (uri (pypi-uri "ipfsspec" version))
11738 (sha256
11739 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
11740 (build-system pyproject-build-system)
11741 (arguments
11742 (list
11743 #:test-flags
11744 '(list "-m not local_gw"
11745 ;; Require local gateway
11746 "--ignore=test/test_gateway.py"
11747 ;; Require internet
11748 "--ignore=test/test_async.py"
11749 "--ignore=test/test_ipfs.py")))
11750 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
11751 (native-inputs
11752 (list python-pytest
11753 python-pytest-asyncio
11754 python-setuptools
11755 python-wheel))
11756 (home-page "https://github.com/fsspec/ipfsspec")
11757 (synopsis "Read-only implementation of fsspec for IPFS")
11758 (description "This package provides a read-only implementation of
11759@code{fsspec} for IPFS.")
11760 (license license:expat)))
11761
11762(define-public python-pdftotext
11763 (package
11764 (name "python-pdftotext")
11765 (version "3.0.0")
11766 (source
11767 (origin
11768 (method url-fetch)
11769 (uri (pypi-uri "pdftotext" version))
11770 (sha256
11771 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
11772 (build-system pyproject-build-system)
11773 (native-inputs (list python-pytest python-setuptools python-wheel))
11774 (inputs (list poppler))
11775 (home-page "https://github.com/jalan/pdftotext")
11776 (synopsis "Simple PDF text extraction")
11777 (description "Pdftotext is a Python library of PDF text extraction.")
11778 (license license:expat)))
11779
11780(define-public python-pluginbase
11781 (package
11782 (name "python-pluginbase")
11783 (version "1.0.1")
11784 (source
11785 (origin
11786 (method git-fetch)
11787 (uri (git-reference
11788 (url "https://github.com/mitsuhiko/pluginbase")
11789 (commit (string-append "v" version))))
11790 (file-name (git-file-name name version))
11791 (sha256
11792 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
11793 (build-system pyproject-build-system)
11794 (arguments
11795 (list
11796 #:phases
11797 #~(modify-phases %standard-phases
11798 (replace 'check
11799 (lambda* (#:key tests? #:allow-other-keys)
11800 (when tests?
11801 (invoke "make" "test")))))))
11802 (native-inputs (list python-pytest python-setuptools))
11803 (home-page "https://github.com/mitsuhiko/pluginbase")
11804 (synopsis "Simple but flexible plugin system for Python")
11805 (description
11806 "PluginBase is a library useful in the development of flexible plugin
11807systems in Python.")
11808 (license license:bsd-3)))
11809
11810(define-public python-node-semver
11811 (package
11812 (name "python-node-semver")
11813 (version "0.8.1")
11814 (source
11815 (origin
11816 (method git-fetch)
11817 (uri (git-reference
11818 (url "https://github.com/podhmo/python-node-semver")
11819 (commit version)))
11820 (file-name (git-file-name name version))
11821 (sha256
11822 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
11823 (build-system pyproject-build-system)
11824 (native-inputs (list python-pytest python-setuptools))
11825 (home-page "https://github.com/podhmo/python-node-semver")
11826 (synopsis "Python port of node-semver")
11827 (description
11828 "This module provides a Python version of node-semver, a semantic version
11829parser for Node.js.")
11830 (license license:expat)))
11831
11832(define-public python-norns
11833 (package
11834 (name "python-norns")
11835 (version "0.1.6")
11836 (source
11837 (origin
11838 (method git-fetch)
11839 (uri (git-reference
11840 (url "https://github.com/simonvh/norns")
11841 (commit version)))
11842 (file-name (git-file-name name version))
11843 (sha256
11844 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
11845 (patches
11846 (search-patches "python-norns-nose.patch"))))
11847 (build-system pyproject-build-system)
11848 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
11849 (native-inputs (list python-setuptools))
11850 (home-page "https://github.com/simonvh/norns")
11851 (synopsis "Simple YAML-based config module")
11852 (description "This package provides a simple YAML-based config module.")
11853 (license license:expat)))
11854
11855(define-public python-patch-ng
11856 (package
11857 (name "python-patch-ng")
11858 (version "1.18.1")
11859 (source
11860 (origin
11861 (method git-fetch)
11862 (uri (git-reference
11863 (url "https://github.com/conan-io/python-patch-ng")
11864 (commit version)))
11865 (file-name (git-file-name name version))
11866 (sha256
11867 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
11868 (build-system pyproject-build-system)
11869 (arguments
11870 (list
11871 #:test-backend #~'custom
11872 #:test-flags #~(list "tests/run_tests.py" "-v")))
11873 (native-inputs (list python-pytest python-setuptools))
11874 (home-page "https://github.com/conan-io/python-patch-ng")
11875 (synopsis "Python library to parse and apply unified diffs")
11876 (description
11877 "Patch NG (New Generation) is a command and Python library to parse and
11878apply unified diffs. It has features such as:
11879@itemize
11880@item automatic correction of common patch formatting corruption
11881@item patch format detection (SVN, Hg, Git)
11882@item nice diffstat histogram.
11883@end itemize")
11884 (license license:expat)))
11885
11886(define-public python-numpydoc
11887 (package
11888 (name "python-numpydoc")
11889 (version "1.5.0")
11890 (source
11891 (origin
11892 (method url-fetch)
11893 (uri (pypi-uri "numpydoc" version))
11894 (sha256
11895 (base32
11896 "0k2z3g4s3w39h1nd293542hl9qv55j29gcr3bkia0rr3ldsppnxh"))))
11897 (build-system pyproject-build-system)
11898 (arguments
11899 (list #:test-flags
11900 '(list "numpydoc/tests"
11901 ;; TODO: unclear why these fail.
11902 "-k" "not test_MyClass and not test_my_function")))
11903 (propagated-inputs (list python-jinja2 python-sphinx))
11904 (native-inputs
11905 (list python-matplotlib
11906 python-pytest
11907 python-pytest-cov
11908 python-setuptools
11909 python-wheel))
11910 (home-page "https://pypi.org/project/numpydoc/")
11911 (synopsis "Numpy's Sphinx extensions")
11912 (description "Sphinx extension to support docstrings in Numpy format.")
11913 (license license:bsd-2)))
11914
11915(define-public python-numexpr
11916 (package
11917 (name "python-numexpr")
11918 (version "2.14.1")
11919 (source
11920 (origin
11921 (method url-fetch)
11922 (uri (pypi-uri "numexpr" version))
11923 (sha256
11924 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
11925 (build-system pyproject-build-system)
11926 (arguments
11927 (list
11928 ;; tests: 6039 passed, 8 warnings
11929 #:phases
11930 #~(modify-phases %standard-phases
11931 (replace 'check
11932 (lambda* (#:key tests? test-flags #:allow-other-keys)
11933 (when tests?
11934 (with-directory-excursion #$output
11935 (apply invoke "pytest" "-vv" test-flags))))))))
11936 (native-inputs
11937 (list python-pytest
11938 python-setuptools))
11939 (propagated-inputs
11940 (list python-numpy))
11941 (home-page "https://github.com/pydata/numexpr")
11942 (synopsis "Fast numerical expression evaluator for NumPy")
11943 (description
11944 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
11945expressions that operate on arrays are accelerated and use less memory than
11946doing the same calculation in Python. In addition, its multi-threaded
11947capabilities can make use of all your cores, which may accelerate
11948computations, most specially if they are not memory-bounded (e.g. those using
11949transcendental functions).")
11950 (license license:expat)))
11951
11952(define-public python-cycler
11953 (package
11954 (name "python-cycler")
11955 (version "0.12.1")
11956 (source
11957 (origin
11958 (method git-fetch) ;no tests in PyPI archive
11959 (uri (git-reference
11960 (url "https://github.com/matplotlib/cycler")
11961 (commit (string-append "v" version))))
11962 (file-name (git-file-name name version))
11963 (sha256
11964 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
11965 (build-system pyproject-build-system)
11966 (native-inputs
11967 (list python-pytest
11968 python-setuptools))
11969 (home-page "https://matplotlib.org/cycler/")
11970 (synopsis "Composable keyword argument iterator")
11971 (description
11972 "When using @code{matplotlib} and plotting more than one line, it is
11973common to want to be able to want to be able to cycle over one or more artist
11974styles; but the plotting logic can quickly become involved.
11975To address this and enable easy cycling over arbitrary @code{kwargs}, the
11976@code{Cycler} class was developed.")
11977 (license license:bsd-3)))
11978
11979(define-public python-colorspacious
11980 (package
11981 (name "python-colorspacious")
11982 (version "1.1.2")
11983 (source
11984 (origin
11985 (method git-fetch)
11986 (uri (git-reference
11987 (url "https://github.com/njsmith/colorspacious")
11988 (commit (string-append "v" version))))
11989 (file-name (git-file-name name version))
11990 (sha256
11991 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
11992 (build-system pyproject-build-system)
11993 (arguments (list #:tests? #f)) ; No tests.
11994 (propagated-inputs (list python-numpy))
11995 (native-inputs (list python-pytest python-setuptools))
11996 (home-page "https://github.com/njsmith/colorspacious")
11997 (synopsis "Python library for colorspace conversions")
11998 (description
11999 "@code{colorspacious} is a Python library that lets you convert between
12000colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
12001 (license license:expat)))
12002
12003(define-public python-propcache
12004 (package
12005 (name "python-propcache")
12006 (version "0.2.1")
12007 (source
12008 (origin
12009 (method url-fetch)
12010 (uri (pypi-uri "propcache" version))
12011 (sha256
12012 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
12013 (build-system pyproject-build-system)
12014 (arguments
12015 (list
12016 #:test-flags '(list "--ignore=tests/test_benchmarks.py")
12017 #:phases
12018 '(modify-phases %standard-phases
12019 (add-after 'unpack 'patch-build-system
12020 (lambda _
12021 ;; XXX: I don't know how to tell it to build the extensions in
12022 ;; place.
12023 (substitute* "packaging/pep517_backend/_backend.py"
12024 (("build_inplace=False") "build_inplace=True")))))))
12025 (native-inputs
12026 (list python-covdefaults
12027 python-cython
12028 python-expandvars
12029 python-pytest
12030 python-pytest-cov
12031 python-pytest-xdist
12032 python-setuptools
12033 python-tomli
12034 python-wheel))
12035 (home-page "https://github.com/aio-libs/propcache")
12036 (synopsis "Accelerated property cache")
12037 (description "The module provides a fast implementation of cached
12038properties for Python 3.9+.")
12039 (license license:asl2.0)))
12040
12041(define-public python-proto-matcher
12042 (package
12043 (name "python-proto-matcher")
12044 (version "0.0.3")
12045 (source
12046 (origin
12047 (method git-fetch)
12048 (uri (git-reference
12049 (url "https://github.com/dayfine/proto-matcher")
12050 (commit version)))
12051 (file-name (git-file-name name version))
12052 (sha256
12053 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
12054 (build-system pyproject-build-system)
12055 (native-inputs (list python-pytest python-setuptools))
12056 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
12057 (propagated-inputs (list python-protobuf python-pyhamcrest))
12058 (home-page "https://github.com/dayfine/proto-matcher")
12059 (synopsis "PyHamcrest test matchers for protocol buffers")
12060 (description
12061 "This package provides the following PyHamcrest test matchers, that
12062enable matching a protocol buffer message:
12063@table @code
12064@item equals_proto
12065Test the argument equals the given protobuf message.
12066@item approximately
12067Test the argument equals the given protobuf message, while comparing any float
12068field using approximation.
12069@item ignoring_field_paths
12070Test the argument equals the given protobuf message, while ignoring those
12071fields specified in the field paths.
12072@item ignoring_repeated_field_ordering
12073Test the argument equals the given protobuf message, ignoring the ordering of
12074any repeated field.
12075@item partially
12076Test the argument partially equals the given protobuf message, i.e. if a field
12077is in the argument but not in the expected message, it's ignored in the
12078comparison.
12079@end table")
12080 (license license:asl2.0)))
12081
12082(define-public python-matplotlib
12083 (package
12084 (name "python-matplotlib")
12085 (version "3.10.8")
12086 (source
12087 (origin
12088 (method git-fetch)
12089 (uri (git-reference
12090 (url "https://github.com/matplotlib/matplotlib")
12091 (commit (string-append "v" version))))
12092 (file-name (git-file-name name version))
12093 (sha256
12094 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
12095 (build-system pyproject-build-system)
12096 (arguments
12097 (list
12098 #:configure-flags
12099 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
12100 "-Dsystem-freetype=true"
12101 "-Dsystem-qhull=true"))
12102 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
12103 #:test-flags
12104 #~(list "-m" "not network"
12105 "-n" (number->string (parallel-job-count))
12106 ;; Run the installed tests, which is what we want since not
12107 ;; everything gets built in the source directory.
12108 "--pyargs" "matplotlib"
12109 "-k"
12110 (string-join
12111 (list
12112 ;; XXX: Disable all image comparison tests because we're using
12113 ;; a newer version of FreeType than matplotlib expects. This
12114 ;; leads to minor differences throughout the tests.
12115 "not image_comparison"
12116 "check_figures_equal"
12117 "png" ;disables many problematic image tests
12118 "test_figure_legend_outside"
12119 "test_ft2font_get_kerning"
12120 "test_normal_axes"
12121 "test_get_tightbbox_polar"
12122 ;; The invisible line ordering test fails due to a too short
12123 ;; timeout (see:
12124 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
12125 "test_invisible_Line_rendering"
12126 ;; The determinism check test is not deterministic (see:
12127 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
12128 "test_determinism_check")
12129 " and not "))
12130 #:phases
12131 #~(modify-phases %standard-phases
12132 (add-before 'build 'pretend-version
12133 ;; The version string is usually derived via setuptools-scm, but
12134 ;; without the git metadata available, the version string is set to
12135 ;; '0.0.0'.
12136 (lambda _
12137 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
12138 (add-after 'unpack 'patch-commands
12139 (lambda _
12140 (substitute* "lib/matplotlib/tests/test_animation.py"
12141 (("/bin/sh") (which "sh")))))
12142 (add-after 'unpack 'patch-dlopen
12143 (lambda* (#:key inputs #:allow-other-keys)
12144 (substitute* "src/_c_internal_utils.cpp"
12145 (("libX11.so.6")
12146 (search-input-file inputs "lib/libX11.so.6")))))
12147 (add-before 'build 'configure-environment
12148 (lambda* (#:key inputs #:allow-other-keys)
12149 ;; Fix rounding errors when using the x87 FPU.
12150 (when (string-prefix? "i686" #$(%current-system))
12151 (setenv "CFLAGS" "-ffloat-store"))))
12152 (add-before 'check 'chdir
12153 (lambda _
12154 ;; Step out of the source directory to avoid interference.
12155 (chdir "/tmp"))))))
12156 (propagated-inputs
12157 (list python-contourpy
12158 python-cycler
12159 python-dateutil
12160 python-fonttools-minimal
12161 python-importlib-resources
12162 python-kiwisolver
12163 python-numpy
12164 python-packaging
12165 python-pillow
12166 python-pyparsing
12167 `(,python "tk")))
12168 (inputs
12169 (list cairo
12170 freetype
12171 glib
12172 libpng
12173 qhull
12174 tcl
12175 tk))
12176 (native-inputs
12177 (list meson-python
12178 pkg-config
12179 pybind11
12180 python-pytest
12181 python-pytest-timeout
12182 python-pytest-xdist
12183 python-setuptools
12184 python-setuptools-scm
12185 python-wheel))
12186 (home-page "https://matplotlib.org/")
12187 (synopsis "2D plotting library for Python")
12188 (description
12189 "Matplotlib is a Python 2D plotting library which produces publication
12190quality figures in a variety of hardcopy formats and interactive environments
12191across platforms. Matplotlib can be used in Python scripts, the python and
12192ipython shell, web application servers, and six graphical user interface
12193toolkits.")
12194 (license license:psfl)))
12195
12196(define-public python-matplotlib-documentation
12197 (package
12198 (inherit python-matplotlib)
12199 (name "python-matplotlib-documentation")
12200 (arguments
12201 (list
12202 #:tests? #f ;we're only generating documentation
12203 #:phases
12204 #~(modify-phases %standard-phases
12205 (add-after 'unpack 'avoid-external-deps
12206 (lambda _
12207 ;; XXX: Avoid theme-switcher to avoid sphinx error
12208 ;; TemplateNotFound('theme-switcher.html')
12209 ;; XXX: Avoid version-switcher because it depends on an
12210 ;; external file, and we pack only one version anyway.
12211 (substitute* "doc/conf.py"
12212 (("\
12213\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
12214 "\"navbar_end\": ["))))
12215 (replace 'build
12216 (lambda _
12217 (setenv "HOME" "/tmp")
12218 (chdir "doc")
12219 (invoke "make" "html" "info"
12220 ;; Don't abort on warnings; build in parallel.
12221 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
12222 (replace 'install
12223 (lambda _
12224 (let* ((data (string-append #$output "/share"))
12225 (doc (string-append data "/doc/matplotlib"))
12226 (info (string-append data "/info"))
12227 (html (string-append doc "/html")))
12228 (mkdir-p html)
12229 (copy-recursively "build/html" html)
12230 (install-file "build/texinfo/matplotlib.info" info)
12231 ;; The "matplotlib-figures" directory contains are a subset of
12232 ;; the images produced for the html target; simply create a
12233 ;; symlink to it, saving about 11 MiB.
12234 (symlink (string-append html "/_images")
12235 (string-append info "/matplotlib-figures"))))))))
12236 (native-inputs
12237 (list graphviz
12238 inkscape/pinned
12239 python-colorspacious
12240 python-ipython
12241 python-ipykernel
12242 python-ipywidgets
12243 python-mpl-sphinx-theme
12244 python-numpydoc
12245 python-scipy
12246 python-sphinx
12247 python-sphinx-copybutton
12248 python-sphinx-design
12249 python-sphinx-gallery
12250 python-sphinxcontrib-svg2pdfconverter
12251 texinfo
12252 texlive-dvipng-bin
12253 (texlive-local-tree
12254 (list texlive-amsfonts
12255 texlive-amsmath
12256 texlive-babel
12257 texlive-cm-super
12258 texlive-etoolbox
12259 texlive-expdlist
12260 texlive-fontspec
12261 texlive-times
12262 texlive-type1cm
12263 texlive-underscore
12264 texlive-unicode-math))))
12265 (synopsis "Documentation for the @code{python-matplotlib} package")))
12266
12267(define-public python-matplotlib-inline
12268 (package
12269 (name "python-matplotlib-inline")
12270 (version "0.1.7")
12271 (source
12272 (origin
12273 (method url-fetch)
12274 (uri (pypi-uri "matplotlib_inline" version))
12275 (sha256
12276 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
12277 (build-system pyproject-build-system)
12278 (arguments
12279 (list
12280 ;; Tests disabled because of a circular dependency with IPython.
12281 #:tests? #f
12282 #:phases
12283 #~(modify-phases %standard-phases
12284 ;; Disabled because of a circular dependency with IPython.
12285 (delete 'sanity-check))))
12286 (native-inputs
12287 (list python-setuptools))
12288 (propagated-inputs
12289 (list python-matplotlib
12290 python-traitlets))
12291 (home-page "https://github.com/ipython/matplotlib-inline")
12292 (synopsis "Inline Matplotlib backend for Jupyter")
12293 (description
12294 "This package provides a Matplotlib inline back-end for IPython and
12295Jupyter.")
12296 (license license:bsd-3)))
12297
12298(define-public python-matplotlib-venn
12299 (package
12300 (name "python-matplotlib-venn")
12301 (version "1.1.2")
12302 (source
12303 (origin
12304 (method url-fetch)
12305 (uri (pypi-uri "matplotlib-venn" version))
12306 (sha256
12307 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
12308 (build-system pyproject-build-system)
12309 (native-inputs (list python-pytest
12310 python-setuptools
12311 python-shapely
12312 python-wheel))
12313 (propagated-inputs
12314 (list python-matplotlib python-numpy python-scipy))
12315 (home-page "https://github.com/konstantint/matplotlib-venn")
12316 (synopsis "Plot area-proportional Venn diagrams")
12317 (description
12318 "This package provides tools for plotting area-proportional two- and
12319three-way Venn diagrams in @code{matplotlib}.")
12320 (license license:expat)))
12321
12322(define-public python-matplotx
12323 (package
12324 (name "python-matplotx")
12325 (version "0.3.10")
12326 (source
12327 (origin
12328 (method git-fetch)
12329 (uri (git-reference
12330 (url "https://github.com/nschloe/matplotx")
12331 (commit (string-append "v" version))))
12332 (file-name (git-file-name name version))
12333 (sha256
12334 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
12335 (build-system pyproject-build-system)
12336 (arguments
12337 (list
12338 #:test-flags
12339 ;; This test fails with ValueError: not enough values to unpack.
12340 #~(list "--deselect" "tests/test_spy.py::test_cli"
12341 ;; XXX: unknown failure
12342 "--deselect" "tests/test_spy.py::test_png")))
12343 (propagated-inputs
12344 (list python-matplotlib
12345 python-numpy
12346 ;; optional dependencies
12347 python-networkx
12348 python-pypng
12349 python-scipy))
12350 (native-inputs (list python-imageio
12351 python-meshzoo
12352 python-pytest
12353 python-scikit-fem
12354 python-setuptools
12355 python-wheel))
12356 (home-page "https://github.com/nschloe/matplotx")
12357 (synopsis "Minimal matplotlib styles")
12358 (description
12359 "This package includes some extensions for Matplotlib to create
12360clean plots with a minimalistic style.")
12361 (license license:expat)))
12362
12363(define-public python-cplot
12364 (package
12365 (name "python-cplot")
12366 (version "0.9.3")
12367 (source
12368 (origin
12369 (method git-fetch) ;for tests
12370 (uri (git-reference
12371 (url "https://github.com/nschloe/cplot")
12372 (commit (string-append "v" version))))
12373 (file-name (git-file-name name version))
12374 (sha256
12375 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
12376 (build-system pyproject-build-system)
12377 (native-inputs
12378 (list python-pytest
12379 python-setuptools
12380 python-wheel))
12381 (propagated-inputs
12382 (list python-matplotlib
12383 python-matplotx
12384 python-npx
12385 python-numpy))
12386 (home-page "https://github.com/nschloe/cplot")
12387 (synopsis "Plot complex-valued functions")
12388 (description "@code{cplot} is a Python library for plotting
12389complex-valued functions.")
12390 (license license:gpl3+)))
12391
12392(define-public python-cppheaderparser
12393 (package
12394 (name "python-cppheaderparser")
12395 (version "2.7.4")
12396 (source
12397 (origin
12398 (method url-fetch)
12399 (uri (pypi-uri "CppHeaderParser" version))
12400 (sha256
12401 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
12402 (build-system pyproject-build-system)
12403 (arguments
12404 (list
12405 #:tests? #f)) ; no tests
12406 (propagated-inputs (list python-ply))
12407 (native-inputs (list python-setuptools python-wheel))
12408 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
12409 (synopsis
12410 "Parse C++ header files and generate a data structure representing the class")
12411 (description
12412 "CppHeaderParser is a pure python module that will parse C++ header files
12413and generate a data structure representing the class.")
12414 (license license:bsd-3)))
12415
12416(define-public python-cppy
12417 (package
12418 (name "python-cppy")
12419 (version "1.3.1")
12420 (source
12421 (origin
12422 (method url-fetch)
12423 (uri (pypi-uri "cppy" version))
12424 (sha256
12425 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
12426 (build-system pyproject-build-system)
12427 (native-inputs
12428 (list python-pytest
12429 python-setuptools
12430 python-setuptools-scm
12431 python-wheel))
12432 (home-page "https://github.com/nucleic/cppy")
12433 (synopsis "C++ header library for Python extension modules")
12434 (description "This package is a small C++ header library which makes it
12435easier to write Python extension modules. The primary feature is a
12436@code{PyObject} smart pointer which automatically handles reference counting
12437and provides convenience methods for performing common object operations.")
12438 (license license:bsd-3)))
12439
12440(define-public python-perfplot
12441 (package
12442 (name "python-perfplot")
12443 (version "0.10.2")
12444 (source (origin
12445 (method url-fetch)
12446 (uri (pypi-uri "perfplot" version))
12447 (sha256
12448 (base32
12449 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
12450 (build-system pyproject-build-system)
12451 (propagated-inputs (list python-matplotlib
12452 python-matplotx
12453 python-numpy-1
12454 python-rich))
12455 (native-inputs (list python-flit-core
12456 python-pytest))
12457 (home-page "https://github.com/nschloe/perfplot")
12458 (synopsis "Performance plots for Python code snippets")
12459 (description "@code{perfplot} extends Python's timeit by testing
12460snippets with input parameters (e.g., the size of an array) and plotting
12461the results.")
12462 (license license:gpl3+)))
12463
12464(define-public python-socksipy-branch
12465 (package
12466 (name "python-socksipy-branch")
12467 (version "1.01")
12468 (source
12469 (origin
12470 (method url-fetch)
12471 (uri (pypi-uri "SocksiPy-branch" version))
12472 (sha256
12473 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
12474 (build-system pyproject-build-system)
12475 (arguments (list #:tests? #f)) ; There are no tests
12476 (native-inputs (list python-setuptools))
12477 (home-page "https://code.google.com/archive/p/socksipy-branch/")
12478 (synopsis "Python SOCKS module")
12479 (description
12480 "SocksiPy - A Python SOCKS client module. It provides a socket-like
12481interface that supports connections to any TCP service through the use of a
12482SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
12483this is a branch created by Mario Vilas to address some open issues,as the
12484original project seems to have been abandoned circa 2007.")
12485 (license license:bsd-3)))
12486
12487(define-public python-socksipychain
12488 (package
12489 (name "python-socksipychain")
12490 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
12491 (revision . "0")))
12492 (version (git-version "2.1.3"
12493 (assoc-ref properties 'revision)
12494 (assoc-ref properties 'commit)))
12495 (source
12496 (origin
12497 (method git-fetch)
12498 (uri (git-reference
12499 (url "https://github.com/pagekite/PySocksipyChain")
12500 (commit (assoc-ref properties 'commit))))
12501 (file-name (git-file-name name version))
12502 (sha256
12503 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
12504 (build-system pyproject-build-system)
12505 (arguments (list #:tests? #f)) ; Tests try to access the network.
12506 (native-inputs (list python-setuptools))
12507 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
12508 (synopsis "Python SOCKS module with chained proxies support")
12509 (description
12510 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
12511adds support for arbitrary chaining of proxy servers and various modes of
12512TLS/SSL encryption. It was developed for use in PageKite, and also includes
12513a simple netcat replacement with chaining support.")
12514 (license license:bsd-3)))
12515
12516(define-public python-pycodestyle
12517 (package
12518 (name "python-pycodestyle")
12519 (version "2.12.1")
12520 (source
12521 (origin
12522 (method url-fetch)
12523 (uri (pypi-uri "pycodestyle" version))
12524 (sha256
12525 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
12526 (build-system pyproject-build-system)
12527 (arguments
12528 (list
12529 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
12530 #:phases
12531 #~(modify-phases %standard-phases
12532 ;; Taken from Tox config
12533 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
12534 (replace 'check
12535 (lambda* (#:key tests? test-flags #:allow-other-keys)
12536 (when tests?
12537 (apply invoke "python" "-v" test-flags)))))))
12538 (native-inputs
12539 (list python-setuptools
12540 python-wheel))
12541 (home-page "https://pycodestyle.readthedocs.io/")
12542 (synopsis "Python style guide checker")
12543 (description "@code{pycodestyle} (formerly pep8) is a tool to check
12544Python code against some of the style conventions in
12545@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
12546 (license license:expat)))
12547
12548(define-public python-pycollada
12549 (package
12550 (name "python-pycollada")
12551 (version "0.9.2")
12552 (source
12553 (origin
12554 (method git-fetch)
12555 (uri (git-reference
12556 (url "https://github.com/pycollada/pycollada")
12557 (commit (string-append "v" version))))
12558 (file-name (git-file-name name version))
12559 (sha256
12560 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
12561 (build-system pyproject-build-system)
12562 (native-inputs
12563 (list python-pytest
12564 python-setuptools))
12565 (propagated-inputs
12566 (list python-numpy
12567 python-dateutil))
12568 (home-page "https://pycollada.readthedocs.io")
12569 (synopsis "Reading and writing collada documents library")
12570 (description
12571 "This package implements a functionality for creating, editing and
12572loading @url{https://www.khronos.org/collada/,COLLADA},which is a
12573COLLAborative Design Activity for establishing an interchange file format for
12574interactive 3D applications.
12575
12576The library allows you to load a COLLADA file and interact with it as a python
12577object. In addition, it supports creating a collada python object from
12578scratch, as well as in-place editing.")
12579 (license license:bsd-3)))
12580
12581(define-public python-pyct
12582 (package
12583 (name "python-pyct")
12584 (version "0.5.0")
12585 (source
12586 (origin
12587 (method url-fetch)
12588 (uri (pypi-uri "pyct" version))
12589 (sha256
12590 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
12591 (build-system pyproject-build-system)
12592 (arguments
12593 (list
12594 #:test-flags
12595 ;; These tests want to download example data from the internet.
12596 '(list "-k" (string-append
12597 "not test_examples_with_use_test_data"
12598 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
12599 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
12600 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
12601 (propagated-inputs (list python-param python-pyyaml))
12602 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
12603 (home-page "https://github.com/holoviz-dev/pyct")
12604 (synopsis "Common packaging tasks")
12605 (description
12606 "This Python package provides utilities to run common packaging tasks,
12607e.g. copy examples, fetch data, etc.")
12608 (license license:bsd-3)))
12609
12610(define-public python-multidict
12611 (package
12612 (name "python-multidict")
12613 (version "6.1.0")
12614 (source
12615 (origin
12616 (method url-fetch)
12617 (uri (pypi-uri "multidict" version))
12618 (sha256
12619 (base32
12620 "0jlgjpclkh5g6vr1danl6alz0cza2jlzdqh3q03d4s8ckfzjxbi2"))))
12621 (build-system pyproject-build-system)
12622 (propagated-inputs (list python-typing-extensions))
12623 (native-inputs
12624 (list python-pytest python-pytest-cov python-setuptools python-wheel))
12625 (home-page "https://github.com/aio-libs/multidict/")
12626 (synopsis "Multidict implementation")
12627 (description "Multidict is dict-like collection of key-value pairs
12628where key might be occurred more than once in the container.")
12629 (license license:asl2.0)))
12630
12631(define-public python-orderedmultidict
12632 (package
12633 (name "python-orderedmultidict")
12634 (version "1.0.1")
12635 (source
12636 (origin
12637 (method url-fetch)
12638 (uri (pypi-uri "orderedmultidict" version))
12639 (sha256
12640 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
12641 (build-system pyproject-build-system)
12642 (propagated-inputs
12643 (list python-six))
12644 (native-inputs
12645 (list python-pytest
12646 python-setuptools))
12647 (home-page "https://github.com/gruns/orderedmultidict")
12648 (synopsis "Python Ordered Multivalue Dictionary - omdict")
12649 (description "This package contains a library for ordered multivalue
12650dictionaries. A multivalue dictionary is a dictionary that can store
12651multiple values for the same key. An ordered multivalue dictionary is a
12652multivalue dictionary that retains the order of insertions and deletions.")
12653 (license license:unlicense)))
12654
12655(define-public python-autocommand
12656 (package
12657 (name "python-autocommand")
12658 (version "2.2.2")
12659 (source
12660 (origin
12661 (method url-fetch)
12662 (uri (pypi-uri "autocommand" version))
12663 (sha256
12664 (base32 "0d2zjms5xm236k46la5pnl7i7hs3a12jlp12cw8lk5jm7i1fk3c7"))))
12665 (build-system pyproject-build-system)
12666 (native-inputs
12667 (list python-pytest python-setuptools))
12668 (home-page "https://github.com/Lucretiel/autocommand")
12669 (synopsis "Python library to build a command-line from a function")
12670 (description "@code{autocommand} is library to automatically generate and
12671run simple @code{argparse} parsers from function signatures.")
12672 (license license:lgpl3+)))
12673
12674(define-public python-autopage
12675 (package
12676 (name "python-autopage")
12677 (version "0.5.1")
12678 (source (origin
12679 (method url-fetch)
12680 (uri (pypi-uri "autopage" version))
12681 (sha256
12682 (base32
12683 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
12684 (build-system pyproject-build-system)
12685 (arguments
12686 (list
12687 #:phases
12688 #~(modify-phases %standard-phases
12689 (add-before 'check 'disable-e2e-tests
12690 (lambda _
12691 ;; These tests rely on KeyboardInterrupts which do not
12692 ;; work in the build container.
12693 (delete-file "autopage/tests/test_end_to_end.py"))))))
12694 (native-inputs
12695 (list python-pypa-build
12696 python-setuptools
12697 python-wheel
12698 ;; For tests.
12699 python-fixtures
12700 python-pytest
12701 python-testtools))
12702 (home-page "https://github.com/zaneb/autopage")
12703 (synopsis "Automatic paging for console output")
12704 (description
12705 "Autopage is a Python library to automatically display terminal output
12706from a program in a @dfn{pager} such as @command{less}.")
12707 (license license:asl2.0)))
12708
12709(define-public python-dirty-equals
12710 (package
12711 (name "python-dirty-equals")
12712 (version "0.8.0")
12713 (source
12714 (origin
12715 (method git-fetch)
12716 (uri (git-reference
12717 (url "https://github.com/samuelcolvin/dirty-equals")
12718 (commit (string-append "v" version))))
12719 (file-name (git-file-name name version))
12720 (sha256
12721 (base32 "1jp9jbfs90m8jkpcvi798zxxx49a94rzn8gki9fraqhbqxkv76qd"))))
12722 (build-system pyproject-build-system)
12723 (arguments
12724 (list
12725 #:test-flags
12726 ;; This test requires pytest-examples, which in turn requires
12727 ;; python-ruff, which is difficult to package because it is written in
12728 ;; Rust (TODO: Enable when Ruff is in Guix!).
12729 #~(list "--ignore=tests/test_docs.py"
12730 ;; Optional typing check with Pydantic.
12731 "--ignore=tests/test_other.py"
12732 ;; TODO: Some timezones are missing in PyTZ, remove constrain
12733 ;; when updated.
12734 "-k" (string-append "not test_is_datetime_zoneinfo"
12735 " and not test_is_now_tz"
12736 " and not test_tz"))))
12737 (native-inputs
12738 (list python-hatchling
12739 ;; python-pydantic ; introduces cycle, optinoal
12740 python-pytest))
12741 (propagated-inputs
12742 (list python-pytz))
12743 (home-page "https://dirty-equals.helpmanual.io/")
12744 (synopsis "Do dirty (but useful) things with equals")
12745 (description
12746 "@code{dirty-equals} is a Python library that (mis)uses the
12747@code{__eq__} method to make code (generally unit tests) more declarative
12748and therefore easier to read and write.")
12749 (license license:expat)))
12750
12751(define-public python-distlib
12752 (package
12753 (name "python-distlib")
12754 (version "0.3.7")
12755 (source
12756 (origin
12757 (method url-fetch)
12758 (uri (pypi-uri "distlib" version))
12759 (sha256
12760 (base32
12761 "1a27f5p93j9i1l3324qgahs3g8ai91fmx783jpyyla506i5ybbwx"))))
12762 (build-system pyproject-build-system)
12763 (arguments
12764 (list
12765 #:phases
12766 #~(modify-phases %standard-phases
12767 (add-before 'build 'no-/bin/sh
12768 (lambda* (#:key inputs #:allow-other-keys)
12769 (let ((/bin/sh (search-input-file inputs "bin/sh")))
12770 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
12771 (("/bin/sh") /bin/sh)))))
12772 (add-before 'check 'prepare-test-environment
12773 (lambda _
12774 (setenv "HOME" "/tmp")
12775 ;; NOTE: Any value works, the variable just has to be present.
12776 (setenv "SKIP_ONLINE" "1"))))))
12777 (native-inputs
12778 (list python-pytest python-setuptools python-wheel))
12779 (inputs
12780 (list bash-minimal))
12781 (home-page "https://github.com/pypa/distlib")
12782 (synopsis "Distribution utilities")
12783 (description "Distlib is a library which implements low-level functions that
12784relate to packaging and distribution of Python software. It is intended to be
12785used as the basis for third-party packaging tools.")
12786 (license license:psfl)))
12787
12788(define-public python-distutils-extra
12789 (package
12790 (name "python-distutils-extra")
12791 (version "2.38")
12792 (source
12793 (origin
12794 (method url-fetch)
12795 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
12796 version "/+download/python-distutils-extra-"
12797 version ".tar.gz"))
12798 (sha256
12799 (base32
12800 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
12801 (build-system pyproject-build-system)
12802 (arguments
12803 (list #:tests? #f)) ;tests are outdated and broken
12804 (native-inputs (list python-setuptools python-wheel))
12805 (home-page "https://launchpad.net/python-distutils-extra/")
12806 (synopsis "Enhancements to Python's distutils")
12807 (description
12808 "The python-distutils-extra module enables you to easily integrate
12809gettext support, themed icons, and scrollkeeper-based documentation into
12810Python's distutils.")
12811 (license license:gpl2)))
12812
12813(define-public python-olefile
12814 (package
12815 (name "python-olefile")
12816 (version "0.47")
12817 (source
12818 (origin
12819 (method git-fetch)
12820 (uri (git-reference
12821 (url "https://github.com/decalage2/olefile")
12822 (commit (string-append "v" version))))
12823 (file-name (git-file-name name version))
12824 (sha256
12825 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
12826 (build-system pyproject-build-system)
12827 (native-inputs
12828 (list python-pytest
12829 python-setuptools))
12830 (home-page "https://www.decalage.info/python/olefileio")
12831 (synopsis "Read and write Microsoft OLE2 files")
12832 (description
12833 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
12834Storage or Compound Document, Microsoft Office). It is an improved version of
12835the OleFileIO module from PIL, the Python Image Library.")
12836 (license license:bsd-3)))
12837
12838(define-public python-property-cached
12839 (package
12840 (name "python-property-cached")
12841 (version "1.6.4")
12842 (source
12843 (origin
12844 (method url-fetch)
12845 (uri (pypi-uri "property-cached" version ".zip"))
12846 (sha256
12847 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
12848 (patches
12849 (search-patches "python-property-cached-asyncio-3_11.patch"))))
12850 (build-system pyproject-build-system)
12851 (arguments
12852 (list
12853 ;; AssertionError.
12854 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
12855 (native-inputs (list python-freezegun python-pytest unzip
12856 python-setuptools python-wheel))
12857 (home-page "https://github.com/althonos/property-cached/")
12858 (synopsis "Decorator for caching properties in classes")
12859 (description "This package provides a decorator for caching properties in
12860classes. It is forked from @code{cached-property}.")
12861 (license license:bsd-3)))
12862
12863(define-public python-pdf2image
12864 (package
12865 (name "python-pdf2image")
12866 (version "1.17.0")
12867 (source
12868 (origin
12869 (method git-fetch)
12870 (uri (git-reference
12871 (url "https://github.com/Belval/pdf2image")
12872 (commit (string-append "v" version))))
12873 (file-name (git-file-name name version))
12874 (sha256
12875 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
12876 (build-system pyproject-build-system)
12877 (arguments
12878 (list
12879 ;; The following excluded tests assume hardcoded binary paths to
12880 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
12881 #:test-flags
12882 #~(list "--exclude=^test_use_poppler_path$"
12883 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
12884 (propagated-inputs (list python-pillow))
12885 (inputs (list poppler))
12886 (native-inputs (list python-pynose which python-setuptools))
12887 (home-page "https://github.com/Belval/pdf2image")
12888 (synopsis
12889 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
12890 (description
12891 "This package provides a Python API wrapping the @command{pdftoppm} and
12892@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
12893Python list with elements of type @code{PIL.Image} (from the
12894@code{python-pillow} library).")
12895 (license license:expat)))
12896
12897(define-public python-pikepdf
12898 (package
12899 (name "python-pikepdf")
12900 (version "8.15.1")
12901 (source
12902 (origin
12903 (method git-fetch)
12904 (uri (git-reference
12905 (url "https://github.com/pikepdf/pikepdf")
12906 (commit (string-append "v" version))))
12907 (file-name (git-file-name name version))
12908 (sha256
12909 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
12910 (build-system pyproject-build-system)
12911 (arguments
12912 (list
12913 #:phases
12914 #~(modify-phases %standard-phases
12915 (add-after 'unpack 'set-version
12916 (lambda _
12917 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
12918 (native-inputs
12919 (list pybind11
12920 python-attrs
12921 python-hypothesis
12922 python-setuptools-scm
12923 python-psutil
12924 python-pytest
12925 python-pytest-timeout
12926 python-pytest-xdist
12927 python-dateutil
12928 python-xmp-toolkit
12929 python-tomli
12930 python-setuptools))
12931 (inputs
12932 (list qpdf))
12933 (propagated-inputs
12934 (list python-deprecated python-lxml python-packaging python-pillow))
12935 (home-page "https://github.com/pikepdf/pikepdf")
12936 (synopsis "Read and write PDFs with Python")
12937 (description
12938 "pikepdf is a Python library for reading and writing PDF files.")
12939 (license license:mpl2.0)))
12940
12941(define-public python-pillow
12942 (package
12943 (name "python-pillow")
12944 (version "11.1.0")
12945 (source
12946 (origin
12947 (method url-fetch)
12948 (uri (pypi-uri "pillow" version))
12949 (sha256
12950 (base32 "081abgpz7g013cgzz7pjhmf8m7q626ngza4hnfs76vdk104ag39n"))))
12951 (build-system pyproject-build-system)
12952 (arguments
12953 (list
12954 #:phases
12955 #~(modify-phases %standard-phases
12956 (add-after 'unpack 'patch-ldconfig
12957 (lambda _
12958 (substitute* "setup.py"
12959 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
12960 (replace 'check
12961 (lambda* (#:key tests? #:allow-other-keys)
12962 (when tests?
12963 (setenv "HOME" (getcwd))
12964 (invoke "python" "selftest.py" "--installed")
12965 (invoke "python" "-m" "pytest" "-vv")))))))
12966 (native-inputs (list python-defusedxml
12967 python-markdown2
12968 python-olefile
12969 python-pytest
12970 python-setuptools
12971 python-trove-classifiers))
12972 (inputs (list freetype
12973 lcms
12974 libjpeg-turbo
12975 libtiff
12976 libwebp
12977 openjpeg
12978 zlib))
12979 (home-page "https://python-pillow.org")
12980 (synopsis "Fork of the Python Imaging Library")
12981 (description
12982 "The Python Imaging Library adds image processing capabilities to your
12983Python interpreter. This library provides extensive file format support, an
12984efficient internal representation, and fairly powerful image processing
12985capabilities. The core image library is designed for fast access to data
12986stored in a few basic pixel formats. It should provide a solid foundation for
12987a general image processing tool.")
12988 (properties `((cpe-name . "pillow")))
12989 (license (license:x11-style
12990 "http://www.pythonware.com/products/pil/license.htm"
12991 "The PIL Software License"))))
12992
12993(define-public python-pillow-heif
12994 (package
12995 (name "python-pillow-heif")
12996 (version "1.1.1")
12997 (source
12998 (origin
12999 (method url-fetch)
13000 (uri (pypi-uri "pillow_heif" version))
13001 (sha256
13002 (base32 "1pkbkg88jg6f24xvbg95aq8dm8fa8ffz7zy4rq262m98i658q3pn"))))
13003 (build-system pyproject-build-system)
13004 (inputs (list libheif))
13005 (propagated-inputs (list python-pillow))
13006 (native-inputs (list opencv ; for opencv-python
13007 python-defusedxml
13008 python-numpy
13009 python-packaging
13010 python-pympler
13011 python-pytest
13012 python-setuptools))
13013 (home-page "https://github.com/bigcat88/pillow_heif")
13014 (synopsis "Python interface for libheif library")
13015 (description "This package provides Python bindings for the libheif library
13016and a plugin for Pillow.")
13017 (license license:bsd-3)))
13018
13019(define-public python-pillow-heif-0.22
13020 (package
13021 (inherit python-pillow-heif)
13022 (version "0.22.0")
13023 (source
13024 (origin
13025 (method url-fetch)
13026 (uri (pypi-uri "pillow_heif" version))
13027 (sha256
13028 (base32 "16mkap63d14f69105b3bm8pi64fvpdznncgn48vhgls0jf977m31"))))))
13029
13030(define-public python-pixelmatch
13031 (package
13032 (name "python-pixelmatch")
13033 (version "0.3.0")
13034 (source
13035 (origin
13036 (method git-fetch)
13037 (uri (git-reference
13038 (url "https://github.com/whtsky/pixelmatch-py")
13039 (commit (string-append "v" version))))
13040 (file-name (git-file-name name version))
13041 (sha256
13042 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
13043 (build-system pyproject-build-system)
13044 (arguments
13045 ;; XXX: PIL.UnidentifiedImageError despite images being present.
13046 (list #:tests? #f))
13047 (native-inputs
13048 (list python-poetry-core
13049 python-pillow
13050 python-pytest
13051 python-pytest-benchmark))
13052 (home-page "https://github.com/whtsky/pixelmatch-py")
13053 (synopsis "Pixel-level image comparison library")
13054 (description
13055 "This package provides a pixel-level image comparison library for Python,
13056originally created to compare screenshots in tests. Its features include
13057accurate anti-aliased pixels detection and perceptual color difference
13058metrics.")
13059 (license license:isc)))
13060
13061(define-public python-imagecodecs
13062 (package
13063 (name "python-imagecodecs")
13064 (version "2025.8.2")
13065 (source
13066 (origin
13067 (method url-fetch)
13068 (uri (pypi-uri "imagecodecs" version))
13069 (sha256
13070 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
13071 (modules '((guix build utils)))
13072 (snippet #~(for-each delete-file
13073 ;; Delete pre-generated Cython files.
13074 (find-files "imagecodecs" "_.*\\.c$")))))
13075 (build-system pyproject-build-system)
13076 (arguments
13077 (list
13078 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
13079 #:test-flags
13080 ;; Some of those tests are flaky.
13081 #~(list "-k" "not test_cms_identity_transforms")
13082 #:phases
13083 #~(modify-phases %standard-phases
13084 (add-after 'unpack 'create-configuration
13085 (lambda _
13086 ;; By default everything is enabled. We can selectively disable
13087 ;; extensions (and thus dependencies) by deleting them from the
13088 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
13089 (call-with-output-file "imagecodecs_distributor_setup.py"
13090 (lambda (port)
13091 (format port "\
13092def customize_build(EXTENSIONS, OPTIONS):
13093~{ del EXTENSIONS[~s]~%~}~%"
13094 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
13095 ;; Those rely on unpackaged inputs.
13096 "aec" "avif" "bitshuffle" "brunsli" "deflate"
13097 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
13098 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
13099 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
13100 "zlibng" "zopfli"))))))
13101 (add-after 'unpack 'fix-sanity-check
13102 (lambda _
13103 ;; XXX: Don't exit twice. The generated script already does that.
13104 (substitute* "imagecodecs/__main__.py"
13105 (("sys\\.exit\\(main\\(\\)\\)")
13106 ""))))
13107 (add-before 'check 'configure-tests
13108 (lambda _
13109 (setenv "HOME" (getcwd)))))))
13110 (inputs
13111 (list brotli
13112 c-blosc
13113 c-blosc2
13114 giflib
13115 lcms
13116 libheif
13117 libjpeg-turbo
13118 libpng
13119 libtiff
13120 libwebp
13121 lz4
13122 lzfse
13123 snappy
13124 xz
13125 zlib
13126 `(,zstd "lib")))
13127 (propagated-inputs
13128 (list python-numpy python-matplotlib python-tifffile))
13129 (native-inputs
13130 (list python-cython python-pytest python-setuptools))
13131 (home-page "https://www.lfd.uci.edu/~gohlke/")
13132 (synopsis "Image transformation, compression, and decompression codecs")
13133 (description
13134 "Imagecodecs is a Python library that provides block-oriented, in-memory
13135buffer transformation, compression, and decompression functions for use in the
13136tifffile, czifile, and other scientific image input/output modules.")
13137 (license license:bsd-3)))
13138
13139(define-public python-property-manager
13140 (package
13141 (name "python-property-manager")
13142 (version "3.0")
13143 (source
13144 (origin
13145 (method git-fetch)
13146 (uri (git-reference
13147 (url "https://github.com/xolox/python-property-manager")
13148 (commit version)))
13149 (file-name (git-file-name name version))
13150 (sha256
13151 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
13152 (build-system pyproject-build-system)
13153 (native-inputs (list python-pytest python-setuptools))
13154 (propagated-inputs
13155 (list python-verboselogs
13156 python-humanfriendly
13157 python-coloredlogs))
13158 (home-page "https://github.com/xolox/python-property-manager")
13159 (synopsis "Useful property variants for Python programming")
13160 (description
13161 "The @code{property-manager} package defines several custom property
13162variants for Python programming including required properties,writable
13163properties, cached properties, etc.")
13164 (license license:expat)))
13165
13166(define-public python-executing
13167 (package
13168 (name "python-executing")
13169 (version "2.2.0")
13170 (source
13171 (origin
13172 (method url-fetch)
13173 (uri (pypi-uri "executing" version))
13174 (sha256
13175 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
13176 (build-system pyproject-build-system)
13177 (arguments
13178 (list
13179 #:test-flags
13180 ;; Test needs IPython
13181 #~(list "-k" "not test_two_statement_lookups")
13182 #:phases
13183 #~(modify-phases %standard-phases
13184 (add-after 'unpack 'fix-tests
13185 (lambda _
13186 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
13187 (substitute* "pyproject.toml"
13188 (("ignore_missing_imports = true.*")
13189 "ignore_missing_imports = true
13190
13191[tool.pytest.ini_options]
13192python_functions = \"test_\"\n")))))))
13193 (native-inputs
13194 (list python-asttokens
13195 python-littleutils
13196 python-pytest
13197 python-rich
13198 python-setuptools
13199 python-setuptools-scm
13200 python-wheel))
13201 (home-page "https://github.com/alexmojaki/executing")
13202 (synopsis "Get information about what a Python frame is currently doing")
13203 (description "This package lets you get information about what a frame is
13204currently doing, particularly the AST node being executed.")
13205 (license license:expat)))
13206
13207(define-public python-executor
13208 (package
13209 (name "python-executor")
13210 (version "23.2")
13211 (source
13212 (origin
13213 (method git-fetch)
13214 (uri (git-reference
13215 (url "https://github.com/xolox/python-executor")
13216 (commit version)))
13217 (file-name (git-file-name name version))
13218 (sha256
13219 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
13220 (build-system pyproject-build-system)
13221 (arguments
13222 (list #:tests? #f)) ;TODO: tests require root/sudo
13223 (native-inputs (list python-mock python-pytest python-setuptools))
13224 (propagated-inputs
13225 (list python-six
13226 python-property-manager
13227 python-fasteners
13228 python-virtualenv))
13229 (home-page "https://github.com/xolox/python-executor")
13230 (synopsis "Programmer friendly subprocess wrapper")
13231 (description
13232 "The @code{executor} package is a simple wrapper for Python’s subprocess
13233module that makes it very easy to handle subprocesses on UNIX systems with
13234proper escaping of arguments and error checking currently doing, particularly
13235the AST node being executed.")
13236 (license license:expat)))
13237
13238(define-public python-roifile
13239 (package
13240 (name "python-roifile")
13241 (version "2025.5.10")
13242 (source
13243 (origin
13244 (method url-fetch)
13245 (uri (pypi-uri "roifile" version))
13246 (sha256
13247 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
13248 (build-system pyproject-build-system)
13249 (arguments (list #:tests? #f)) ; There are none.
13250 (native-inputs (list python-setuptools))
13251 (propagated-inputs (list python-numpy))
13252 (home-page "https://www.lfd.uci.edu/~gohlke/")
13253 (synopsis "Read and write ImageJ ROI format")
13254 (description "Roifile is a Python library to read, write, create, and plot
13255ImageJ ROIs, an undocumented and ImageJ application specific format to store
13256regions of interest, geometric shapes, paths, text, etc for image overlays.")
13257 (license license:bsd-3)))
13258
13259(define-public python-lfdfiles
13260 (package
13261 (name "python-lfdfiles")
13262 (version "2025.9.17")
13263 (source
13264 (origin
13265 (method url-fetch)
13266 (uri (pypi-uri "lfdfiles" version))
13267 (sha256
13268 (base32 "0b363vv146icsn86gxc04grq2d5r7xzzabr03xsc7aq9wybgvgqp"))
13269 (modules '((guix build utils)))
13270 (snippet
13271 ;; Delete pre-generated Cython files.
13272 #~(for-each delete-file (find-files "lfdfiles" "_.*\\.c$")))))
13273 (build-system pyproject-build-system)
13274 (arguments
13275 (list #:tests? #f)) ; No tests, despite a test dependency on pytest.
13276 (native-inputs (list python-setuptools))
13277 (propagated-inputs (list python-click python-numpy python-tifffile))
13278 (home-page "https://www.lfd.uci.edu/~gohlke/")
13279 (synopsis "Work with LFD data files")
13280 (description
13281 "Lfdfiles is a Python library and console script for reading, writing,
13282converting, and viewing many of the proprietary file formats used to store
13283experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
13284 (license license:bsd-3)))
13285
13286;; ~8Mo of test files.
13287(define python-av-testdata
13288 (file-union
13289 "python-av-testdata"
13290 (cons*
13291 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
13292 `(,(string-append "pyav-curated/" file)
13293 ,(origin
13294 (method url-fetch)
13295 (uri (string-append "https://pyav.org/datasets/" file))
13296 (sha256
13297 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
13298 (map
13299 (match-lambda
13300 ((file . hash)
13301 (list (string-append "fate-suite/" file)
13302 (origin
13303 (method url-fetch)
13304 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
13305 (sha256 (base32 hash))))))
13306 '(("aac/latm_stereo_to_51.ts" .
13307 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
13308 ("h264/extradata-reload-multi-stsd.mov" .
13309 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
13310 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
13311 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
13312 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
13313 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
13314 ("h264/interlaced_crop.mp4" .
13315 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
13316 ("hap/HAPQA_NoSnappy_127x1.mov" .
13317 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
13318 ("mkv/codec_delay_opus.mkv" .
13319 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
13320 ("mov/displaymatrix.mov" .
13321 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
13322 ("mov/mov-1elist-ends-last-bframe.mov" .
13323 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
13324 ("mov/white_zombie_scrunch-part.mov" .
13325 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
13326 ("mpeg2/mpeg2_field_encoding.ts" .
13327 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
13328 ("vorbis/vorbis_chapter_extension_demo.ogg" .
13329 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
13330 ("mxf/track_01_v02.mxf" .
13331 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
13332 ("png1/55c99e750a5fd6_50314226.png" .
13333 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
13334 ("qtrle/aletrek-rle.mov" .
13335 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
13336 ("sub/MovText_capability_tester.mp4" .
13337 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
13338 ("sub/vobsub.sub" .
13339 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
13340
13341(define-public python-av
13342 (package
13343 (name "python-av")
13344 (version "16.0.1")
13345 (source
13346 (origin
13347 (method url-fetch)
13348 (uri (pypi-uri "av" version))
13349 (sha256
13350 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
13351 (build-system pyproject-build-system)
13352 (arguments
13353 (list
13354 ;; Upstream is not great in responding to open issues or change requests.
13355 ;; See:
13356 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
13357 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
13358 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
13359 #:test-flags
13360 ;; Writing to custom IO requires network access.
13361 #~(list "-k" "not test_writing_to_custom_io_dash")
13362 #:phases
13363 #~(modify-phases %standard-phases
13364 (add-before 'check 'pre-check
13365 (lambda _
13366 ;; This would otherwise interfere with finding the installed
13367 ;; av when running tests.
13368 (delete-file-recursively "av")
13369 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
13370 (substitute* "tests/common.py"
13371 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
13372 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
13373 (native-inputs
13374 (list pkg-config
13375 python-cython
13376 python-numpy
13377 python-pillow
13378 python-pytest
13379 python-setuptools))
13380 (inputs (list ffmpeg))
13381 (home-page "https://github.com/PyAV-Org/PyAV")
13382 (synopsis "Pythonic bindings for FFmpeg's libraries")
13383 (description
13384 "PyAV is a Python library that allows for direct and precise manipulation
13385of media through containers, streams, packets, codecs, and frames. It provides
13386access to the powerful FFmpeg libraries while managing the complex details as
13387much as possible.
13388PyAV also facilitates data transformation and integration with
13389other packages such as Numpy and Pillow. However, working with media is a
13390challenging task and PyAV cannot abstract it away or make all the best decisions
13391for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
13392be necessary. Nonetheless, PyAV is an essential tool when working with media
13393that requires its specific capabilities.")
13394 (license license:bsd-3)))
13395
13396(define-public python-ffmpeg-python
13397 ;; The latest release (0.2.0) is old and its test suite crashs on Python 3.10.
13398 (package
13399 (name "python-ffmpeg-python")
13400 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
13401 (revision . "0")))
13402 (version (git-version "0.2.0"
13403 (assoc-ref properties 'revision)
13404 (assoc-ref properties 'commit)))
13405 (source
13406 (origin
13407 (method git-fetch)
13408 (uri (git-reference
13409 (url "https://github.com/kkroening/ffmpeg-python.git")
13410 (commit (assoc-ref properties 'commit))))
13411 (file-name (git-file-name name version))
13412 (sha256
13413 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
13414 (build-system pyproject-build-system)
13415 (arguments
13416 (list
13417 #:test-flags
13418 #~(list "-k" "not test_pipe and not test__probe")
13419 #:phases
13420 #~(modify-phases %standard-phases
13421 (add-after 'unpack 'hardcode-ffmpeg
13422 (lambda* (#:key inputs #:allow-other-keys)
13423 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
13424 (substitute* "ffmpeg/_run.py"
13425 (("cmd='ffmpeg'")
13426 (string-append "cmd='" ffmpeg "'")))
13427 (substitute* "ffmpeg/tests/test_ffmpeg.py"
13428 (("out_file.compile\\(\\) == \\['ffmpeg'")
13429 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
13430 (inputs (list ffmpeg))
13431 (propagated-inputs (list python-future))
13432 (native-inputs (list python-future
13433 python-numpy
13434 python-pytest
13435 python-pytest-mock
13436 python-setuptools))
13437 (home-page "https://github.com/kkroening/ffmpeg-python")
13438 (synopsis "Python bindings for FFmpeg with complex filtering support")
13439 (description
13440 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
13441Python terms, taking care of running ffmpeg with the correct command-line
13442arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
13443 (license license:asl2.0)))
13444
13445(define-public python-imageio-ffmpeg
13446 (package
13447 (name "python-imageio-ffmpeg")
13448 (version "0.6.0")
13449 (source
13450 (origin
13451 (method url-fetch)
13452 (uri (pypi-uri "imageio_ffmpeg" version))
13453 (sha256
13454 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
13455 (build-system pyproject-build-system)
13456 (arguments
13457 (list
13458 #:tests? #f ;XXX: tests requrie network access to get FFmpeg data
13459 #:phases
13460 #~(modify-phases %standard-phases
13461 (add-after 'unpack 'hardcode-ffmpeg
13462 (lambda* (#:key inputs #:allow-other-keys)
13463 (substitute* "imageio_ffmpeg/_utils.py"
13464 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
13465 (string-append "(" all " or \""
13466 (search-input-file inputs "bin/ffmpeg")
13467 "\")"))))))))
13468 (native-inputs
13469 (list python-setuptools
13470 python-wheel))
13471 (inputs
13472 (list ffmpeg))
13473 (home-page "https://github.com/imageio/imageio-ffmpeg")
13474 (synopsis "FFMPEG wrapper for Python")
13475 (description
13476 "This package provides an FFMPEG wrapper for working with video files.
13477It implements generator functions for reading and writing data to and from
13478FFMPEG, reliably terminating the process when done.")
13479 (license license:bsd-2)))
13480
13481(define-public python-imageio-freeimage
13482 (package
13483 (name "python-imageio-freeimage")
13484 (version "0.1.1")
13485 (source
13486 (origin
13487 (method url-fetch)
13488 (uri (pypi-uri "imageio_freeimage" version))
13489 (sha256
13490 (base32 "1la0iv3617m52dnidhhrdaz9dpnlfqs7b83550d3jkjavv30md72"))))
13491 (build-system pyproject-build-system)
13492 (arguments
13493 (list
13494 #:tests? #f ; tests need internet and are not distributed in PyPI
13495 #:phases
13496 #~(modify-phases %standard-phases
13497 ;; imageio_freeimage expects a copy of the library in its source
13498 ;; tree. Changing this would require hacky substitutions.
13499 (add-after 'install 'freeimage-path
13500 (lambda* (#:key inputs #:allow-other-keys)
13501 (let* ((pylib (string-append #$output "/lib/python"
13502 #$(version-major+minor
13503 (package-version python))
13504 "/site-packages"))
13505 (iofi (string-append pylib "/imageio_freeimage")))
13506 (mkdir-p (string-append iofi "/_lib"))
13507 (symlink (search-input-file inputs "lib/libfreeimage.so")
13508 (string-append iofi "/_lib/libfreeimage.so"))))))))
13509 (native-inputs (list python-poetry-core python-requests python-setuptools
13510 python-wheel))
13511 (inputs (list freeimage))
13512 (propagated-inputs (list python-imageio))
13513 (home-page "https://github.com/imageio/imageio-freeimage")
13514 (synopsis "Plugin for ImageIO that wraps the FreeImage library")
13515 (description
13516 "This package provides a plugin for @code{ImageIO} that wraps the
13517@code{FreeImage} library.")
13518 ;; As a derivative work of FreeImage, imageio_freeimage is licensed under
13519 ;; GPLv2 or GPLv3, and the FreeImage Public License (FIPL).
13520 ;; For more information, see the LICENSE file.
13521 (license
13522 (list license:gpl2 license:gpl3
13523 (license:non-copyleft "https://spdx.org/licenses/FreeImage.html")))))
13524
13525(define-public python-imageio
13526 (package
13527 (name "python-imageio")
13528 (version "2.36.1")
13529 (source
13530 (origin
13531 (method url-fetch)
13532 (uri (pypi-uri "imageio" version))
13533 (sha256
13534 (base32
13535 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
13536 (build-system pyproject-build-system)
13537 (arguments
13538 (list
13539 #:test-flags #~(list "-m" "not needs_internet"
13540 ;; This attempts to load libGL.so (provided by mesa)
13541 ;; at the Python store path (sys.base_prefix?).
13542 "-k" "not test_findlib2"
13543 "--ignore" "tests/test_freeimage.py")
13544 #:phases
13545 #~(modify-phases %standard-phases
13546 (add-after 'unpack 'fix-source
13547 (lambda* (#:key inputs #:allow-other-keys)
13548 (substitute* "imageio/core/util.py"
13549 (("\"/var/tmp\"")
13550 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
13551 (propagated-inputs
13552 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
13553 (native-inputs
13554 (list python-fsspec
13555 python-pytest
13556 python-setuptools))
13557 (home-page "https://imageio.github.io/")
13558 (synopsis "Library for reading and writing a wide range of image data")
13559 (description
13560 "Imageio is a Python library that provides an easy interface to read and
13561write a wide range of image data, including animated images, video, volumetric
13562data, and scientific formats.")
13563 (license license:bsd-2)))
13564
13565(define-public python-pyvips
13566 (package
13567 (name "python-pyvips")
13568 (version "3.0.0")
13569 (source
13570 (origin
13571 (method git-fetch) ; PyPI does not include test helpers
13572 (uri (git-reference
13573 (url "https://github.com/libvips/pyvips")
13574 (commit (string-append "v" version))))
13575 (file-name (git-file-name name version))
13576 (sha256
13577 (base32 "017x7i8ssghsdpncjfhk5shdq31784hb5xjalrxl918s86rjwakp"))))
13578 (build-system pyproject-build-system)
13579 (native-inputs
13580 (list pkg-config
13581 python-pytest
13582 python-setuptools
13583 python-wheel))
13584 (inputs
13585 (list glib vips))
13586 (propagated-inputs
13587 (list python-cffi python-pkgconfig))
13588 (home-page "https://github.com/libvips/pyvips")
13589 (synopsis "Python bindings for VIPS")
13590 (description "The @code{pyvips} package provides Python bindings for VIPS,
13591a multithreaded image-processing system with low memory needs.")
13592 (license license:expat)))
13593
13594;; WARNING: This package is a dependency of mesa.
13595;; There are no users in python-xyz for this package, consider to adopt closer
13596;; to Mesa.
13597(define-public python-pycparser
13598 (package
13599 (name "python-pycparser")
13600 (version "2.22")
13601 (source
13602 (origin
13603 (method url-fetch)
13604 (uri (pypi-uri "pycparser" version))
13605 (sha256
13606 (base32
13607 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
13608 (outputs '("out" "doc"))
13609 (build-system pyproject-build-system)
13610 (arguments
13611 (list
13612 #:test-backend #~'unittest
13613 #:phases
13614 #~(modify-phases %standard-phases
13615 (add-after 'install 'install-doc
13616 (lambda _
13617 (let* ((data (string-append #$output:doc "/share"))
13618 (doc (string-append data "/doc/" #$name "-" #$version))
13619 (examples (string-append doc "/examples")))
13620 (mkdir-p examples)
13621 (for-each (lambda (file)
13622 (copy-file (string-append "." file)
13623 (string-append doc file)))
13624 '("/README.rst" "/CHANGES" "/LICENSE"))
13625 (copy-recursively "examples" examples)))))))
13626 (native-inputs
13627 (list python-setuptools))
13628 (home-page "https://github.com/eliben/pycparser")
13629 (synopsis "C parser in Python")
13630 (description
13631 "Pycparser is a complete parser of the C language, written in pure Python
13632using the PLY parsing library. It parses C code into an AST and can serve as
13633a front-end for C compilers or analysis tools.")
13634 (license license:bsd-3)))
13635
13636(define-public python-pywavelets
13637 (package
13638 (name "python-pywavelets")
13639 (version "1.8.0")
13640 (home-page "https://github.com/PyWavelets/pywt")
13641 (source (origin
13642 (method url-fetch)
13643 (uri (pypi-uri "pywavelets" version))
13644 (sha256
13645 (base32
13646 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
13647 (build-system pyproject-build-system)
13648 (arguments
13649 (list
13650 #:test-flags '(list "--pyargs" "pywt")
13651 #:phases
13652 #~(modify-phases %standard-phases
13653 ;; The compiled libraries are only in the output at this point,
13654 ;; but they are needed to run tests.
13655 ;; FIXME: This should be handled by the pyargs pytest argument,
13656 ;; but is not for some reason.
13657 (add-before 'check 'pre-check
13658 (lambda _ (chdir #$output))))))
13659 (native-inputs
13660 (list meson
13661 ninja
13662 pkg-config
13663 python-cython
13664 python-meson-python
13665 python-numpy
13666 python-pytest))
13667 (propagated-inputs
13668 (list python-numpy python-scipy))
13669 (synopsis "Wavelet transforms in Python")
13670 (description
13671 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
13672mathematical basis functions that are localized in both time and frequency.
13673Wavelet transforms are time-frequency transforms employing wavelets. They are
13674similar to Fourier transforms, the difference being that Fourier transforms are
13675localized only in frequency instead of in time and frequency.")
13676 (license license:expat)))
13677
13678(define-public python-pywal
13679 (package
13680 (name "python-pywal")
13681 (version "3.3.0")
13682 (source
13683 (origin
13684 (method git-fetch)
13685 (uri (git-reference
13686 (url "https://github.com/dylanaraps/pywal")
13687 (commit version)))
13688 (file-name (git-file-name name version))
13689 (sha256
13690 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
13691 (build-system pyproject-build-system)
13692 (arguments
13693 `(#:phases
13694 (modify-phases %standard-phases
13695 (add-before 'check 'fix-home-directory
13696 (lambda _
13697 ;; Tests fail with "Permission denied: '/homeless-shelter'".
13698 (setenv "HOME" "/tmp"))))))
13699 (native-inputs
13700 (list python-pytest
13701 python-setuptools))
13702 (inputs
13703 (list imagemagick))
13704 (home-page "https://github.com/dylanaraps/pywal")
13705 (synopsis "Color palette generator and applicator")
13706 (description
13707 "Pywal is a tool that generates a color palette from the dominant colors
13708in an image. It then applies the colors system-wide and on-the-fly in all of
13709your favourite programs.")
13710 (license license:expat)))
13711
13712(define-public python-pywal16
13713 (package
13714 (name "python-pywal16")
13715 (version "3.8.10")
13716 (source
13717 (origin
13718 (method url-fetch)
13719 (uri (pypi-uri "pywal16" version))
13720 (sha256
13721 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
13722 (build-system pyproject-build-system)
13723 (arguments
13724 (list
13725 #:phases
13726 '(modify-phases %standard-phases
13727 (add-before 'check 'set-HOME
13728 (lambda _ (setenv "HOME" "/tmp"))))))
13729 (native-inputs
13730 (list imagemagick
13731 python-pytest
13732 python-setuptools))
13733 (home-page "https://github.com/eylles/pywal16")
13734 (synopsis "16 colors fork of pywal")
13735 (description
13736 "Pywal16 is a tool that generates a color palette from the dominant
13737colors in an image. It then applies the colors system-wide and on-the-fly in
13738all of your favorite programs.")
13739 (license license:expat)))
13740
13741(define-public python-click-didyoumean
13742 (package
13743 (name "python-click-didyoumean")
13744 (version "0.3.1")
13745 (source
13746 (origin
13747 (method git-fetch) ;no tests in PyPI archive
13748 (uri (git-reference
13749 (url "https://github.com/click-contrib/click-didyoumean")
13750 (commit (string-append "v" version))))
13751 (file-name (git-file-name name version))
13752 (sha256
13753 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
13754 (build-system pyproject-build-system)
13755 (native-inputs
13756 (list python-poetry-core python-pytest))
13757 (propagated-inputs
13758 (list python-click))
13759 (home-page "https://github.com/timofurrer/click-didyoumean")
13760 (synopsis "Git-like did-you-mean feature in Click")
13761 (description
13762 "This plugin enables git-like did-you-mean feature in Click.")
13763 (license license:expat)))
13764
13765(define-public python-pywinrm
13766 (package
13767 (name "python-pywinrm")
13768 (version "0.5.0")
13769 (source
13770 (origin
13771 (method git-fetch)
13772 (uri (git-reference
13773 (url "https://github.com/diyan/pywinrm/")
13774 (commit (string-append "v" version))))
13775 (file-name (git-file-name name version))
13776 (sha256
13777 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
13778 (build-system pyproject-build-system)
13779 (propagated-inputs
13780 (list python-requests python-requests-ntlm python-xmltodict))
13781 (native-inputs
13782 (list python-mock python-pytest python-setuptools))
13783 (home-page "https://github.com/diyan/pywinrm/")
13784 (synopsis "Python library for Windows Remote Management (WinRM)")
13785 (description
13786 "pywinrm is a Python client for the Windows Remote Management (WinRM)
13787service. It allows you to invoke commands on target Windows machines from
13788any machine that can run Python.")
13789 (license license:expat)))
13790
13791(define-public python-manimpango
13792 (package
13793 (name "python-manimpango")
13794 (version "0.5.0")
13795 (source
13796 (origin
13797 (method git-fetch) ; no tests data in PyPi package
13798 (uri (git-reference
13799 (url "https://github.com/ManimCommunity/ManimPango")
13800 (commit (string-append "v" version))))
13801 (file-name (git-file-name name version))
13802 (sha256
13803 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
13804 (build-system pyproject-build-system)
13805 (arguments
13806 (list
13807 #:phases
13808 #~(modify-phases %standard-phases
13809 (add-before 'check 'build-extensions
13810 (lambda _
13811 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
13812 (native-inputs
13813 (list pkg-config
13814 python-cython
13815 python-pytest
13816 python-pytest-cov
13817 python-setuptools
13818 python-wheel))
13819 (inputs
13820 (list pango))
13821 (home-page "https://manimpango.manim.community/")
13822 (synopsis "Bindings for Pango for using with Manim")
13823 (description
13824 "Python bindings for ManimPango which is a C binding for Pango,
13825using Cython.
13826
13827ManimPango is internally used in Manim to render (non-LaTeX) text.")
13828 (license license:expat)))
13829
13830(define-public python-cairocffi
13831 (package
13832 (name "python-cairocffi")
13833 (version "1.7.1")
13834 (source
13835 (origin
13836 ;; The PyPI archive does not include the documentation, so use Git.
13837 (method git-fetch)
13838 (uri (git-reference
13839 (url "https://github.com/Kozea/cairocffi")
13840 (commit (string-append "v" version))))
13841 (file-name (git-file-name name version))
13842 (sha256
13843 (base32
13844 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
13845 (build-system pyproject-build-system)
13846 (outputs '("out" "doc"))
13847 (inputs
13848 (list glib gtk+ gdk-pixbuf cairo))
13849 (native-inputs
13850 (list python-flit-core
13851 python-numpy
13852 python-pikepdf
13853 python-pytest
13854 python-pytest-cov
13855 python-pytest-runner
13856 python-sphinx
13857 python-sphinx-rtd-theme))
13858 (propagated-inputs
13859 (list python-xcffib)) ; used at run time
13860 (arguments
13861 (list
13862 #:phases
13863 #~(modify-phases %standard-phases
13864 (add-after 'unpack 'patch-paths
13865 (lambda* (#:key inputs #:allow-other-keys)
13866 (substitute* "cairocffi/__init__.py"
13867 ;; Hack the dynamic library loading mechanism.
13868 (("find_library\\(library_name\\)")
13869 "\"found\"")
13870 (("filenames = \\(library_filename,\\) \\+ filenames")
13871 "pass")
13872 (("libcairo.so.2")
13873 (search-input-file inputs "/lib/libcairo.so.2")))
13874 (substitute* "cairocffi/pixbuf.py"
13875 (("libgdk_pixbuf-2.0.so.0")
13876 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
13877 (("libgobject-2.0.so.0")
13878 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
13879 (("libglib-2.0.so.0")
13880 (search-input-file inputs "/lib/libglib-2.0.so.0"))
13881 (("libgdk-3.so.0")
13882 (search-input-file inputs "/lib/libgdk-3.so.0")))))
13883 (add-after 'install 'install-doc
13884 (lambda* (#:key inputs #:allow-other-keys)
13885 (let* ((data (string-append #$output:doc "/share"))
13886 (doc (string-append data "/doc/" #$name "-" #$version))
13887 (html (string-append doc "/html")))
13888 (setenv "LD_LIBRARY_PATH"
13889 (string-append (assoc-ref inputs "cairo") "/lib" ":"
13890 (assoc-ref inputs "gdk-pixbuf") "/lib"))
13891 (setenv "LANG" "en_US.UTF-8")
13892 (mkdir-p html)
13893 (for-each (lambda (file)
13894 (copy-file (string-append "." file)
13895 (string-append doc file)))
13896 '("/README.rst" "/NEWS.rst"))
13897 (system* "python" "setup.py" "build_sphinx")
13898 (copy-recursively "docs/_build/html" html)))))))
13899 (home-page "https://github.com/Kozea/cairocffi")
13900 (synopsis "Python bindings and object-oriented API for Cairo")
13901 (description
13902 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
13903Python bindings and object-oriented API for cairo. Cairo is a 2D vector
13904graphics library with support for multiple backends including image buffers,
13905PNG, PostScript, PDF, and SVG file output.")
13906 (license license:bsd-3)))
13907
13908(define-public python-decorator
13909 (package
13910 (name "python-decorator")
13911 (version "5.2.1")
13912 (source
13913 (origin
13914 (method url-fetch)
13915 (uri (pypi-uri "decorator" version))
13916 (sha256
13917 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
13918 (build-system pyproject-build-system)
13919 (arguments
13920 (list #:test-backend #~'custom
13921 #:test-flags #~(list "tests/test.py")))
13922 (native-inputs
13923 (list python-setuptools))
13924 (home-page "https://pypi.org/project/decorator/")
13925 (synopsis "Python module to simplify usage of decorators")
13926 (description
13927 "The aim of the decorator module is to simplify the usage of decorators
13928for the average programmer, and to popularize decorators usage giving examples
13929of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
13930etc. The core of this module is a decorator factory.")
13931 (license license:expat)))
13932
13933(define-public python-drmaa
13934 (package
13935 (name "python-drmaa")
13936 (version "0.7.7")
13937 (source
13938 (origin
13939 (method url-fetch)
13940 (uri (pypi-uri "drmaa" version))
13941 (sha256
13942 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
13943 (build-system pyproject-build-system)
13944 ;; The test suite requires libdrmaa which is provided by the cluster
13945 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
13946 ;; should be set to the path of the libdrmaa library.
13947 (arguments
13948 (list
13949 #:tests? #f
13950 #:phases
13951 #~(modify-phases %standard-phases
13952 ;; Loading the library fails because DRMAA_LIBRARY_PATH
13953 ;; is not configured.
13954 (delete 'sanity-check))))
13955 (native-inputs (list python-setuptools))
13956 (home-page "https://pypi.org/project/drmaa/")
13957 (synopsis "Python bindings for the DRMAA library")
13958 (description
13959 "A Python package for Distributed Resource Management (DRM) job
13960submission and control. This package is an implementation of the DRMAA 1.0
13961Python language binding specification.")
13962 (license license:bsd-3)))
13963
13964(define-public python-grako
13965 (package
13966 (name "python-grako")
13967 (version "3.99.9")
13968 (source
13969 (origin
13970 (method url-fetch)
13971 (uri (pypi-uri "grako" version ".zip"))
13972 (sha256
13973 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
13974 (snippet
13975 #~(begin (use-modules (guix build utils))
13976 (substitute* "grako/grammars.py"
13977 (("from collections import defaultdict, Mapping")
13978 (string-append "from collections import defaultdict\n"
13979 "from collections.abc import Mapping")))
13980 (substitute* '("grako/util.py"
13981 "grako/walkers.py")
13982 (("collections\\.Mapping") "collections.abc.Mapping"))))))
13983 (build-system pyproject-build-system)
13984 ;; XXX: Test file 'grako.ebnf' is missing from archive.
13985 (arguments (list #:tests? #f))
13986 (native-inputs (list unzip python-pytest python-setuptools))
13987 (home-page "https://pypi.org/project/grako")
13988 (synopsis "EBNF parser generator")
13989 (description
13990 "Grako takes a grammar in a variation of EBNF as input, and outputs a
13991memoizing PEG/Packrat parser in Python.")
13992 (license license:bsd-3)))
13993
13994(define-public python-grandalf
13995 (package
13996 (name "python-grandalf")
13997 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
13998 (version "0.8")
13999 (source
14000 (origin
14001 (method git-fetch)
14002 (uri (git-reference
14003 (url "https://github.com/bdcht/grandalf")
14004 (commit (string-append "v" version))))
14005 (file-name (git-file-name name version))
14006 (sha256
14007 (base32
14008 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
14009 (build-system pyproject-build-system)
14010 (arguments
14011 (list
14012 #:phases
14013 #~(modify-phases %standard-phases
14014 (add-before 'build 'patch-requirements
14015 (lambda _
14016 (substitute* "setup.py"
14017 (("install_requires=\\['pyparsing'],") "")))))))
14018 (native-inputs
14019 (list python-setuptools python-pytest))
14020 (propagated-inputs
14021 (list python-numpy python-ply))
14022 (home-page "https://github.com/bdcht/grandalf")
14023 (synopsis "Graph and drawing algorithms framework")
14024 (description
14025 "Grandalf is a Python package made for experimentations with graphs
14026drawing algorithms. It is written in pure Python, and currently implements
14027two layouts: the Sugiyama hierarchical layout and the force-driven or energy
14028minimization approach. While not as fast or featured as graphviz or other
14029libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
14030than thousands of nodes, while keeping the source code simple enough to tweak
14031and hack any part of it for experimental purpose. With a total of about 1500
14032lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
14033in less than 600 lines. The energy minimization approach is comprised of only
14034250 lines!
14035
14036Grandalf does only 2 not-so-simple things:
14037@itemize
14038@item computing the nodes (x,y) coordinates (based on provided nodes
14039dimensions, and a chosen layout)
14040@item routing the edges with lines or nurbs
14041@end itemize
14042
14043It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
14044will help you find where to draw things like nodes and edges, but it’s up to
14045you to actually draw things with your favorite toolkit.")
14046 ;; The user can choose either license.
14047 (license (list license:gpl2 license:epl1.0))))
14048
14049(define-public python-gridmap
14050 (package
14051 (name "python-gridmap")
14052 (version "0.15.0")
14053 (source
14054 (origin
14055 (method git-fetch)
14056 (uri (git-reference
14057 (url "https://github.com/pygridtools/gridmap")
14058 (commit (string-append "v" version))))
14059 (file-name (git-file-name name version))
14060 (sha256
14061 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
14062 (build-system pyproject-build-system)
14063 (arguments
14064 (list #:tests? #f ;XXX: freezes or timeout
14065 #:test-backend #~'nose))
14066 (native-inputs
14067 (list ;; python-pynose
14068 python-setuptools))
14069 (propagated-inputs
14070 (list python-cherrypy
14071 python-cloudpickle
14072 python-psutil
14073 python-drmaa
14074 python-pyzmq))
14075 (home-page "https://github.com/pygridtools/gridmap")
14076 (synopsis "Create jobs on a cluster directly from Python")
14077 (description
14078 "Gridmap is a Python package to allow you to easily create jobs on the
14079cluster directly from Python. You can directly map Python functions onto the
14080cluster without needing to write any wrapper code yourself.")
14081 (license license:gpl3+)))
14082
14083(define-public python-honcho
14084 (package
14085 (name "python-honcho")
14086 (version "2.0.0")
14087 (source
14088 (origin
14089 (method git-fetch)
14090 (uri (git-reference
14091 (url "https://github.com/nickstenning/honcho")
14092 (commit (string-append "v" version))))
14093 (file-name (git-file-name name version))
14094 (sha256
14095 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
14096 (build-system pyproject-build-system)
14097 (arguments
14098 ;; Tests below fail with the error
14099 ;; ValueError: The 'honcho.export.xxx' package was not installed
14100 ;; in a way that PackageLoader understands.
14101 ;; Probably safe because it's testing for different init systems.
14102 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
14103 "--ignore" "tests/test_export_runit.py"
14104 "--ignore" "tests/test_export_supervisord.py"
14105 "--ignore" "tests/test_export_systemd.py"
14106 "--ignore" "tests/test_export_upstart.py")))
14107 (native-inputs
14108 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
14109 (propagated-inputs
14110 (list python-colorama))
14111 (home-page "https://github.com/nickstenning/honcho")
14112 (synopsis "Manage Procfile-based applications")
14113 (description
14114 "A Procfile is a file which describes how to run an application
14115consisting of several processes. honcho starts all listed processes.
14116The output of all running processes is collected by honcho and
14117displayed.")
14118 (license license:expat)))
14119
14120(define-public python-hsluv
14121 (package
14122 (name "python-hsluv")
14123 (version "5.0.4")
14124 (source
14125 (origin
14126 (method url-fetch)
14127 (uri (pypi-uri "hsluv" version))
14128 (sha256
14129 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
14130 (build-system pyproject-build-system)
14131 (native-inputs
14132 (list python-pytest python-setuptools))
14133 (home-page "https://www.hsluv.org")
14134 (synopsis "Human-friendly HSL colour space implemented in Python")
14135 (description
14136 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
14137@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
14138component that allows you to span all the available chroma as a neat
14139percentage.")
14140 (license license:expat)))
14141
14142(define-public python-pebble
14143 (package
14144 (name "python-pebble")
14145 (version "5.1.3")
14146 (source
14147 (origin
14148 (method git-fetch)
14149 (uri (git-reference
14150 (url "https://github.com/noxdafox/pebble")
14151 (commit version)))
14152 (file-name (git-file-name name version))
14153 (sha256
14154 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
14155 (build-system pyproject-build-system)
14156 (native-inputs (list python-pytest python-setuptools))
14157 (home-page "https://github.com/noxdafox/pebble")
14158 (synopsis "Threading and multiprocessing for Python")
14159 (description
14160 "Pebble aims to help manage threads and processes in an easier way. It
14161wraps Python's standard library threading and multiprocessing objects.")
14162 (license license:lgpl3+)))
14163
14164(define-public python-pexpect
14165 (package
14166 (name "python-pexpect")
14167 (version "4.9.0")
14168 (source
14169 (origin
14170 (method url-fetch)
14171 (uri (pypi-uri "pexpect" version))
14172 (sha256
14173 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
14174 (build-system pyproject-build-system)
14175 (arguments
14176 (list
14177 #:test-flags
14178 #~(list "-k" (string-join
14179 (list
14180 ;; Disable failing test, see
14181 ;; <https://github.com/pexpect/pexpect/issues/568>.
14182 "not test_bash"
14183 ;; Fails with attempt to find OpenSSL.
14184 "test_large_stdout_stream"
14185 ;; Tests fail while trying to find
14186 ;; tmp-pexpect-xxxxxxxxxxxx directories.
14187 "test_run_uses_env"
14188 "test_run_uses_env_path"
14189 "test_run_uses_env_path_over_path"
14190 "test_spawn_uses_env"
14191 ;; Fails with assertion error: assert 0 == 500
14192 "test_before_across_chunks"
14193 ;; Bash is enough for tests.
14194 "test_zsh")
14195 " and not "))
14196 #:phases
14197 #~(modify-phases %standard-phases
14198 (add-before 'check 'prepare-tests
14199 (lambda _
14200 (substitute* (find-files "tests")
14201 (("/bin/bash") (which "bash"))
14202 (("/bin/echo") (which "echo"))
14203 (("/bin/ls") (which "ls"))
14204 (("/bin/which") (which "which"))
14205 ;; Many tests try to use the /bin directory which is not
14206 ;; present in the build environment. Use one that's non-empty
14207 ;; and unlikely to change.
14208 (("/bin'") "/dev'")))))))
14209 (native-inputs
14210 (list bash ;full Bash for 'test_replwrap.py'
14211 man-db
14212 python-pytest
14213 python-setuptools
14214 python-wheel
14215 which))
14216 (propagated-inputs
14217 (list python-ptyprocess))
14218 (home-page "https://pexpect.readthedocs.org/")
14219 (synopsis "Controlling interactive console applications")
14220 (description
14221 "Pexpect is a pure Python module for spawning child applications;
14222controlling them; and responding to expected patterns in their output. Pexpect
14223works like Don Libes’ Expect. Pexpect allows your script to spawn a child
14224application and control it as if a human were typing commands.")
14225 (license license:isc)))
14226
14227(define-public python-sexpdata
14228 (package
14229 (name "python-sexpdata")
14230 (version "1.0.2")
14231 (source
14232 (origin
14233 (method url-fetch)
14234 (uri (pypi-uri "sexpdata" version))
14235 (sha256
14236 (base32
14237 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
14238 (build-system pyproject-build-system)
14239 (arguments
14240 (list #:tests? #f)) ; no tests
14241 (native-inputs (list python-setuptools python-wheel))
14242 (home-page "https://github.com/jd-boyd/sexpdata")
14243 (synopsis "S-expression parser for Python")
14244 (description
14245 "Sexpdata is an S-expression parser/serializer. It has load and dump
14246functions like pickle, json or PyYAML module.")
14247 (license license:bsd-3)))
14248
14249(define-public python-pathable
14250 (package
14251 (name "python-pathable")
14252 (version "0.4.3")
14253 (source
14254 (origin
14255 (method url-fetch)
14256 (uri (pypi-uri "pathable" version))
14257 (sha256
14258 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
14259 (build-system pyproject-build-system)
14260 (arguments (list #:tests? #false)) ;there are none
14261 (native-inputs (list python-poetry-core))
14262 (home-page "https://github.com/p1c2u/pathable")
14263 (synopsis "Object-oriented paths")
14264 (description "With this package you can traverse resources like paths and
14265access resources on demand with separate accessor layer.")
14266 (license license:asl2.0)))
14267
14268(define-public python-importlib-resources
14269 (package
14270 (name "python-importlib-resources")
14271 (version "6.5.2")
14272 (source (origin
14273 (method url-fetch)
14274 (uri (pypi-uri "importlib_resources" version))
14275 (sha256
14276 (base32
14277 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
14278 (build-system pyproject-build-system)
14279 (native-inputs
14280 (list python-jaraco-test
14281 python-jaraco-collections
14282 python-pytest
14283 python-setuptools
14284 python-setuptools-scm
14285 python-zipp))
14286 (home-page "https://importlib-resources.readthedocs.io/")
14287 (synopsis "Read resources from Python packages")
14288 (description
14289 "@code{importlib_resources} is a backport of Python 3's standard library
14290@code{importlib.resources} module for Python 2.7, and Python 3.")
14291 (license license:asl2.0)))
14292
14293(define-public python-importlib-metadata
14294 (package
14295 (name "python-importlib-metadata")
14296 (version "8.7.0")
14297 (source
14298 (origin
14299 (method url-fetch)
14300 (uri (pypi-uri "importlib_metadata" version))
14301 (sha256
14302 (base32
14303 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
14304 (build-system pyproject-build-system)
14305 (arguments
14306 (list #:test-flags #~(list "tests")))
14307 (native-inputs
14308 (list python-jaraco-test
14309 python-packaging-bootstrap
14310 python-pyfakefs
14311 python-pytest-bootstrap
14312 python-setuptools
14313 python-setuptools-scm))
14314 (propagated-inputs
14315 (list python-zipp))
14316 (home-page "https://importlib-metadata.readthedocs.io/")
14317 (synopsis "Read metadata from Python packages")
14318 (description
14319 "@code{importlib_metadata} is a library which provides an API for
14320accessing an installed Python package's metadata, such as its entry points or
14321its top-level name. This functionality intends to replace most uses of
14322@code{pkg_resources} entry point API and metadata API. Along with
14323@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
14324need to use the older and less efficient @code{pkg_resources} package.")
14325 (license license:asl2.0)))
14326
14327(define-public python-importlib-metadata-argparse-version
14328 (package
14329 (name "python-importlib-metadata-argparse-version")
14330 (version "2.0.1")
14331 (home-page
14332 "https://github.com/mondeja/importlib-metadata-argparse-version")
14333 (source
14334 (origin
14335 (method git-fetch)
14336 (uri (git-reference
14337 (url home-page)
14338 (commit (string-append "v" version))))
14339 (file-name (git-file-name name version))
14340 (sha256
14341 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
14342 (build-system pyproject-build-system)
14343 (native-inputs (list python-pytest python-hatchling))
14344 (synopsis "Get Python package version more efficiently")
14345 (description
14346 "This package provides an @code{argparse} action to define CLI version
14347with a delayed call to @code{importlib.metadata}, avoiding to load this module
14348when not needed.")
14349 (license license:bsd-3)))
14350
14351(define-public python-importmagic
14352 (package
14353 (name "python-importmagic")
14354 (version "0.1.7")
14355 (source
14356 (origin
14357 (method git-fetch)
14358 (uri (git-reference
14359 (url "https://github.com/alecthomas/importmagic")
14360 (commit version)))
14361 (file-name (git-file-name name version))
14362 (sha256
14363 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
14364 (build-system pyproject-build-system)
14365 (native-inputs (list python-pytest python-setuptools))
14366 (home-page "https://github.com/alecthomas/importmagic")
14367 (synopsis "Library for adding, removing and managing Python imports")
14368 (description
14369 "Importmagic is a Python library for automatically managing imports by
14370finding unresolved symbols in Python code and their corresponding imports.")
14371 (license license:bsd-3)))
14372
14373(define-public python-inotify-simple
14374 (package
14375 (name "python-inotify-simple")
14376 (version "1.3.5")
14377 (source
14378 (origin
14379 (method git-fetch)
14380 (uri (git-reference
14381 (url "https://github.com/chrisjbillington/inotify_simple")
14382 (commit version)))
14383 (file-name (git-file-name name version))
14384 (sha256
14385 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
14386 (build-system pyproject-build-system)
14387 (arguments
14388 (list
14389 #:test-backend #~'custom
14390 #:test-flags #~(list "example.py")))
14391 (native-inputs (list python-setuptools))
14392 (home-page "https://github.com/chrisjbillington/inotify_simple")
14393 (synopsis "Simple wrapper around inotify library")
14394 (description
14395 "@code{inotify-simple} is a simple wrapper around inotify library.")
14396 (license license:bsd-3)))
14397
14398(define-public python-interface-meta
14399 (package
14400 (name "python-interface-meta")
14401 (version "1.3.0")
14402 (source
14403 (origin
14404 (method url-fetch)
14405 (uri (pypi-uri "interface_meta" version))
14406 (sha256
14407 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
14408 (build-system pyproject-build-system)
14409 (native-inputs (list python-poetry-core python-pytest))
14410 (home-page "https://github.com/matthewwardrop/interface_meta")
14411 (synopsis
14412 "API for enforced method signatures and consistent documentation")
14413 (description
14414 "This package provides a convenient way to expose an extensible API with
14415enforced method signatures and consistent documentation.")
14416 (license license:expat)))
14417
14418(define-public python-jaraco-classes
14419 (package
14420 (name "python-jaraco-classes")
14421 (version "3.4.0")
14422 (source
14423 (origin
14424 (method url-fetch)
14425 (uri (pypi-uri "jaraco.classes" version))
14426 (sha256
14427 (base32 "1k9s7wxhsy15730qab8bry7kpgl4yk3wch45ikfw0f823nsj9827"))))
14428 (build-system pyproject-build-system)
14429 (arguments
14430 (list ; Do not test the myproject.toml build as it pulls dependencies.
14431 #:test-flags '(list "-k" "not project")))
14432 (native-inputs
14433 (list python-pytest
14434 python-setuptools))
14435 (propagated-inputs
14436 (list python-more-itertools))
14437 (home-page "https://github.com/jaraco/jaraco.classes")
14438 (synopsis "Utility functions for Python class constructs")
14439 (description "This Python library contains utility functions for Python
14440class constructs.")
14441 (license license:expat)))
14442
14443(define-public python-jaraco-collections
14444 (package
14445 (name "python-jaraco-collections")
14446 (version "5.2.1")
14447 (source
14448 (origin
14449 (method url-fetch)
14450 (uri (pypi-uri "jaraco_collections" version))
14451 (sha256
14452 (base32 "1v8qza70spm4d822bm7wq3j2cyd33nqg2i87n99spw6np9q1kf6s"))))
14453 (build-system pyproject-build-system)
14454 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
14455 ;; download dependencies.
14456 (arguments
14457 '(#:test-flags '("-k" "not project")))
14458 (native-inputs
14459 (list python-pytest
14460 python-setuptools
14461 python-setuptools-scm
14462 python-wheel))
14463 (propagated-inputs
14464 (list python-jaraco-text))
14465 (home-page "https://github.com/jaraco/jaraco.collections")
14466 (synopsis "Provides various collection objects")
14467 (description
14468 "This package provides models and classes to supplement the
14469standard library @code{collections} module. Examples include
14470@itemize
14471@item
14472RangeMap: A mapping that accepts a range of values for keys.
14473@item
14474Projection: A subset over an existing mapping.
14475@item
14476KeyTransformingDict: Generalized mapping with keys transformed by a function.
14477@item
14478FoldedCaseKeyedDict: A dict whose string keys are case-insensitive.
14479@item
14480BijectiveMap: A map where keys map to values and values back to their keys.
14481@item
14482ItemsAsAttributes: A mapping mix-in exposing items as attributes.
14483@item
14484IdentityOverrideMap: A map whose keys map by default to themselves unless overridden.
14485@item
14486FrozenDict: A hashable, immutable map.
14487@item
14488Enumeration: An object whose keys are enumerated.
14489@item
14490Everything: A container that contains all things.
14491@item
14492Least, Greatest: Objects that are always less than or greater than any other.
14493@item
14494pop_all: Return all items from the mutable sequence and remove them from that sequence.
14495@item
14496DictStack: A stack of dicts, great for sharing scopes.
14497@item
14498WeightedLookup: A specialized RangeMap for selecting an item by weights.
14499@end itemize")
14500 (license license:expat)))
14501
14502(define-public python-jaraco-context
14503 (package
14504 (name "python-jaraco-context")
14505 (version "6.0.1")
14506 (source
14507 (origin
14508 (method url-fetch)
14509 (uri (pypi-uri "jaraco_context" version))
14510 (sha256
14511 (base32 "1cyija3n4481r1ykxdx342m07lrfyg4ygbn0in9i82yganjlxblv"))))
14512 (build-system pyproject-build-system)
14513 (arguments
14514 (list #:tests? #f)) ;no tests in PyPI archive and Git checkout
14515 (native-inputs
14516 (list python-setuptools
14517 python-setuptools-scm
14518 python-wheel))
14519 (propagated-inputs
14520 (list python-backports-tarfile))
14521 (home-page "https://github.com/jaraco/jaraco.context")
14522 (synopsis "Context managers Python library")
14523 (description "This Python library provides context managers-related
14524procedures.")
14525 (license license:expat)))
14526
14527(define-public python-jaraco-functools
14528 (package
14529 (name "python-jaraco-functools")
14530 (version "4.2.1")
14531 (source
14532 (origin
14533 (method url-fetch)
14534 (uri (pypi-uri "jaraco_functools" version))
14535 (sha256
14536 (base32 "0lvk12qbl5zd1ikr6xzflj1jcs3vwgmwgy2k63x5dkmbrjzllqxy"))))
14537 (build-system pyproject-build-system)
14538 (arguments
14539 (list #:tests? (not (%current-target-system))
14540 ;; Do not test the myproject.toml build as it pulls dependencies.
14541 ;; Do not run a test that tries to emulate a broken proprietary
14542 ;; CI set-up, fails to do so correctly, and then throws an error.
14543 #:test-flags
14544 '(list "-k" "not project and not test_function_throttled")))
14545 (native-inputs
14546 (list python-jaraco-classes
14547 python-pytest
14548 python-setuptools
14549 python-setuptools-scm
14550 python-wheel))
14551 (propagated-inputs (list python-more-itertools))
14552 (home-page "https://github.com/jaraco/jaraco.functools")
14553 (synopsis "Python library extending Python's @code{functools}")
14554 (description "This library extends the standard @code{functools} Python
14555module with a few extra procedures.")
14556 (license license:expat)))
14557
14558(define-public python-jaraco-packaging
14559 (package
14560 (name "python-jaraco-packaging")
14561 (version "9.4.0") ;the latest version compatible with [email protected]
14562 (source
14563 (origin
14564 (method url-fetch)
14565 (uri (pypi-uri "jaraco.packaging" version))
14566 (sha256
14567 (base32
14568 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
14569 (build-system pyproject-build-system)
14570 (arguments
14571 (list #:tests? #f)) ;no tests in PyPI archive
14572 (native-inputs
14573 (list python-setuptools
14574 python-setuptools-scm))
14575 (propagated-inputs
14576 (list python-pypa-build
14577 python-virtualenv
14578 python-domdf-python-tools
14579 python-jaraco-context
14580 python-sphinx))
14581 (home-page "https://github.com/jaraco/jaraco.packaging")
14582 (synopsis "Tools to supplement packaging Python releases")
14583 (description
14584 "This package provides various tools to supplement packaging Python
14585releases.")
14586 (license license:expat)))
14587
14588(define-public python-jaraco-path
14589 (package
14590 (name "python-jaraco-path")
14591 (version "3.7.2")
14592 (source
14593 (origin
14594 (method git-fetch)
14595 (uri (git-reference
14596 (url "https://github.com/jaraco/jaraco.path")
14597 (commit (string-append "v" version))))
14598 (file-name (git-file-name name version))
14599 (sha256
14600 (base32 "12bj9za1yp0yn0ppya6a4kwgmh7hvmw64x7ivp4y0sbv20r0vfdq"))))
14601 (build-system pyproject-build-system)
14602 (arguments
14603 (list
14604 #:phases
14605 #~(modify-phases %standard-phases
14606 (add-after 'unpack 'set-version
14607 (lambda _
14608 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14609 (native-inputs
14610 (list python-pytest python-setuptools python-setuptools-scm))
14611 (home-page "https://github.com/jaraco/jaraco.path")
14612 (synopsis "Miscellaneous path functions")
14613 (description
14614 "This package provides miscellaneous path functions for Python.")
14615 (license license:expat)))
14616
14617(define-public python-jaraco-test
14618 (package
14619 (name "python-jaraco-test")
14620 (version "5.5.1")
14621 (source
14622 (origin
14623 (method url-fetch)
14624 (uri (pypi-uri "jaraco_test" version))
14625 (sha256
14626 (base32 "0xfkly5w4i4npi4pq1g32y8q8iijkq4pfcfs8wcjhfn4amj6212c"))))
14627 (build-system pyproject-build-system)
14628 (arguments
14629 (list #:test-flags '(list "-k" "http")))
14630 (native-inputs
14631 (list python-pytest
14632 python-setuptools))
14633 (propagated-inputs
14634 (list python-jaraco-collections
14635 python-jaraco-context
14636 python-jaraco-functools))
14637 (home-page "https://github.com/jaraco/jaraco.test")
14638 (synopsis "Testing support by jaraco")
14639 (description "This package provides testing support by jaraco.")
14640 (license license:expat)))
14641
14642(define-public python-jaraco-text
14643 (package
14644 (name "python-jaraco-text")
14645 (version "4.0.0")
14646 (source
14647 (origin
14648 (method url-fetch)
14649 (uri (pypi-uri "jaraco_text" version))
14650 (sha256
14651 (base32 "1c0dy5jvhigcyryi2h8n1m87dnhyxr7w01n9shwzkdlslv7gwwav"))))
14652 (build-system pyproject-build-system)
14653 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
14654 ;; download dependencies.
14655 (arguments
14656 '(#:test-flags '("-k" "not project")))
14657 (native-inputs
14658 (list python-pytest
14659 python-setuptools
14660 python-setuptools-scm))
14661 (propagated-inputs
14662 (list python-autocommand
14663 python-inflect
14664 python-jaraco-context
14665 python-jaraco-functools
14666 python-more-itertools))
14667 (home-page "https://github.com/jaraco/jaraco.text")
14668 (synopsis "Provides various routines for text manipulation")
14669 (description
14670 "This package provides handy routines for dealing with text,
14671such as wrapping, substitution, trimming, stripping, prefix and suffix
14672removal, line continuation, indentation, comment processing, identifier
14673processing, values parsing, case insensitive comparison, and more.")
14674 (license license:expat)))
14675
14676(define-public python-jaraco-vcs
14677 (package
14678 (name "python-jaraco-vcs")
14679 (version "2.4.1")
14680 (source
14681 (origin
14682 (method git-fetch)
14683 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
14684 (commit (string-append "v" version))))
14685 (file-name (git-file-name name version))
14686 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
14687 (build-system pyproject-build-system)
14688 (arguments
14689 (list
14690 #:test-flags
14691 ;; Ignore doctests.
14692 #~(list "--ignore-glob=jaraco/vcs/*.py")
14693 #:phases
14694 #~(modify-phases %standard-phases
14695 (add-after 'unpack 'set-version
14696 (lambda _
14697 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14698 (propagated-inputs (list python-jaraco-classes
14699 python-jaraco-path
14700 python-jaraco-versioning
14701 python-more-itertools
14702 python-packaging
14703 python-dateutil
14704 python-tempora))
14705 (native-inputs (list python-pygments
14706 python-pytest
14707 python-pytest-home
14708 python-setuptools
14709 python-setuptools-scm))
14710 (home-page "https://github.com/jaraco/jaraco.vcs")
14711 (synopsis "Utilities for working with VCS repositories")
14712 (description
14713 "This package provides facilities for working with VCS repositories in
14714Python.")
14715 (license license:expat)))
14716
14717(define-public python-jaraco-versioning
14718 (package
14719 (name "python-jaraco-versioning")
14720 (version "1.1.0")
14721 (source
14722 (origin
14723 (method git-fetch)
14724 (uri (git-reference
14725 (url "https://github.com/jaraco/jaraco.versioning")
14726 (commit (string-append "v" version))))
14727 (file-name (git-file-name name version))
14728 (sha256
14729 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
14730 (build-system pyproject-build-system)
14731 (arguments
14732 (list
14733 #:phases
14734 #~(modify-phases %standard-phases
14735 (add-after 'unpack 'set-version
14736 (lambda _
14737 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14738 (propagated-inputs (list python-packaging))
14739 (native-inputs
14740 (list python-pytest python-setuptools python-setuptools-scm))
14741 (home-page "https://github.com/jaraco/jaraco.versioning")
14742 (synopsis "Version manipulation utils")
14743 (description
14744 "This package builds upon @code{python-packaging} to provide more
14745sophisticated version manipulation.")
14746 (license license:expat)))
14747
14748(define-public python-pypytools
14749 (package
14750 (name "python-pypytools")
14751 (version "0.6.2")
14752 (source
14753 (origin
14754 (method git-fetch)
14755 (uri (git-reference
14756 (url "https://github.com/antocuni/pypytools/")
14757 (commit version)))
14758 (file-name (git-file-name name version))
14759 (sha256
14760 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
14761 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
14762 (build-system pyproject-build-system)
14763 (arguments
14764 (list
14765 ;; These tests are using deprecated py.code module.
14766 #:test-flags
14767 #~(list
14768 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
14769 "--deselect=pypytools/testing/test_codegen.py::test_def_"
14770 "--deselect=pypytools/testing/test_codegen.py::test_compile"
14771 "--ignore=pypytools/testing/test_unroll.py"
14772 ;; clone_func returns an object of the wrong type.
14773 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
14774 (native-inputs
14775 (list python-freezegun
14776 python-numpy
14777 python-pytest
14778 python-setuptools))
14779 (propagated-inputs (list python-py))
14780 (home-page "https://github.com/antocuni/pypytools/")
14781 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
14782 (description
14783 "This package provides a collection of useful tools to use PyPy-specific
14784features, with CPython fallbacks.")
14785 (license license:x11)))
14786
14787(define-public python-simplegeneric
14788 (package
14789 (name "python-simplegeneric")
14790 (version "0.8.1")
14791 (source
14792 (origin
14793 (method url-fetch)
14794 (uri (pypi-uri "simplegeneric" version ".zip"))
14795 (sha256
14796 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
14797 (build-system pyproject-build-system)
14798 (arguments
14799 (list
14800 #:test-backend #~'custom
14801 #:test-flags #~(list "-m" "simplegeneric")))
14802 (native-inputs
14803 (list unzip python-setuptools))
14804 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
14805 (synopsis "Python module for simple generic functions")
14806 (description
14807 "The simplegeneric module lets you define simple single-dispatch generic
14808functions, akin to Python’s built-in generic functions like @code{len()},
14809@code{iter()} and so on. However, instead of using specially-named methods,
14810these generic functions use simple lookup tables, akin to those used by
14811e.g. @code{pickle.dump()} and other generic functions found in the Python
14812standard library.")
14813 (license license:zpl2.1)))
14814
14815(define-public python-ipython-genutils
14816 ;; TODO: This package is retired, check if can be removed, see description.
14817 (package
14818 (name "python-ipython-genutils")
14819 (version "0.1.0")
14820 (source
14821 (origin
14822 (method url-fetch)
14823 (uri (pypi-uri "ipython_genutils" version))
14824 (sha256
14825 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
14826 (build-system pyproject-build-system)
14827 (arguments `(#:tests? #f)) ; no tests
14828 (native-inputs
14829 (list python-setuptools))
14830 (home-page "https://ipython.org")
14831 (synopsis "Vestigial utilities from IPython")
14832 (description
14833 "This package provides retired utilities from IPython. No packages
14834outside IPython/Jupyter should depend on it.
14835
14836This package shouldn't exist. It contains some common utilities shared by
14837Jupyter and IPython projects during The Big Split. As soon as possible, those
14838packages will remove their dependency on this, and this package will go
14839away.")
14840 (license license:bsd-3)))
14841
14842;;; Variant used to break a cycle with python-ipykernel.
14843(define-public python-ipyparallel-bootstrap
14844 (hidden-package
14845 (package
14846 (name "python-ipyparallel-bootstrap")
14847 (version "9.0.1")
14848 (source
14849 (origin
14850 (method url-fetch)
14851 (uri (pypi-uri "ipyparallel" version))
14852 (sha256
14853 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
14854 (build-system pyproject-build-system)
14855 (arguments
14856 (list
14857 #:tests? #f
14858 #:phases #~(modify-phases %standard-phases
14859 ;; The python-ipykernel is normally propagated but is
14860 ;; removed from this package to break the cycle.
14861 (delete 'sanity-check))))
14862 (native-inputs
14863 (list python-hatchling))
14864 (propagated-inputs
14865 (list python-dateutil
14866 python-decorator
14867 python-entrypoints
14868 python-ipython
14869 ;; python-ipykernel is omitted here to break a cycle.
14870 python-jupyter-client-bootstrap
14871 python-psutil
14872 python-pyzmq
14873 python-tornado-6
14874 python-tqdm
14875 python-traitlets))
14876 (home-page "https://ipython.org/")
14877 (synopsis "Interactive Parallel Computing with IPython")
14878 (description
14879 "@code{ipyparallel} is a Python package and collection of CLI scripts
14880for controlling clusters for Jupyter. @code{ipyparallel} contains the
14881following CLI scripts:
14882@enumerate
14883@item ipcluster - start/stop a cluster
14884@item ipcontroller - start a scheduler
14885@item ipengine - start an engine
14886@end enumerate")
14887 (license license:bsd-3))))
14888
14889(define-public python-ipyparallel
14890 (package
14891 (inherit python-ipyparallel-bootstrap)
14892 (name "python-ipyparallel")
14893 (arguments
14894 (list #:test-flags #~(list "--pyargs" "ipyparallel")))
14895 (native-inputs
14896 (modify-inputs (package-native-inputs python-ipyparallel-bootstrap)
14897 (append python-ipython
14898 python-pytest
14899 python-pytest-asyncio
14900 python-pytest-tornado
14901 python-testpath)))
14902 (propagated-inputs
14903 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
14904 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
14905 (append python-ipykernel)))
14906 (properties (alist-delete 'hidden? (package-properties
14907 python-ipyparallel-bootstrap)))))
14908
14909;; TODO: Package python-jupysql which is the maintained fork of this one.
14910(define-public python-ipython-sql
14911 (package
14912 (name "python-ipython-sql")
14913 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
14914 (revision . "0")))
14915 (version (git-version "0.5.0"
14916 (assoc-ref properties 'revision)
14917 (assoc-ref properties 'commit)))
14918 (source
14919 (origin
14920 (method git-fetch)
14921 (uri (git-reference
14922 (url "https://github.com/catherinedevlin/ipython-sql")
14923 (commit (assoc-ref properties 'commit))))
14924 (file-name (git-file-name name version))
14925 (sha256
14926 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
14927 (build-system pyproject-build-system)
14928 (arguments
14929 (list #:tests? #f ;Fail because of prettytable.
14930 #:phases
14931 #~(modify-phases %standard-phases
14932 (replace 'check
14933 (lambda* (#:key tests? #:allow-other-keys)
14934 (setenv "HOME" (getcwd))
14935 (if tests?
14936 (invoke "ipython" "-c"
14937 "import pytest; pytest.main(['.'])")
14938 (format #t "test suite not run.~%")))))))
14939 (native-inputs (list python-pytest python-setuptools))
14940 (propagated-inputs
14941 (list python-ipython
14942 python-ipython-genutils
14943 python-prettytable
14944 python-sqlalchemy-2
14945 python-sqlparse))
14946 (home-page "https://github.com/catherinedevlin/ipython-sql")
14947 (synopsis "RDBMS access via IPython")
14948 (description "This library connects to a database, using SQLAlchemy URL
14949connect strings, then issue SQL commands within IPython or IPython Notebook.")
14950 (license license:expat)))
14951
14952(define-public python-optree
14953 (package
14954 (name "python-optree")
14955 (version "0.14.0")
14956 (source
14957 (origin
14958 (method git-fetch)
14959 (uri (git-reference
14960 (url "https://github.com/metaopt/optree")
14961 (commit (string-append "v" version))))
14962 (file-name (git-file-name name version))
14963 (sha256
14964 (base32
14965 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
14966 (build-system pyproject-build-system)
14967 (arguments
14968 (list
14969 #:test-flags
14970 ;; These tests fails due to a circular import
14971 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
14972 " and not test_import_no_warnings"))))
14973 (propagated-inputs (list python-typing-extensions))
14974 (native-inputs
14975 (list python-pytest
14976 python-setuptools
14977 python-wheel
14978 cmake-minimal
14979 pybind11))
14980 (home-page "https://github.com/metaopt/optree")
14981 (synopsis "Optimized PyTree Utilities")
14982 (description "This package contains operations on PyTrees (a tree made of
14983container data structures in Python).")
14984 (license license:asl2.0)))
14985
14986(define-public python-backcall
14987 (package
14988 (name "python-backcall")
14989 (version "0.2.0")
14990 (source
14991 (origin
14992 (method git-fetch)
14993 (uri (git-reference
14994 (url "https://github.com/takluyver/backcall/")
14995 (commit version)))
14996 (file-name (git-file-name name version))
14997 (sha256
14998 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
14999 (build-system pyproject-build-system)
15000 (native-inputs (list python-flit-core python-pytest))
15001 (home-page "https://github.com/takluyver/backcall/")
15002 (synopsis "Specifications for callback functions passed in to an API")
15003 (description
15004 "If your code lets other people supply callback functions, it's important
15005to specify the function signature you expect, and check that functions support
15006that. Adding extra parameters later would break other peoples code unless
15007you're careful. The @code{backcall} package provides a way of specifying the
15008callback signature using a prototype function.")
15009 (license license:bsd-3)))
15010
15011(define-public python-pubmed-parser
15012 (package
15013 (name "python-pubmed-parser")
15014 (version "0.5.1")
15015 (source (origin
15016 (method git-fetch)
15017 (uri (git-reference
15018 (url "https://github.com/titipata/pubmed_parser")
15019 (commit version)))
15020 (file-name (git-file-name name version))
15021 (sha256
15022 (base32
15023 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
15024 (build-system pyproject-build-system)
15025 (arguments (list #:tests? #f)) ;; Tests require internet
15026 (native-inputs
15027 (list python-setuptools))
15028 (propagated-inputs
15029 (list python-lxml
15030 python-numpy
15031 python-requests
15032 python-six ;hard dependency
15033 python-unidecode))
15034 (home-page "https://titipata.github.io/pubmed_parser/")
15035 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
15036 (description
15037 "This package provides a Python parser for Pubmed Open-Access Subset and
15038MEDLINE XML repository.")
15039 (license license:expat)))
15040
15041(define-public python-pure-eval
15042 (package
15043 (name "python-pure-eval")
15044 (version "0.2.3")
15045 (source
15046 (origin
15047 (method url-fetch)
15048 (uri (pypi-uri "pure_eval" version))
15049 (sha256
15050 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
15051 (build-system pyproject-build-system)
15052 (native-inputs
15053 (list python-pytest
15054 python-setuptools
15055 python-setuptools-scm
15056 python-wheel))
15057 (home-page "https://github.com/alexmojaki/pure_eval")
15058 (synopsis "Python library to evaluate abstract syntax tree nodes")
15059 (description "The @code{pure_eval} Python library can safely evaluate
15060abstract syntax tree (AST) nodes without side effects.")
15061 (license license:expat)))
15062
15063(define-public python-puremagic
15064 (package
15065 (name "python-puremagic")
15066 (version "1.28")
15067 (source
15068 (origin
15069 (method git-fetch) ;no tests in PyPI archive
15070 (uri (git-reference
15071 (url "https://github.com/cdgriffith/puremagic")
15072 (commit version)))
15073 (file-name (git-file-name name version))
15074 (sha256
15075 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
15076 (build-system pyproject-build-system)
15077 (native-inputs
15078 (list python-pytest python-setuptools python-wheel))
15079 (home-page "https://github.com/cdgriffith/puremagic")
15080 (synopsis "Pure Python implementation of magic file detection")
15081 (description
15082 "This package implements a functionality that will identify a file based
15083off it's magic numbers.")
15084 (license license:expat)))
15085
15086(define-public python-ast-decompiler
15087 (package
15088 (name "python-ast-decompiler")
15089 (version "0.7.0")
15090 (source
15091 (origin
15092 (method url-fetch)
15093 (uri (pypi-uri "ast_decompiler" version))
15094 (sha256
15095 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
15096 ;; We need to manually create an __init__.py file under the tests/
15097 ;; directory, since it is not included in the distributed
15098 ;; version. (See:
15099 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
15100 (modules '((guix build utils)))
15101 (snippet '(call-with-output-file "tests/__init__.py"
15102 (const #t)))))
15103 (build-system pyproject-build-system)
15104 (native-inputs (list python-flit-core python-pytest))
15105 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
15106 (synopsis
15107 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
15108 (description
15109 "This library provides functionality to decompile @acronym{AST, Abstract
15110Syntax Tree} objects, as generated by the standard library @code{ast} module,
15111to Python code.")
15112 (license license:asl2.0)))
15113
15114(define-public python-asttokens
15115 (package
15116 (name "python-asttokens")
15117 (version "3.0.0")
15118 (source
15119 (origin
15120 (method url-fetch)
15121 (uri (pypi-uri "asttokens" version))
15122 (sha256
15123 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
15124 (build-system pyproject-build-system)
15125 (native-inputs
15126 (list python-astroid
15127 python-pytest
15128 python-setuptools
15129 python-setuptools-scm
15130 python-wheel))
15131 (home-page "https://github.com/gristlabs/asttokens")
15132 (synopsis "Python library to annotate abstract syntax trees")
15133 (description "The @code{asttokens} module annotates Python abstract syntax
15134trees (ASTs) with the positions of tokens and text in the source code that
15135generated them. It makes it possible for tools that work with logical AST
15136nodes to find the particular text that resulted in those nodes, for example
15137for automated refactoring or highlighting.")
15138 (license license:asl2.0)))
15139
15140(define-public python-littleutils
15141 (package
15142 (name "python-littleutils")
15143 (version "0.2.4")
15144 (source
15145 (origin
15146 (method url-fetch)
15147 (uri (pypi-uri "littleutils" version))
15148 (sha256
15149 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
15150 (build-system pyproject-build-system)
15151 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
15152 (native-inputs
15153 (list python-setuptools
15154 python-setuptools-scm
15155 python-wheel))
15156 (home-page "https://github.com/alexmojaki/littleutils")
15157 (synopsis "Python utility function collection")
15158 (description "@code{littleutils} is a small collection of Python utility
15159functions, useful in the context of writing unit tests among other uses.")
15160 (license license:expat)))
15161
15162(define-public python-ipython
15163 (package
15164 (name "python-ipython")
15165 (version "9.8.0")
15166 (source
15167 (origin
15168 (method git-fetch)
15169 (uri (git-reference
15170 (url "https://github.com/ipython/ipython")
15171 (commit version)))
15172 (file-name (git-file-name name version))
15173 (sha256
15174 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
15175 (build-system pyproject-build-system)
15176 (arguments
15177 (list
15178 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
15179 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
15180 #:test-backend #~'custom
15181 ;; XXX: It's a workaround to fix the error with module import
15182 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
15183 ;; <https://codeberg.org/guix/guix/issues/2108>.
15184 #:test-flags
15185 #~(list "-m" "pytest" "-vv"
15186 "-k" (string-join
15187 ;; These need git.
15188 (list "not test_json_getsysinfo"
15189 "IPython.utils.sysinfo.sys_info"
15190 ;; Failed: DID NOT RAISE
15191 "test_timeit_raise_on_interrupt"
15192 "test_script_raise_on_interrupt"
15193 "test_time_raise_on_interrupt")
15194 " and not "))
15195 #:phases
15196 #~(modify-phases %standard-phases
15197 (add-before 'check 'pre-check
15198 (lambda _
15199 (setenv "HOME" "/tmp"))))))
15200 (propagated-inputs
15201 (list python-decorator
15202 python-ipython-pygments-lexers
15203 python-jedi
15204 python-matplotlib-inline
15205 python-pexpect
15206 python-prompt-toolkit
15207 python-pygments
15208 python-stack-data
15209 python-traitlets
15210 python-typing-extensions))
15211 (native-inputs
15212 (list python-pytest
15213 python-pytest-asyncio
15214 python-setuptools
15215 python-testpath
15216 ;; [extra]
15217 python-curio
15218 ;; python-ipykernel ;cycles
15219 ;; python-jupyter-ai ;not packaged
15220 python-matplotlib
15221 ;; python-nbclient ;cycles
15222 python-nbformat
15223 python-numpy
15224 python-pandas
15225 python-trio))
15226 (home-page "https://ipython.org")
15227 (synopsis "IPython is a tool for interactive computing in Python")
15228 (description
15229 "IPython provides a rich architecture for interactive computing with:
15230Powerful interactive shells, a browser-based notebook, support for interactive
15231data visualization, embeddable interpreters and tools for parallel
15232computing.")
15233 (properties '((cpe-name . "ipython")))
15234 (license license:bsd-3)))
15235
15236(define-public python-ipython-documentation
15237 (package
15238 (inherit python-ipython)
15239 (name "python-ipython-documentation")
15240 (version (package-version python-ipython))
15241 (arguments
15242 (list
15243 #:phases
15244 #~(modify-phases %standard-phases
15245 (add-after 'unpack 'set-pythonpath
15246 (lambda _
15247 ;; Ensure this fixed (via the
15248 ;; "python-ipython-documentation-chars.patch" patch) copy of
15249 ;; IPython gets used.
15250 (setenv "PYTHONPATH" (string-append (getcwd)))))
15251 (add-before 'build 'configure-sphinx-for-xelatex
15252 (lambda _
15253 ;; Use XeLaTeX instead of PDFLaTeX, as it can
15254 ;; cope with the Unicode characters present in the
15255 ;; contributors page, for example.
15256 (substitute* "docs/source/conf.py"
15257 (("project = 'IPython'.*" all)
15258 (string-append all "latex_engine = 'xelatex'\n")))
15259 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
15260 ;; FreeFont font to be searched via its extension, which uses
15261 ;; kpathsea instead of fontconfig and fail (see:
15262 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
15263 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
15264 ;; GUIX_TEXMF.
15265 (mkdir-p "texmf-dist/fonts/opentype/public")
15266 (symlink (string-append
15267 #$(this-package-native-input "font-gnu-freefont")
15268 "/share/fonts/opentype")
15269 (string-append
15270 (getcwd) "/"
15271 "texmf-dist/fonts/opentype/public/gnu-freefont"))
15272 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
15273 (getcwd) "/texmf-dist"))))
15274 (delete 'build)
15275 (delete 'check)
15276 (replace 'install
15277 (lambda* (#:key outputs #:allow-other-keys)
15278 (let* ((data (string-append #$output "/share"))
15279 (doc (string-append data "/doc/" #$name "-" #$version))
15280 (html (string-append doc "/html"))
15281 (info (string-append data "/info")))
15282 (invoke "make" "-C" "docs" "info" "html" "pdf"
15283 (string-append "SPHINXOPTS=-j"
15284 (number->string (parallel-job-count))))
15285 (install-file "COPYING.rst" doc)
15286 (copy-recursively "examples" (string-append doc "/examples"))
15287 ;; Install HTML documentation.
15288 (copy-recursively "docs/build/html" html)
15289 ;; Likewise for the PDF.
15290 (install-file "docs/build/latex/ipython.pdf" doc)
15291 ;; Likewise for the info manual.
15292 (install-file "docs/build/texinfo/ipython.info" info)
15293 (symlink (string-append html "/_images")
15294 (string-append info "/ipython-figures"))))))))
15295 (native-inputs
15296 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
15297 font-gnu-freefont
15298 graphviz
15299 python-docrepr
15300 python-ipykernel
15301 python-sphinx
15302 python-sphinx-rtd-theme
15303 texinfo
15304 (texlive-local-tree
15305 (list texlive-latexmk
15306 texlive-polyglossia
15307 texlive-xetex
15308 texlive-xindy))))))
15309
15310;; A bare minimal package, mainly to use in tests and reduce closure
15311;; size. Tests are left out in the main package to slim down native-inputs.
15312(define-public python-ipython-minimal
15313 (package/inherit python-ipython
15314 (name "python-ipython-minimal")
15315 (arguments
15316 (list #:tests? #f))
15317 (native-inputs
15318 (list python-setuptools))))
15319
15320(define-public python-ipython-pygments-lexers
15321 (package
15322 (name "python-ipython-pygments-lexers")
15323 (version "1.1.1")
15324 (source
15325 (origin
15326 (method git-fetch)
15327 (uri (git-reference
15328 (url "https://github.com/ipython/ipython-pygments-lexers/")
15329 (commit version)))
15330 (file-name (git-file-name name version))
15331 (sha256
15332 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
15333 (build-system pyproject-build-system)
15334 (propagated-inputs (list python-pygments))
15335 (native-inputs (list python-flit-core python-pytest))
15336 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
15337 (synopsis "Plugin for IPython code sessions")
15338 (description
15339 "This package defines a variety of Pygments lexers for highlighting IPython
15340code.")
15341 (license license:bsd-3)))
15342
15343(define-public python-pydbus
15344 (package
15345 (name "python-pydbus")
15346 (version "0.6.0")
15347 (source
15348 (origin
15349 (method url-fetch)
15350 (uri (pypi-uri "pydbus" version))
15351 (sha256
15352 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
15353 (build-system pyproject-build-system)
15354 (arguments
15355 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
15356 #:phases
15357 #~(modify-phases %standard-phases
15358 (add-after 'unpack 'fix-comparability-with-pygobject
15359 (lambda _
15360 (substitute* "pydbus/_inspect3.py"
15361 (("getargspec")
15362 "getfullargspec")))))))
15363 (native-inputs
15364 (list python-setuptools
15365 python-wheel))
15366 (propagated-inputs
15367 (list python-pygobject))
15368 (home-page "https://github.com/LEW21/pydbus")
15369 (synopsis "Pythonic D-Bus library")
15370 (description
15371 "Pydbus provides a pythonic interface to the D-Bus message bus system.
15372Pydbus can be used to access remote objects and also for object publication.
15373It is based on PyGI, the Python GObject Introspection bindings, which is the
15374recommended way to use GLib from Python.")
15375 (license license:lgpl2.1+)))
15376
15377(define-public python-dbus
15378 (package
15379 (name "python-dbus")
15380 (version "1.2.18")
15381 (source
15382 (origin
15383 (method url-fetch)
15384 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
15385 "dbus-python-" version ".tar.gz"))
15386 (sha256
15387 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
15388 (build-system gnu-build-system)
15389 (native-inputs
15390 (list pkg-config))
15391 (inputs
15392 `(("python" ,python-wrapper)
15393 ("dbus-glib" ,dbus-glib)))
15394 (synopsis "Python bindings for D-bus")
15395 (description "python-dbus provides bindings for libdbus, the reference
15396implementation of D-Bus.")
15397 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
15398 (properties `((python2-variant . ,(delay python2-dbus))))
15399 (license license:expat)))
15400
15401(define-public python-notify2
15402 (package
15403 (name "python-notify2")
15404 (version "0.3.1")
15405 (source
15406 (origin
15407 (method url-fetch)
15408 (uri (pypi-uri "notify2" version))
15409 (sha256
15410 (base32
15411 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
15412 (build-system pyproject-build-system)
15413 (arguments (list #:tests? #f)) ; tests depend on system state
15414 (native-inputs (list python-setuptools))
15415 (propagated-inputs (list python-dbus))
15416 (home-page "https://bitbucket.org/takluyver/pynotify2")
15417 (synopsis "Python interface to D-Bus notifications")
15418 (description
15419 "Pynotify2 provides a Python interface for sending D-Bus notifications.
15420It is a reimplementation of pynotify in pure Python, and an alternative to
15421the GObject Introspection bindings to libnotify for non-GTK applications.")
15422 (license (list license:bsd-2
15423 license:lgpl2.1+))))
15424
15425;; beautifulsoup4 has a totally different namespace than 3.x,
15426;; and pypi seems to put it under its own name, so I guess we should too
15427(define-public python-beautifulsoup4
15428 (package
15429 (name "python-beautifulsoup4")
15430 (version "4.14.3")
15431 (source
15432 (origin
15433 (method url-fetch)
15434 (uri (pypi-uri "beautifulsoup4" version))
15435 (sha256
15436 (base32
15437 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
15438 (build-system pyproject-build-system)
15439 (native-inputs
15440 (list python-hatchling
15441 python-pytest))
15442 (propagated-inputs
15443 (list python-soupsieve
15444 python-typing-extensions
15445 ;; [optional]
15446 python-cchardet
15447 python-chardet
15448 python-charset-normalizer
15449 python-html5lib
15450 python-lxml))
15451 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
15452 (synopsis "Python screen-scraping library")
15453 (description
15454 "Beautiful Soup is a Python library designed for rapidly setting up
15455screen-scraping projects. It offers Pythonic idioms for navigating,
15456searching, and modifying a parse tree, providing a toolkit for
15457dissecting a document and extracting what you need. It automatically
15458converts incoming documents to Unicode and outgoing documents to UTF-8.")
15459 (license license:expat)))
15460
15461(define-public python-beautifulsoup4-bootstrap
15462 (hidden-package
15463 (package/inherit python-beautifulsoup4
15464 (arguments
15465 (list #:tests? #f))
15466 (native-inputs
15467 (list python-hatchling))
15468 (propagated-inputs '()))))
15469
15470(define-public python-soupsieve
15471 (package
15472 (name "python-soupsieve")
15473 (version "2.7")
15474 (source
15475 (origin
15476 (method url-fetch)
15477 (uri (pypi-uri "soupsieve" version))
15478 (sha256
15479 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
15480 (build-system pyproject-build-system)
15481 (native-inputs
15482 (list python-beautifulsoup4-bootstrap
15483 python-hatchling
15484 python-pytest))
15485 (home-page "https://github.com/facelessuser/soupsieve")
15486 (synopsis "CSS selector library")
15487 (description
15488 "Soup Sieve is a CSS selector library designed to be used with Beautiful
15489Soup 4. It aims to provide selecting, matching, and filtering using modern
15490CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
15491specifications up through the latest CSS level 4 drafts and beyond (though
15492some are not yet implemented).")
15493 (license license:expat)))
15494
15495
15496(define-public python-netifaces
15497 (package
15498 (name "python-netifaces")
15499 (version "0.11.0")
15500 (source
15501 (origin
15502 (method url-fetch)
15503 (uri (pypi-uri "netifaces" version))
15504 (sha256
15505 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
15506 (build-system pyproject-build-system)
15507 (arguments
15508 (list
15509 #:test-backend #~'custom
15510 #:test-flags #~(list "test.py")))
15511 (native-inputs (list python-setuptools))
15512 (home-page "https://github.com/al45tair/netifaces")
15513 (synopsis "Python module for portable network interface information")
15514 (description
15515 "Netifaces is a Python module providing information on network
15516interfaces in an easy and portable manner.")
15517 (license license:expat)))
15518
15519(define-public python-networkx
15520 (package
15521 (name "python-networkx")
15522 (version "3.4.2")
15523 (source
15524 (origin
15525 (method url-fetch)
15526 (uri (pypi-uri "networkx" version))
15527 (sha256
15528 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
15529 (build-system pyproject-build-system)
15530 (arguments
15531 (list
15532 #:test-flags
15533 #~(list "--numprocesses" (number->string (parallel-job-count)))))
15534 (native-inputs
15535 (list python-pytest
15536 python-pytest-xdist
15537 python-setuptools
15538 python-wheel))
15539 (propagated-inputs
15540 (list python-decorator))
15541 (home-page "https://networkx.github.io/")
15542 (synopsis "Python module for creating and manipulating graphs and networks")
15543 (description
15544 "NetworkX is a Python package for the creation, manipulation, and study
15545of the structure, dynamics, and functions of complex networks.")
15546 (license license:bsd-3)))
15547
15548(define-public python-datrie
15549 (package
15550 (name "python-datrie")
15551 (version "0.8.3")
15552 (source
15553 (origin
15554 (method git-fetch)
15555 (uri (git-reference
15556 (url "https://github.com/kmike/datrie")
15557 (commit version)))
15558 (file-name (git-file-name name version))
15559 (sha256
15560 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
15561 (build-system pyproject-build-system)
15562 (arguments
15563 (list
15564 #:phases
15565 #~(modify-phases %standard-phases
15566 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
15567 (lambda* (#:key inputs #:allow-other-keys)
15568 (let* ((headers (search-input-directory inputs
15569 "include/datrie"))
15570 (base (dirname (dirname headers))))
15571 (symlink headers "libdatrie/datrie")
15572 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
15573 (add-before 'build 'relax-gcc-14-strictness
15574 (lambda _
15575 (setenv "CFLAGS"
15576 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
15577 (native-inputs
15578 (list python-cython python-hypothesis python-pytest python-setuptools))
15579 (inputs (list libdatrie))
15580 (home-page "https://github.com/kmike/datrie")
15581 (synopsis "Fast, efficiently stored trie for Python")
15582 (description
15583 "This package provides a fast, efficiently stored trie implementation for
15584Python.")
15585 (license license:lgpl2.1+)))
15586
15587(define-public python-amply
15588 (package
15589 (name "python-amply")
15590 (version "0.1.6")
15591 (source
15592 (origin
15593 (method url-fetch)
15594 (uri (pypi-uri "amply" version))
15595 (sha256
15596 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
15597 (build-system pyproject-build-system)
15598 (native-inputs
15599 (list python-pytest
15600 python-setuptools
15601 python-setuptools-scm
15602 python-wheel))
15603 (propagated-inputs
15604 (list python-docutils
15605 python-pyparsing))
15606 (home-page "https://github.com/willu47/amply")
15607 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
15608 (description
15609 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
15610structures.")
15611 (license license:epl1.0)))
15612
15613(define-public python-pulp
15614 ;; When updating, check snakemake@N builds still fine, see:
15615 ;; <https://codeberg.org/guix/guix/issues/4782>.
15616 (package
15617 (name "python-pulp")
15618 (version "2.4")
15619 (source
15620 (origin
15621 (method url-fetch)
15622 (uri (pypi-uri "PuLP" version))
15623 (sha256
15624 (base32
15625 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
15626 (build-system pyproject-build-system)
15627 (arguments
15628 ;; TODO: They need a special setup, see:
15629 ;; <https://codeberg.org/guix/guix/pulls/4908>.
15630 (list #:tests? #f))
15631 (native-inputs
15632 (list python-setuptools))
15633 (propagated-inputs
15634 (list python-amply))
15635 (home-page "https://github.com/coin-or/pulp")
15636 (synopsis "Linear Programming modeler")
15637 (description
15638 "PuLP is a Linear Programming modeler written in Python. PuLP can
15639generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
15640solve linear problems.")
15641 (license license:expat)))
15642
15643(define-public python-py-partiql-parser
15644 (package
15645 (name "python-py-partiql-parser")
15646 (version "0.6.1")
15647 (source
15648 (origin
15649 (method git-fetch) ; no tests data in PyPi package
15650 (uri (git-reference
15651 (url "https://github.com/getmoto/py-partiql-parser")
15652 (commit version)))
15653 (file-name (git-file-name name version))
15654 (sha256
15655 (base32 "008vj0f09gzk6pijwvxs6m860rmszm85is7wgjwifc8y38sqd86s"))))
15656 (build-system pyproject-build-system)
15657 (native-inputs
15658 (list python-hatchling
15659 python-pytest))
15660 (home-page "https://pypi.org/project/py-partiql-parser/")
15661 (synopsis "Pure Python PartiQL Parser")
15662 (description
15663 "This package provides a tokenizer/parser/executor for the PartiQL
15664language, in Python.")
15665 (license license:expat)))
15666
15667(define-public python-py-tes
15668 (package
15669 (name "python-py-tes")
15670 (version "0.4.2")
15671 (source
15672 (origin
15673 (method git-fetch)
15674 (uri (git-reference
15675 (url "https://github.com/ohsu-comp-bio/py-tes")
15676 (commit version)))
15677 (file-name (git-file-name name version))
15678 (sha256
15679 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
15680 (build-system pyproject-build-system)
15681 (native-inputs
15682 (list python-pytest python-requests-mock python-setuptools))
15683 (propagated-inputs
15684 (list python-attrs python-dateutil python-future python-requests))
15685 (home-page "https://github.com/ohsu-comp-bio/py-tes")
15686 (synopsis "Library for communicating with the GA4GH Task Execution API")
15687 (description "This package provides a library for communicating with the
15688GA4GH Task Execution API.")
15689 (license license:expat)))
15690
15691(define-public python-altgraph
15692 (package
15693 (name "python-altgraph")
15694 (version "0.17.4")
15695 (source
15696 (origin
15697 (method url-fetch)
15698 (uri (pypi-uri "altgraph" version))
15699 (sha256
15700 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
15701 (build-system pyproject-build-system)
15702 (native-inputs (list python-pytest python-setuptools python-wheel))
15703 (home-page "https://altgraph.readthedocs.io")
15704 (synopsis "Python graph network package")
15705 (description
15706"This package provides tools for constructing graphs, BFS and DFS
15707traversals, topological sort, shortest paths, and more with graphviz
15708output.")
15709 (license license:expat)))
15710
15711(define-public python-pyqrcode
15712 (package
15713 (name "python-pyqrcode")
15714 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
15715 (revision . "0")))
15716 (version (git-version "1.2.1"
15717 (assoc-ref properties 'revision)
15718 (assoc-ref properties 'commit)))
15719 (source
15720 (origin
15721 (method git-fetch)
15722 (uri (git-reference
15723 (url "https://github.com/mnooner256/pyqrcode")
15724 (commit (assoc-ref properties 'commit))))
15725 (file-name (git-file-name name version))
15726 (sha256
15727 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
15728 (build-system pyproject-build-system)
15729 (arguments (list #:test-backend #~'nose))
15730 (native-inputs (list python-pynose python-pypng python-setuptools))
15731 (home-page "https://github.com/mnooner256/pyqrcode")
15732 (synopsis "QR code generator")
15733 (description
15734 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
15735PNG and terminal output.")
15736 (license license:bsd-3)))
15737
15738(define-public python-seaborn
15739 (package
15740 (name "python-seaborn")
15741 (version "0.13.2")
15742 (source (origin
15743 (method url-fetch)
15744 (uri (pypi-uri "seaborn" version))
15745 (sha256
15746 (base32
15747 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
15748 (build-system pyproject-build-system)
15749 (arguments
15750 (list
15751 ;; 2358 passed, 16 skipped, 6 xfailed, 17 warnings
15752 #:test-flags
15753 #~(list "--numprocesses" (number->string (parallel-job-count))
15754 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
15755 ;; KeyError: 'labelleft'
15756 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
15757 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
15758 ;; AttributeError: module 'numpy' has no attribute
15759 ;; 'VisibleDeprecationWarning'
15760 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
15761 (native-inputs
15762 (list python-flit-core
15763 python-pytest
15764 python-pytest-xdist))
15765 (propagated-inputs
15766 (list python-matplotlib
15767 python-numpy
15768 python-pandas
15769 python-scipy
15770 python-statsmodels))
15771 (home-page "https://seaborn.pydata.org/")
15772 (synopsis "Statistical data visualization")
15773 (description
15774 "Seaborn is a library for making attractive and informative statistical
15775graphics in Python. It is built on top of matplotlib and tightly integrated
15776with the PyData stack, including support for numpy and pandas data structures
15777and statistical routines from scipy and statsmodels.")
15778 (license license:bsd-3)))
15779
15780(define-public python-session-info
15781 (package
15782 (name "python-session-info")
15783 (version "1.0.0")
15784 (source
15785 (origin
15786 (method git-fetch)
15787 (uri (git-reference
15788 (url "https://gitlab.com/joelostblom/session_info")
15789 (commit version)))
15790 (file-name (git-file-name name version))
15791 (sha256
15792 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
15793 (build-system pyproject-build-system)
15794 (arguments (list #:tests? #f)) ; No tests.
15795 (native-inputs (list python-setuptools))
15796 (propagated-inputs (list python-stdlib-list))
15797 (home-page "https://gitlab.com/joelostblom/session_info")
15798 (synopsis "Output version information for modules currently loaded")
15799 (description
15800 "This package outputs version information for modules loaded in the current
15801session, Python, and the OS.")
15802 (license license:bsd-3)))
15803
15804(define-public python-mpmath
15805 (package
15806 (name "python-mpmath")
15807 (version "1.3.0")
15808 (source
15809 (origin
15810 (method git-fetch)
15811 (uri (git-reference
15812 (url "https://github.com/fredrik-johansson/mpmath")
15813 (commit version)))
15814 (file-name (git-file-name name version))
15815 (sha256
15816 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
15817 (build-system pyproject-build-system)
15818 (native-inputs
15819 (list python-pytest
15820 python-setuptools
15821 python-setuptools-scm))
15822 (home-page "https://mpmath.org")
15823 (synopsis "Arbitrary-precision floating-point arithmetic in python")
15824 (description
15825 "@code{mpmath} can be used as an arbitrary-precision substitute for
15826Python's float/complex types and math/cmath modules, but also does much
15827more advanced mathematics.")
15828 (license license:bsd-3)))
15829
15830(define-public python-bigfloat
15831 (package
15832 (name "python-bigfloat")
15833 (version "0.4.0")
15834 (source
15835 (origin
15836 (method url-fetch)
15837 (uri (pypi-uri "bigfloat" version))
15838 (sha256
15839 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
15840 (snippet '(delete-file "mpfr.c"))))
15841 (build-system pyproject-build-system)
15842 (arguments
15843 (list
15844 #:test-flags
15845 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
15846 ;; but I don't know what to do about it.
15847 '(list "-k" "not test_hash")
15848 #:phases
15849 '(modify-phases %standard-phases
15850 (add-before 'build 'cythonize
15851 (lambda _ (invoke "cython" "mpfr.pyx"))))))
15852 (inputs (list mpfr))
15853 (native-inputs
15854 (list python-cython python-pytest python-setuptools python-wheel))
15855 (propagated-inputs
15856 (list python-six))
15857 (home-page "https://github.com/mdickinson/bigfloat")
15858 (synopsis "Arbitrary precision floating-point arithmetic for Python")
15859 (description
15860 "This package provides a Python interface to the MPFR library for
15861multiprecision arithmetic.")
15862 (license license:lgpl3+)))
15863
15864(define-public python-plac
15865 (package
15866 (name "python-plac")
15867 (version "1.3.5")
15868 (source
15869 (origin
15870 (method git-fetch)
15871 (uri (git-reference
15872 (url "https://github.com/ialbert/plac")
15873 (commit (string-append "v" version))))
15874 (file-name (git-file-name name version))
15875 (sha256
15876 (base32 "1n0cbil1snbn0diw8zjm7qs77zpbgmf2k76mc2jknhk1hbnksyak"))))
15877 (build-system pyproject-build-system)
15878 (arguments
15879 (list
15880 #:phases
15881 #~(modify-phases %standard-phases
15882 (add-after 'unpack 'fix-tkinter
15883 (lambda _
15884 (substitute* "plac_tk.py"
15885 (("from Tkinter import Tk")
15886 "from tkinter import Tk")
15887 (("from ScrolledText import ScrolledText")
15888 "from tkinter.scrolledtext import ScrolledText")))))))
15889 (native-inputs
15890 (list (list python "tk") python-pytest python-setuptools))
15891 (home-page "https://github.com/ialbert/plac")
15892 (synopsis "Command line arguments parser")
15893 (description
15894 "This package can generate command line parameters from function
15895signatures.")
15896 (license license:bsd-3)))
15897
15898(define-public python-q
15899 (package
15900 (name "python-q")
15901 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
15902 (revision . "0")))
15903 (version (git-version "2.7"
15904 (assoc-ref properties 'revision)
15905 (assoc-ref properties 'commit)))
15906 (source
15907 (origin
15908 (method git-fetch)
15909 (uri (git-reference
15910 (url "https://github.com/zestyping/q")
15911 (commit (assoc-ref properties 'commit))))
15912 (file-name (git-file-name name version))
15913 (sha256
15914 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
15915 (build-system pyproject-build-system)
15916 (arguments
15917 (list
15918 ;; Deduced from the makefile.
15919 #:test-backend #~'custom
15920 #:test-flags #~(list "test/test_basic.py")
15921 #:phases
15922 #~(modify-phases %standard-phases
15923 (add-before 'check 'configure-tests
15924 (lambda* (#:key tests? #:allow-other-keys)
15925 (when tests?
15926 (setenv "TMPDIR" "/tmp")))))))
15927 (native-inputs (list python-setuptools))
15928 (home-page "https://github.com/zestyping/q")
15929 (synopsis "Quick-and-dirty debugging output for tired programmers")
15930 (description
15931 "q is a Python module for \"print\" style of debugging Python code. It
15932provides convenient short API for print out of values, tracebacks, and
15933falling into the Python interpreter.")
15934 (license license:asl2.0)))
15935
15936(define-public python-qnorm
15937 (package
15938 (name "python-qnorm")
15939 (version "0.9.0")
15940 (source
15941 (origin
15942 (method git-fetch)
15943 (uri (git-reference
15944 (url "https://github.com/Maarten-vd-Sande/qnorm")
15945 (commit (string-append "v" version))))
15946 (file-name (git-file-name name version))
15947 (sha256
15948 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
15949 (build-system pyproject-build-system)
15950 (propagated-inputs
15951 (list python-numba python-numpy python-pandas
15952 ;; XXX: pandas optional dependencies.
15953 python-tables python-pyarrow python-fastparquet))
15954 (native-inputs (list python-setuptools))
15955 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
15956 (synopsis "Quantile normalization")
15957 (description
15958 "This tool implements quantile normalization. It properly resolves rank
15959ties, which is important when ties happen frequently, such as when working
15960with discrete numbers (integers) in count tables. This implementation should
15961be relatively fast, and can use multiple cores to sort the columns and
15962tie-resolvement is accelerated by numba.")
15963 (license license:expat)))
15964
15965(define-public python-quantlaw
15966 (package
15967 (name "python-quantlaw")
15968 (version "0.0.7")
15969 (source
15970 (origin
15971 (method git-fetch)
15972 (uri (git-reference
15973 (url "https://github.com/Quantlaw/quantlaw")
15974 (commit (string-append "v" version))))
15975 (file-name (git-file-name name version))
15976 (sha256
15977 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
15978 (build-system pyproject-build-system)
15979 (arguments
15980 (list
15981 #:test-flags
15982 #~(list "-k"
15983 ;; test expects network access
15984 "not test_load_statue_names")
15985 #:phases
15986 #~(modify-phases %standard-phases
15987 (add-after 'unpack 'fix-pytest-config
15988 (lambda _
15989 (substitute* "setup.cfg"
15990 (("--cov.*")
15991 "")))))))
15992 (native-inputs (list python-pytest python-setuptools))
15993 (propagated-inputs (list python-beautifulsoup4 python-networkx
15994 python-pandas python-regex python-requests))
15995 (home-page "https://quantlaw.readthedocs.io/")
15996 (synopsis "Coding utilities for quantitative legal studies")
15997 (description
15998 "This package provides coding utilities for quantitative legal studies.")
15999 (license license:bsd-3)))
16000
16001(define-public python-singledispatch
16002 (package
16003 (name "python-singledispatch")
16004 (version "4.0.0")
16005 (source
16006 (origin
16007 (method url-fetch)
16008 (uri (pypi-uri "singledispatch" version))
16009 (sha256
16010 (base32
16011 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
16012 (build-system pyproject-build-system)
16013 (native-inputs
16014 (list python-pytest
16015 python-setuptools
16016 python-six ; required for conversion, not at run-time
16017 python-wheel))
16018 (home-page
16019 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
16020 (synopsis "Backport of singledispatch feature from Python 3.4")
16021 (description
16022 "This library brings functools.singledispatch from Python 3.4 to Python
160232.6-3.3.")
16024 (license license:expat)))
16025
16026(define-public python-pyzmq
16027 (package
16028 (name "python-pyzmq")
16029 (version "27.0.1")
16030 (source
16031 (origin
16032 (method url-fetch)
16033 (uri (pypi-uri "pyzmq" version))
16034 (sha256
16035 (base32 "0jznvl7v41241pbbvwzjxi028mrfy1n5ymfjzy2783n29ch4kia5"))))
16036 (build-system pyproject-build-system)
16037 (arguments
16038 (list
16039 #:test-flags
16040 '(list "-m" "not flaky")
16041 #:phases
16042 #~(modify-phases %standard-phases
16043 (add-before 'build 'configure
16044 (lambda _
16045 ;; Our zeromq package is built with '--enable-drafts'; also
16046 ;; enable draft support for pyzmq so the draft test passes.
16047 (setenv "ZMQ_DRAFT_API" "1")
16048 ;; Make sure to prevent building bundled libzmq.
16049 (setenv "PYZMQ_NO_BUNDLE" "1")))
16050 (add-before 'check 'delete-source
16051 ;; To prevent loading it and skip build extensions one more times.
16052 (lambda _
16053 (delete-file-recursively "zmq"))))))
16054 (native-inputs
16055 (list cmake-minimal
16056 ;; python-cffi ; for PyPy
16057 python-cython
16058 python-packaging
16059 python-pytest
16060 python-pytest-asyncio
16061 python-scikit-build-core
16062 python-tornado))
16063 (inputs
16064 (list libsodium
16065 zeromq))
16066 (home-page "https://github.com/zeromq/pyzmq")
16067 (synopsis "Python bindings for 0MQ")
16068 (description
16069 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
16070 (license license:bsd-4)))
16071
16072(define-public python-immutabledict
16073 (package
16074 (name "python-immutabledict")
16075 (version "4.2.0")
16076 (source
16077 (origin
16078 (method url-fetch)
16079 (uri (pypi-uri "immutabledict" version))
16080 (sha256
16081 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
16082 (build-system pyproject-build-system)
16083 (native-inputs
16084 (list python-poetry-core python-pytest))
16085 (home-page "https://github.com/corenting/immutabledict")
16086 (synopsis "Immutable wrapper around dictionaries")
16087 (description
16088 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
16089It implements the complete mapping interface and can be used as a drop-in
16090replacement for dictionaries where immutability is desired.")
16091 (license license:expat)))
16092
16093(define-public python-emoji
16094 (package
16095 (name "python-emoji")
16096 (version "2.12.1")
16097 (source
16098 (origin
16099 (method url-fetch)
16100 (uri (pypi-uri "emoji" version))
16101 (sha256
16102 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
16103 (build-system pyproject-build-system)
16104 (propagated-inputs (list python-typing-extensions))
16105 (native-inputs
16106 (list python-pytest
16107 python-setuptools
16108 python-wheel))
16109 (home-page "https://github.com/carpedm20/emoji/")
16110 (synopsis "Emoji terminal output for Python")
16111 (description
16112 "This package provides Emoji terminal output for Python. The
16113entire set of Emoji codes as defined by the Unicode Consortium is supported in
16114addition to a bunch of aliases.")
16115 (license license:bsd-3)))
16116
16117;; TODO: Remove this package when upgrading python-gh-md-to-html to the
16118;; latest version. The latest gh-md-to-html does not build successfully from
16119;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
16120;; version 1.21.2 from failing.
16121;; https://issues.guix.gnu.org/72102
16122;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
16123(define-public python-emoji-for-gh-md-to-html
16124 (package
16125 (inherit python-emoji)
16126 (version "1.6.1")
16127 (source
16128 (origin
16129 (method url-fetch)
16130 (uri (pypi-uri "emoji" version))
16131 (sha256
16132 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
16133
16134(define-public python-sarge
16135 (package
16136 (name "python-sarge")
16137 (version "0.1.7.post1") ;post release only to correct errors in metadata
16138 (source
16139 (origin
16140 (method git-fetch)
16141 (uri (git-reference
16142 (url "https://github.com/vsajip/sarge")
16143 (commit version)))
16144 (file-name (git-file-name name version))
16145 (sha256
16146 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
16147 (build-system pyproject-build-system)
16148 (native-inputs (list python-pytest python-setuptools))
16149 (home-page "https://docs.red-dove.com/sarge/")
16150 (synopsis "Subprocess wrapper with command pipeline functionality")
16151 (description "@code{sarge} is a wrapper for subprocess which provides
16152command pipeline functionality.")
16153 (license license:bsd-3)))
16154
16155(define-public python-sentry-sdk
16156 (package
16157 (name "python-sentry-sdk")
16158 (version "1.5.5")
16159 (source
16160 (origin
16161 (method git-fetch) ; no tests in PyPI release
16162 (uri (git-reference
16163 (url "https://github.com/getsentry/sentry-python")
16164 (commit version)))
16165 (file-name (git-file-name name version))
16166 (sha256
16167 (base32 "0dygfaapvznpj2j7cfjb0vlwhsn5qa5kf0kq488xbhjg06n8rrc4"))))
16168 (build-system pyproject-build-system)
16169 (arguments
16170 (list
16171 #:test-flags
16172 ;; See <https://github.com/pytest-dev/pytest-forked/issues/88>.
16173 ;; AttributeError: module 'py' has no attribute 'process'
16174 '(list "--ignore=tests/integrations/django/test_basic.py"
16175 "--ignore=tests/utils/test_contextvars.py"
16176 ;; These try to use pip to install packages.
16177 "--ignore=tests/integrations/gcp/test_gcp.py"
16178 "-k"
16179 (string-append
16180 ;; This test requires extra dependencies.
16181 "not test_auto_enabling_integrations"
16182 ;; AttributeError: module 'py' has no attribute 'process'
16183 " and not test_threading"
16184 " and not test_transport"
16185 ;; Tests below require network.
16186 " and not test_crumb_capture"
16187 " and not test_crumb_capture_hint"
16188 " and not test_httplib_misuse"
16189 ;; Unclear assert error
16190 " and not test_auto_session_tracking_with_aggregates"
16191 ;; Fails with IndexError.
16192 " and not test_session_mode_defaults_to"
16193 "_request_mode_in_wsgi_handler"))
16194 #:phases
16195 '(modify-phases %standard-phases
16196 (add-before 'check 'fix-test
16197 ;; See https://github.com/getsentry/sentry-python/pull/2712
16198 (lambda _
16199 (substitute* "tests/__init__.py"
16200 (("import pytest")
16201 "import warnings")
16202 (("pytest.warns\\(None\\)")
16203 "warnings.catch_warnings(record=True)"))))
16204 (replace 'check
16205 (lambda* (#:key tests? test-flags #:allow-other-keys)
16206 (when tests?
16207 (apply invoke "python" "-m" "pytest" test-flags)))))))
16208 (native-inputs
16209 (list nss-certs-for-test
16210 python-django
16211 python-executing
16212 python-gevent
16213 python-jsonschema
16214 python-mock
16215 python-pyrsistent
16216 python-pytest
16217 python-pytest-cov
16218 python-pytest-django
16219 python-pytest-localserver
16220 python-setuptools
16221 python-werkzeug
16222 python-wheel))
16223 (propagated-inputs
16224 (list python-certifi python-urllib3))
16225 (home-page "https://github.com/getsentry/sentry-python")
16226 (synopsis "Python SDK for Sentry")
16227 (description "This package provides a Python SDK for the Sentry
16228application monitoring and error tracking software.")
16229 (license license:bsd-2)))
16230
16231(define-public python-pep440
16232 (package
16233 (name "python-pep440")
16234 (version "0.1.2")
16235 (source
16236 (origin
16237 (method url-fetch)
16238 (uri (pypi-uri "pep440" version))
16239 (sha256
16240 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
16241 (build-system pyproject-build-system)
16242 (arguments
16243 ;; This checks for "pep440" in the output, but we actually print
16244 ;; ".pep440-real" due to wrapping.
16245 (list #:test-flags '(list "-k" "not test_cli_help")))
16246 (propagated-inputs (list python-check-manifest python-mypy python-pytest
16247 python-pytest-console-scripts python-pytest-cov))
16248 (native-inputs (list python-flit-core))
16249 (home-page "https://pypi.org/project/pep440/")
16250 (synopsis "Utils to check whether versions number match PEP 440")
16251 (description
16252 "This package provides a simple package with utils to check whether
16253versions number match PEP 440.")
16254 (license license:expat)))
16255
16256(define-public python-pep517
16257 (package
16258 (inherit python-pep517-bootstrap)
16259 (name "python-pep517")
16260 (arguments
16261 '(#:phases (modify-phases %standard-phases
16262 (replace 'check
16263 (lambda* (#:key tests? #:allow-other-keys)
16264 (delete-file "pytest.ini")
16265 (delete-file "tests/test_meta.py")
16266 (if tests?
16267 (invoke "pytest") #t))))))
16268 (native-inputs (list python-mock python-pytest python-testpath))))
16269
16270(define-public python-pyproject-metadata
16271 (package
16272 (name "python-pyproject-metadata")
16273 (version "0.7.1")
16274 (source
16275 (origin
16276 (method git-fetch)
16277 (uri (git-reference
16278 (url "https://github.com/FFY00/python-pyproject-metadata")
16279 (commit version)))
16280 (file-name (git-file-name name version))
16281 (sha256
16282 (base32
16283 "0yvs59ymz5gdix34a95wxlxvk9bnvjgrzsnmnc3ws7whpfv3yasm"))))
16284 (build-system pyproject-build-system)
16285 (arguments
16286 (list
16287 #:test-flags
16288 ;; Two tests fail because the error message slightly changed, so the
16289 ;; tests' regular expressions no longer match.
16290 '(list "--ignore=tests/test_standard_metadata.py")))
16291 (propagated-inputs (list python-packaging))
16292 (native-inputs (list python-pypa-build python-pytest python-setuptools
16293 python-tomli python-wheel))
16294 (home-page "https://github.com/FFY00/python-pyproject-metadata")
16295 (synopsis "Dataclass for PEP 621 metadata")
16296 (description "This project does not implement the parsing of
16297@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
16298data structure representing PEP 621 metadata (already parsed), it will
16299validate this input and generate a PEP 643-compliant metadata
16300file (e.g. @file{PKG-INFO}).")
16301 (license license:expat)))
16302
16303;; pep621 was renamed to pyproject-metadata.
16304(define-deprecated-package python-pep621
16305 python-pyproject-metadata)
16306
16307(define-public python-meson-python
16308 (package
16309 (name "python-meson-python")
16310 (version "0.15.0")
16311 (source
16312 (origin
16313 (method url-fetch)
16314 (uri (pypi-uri "meson_python" version))
16315 (sha256
16316 (base32 "0vyjhjabvm41hqijifk33idbdl62i76kfyf884f9rs29rpp77nzx"))))
16317 (build-system meson-build-system)
16318 (propagated-inputs (list python-pyproject-metadata python-tomli))
16319 (home-page "https://github.com/mesonbuild/meson-python")
16320 (synopsis "Meson Python build backend (PEP 517)")
16321 (description "This package provides a PEP 517 build backend that makes
16322use of the Meson build system.")
16323 (license license:expat)))
16324
16325(define-public python-mccabe
16326 (package
16327 (name "python-mccabe")
16328 (version "0.7.0")
16329 (source
16330 (origin
16331 (method url-fetch)
16332 (uri (pypi-uri "mccabe" version))
16333 (sha256
16334 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
16335 (build-system pyproject-build-system)
16336 (arguments
16337 (list
16338 ;; Test fixtures are not released yet, see
16339 ;; <https://github.com/PyCQA/mccabe/issues/93>
16340 #:tests? #f))
16341 (native-inputs
16342 (list python-toml
16343 python-setuptools
16344 python-wheel))
16345 (home-page "https://github.com/PyCQA/mccabe")
16346 (synopsis "McCabe checker, plugin for flake8")
16347 (description
16348 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
16349complexity of Python source code.")
16350 (license license:expat)))
16351
16352(define-public python-autoflake8
16353 (package
16354 (name "python-autoflake8")
16355 (version "0.4.0")
16356 (source (origin
16357 (method git-fetch) ;for tests
16358 (uri (git-reference
16359 (url "https://github.com/fsouza/autoflake8")
16360 (commit (string-append "v" version))))
16361 (file-name (git-file-name name version))
16362 (sha256
16363 (base32
16364 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
16365 (build-system pyproject-build-system)
16366 (native-inputs
16367 (list python-aiofiles
16368 python-poetry-core
16369 python-pytest
16370 python-pytest-xdist))
16371 (propagated-inputs (list python-pyflakes))
16372 (home-page "https://github.com/fsouza/autoflake8")
16373 (synopsis "Automatically fix issues reported by flake8")
16374 (description "Tool to automatically fix some issues reported by
16375@command{flake8}.")
16376 (license license:expat)))
16377
16378(define-public python-flake8
16379 (package
16380 (name "python-flake8")
16381 (version "7.1.1")
16382 (source
16383 (origin
16384 (method git-fetch) ; no tests data in PyPi package
16385 (uri (git-reference
16386 (url "https://github.com/pycqa/flake8")
16387 (commit version)))
16388 (file-name (git-file-name name version))
16389 (sha256
16390 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
16391 (build-system pyproject-build-system)
16392 (native-inputs
16393 (list python-pytest
16394 python-setuptools
16395 python-wheel))
16396 (propagated-inputs
16397 (list python-mccabe
16398 python-pycodestyle
16399 python-pyflakes))
16400 (home-page "https://flake8.pycqa.org/en/latest/")
16401 (synopsis "The modular source code checker: pep8, pyflakes and co")
16402 (description
16403 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
16404 (license license:expat)))
16405
16406(define-public python-flake8-blind-except
16407 (package
16408 (name "python-flake8-blind-except")
16409 (version "0.2.1")
16410 (source
16411 (origin
16412 (method git-fetch)
16413 (uri (git-reference
16414 (url "https://github.com/elijahandrews/flake8-blind-except")
16415 (commit (string-append "v" version))))
16416 (file-name (git-file-name name version))
16417 (sha256
16418 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
16419 (build-system pyproject-build-system)
16420 (arguments (list #:tests? #f)) ;no tests
16421 (native-inputs (list python-setuptools))
16422 (propagated-inputs (list python-pycodestyle))
16423 (home-page "https://github.com/elijahandrews/flake8-blind-except")
16424 (synopsis "Check for blind @code{except:} statements")
16425 (description
16426 "This package provides a flake8 extension that checks for blind
16427@code{except:} statements.")
16428 (license license:expat)))
16429
16430(define-public python-flake8-bugbear
16431 (package
16432 (name "python-flake8-bugbear")
16433 (version "24.10.31")
16434 (source
16435 (origin
16436 (method url-fetch)
16437 (uri (pypi-uri "flake8_bugbear" version))
16438 (sha256
16439 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
16440 (build-system pyproject-build-system)
16441 (native-inputs
16442 (list python-hypothesmith
16443 python-pytest
16444 python-setuptools
16445 python-wheel))
16446 (propagated-inputs
16447 (list python-attrs
16448 python-flake8))
16449 (home-page "https://github.com/PyCQA/flake8-bugbear")
16450 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
16451 (description
16452 "This package contains a plugin for Flake8 finding likely bugs and design
16453problems in your program. It contains warnings that don't belong in pyflakes
16454and pycodestyle.")
16455 (license license:expat)))
16456
16457(define-public python-flake8-continuation
16458 (package
16459 (name "python-flake8-continuation")
16460 (version "1.0.5")
16461 (source
16462 (origin
16463 (method git-fetch)
16464 (uri (git-reference
16465 (url "https://github.com/planetlabs/flake8-continuation")
16466 (commit version)))
16467 (file-name (git-file-name name version))
16468 (sha256
16469 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
16470 (build-system pyproject-build-system)
16471 (arguments
16472 (list
16473 #:phases
16474 #~(modify-phases %standard-phases
16475 (add-after 'unpack 'remove-python-six-dependency
16476 (lambda _
16477 (substitute* "flake8_continuation.py"
16478 (("import six|six\\.moves\\.")
16479 ""))
16480 (substitute* "setup.py"
16481 ((", \"six\"")
16482 "")))))))
16483 (native-inputs (list python-pytest python-setuptools))
16484 (propagated-inputs (list python-flake8 python-pycodestyle))
16485 (home-page "https://github.com/planetlabs/flake8-continuation")
16486 (synopsis "Flake8 Line Continuation Plugin")
16487 (description
16488 "A Flake8 plugin that checks for the line continuation style to be in the
16489preferred method according to PEP-8, specifically:
16490@quotation
16491The preferred way of wrapping long lines is by using Python's implied line
16492continuation inside parentheses, brackets and braces. Long lines can be
16493broken over multiple lines by wrapping expressions in parentheses. These
16494should be used in preference to using a backslash for line continuation.
16495@end quotation")
16496 (license license:asl2.0)))
16497
16498(define-public python-flake8-debugger
16499 (package
16500 (name "python-flake8-debugger")
16501 (version "4.1.2")
16502 (source
16503 (origin
16504 (method git-fetch)
16505 (uri (git-reference
16506 (url "https://github.com/jbkahn/flake8-debugger")
16507 (commit version)))
16508 (file-name (git-file-name name version))
16509 (sha256
16510 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
16511 (build-system pyproject-build-system)
16512 (native-inputs (list python-poetry-core python-pytest python-setuptools))
16513 (propagated-inputs (list python-flake8 python-pycodestyle))
16514 (home-page "https://github.com/jbkahn/flake8-debugger")
16515 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
16516 (description
16517 "This package provides a Flake8 plugin that checks for @code{ipdb} and
16518@code{pdb} imports and set traces, as well as @code{from
16519IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
16520@code{InteractiveShellEmbed()()}.")
16521 (license license:expat)))
16522
16523(define-public python-flake8-implicit-str-concat
16524 (package
16525 (name "python-flake8-implicit-str-concat")
16526 (version "0.5.0")
16527 (source
16528 (origin
16529 (method url-fetch)
16530 (uri (pypi-uri "flake8_implicit_str_concat" version))
16531 (sha256
16532 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
16533 (build-system pyproject-build-system)
16534 (arguments
16535 (list
16536 #:tests? #f)) ; no tests in PiPY or git checkout
16537 (native-inputs
16538 (list python-hatchling))
16539 (propagated-inputs
16540 (list python-attrs
16541 python-more-itertools))
16542 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
16543 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
16544 (description
16545 "This is a plugin for the Python code checking tool Flake8 to encourage
16546correct string literal concatenation.
16547
16548It looks for style problems like implicitly concatenated string literals on
16549the same line (which can be introduced by the code formatting tool Black), or
16550unnecessary plus operators for explicit string literal concatenation.")
16551 (license license:expat)))
16552
16553(define-public python-flake8-print
16554 (package
16555 (name "python-flake8-print")
16556 (version "5.0.0")
16557 (source
16558 (origin
16559 (method url-fetch)
16560 (uri (pypi-uri "flake8-print" version))
16561 (sha256
16562 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
16563 (build-system pyproject-build-system)
16564 (arguments
16565 (list
16566 #:tests? #f)) ; no tests in PiPY or git checkout
16567 (native-inputs
16568 (list python-poetry-core))
16569 (propagated-inputs
16570 (list python-flake8
16571 python-pycodestyle))
16572 (home-page "https://github.com/jbkahn/flake8-print")
16573 (synopsis "Print statement checker plugin for Flake8")
16574 (description
16575 "This plugin for Flake8 checks for @code{print} statements in Python
16576files.")
16577 (license license:expat)))
16578
16579(define-public python-flake8-pyi
16580 (package
16581 (name "python-flake8-pyi")
16582 (version "24.9.0")
16583 (source
16584 (origin
16585 (method url-fetch)
16586 (uri (pypi-uri "flake8_pyi" version))
16587 (sha256
16588 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
16589 (build-system pyproject-build-system)
16590 (arguments
16591 (list
16592 #:phases
16593 #~(modify-phases %standard-phases
16594 (add-after 'unpack 'fix-pytest-config
16595 (lambda _
16596 ;; Prevent full threads utilization.
16597 (substitute* "pyproject.toml"
16598 (("-nauto") "")))))))
16599 (native-inputs
16600 (list python-hatchling
16601 python-pytest))
16602 (propagated-inputs
16603 (list python-attrs
16604 python-flake8
16605 python-pyflakes))
16606 (home-page "https://github.com/ambv/flake8-pyi")
16607 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
16608 (description
16609 "This package contains a plugin that provides specializations for type
16610hinting stub files, especially interesting for linting typeshed. It adds the
16611@file{.pyi} extension to the default value of the @code{--filename}
16612command-line argument to Flake8. This means stubs are linted by default with
16613this plugin enabled, without needing to explicitly list every file. It
16614modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
16615expressions after the entire file has been read. This enables support for
16616first-class forward references that stub files use.")
16617 (license license:expat)))
16618
16619(define-public python-flake8-quotes
16620 (package
16621 (name "python-flake8-quotes")
16622 (version "3.4.0")
16623 (source
16624 (origin
16625 (method url-fetch)
16626 (uri (pypi-uri "flake8-quotes" version))
16627 (sha256
16628 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
16629 (build-system pyproject-build-system)
16630 (native-inputs
16631 (list python-pytest
16632 python-setuptools
16633 python-wheel))
16634 (propagated-inputs
16635 (list python-flake8))
16636 (home-page "https://github.com/zheller/flake8-quotes/")
16637 (synopsis "Flake8 lint for quotes")
16638 (description "This package provides a Flake8 lint for quotes.")
16639 (license license:expat)))
16640
16641(define-public python-flake8-todo
16642 (package
16643 (name "python-flake8-todo")
16644 (version "0.7")
16645 (source
16646 (origin
16647 (method git-fetch)
16648 (uri (git-reference
16649 (url "https://github.com/schlamar/flake8-todo")
16650 (commit (string-append "v" version))))
16651 (file-name (git-file-name name version))
16652 (sha256
16653 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
16654 (build-system pyproject-build-system)
16655 (arguments (list #:tests? #f)) ; No tests.
16656 (native-inputs (list python-setuptools))
16657 (propagated-inputs (list python-pycodestyle))
16658 (home-page "https://github.com/schlamar/flake8-todo")
16659 (synopsis "TODO notes checker, plugin for flake8")
16660 (description
16661 "This package provides the @code{flake8-todo} Python module, a
16662TODO notes checker plugin for flake8.")
16663 (license license:expat)))
16664
16665(define-public python-flake8-isort
16666 (package
16667 (name "python-flake8-isort")
16668 (version "6.1.1")
16669 (source
16670 (origin
16671 (method url-fetch)
16672 (uri (pypi-uri "flake8_isort" version))
16673 (sha256
16674 (base32 "1cvh0d18scgq36gqa2vqbifjarln1r3axgq93lzc303ay0y2zy61"))))
16675 (build-system pyproject-build-system)
16676 (arguments
16677 (list
16678 #:tests? #f)) ; no tests in PiPY or git checkout
16679 (native-inputs
16680 (list python-hatchling))
16681 (propagated-inputs
16682 (list python-flake8
16683 python-isort))
16684 (home-page "https://github.com/gforcada/flake8-isort")
16685 (synopsis "Flake8 plugin integrating isort")
16686 (description
16687 "This package provides a flake8 plugin that integrates isort,
16688extending flake8 so that it can warn about badly sorted Python import
16689directives.")
16690 (license license:gpl2+)))
16691
16692(define-public python-autoflake
16693 (package
16694 (name "python-autoflake")
16695 (version "2.3.1")
16696 (source
16697 (origin
16698 (method url-fetch)
16699 (uri (pypi-uri "autoflake" version))
16700 (sha256
16701 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
16702 (build-system pyproject-build-system)
16703 (arguments
16704 (list
16705 #:phases
16706 #~(modify-phases %standard-phases
16707 (replace 'check
16708 (lambda _
16709 (invoke "python" "test_autoflake.py"))))))
16710 (native-inputs
16711 (list python-hatchling))
16712 (propagated-inputs
16713 (list python-pyflakes))
16714 (home-page "https://github.com/myint/autoflake")
16715 (synopsis "Removes unused imports and unused variables")
16716 (description
16717 "@code{autoflake} removes unused imports and unused variables from Python
16718code as reported by @code{pyflakes}.
16719
16720By default, it only removes unused imports for modules that are part of the
16721standard library. Removal of unused variables is also disabled by default.
16722It also removes useless @code{pass} statements.")
16723 (license license:expat)))
16724
16725(define-public python-mistune
16726 (package
16727 (name "python-mistune")
16728 (version "3.1.3")
16729 (source
16730 (origin
16731 (method url-fetch)
16732 (uri (pypi-uri "mistune" version))
16733 (sha256
16734 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
16735 (build-system pyproject-build-system)
16736 (native-inputs
16737 (list python-pytest
16738 python-setuptools
16739 python-wheel))
16740 (home-page "https://github.com/lepture/mistune")
16741 (synopsis "Markdown parser in pure Python")
16742 (description "This package provides a fast markdown parser in pure
16743Python.")
16744 (license license:bsd-3)))
16745
16746(define-public python-markdown
16747 (package
16748 (name "python-markdown")
16749 (version "3.10")
16750 (source
16751 (origin
16752 (method url-fetch)
16753 (uri (pypi-uri "markdown" version))
16754 (sha256
16755 (base32
16756 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
16757 (build-system pyproject-build-system)
16758 (native-inputs
16759 (list python-pyyaml
16760 python-setuptools))
16761 (home-page "https://python-markdown.github.io/")
16762 (synopsis "Python implementation of Markdown")
16763 (description
16764 "This package provides a Python implementation of John Gruber's
16765Markdown. The library features international input, various Markdown
16766extensions, and several HTML output formats. A command line wrapper
16767markdown_py is also provided to convert Markdown files to HTML.")
16768 (license license:bsd-3)))
16769
16770(define-public python-markdown2
16771 (package
16772 (name "python-markdown2")
16773 (version "2.5.3")
16774 (source
16775 (origin
16776 (method git-fetch) ; no tests data in PyPi package
16777 (uri (git-reference
16778 (url "https://github.com/trentm/python-markdown2")
16779 (commit version)))
16780 (file-name (git-file-name name version))
16781 (sha256
16782 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
16783 (build-system pyproject-build-system)
16784 (arguments
16785 (list
16786 #:test-backend #~'custom
16787 #:test-flags #~(list "test.py" "--" "-knownfailure")
16788 #:phases
16789 #~(modify-phases %standard-phases
16790 (add-before 'check 'pre-check
16791 (lambda _
16792 (chdir "test"))))))
16793 (native-inputs
16794 (list ;; python-pygments ;optinal, tests fail when added
16795 ;; python-wavedrom ;optinal, not packaged
16796 ;; python-latex2mathml ;optinal, not packaged
16797 python-setuptools))
16798 (home-page "https://github.com/trentm/python-markdown2")
16799 (synopsis "Fast and complete Python implementation of Markdown")
16800 (description
16801 "This package provides a fast and complete Python implementation of
16802Markdown. It was written to closely match the behaviour of the original
16803Perl-implemented Markdown.pl. It also comes with a number of
16804extensions (called @code{extras}) for things like syntax coloring, tables,
16805header-ids.")
16806 (license license:expat)))
16807
16808(define-public python-mdx-include
16809 (package
16810 (name "python-mdx-include")
16811 (version "1.4.2")
16812 (source
16813 (origin
16814 (method git-fetch)
16815 (uri (git-reference
16816 (url "https://github.com/neurobin/mdx_include")
16817 (commit (string-append "v" version))))
16818 (file-name (git-file-name name version))
16819 (sha256
16820 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
16821 (build-system pyproject-build-system)
16822 (arguments
16823 (list
16824 #:test-backend #~'unittest
16825 #:phases
16826 (let* ((django-hello-url "\
16827https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1682873951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
16829 (django-hello
16830 (origin
16831 (method url-fetch)
16832 (uri django-hello-url)
16833 (sha256 (base32 "\
1683413bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
16835 #~(modify-phases %standard-phases
16836 (add-before 'check 'disable-test-requiring-network
16837 (lambda _
16838 (substitute* "mdx_include/test/test.py"
16839 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
16840 (string-append pre "__off__test_" post "("))
16841 (((string-join (string-split #$django-hello-url #\.) "\\."))
16842 #+django-hello))))))))
16843 (native-inputs (list python-setuptools))
16844 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
16845 (home-page "https://github.com/neurobin/mdx_include")
16846 (synopsis "Python Markdown extension to include local or remote files")
16847 (description "Include extension for Python Markdown. It lets you include
16848local or remote (downloadable) files into your markdown at arbitrary
16849positions.
16850
16851This project is motivated by markdown-include and provides the same
16852functionalities with some extras.")
16853 (license license:bsd-3)))
16854
16855(define-public python-ptyprocess
16856 (package
16857 (name "python-ptyprocess")
16858 (version "0.7.0")
16859 (source
16860 (origin
16861 (method url-fetch)
16862 (uri (pypi-uri "ptyprocess" version))
16863 (sha256
16864 (base32
16865 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
16866 (build-system pyproject-build-system)
16867 (native-inputs
16868 (list python-flit-core
16869 python-pytest))
16870 (home-page "https://github.com/pexpect/ptyprocess")
16871 (synopsis "Run a subprocess in a pseudo terminal")
16872 (description
16873 "This package provides a Python library used to launch a subprocess in a
16874pseudo terminal (pty), and interact with both the process and its pty.")
16875 (license license:isc)))
16876
16877(define-public python-configshell-fb
16878 (package
16879 (name "python-configshell-fb")
16880 (version "1.1.30")
16881 (source
16882 (origin
16883 (method url-fetch)
16884 (uri (pypi-uri "configshell-fb" version))
16885 ;; XXX: Snippet below is required because on v1.1.30 the source code
16886 ;; has configshell_fb as softlink to configshell and guix
16887 ;; pyproject-build-system doesn't work with symlinks very well.
16888 ;;
16889 ;; This package is only used in spdk for now and it's crucial to keep
16890 ;; it locked on version and keep the snipped for spdk to build
16891 ;; successfully.
16892 (snippet #~(begin
16893 (use-modules (guix build utils))
16894 (delete-file "setup.py")
16895 (delete-file-recursively "configshell_fb")
16896 (rename-file "configshell" "configshell_fb")))
16897 (sha256
16898 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
16899 (build-system pyproject-build-system)
16900 (arguments
16901 (list #:tests? #f)) ;; this package has no tests
16902 (native-inputs
16903 (list python-setuptools
16904 python-six
16905 python-wheel))
16906 (propagated-inputs
16907 (list python-pyparsing))
16908 (home-page "https://github.com/open-iscsi/configshell-fb")
16909 (synopsis "Framework to implement simple but nice CLIs")
16910 (description
16911 "This package provides a framework to implement simple but nice CLIs.")
16912 (license license:asl2.0)))
16913
16914(define-public python-crccheck
16915 (package
16916 (name "python-crccheck")
16917 (version "1.3.0")
16918 (source
16919 (origin
16920 (method git-fetch) ; no tests in PyPI
16921 (uri (git-reference
16922 (url "https://github.com/MartinScharrer/crccheck")
16923 (commit (string-append "v" version))))
16924 (file-name (git-file-name name version))
16925 (sha256
16926 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
16927 (build-system pyproject-build-system)
16928 (native-inputs (list python-pytest python-setuptools python-wheel))
16929 (home-page "https://github.com/MartinScharrer/crccheck")
16930 (synopsis "Calculation library for CRCs and checksums")
16931 (description "@code{crccheck} is a calculation library for CRCs and
16932checksums. It implement more than a hundred checksum routines.")
16933 (license license:gpl3+)))
16934
16935(define-public python-crashtest
16936 (package
16937 (name "python-crashtest")
16938 (version "0.4.1")
16939 (source
16940 (origin
16941 (method git-fetch)
16942 (uri (git-reference
16943 (url "https://github.com/sdispater/crashtest")
16944 (commit version)))
16945 (file-name (git-file-name name version))
16946 (sha256
16947 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
16948 (build-system pyproject-build-system)
16949 (native-inputs (list python-poetry-core python-pytest))
16950 (home-page "https://github.com/sdispater/crashtest")
16951 (synopsis "Manage Python errors with ease")
16952 (description
16953 "Python library that makes exceptions handling and inspection easier.")
16954 (license license:expat)))
16955
16956(define-public python-pysendfile
16957 (package
16958 (name "python-pysendfile")
16959 (version "2.0.1")
16960 (source
16961 (origin
16962 (method git-fetch)
16963 (uri (git-reference
16964 (url "https://github.com/giampaolo/pysendfile")
16965 (commit (string-append "release-" version))))
16966 (file-name (git-file-name name version))
16967 (sha256
16968 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
16969 (build-system pyproject-build-system)
16970 (arguments
16971 (list
16972 #:phases
16973 #~(modify-phases %standard-phases
16974 (replace 'check
16975 (lambda* (#:key tests? #:allow-other-keys)
16976 (when tests?
16977 (setenv "HOME" "/tmp")
16978 (invoke "make" "test")))))))
16979 (native-inputs (list python-pytest python-setuptools))
16980 (home-page "https://github.com/giampaolo/pysendfile")
16981 (synopsis "Python interface to sendfile(2)")
16982 (description "The @code{pysendfile} Python library provides an interface to
16983the @code{sendfile(2)} system call.")
16984 (license license:expat)))
16985
16986(define-public python-pyftpdlib
16987 (package
16988 (name "python-pyftpdlib")
16989 (version "1.5.7")
16990 (source
16991 (origin
16992 (method url-fetch)
16993 (uri (pypi-uri "pyftpdlib" version))
16994 (sha256
16995 (base32 "0vk5gcx4svjrpm014ykwxmijqihgb4ha17kb3yphk0nv6x0wx8vy"))))
16996 (build-system pyproject-build-system)
16997 ;; Using Pytest instead of the Makefile causes the command line tests to
16998 ;; fail on unknown Pytest arguments.
16999 (arguments
17000 (list
17001 #:test-flags
17002 #~(list "-k" "not TestCommandLineParser"
17003 #$@(if (target-aarch64?)
17004 ;; TimeoutError: timed out
17005 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
17006 "::TestTimeouts::test_idle_data_timeout2"))
17007 '()))))
17008 (native-inputs
17009 (list python-psutil
17010 python-pytest
17011 python-setuptools
17012 python-wheel))
17013 (propagated-inputs
17014 (list python-pyopenssl
17015 python-pysendfile))
17016 (home-page "https://github.com/giampaolo/pyftpdlib/")
17017 (synopsis "Asynchronous and scalable Python FTP server library")
17018 (description "The Python FTP server library provides a high-level
17019interface to write efficient, scalable and asynchronous FTP servers with
17020Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
17021RFC-959} FTP server implementation available for Python, and has the following
17022traits:
17023@itemize
17024@item
17025It is lightweight, fast and scalable.
17026@item
17027It uses the @code{sendfile(2)} system call for uploads.
17028@item
17029It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
17030asynchronously.
17031@item
17032It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
17033IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
17034RFC-2640}) and MLSD/MLST commands (RFC-3659).
17035@item
17036It has a flexible system of @samp{authorizers} able to manage both
17037@samp{virtual} and @samp{real} users.
17038@end itemize")
17039 (license license:expat)))
17040
17041(define-public python-fs
17042 (package
17043 (name "python-fs")
17044 (version "2.4.16")
17045 (source
17046 (origin
17047 (method git-fetch)
17048 (uri (git-reference
17049 (url "https://github.com/PyFilesystem/pyfilesystem2/")
17050 (commit (string-append "v" version))))
17051 (file-name (git-file-name name version))
17052 (sha256
17053 (base32 "1wrkhsv57kv4jcadn7w330mgbjjsimgzfvicni8cka6y1a8chbjs"))))
17054 (build-system pyproject-build-system)
17055 (arguments
17056 (list
17057 ;; tests: 1995 passed, 21 skipped, 411 deselected, 14 warnings
17058 #:test-flags #~(list "-m" "not slow")
17059 #:tests? (and (not (%current-target-system))
17060 (->bool (this-package-native-input "python-pytest")))
17061 #:phases
17062 #~(modify-phases %standard-phases
17063 (add-before 'check 'pre-check
17064 (lambda _
17065 (setenv "HOME" "/tmp"))))))
17066 (native-inputs
17067 (append
17068 (list python-setuptools)
17069 ;; 'python-pyftpdlib' is needed for tests but it indirectly depends Rust,
17070 ;; which is currently unavailable on aarch64-linux. Remove all the test
17071 ;; dependencies in that case.
17072 (if (and (not (%current-target-system))
17073 (supported-package? python-pyftpdlib))
17074 (list python-mock
17075 python-parameterized
17076 python-pyftpdlib
17077 python-pytest)
17078 '())))
17079 (propagated-inputs
17080 (list python-appdirs
17081 python-pytz
17082 python-six)) ;still hard itegrated
17083 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
17084 (synopsis "File system abstraction layer for Python")
17085 (description
17086 "PyFilesystem's @code{FS} object is a file system abstraction sharing
17087similarities with Python's own @code{file} object for single files. It allows
17088opening all the files under a given directory recursively, as a single
17089@code{FS} object. This enables, for example, counting the combined number of
17090lines in the contained files easily.")
17091 (license license:expat)))
17092
17093;;; Tests are left out in the main package to avoid cycles.
17094;; XXX: When updating, solve comment in python-cu2qu.
17095(define-public python-fonttools-minimal
17096 (hidden-package
17097 (package
17098 (name "python-fonttools-minimal")
17099 (version "4.59.2")
17100 (source (origin
17101 (method url-fetch)
17102 (uri (pypi-uri "fonttools" version ".tar.gz"))
17103 (sha256
17104 (base32
17105 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
17106 (build-system python-build-system)
17107 (arguments '(#:tests? #f))
17108 (home-page "https://github.com/fonttools/fonttools")
17109 (synopsis "Tools to manipulate font files")
17110 (description
17111 "FontTools/TTX is a library to manipulate font files from Python. It
17112supports reading and writing of TrueType/OpenType fonts, reading and writing
17113of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
17114also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
17115from an XML-based format.")
17116 (license license:expat))))
17117
17118(define-public python-fonttools
17119 (let ((base python-fonttools-minimal))
17120 (package/inherit base
17121 (name "python-fonttools")
17122 (arguments
17123 (substitute-keyword-arguments (package-arguments base)
17124 ((#:tests? _ #f)
17125 (not (%current-target-system)))
17126 ((#:phases phases '%standard-phases)
17127 `(modify-phases ,phases
17128 (replace 'check
17129 (lambda* (#:key tests? #:allow-other-keys)
17130 (when tests?
17131 (invoke "pytest" "-vv"
17132 "-k"
17133 ;; XXX: These tests need data files that are not
17134 ;; shipped with the PyPI release.
17135 (format #f "not ~a"
17136 (string-join
17137 '("test_cli_vtp"
17138 "test_group_order"
17139 "test_read_fontdimens_mathsy"
17140 "test_read_fontdimens_mathex"
17141 "test_read_fontdimens_vanilla"
17142 "test_read_boundary_char"
17143 "test_reading_supplement_encoding"
17144 "fontTools.tfmLib"
17145 ;; The MtiTest tests fail for unknown
17146 ;; reasons (see:
17147 ;; https://github.com/fonttools/
17148 ;; fonttools/issues/3078)
17149 "MtiTest")
17150 " and not "))))))))))
17151 (native-inputs
17152 (modify-inputs (package-native-inputs base)
17153 (append python-pytest)))
17154 (propagated-inputs
17155 (list python-brotli
17156 python-fs
17157 python-lxml
17158 python-lz4
17159 python-scipy
17160 python-unicodedata2
17161 python-zopfli))
17162 (properties (alist-delete 'hidden? (package-properties base))))))
17163
17164(define-public python-ly
17165 (package
17166 (name "python-ly")
17167 (version "0.9.9")
17168 (source
17169 (origin
17170 (method git-fetch)
17171 (uri (git-reference
17172 (url "https://github.com/frescobaldi/python-ly")
17173 (commit (string-append "v" version))))
17174 (file-name (git-file-name name version))
17175 (sha256
17176 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
17177 (build-system pyproject-build-system)
17178 (arguments
17179 (list
17180 #:phases
17181 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
17182 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
17183 #~(modify-phases %standard-phases
17184 (add-after 'unpack 'inject-data
17185 (lambda _
17186 (substitute* "tests/musicxml.xsd"
17187 (((string-join (string-split #$namespace-url #\.) "\\."))
17188 #$(origin
17189 (method url-fetch)
17190 (uri namespace-url)
17191 (sha256 (base32 "\
171921j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
17193 (((string-join (string-split #$xlink-url #\.) "\\."))
17194 #$(origin
17195 (method url-fetch)
17196 (uri xlink-url)
17197 (sha256 (base32 "\
171980jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
17199 (native-inputs (list python-hatchling python-lxml python-pytest))
17200 (synopsis "Tool and library for manipulating LilyPond files")
17201 (description
17202 "This package provides a Python library to parse, manipulate or create
17203documents in LilyPond format. A command line program ly is also provided that
17204can be used to do various manipulations with LilyPond files.")
17205 (home-page "https://pypi.org/project/python-ly/")
17206 (license license:gpl2+)))
17207
17208(define-public python-appdirs
17209 (package
17210 (name "python-appdirs")
17211 (version "1.4.4")
17212 (source
17213 (origin
17214 (method url-fetch)
17215 (uri (pypi-uri "appdirs" version))
17216 (sha256
17217 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
17218 (build-system pyproject-build-system)
17219 (arguments (list #:test-backend #~'unittest))
17220 (native-inputs (list python-setuptools))
17221 (home-page "https://github.com/ActiveState/appdirs")
17222 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
17223 (description
17224 "This module provides a portable way of finding out where user data
17225should be stored on various operating systems.")
17226 (license license:expat)))
17227
17228(define-public python-google-pasta
17229 (package
17230 (name "python-google-pasta")
17231 (version "0.2.0")
17232 (source
17233 (origin
17234 (method url-fetch)
17235 (uri (pypi-uri "google-pasta" version))
17236 (sha256
17237 (base32 "0vm1r1jlaiagj0l9yf7j6zn9w3733dr2169911c0svgrr3gwiwn9"))))
17238 (build-system pyproject-build-system)
17239 (propagated-inputs (list python-six))
17240 (native-inputs (list python-pytest python-setuptools))
17241 (home-page "https://github.com/google/pasta")
17242 (synopsis "AST-based Python refactoring library")
17243 (description "This package provides \"pasta\", an AST-based Python
17244refactoring library.")
17245 (license license:asl2.0)))
17246
17247(define-public python-gorilla
17248 (package
17249 (name "python-gorilla")
17250 (version "0.3.0")
17251 (source
17252 (origin
17253 (method git-fetch)
17254 (uri (git-reference
17255 (url "https://github.com/christophercrouzet/gorilla")
17256 (commit (string-append "v" version))))
17257 (file-name (git-file-name name version))
17258 (sha256
17259 (base32 "0hm5ynswhz6i763s6cjlh8lv5ai0f3x17mjvlihqs8idlk4vbrn0"))))
17260 (build-system pyproject-build-system)
17261 (arguments (list #:test-backend #~'unittest))
17262 (native-inputs (list python-setuptools))
17263 (home-page "https://github.com/christophercrouzet/gorilla")
17264 (synopsis "Convenient monkey patching with Python")
17265 (description
17266 "Gorilla is a Python library that provides a convenient approach to
17267monkey patching. Monkey patching is the process of modifying module and
17268class attributes at runtime with the purpose of replacing or extending
17269third-party code.")
17270 (license license:expat)))
17271
17272(define-public python-llfuse
17273 (package
17274 (name "python-llfuse")
17275 (version "1.5.1")
17276 (source
17277 (origin
17278 (method git-fetch)
17279 (uri (git-reference
17280 (url "https://github.com/python-llfuse/python-llfuse")
17281 (commit (string-append "release-" version))))
17282 (file-name (git-file-name name version))
17283 (sha256
17284 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
17285 (build-system pyproject-build-system)
17286 (arguments
17287 (list
17288 #:test-flags
17289 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
17290 #:phases
17291 #~(modify-phases %standard-phases
17292 (add-before 'build 'build-cython
17293 (lambda _
17294 (invoke "python" "setup.py" "build_cython"))))))
17295 (inputs (list fuse-2 attr))
17296 (native-inputs
17297 (list pkg-config python-cython python-pytest python-setuptools))
17298 (synopsis "Python bindings for FUSE")
17299 (description
17300 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
17301 (home-page "https://github.com/python-llfuse/python-llfuse")
17302 (license license:lgpl2.0+)))
17303
17304(define-public python-msgpack
17305 (package
17306 (name "python-msgpack")
17307 (version "1.1.2")
17308 (source
17309 (origin
17310 (method url-fetch)
17311 (uri (pypi-uri "msgpack" version))
17312 (sha256
17313 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
17314 (build-system pyproject-build-system)
17315 (native-inputs
17316 (list python-pytest
17317 python-setuptools))
17318 (home-page "https://msgpack.org/")
17319 (synopsis "MessagePack (de)serializer")
17320 (description "MessagePack is a fast, compact binary serialization format,
17321suitable for similar data to JSON. This package provides CPython bindings for
17322reading and writing MessagePack data.")
17323 (license license:asl2.0)))
17324
17325(define-public python-msgpack-for-borg
17326 (hidden-package
17327 (package
17328 (inherit python-msgpack)
17329 (version "1.0.4")
17330 (source
17331 (origin
17332 (method url-fetch)
17333 (uri (pypi-uri "msgpack" version))
17334 (sha256
17335 (base32 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m")))))))
17336
17337(define-public python-openstep-plist
17338 (package
17339 (name "python-openstep-plist")
17340 (version "0.3.0")
17341 (source
17342 (origin
17343 (method git-fetch)
17344 (uri (git-reference
17345 (url "https://github.com/fonttools/openstep-plist")
17346 (commit (string-append "v" version))))
17347 (file-name (git-file-name name version))
17348 (sha256
17349 (base32 "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
17350 (build-system pyproject-build-system)
17351 (arguments
17352 (list
17353 #:phases
17354 #~(modify-phases %standard-phases
17355 (add-after 'unpack 'pretend-version
17356 (lambda _
17357 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
17358 #$(package-version this-package)))))))
17359 (native-inputs (list python-cython-0 python-pytest python-setuptools-scm
17360 python-setuptools))
17361 (home-page "https://github.com/fonttools/openstep-plist")
17362 (synopsis "OpenStep plist parser and writer")
17363 (description
17364 "This package provides a parser for the \"old style\" OpenStep property
17365list format (also known as ASCII plist), written in Cython.")
17366 (license license:expat)))
17367
17368(define-public python-resolvelib
17369 (package
17370 (name "python-resolvelib")
17371 (version "1.1.0")
17372 (source
17373 (origin
17374 ;; Tests are missing from the PyPI release.
17375 (method git-fetch)
17376 (uri (git-reference
17377 (url "https://github.com/sarugaku/resolvelib")
17378 (commit version)))
17379 (file-name (git-file-name name version))
17380 (sha256
17381 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
17382 (build-system pyproject-build-system)
17383 (native-inputs
17384 (list python-packaging
17385 python-pytest
17386 python-setuptools
17387 python-wheel))
17388 (home-page "https://github.com/sarugaku/resolvelib")
17389 (synopsis "Abstract dependencies resolver")
17390 (description
17391 "The ResolveLib library provides a @code{Resolver} class that includes
17392dependency resolution logic.")
17393 (license license:isc)))
17394
17395;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
17396;; 2022. It is now read-only.
17397(define-public python-commonmark
17398 (package
17399 (name "python-commonmark")
17400 (version "0.9.1")
17401 (source
17402 (origin
17403 (method url-fetch)
17404 (uri (pypi-uri "commonmark" version))
17405 (sha256
17406 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
17407 (build-system pyproject-build-system)
17408 (native-inputs
17409 (list python-setuptools))
17410 (home-page "https://github.com/readthedocs/commonmark.py")
17411 (synopsis "Python parser for the CommonMark Markdown spec")
17412 (description
17413 "This module is a pure Python port of jgm's @code{commonmark.js}, a
17414Markdown parser and renderer for the CommonMark specification, using only
17415native modules.")
17416 (license license:bsd-3)))
17417
17418(define-public python-immutables
17419 (package
17420 (name "python-immutables")
17421 (version "0.21")
17422 (source
17423 (origin
17424 (method url-fetch)
17425 (uri (pypi-uri "immutables" version))
17426 (sha256
17427 (base32 "0jpw9nr2mbzqykigjhqa3a095bx7krwsnmjcxcpj944p8kqglpxm"))))
17428 (build-system pyproject-build-system)
17429 (native-inputs
17430 (list python-mypy python-pytest python-setuptools python-wheel))
17431 (home-page "https://github.com/MagicStack/immutables")
17432 (synopsis "High-performance immutable mapping type for Python")
17433 (description
17434 "An immutable mapping type for Python. The underlying datastructure is a
17435Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
17436functional languages.")
17437 (license license:asl2.0)))
17438
17439(define-public python-prettytable
17440 (package
17441 (name "python-prettytable")
17442 (version "3.12.0")
17443 (source
17444 (origin
17445 (method url-fetch)
17446 (uri (pypi-uri "prettytable" version))
17447 (sha256
17448 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
17449 (build-system pyproject-build-system)
17450 (native-inputs
17451 (list python-hatchling
17452 python-hatch-vcs
17453 python-pytest
17454 python-pytest-cov
17455 python-pytest-lazy-fixtures
17456 python-setuptools-scm))
17457 (propagated-inputs
17458 (list python-wcwidth))
17459 (home-page "https://github.com/jazzband/prettytable")
17460 (synopsis "Display tabular data in an ASCII table format")
17461 (description
17462 "A library designed to represent tabular data in visually appealing ASCII
17463tables. PrettyTable allows for selection of which columns are to be printed,
17464independent alignment of columns (left or right justified or centred) and
17465printing of sub-tables by specifying a row range.")
17466 (license license:bsd-3)))
17467
17468(define-public python-rtf-tokenize
17469 (package
17470 (name "python-rtf-tokenize")
17471 (version "1.0.1")
17472 (source (origin
17473 (method url-fetch)
17474 (uri (pypi-uri "rtf_tokenize" version))
17475 (sha256
17476 (base32
17477 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
17478 (build-system pyproject-build-system)
17479 (native-inputs (list python-pytest python-setuptools python-wheel))
17480 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
17481 (synopsis "Simple RTF tokenizer")
17482 (description "This package is a simple RTF tokenizer.")
17483 (license license:gpl2+)))
17484
17485(define-public python-curio
17486 (package
17487 (name "python-curio")
17488 (version "1.6")
17489 (source
17490 (origin
17491 (method url-fetch)
17492 (uri (pypi-uri "curio" version))
17493 (sha256
17494 (base32 "0isj3jl5mx6m25nr1f7r91hfaydhkvmks9p85dyvl5h2n9nmhajn"))))
17495 (build-system pyproject-build-system)
17496 (arguments
17497 (list
17498 #:test-flags
17499 #~(list ;; AttributeError: 'NoneType' object has no attribute
17500 ;; 'terminate'
17501 "--deselect=tests/test_workers.py::test_exception"
17502 ;; Tries to open an outgoing connection.
17503 "--deselect=tests/test_network.py::test_ssl_outgoing"
17504 ;; This test fails since Python 3.9.9, see
17505 ;; <https://github.com/dabeaz/curio/issues/347>.
17506 ;; AttributeError: 'NoneType' object has no attribute
17507 ;; 'terminate'
17508 "--deselect=tests/test_workers.py::test_worker_timeout"
17509 ;; AttributeError: 'NoneType' object has no attribute
17510 ;; 'terminate'
17511 "--deselect=tests/test_workers.py::test_bad_cpu"
17512 "--deselect=tests/test_workers.py::test_cpu"
17513 "--deselect=tests/test_workers.py::test_worker_cancel")))
17514 (native-inputs
17515 (list python-pytest
17516 python-setuptools
17517 python-wheel))
17518 (home-page "https://github.com/dabeaz/curio")
17519 (synopsis "Coroutine-based library for concurrent Python")
17520 (description
17521 "Curio is a coroutine-based library for concurrent Python systems
17522programming. It provides standard programming abstractions such as as
17523tasks, sockets, files, locks, and queues.")
17524 (license license:bsd-3)))
17525
17526(define-public python-sniffio
17527 (package
17528 (name "python-sniffio")
17529 (version "1.3.1")
17530 (source
17531 (origin
17532 (method url-fetch)
17533 (uri (pypi-uri "sniffio" version))
17534 (sha256
17535 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
17536 (build-system pyproject-build-system)
17537 (native-inputs
17538 (list python-curio python-pytest python-setuptools))
17539 (home-page "https://github.com/python-trio/sniffio")
17540 (synopsis "Detect which async library a program is running under")
17541 (description
17542 "This package detects which async library a program is running under. It
17543supports multiple async I/O packages, like Trio, and asyncio.")
17544 ;; Either license applies.
17545 (license (list license:expat license:asl2.0))))
17546
17547(define-public python-snuggs
17548 (package
17549 (name "python-snuggs")
17550 (version "1.4.7")
17551 (source (origin
17552 (method url-fetch)
17553 (uri (pypi-uri "snuggs" version))
17554 (sha256
17555 (base32
17556 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
17557 (build-system pyproject-build-system)
17558 (propagated-inputs (list python-numpy python-pyparsing))
17559 (native-inputs (list python-hypothesis python-pytest python-setuptools
17560 python-wheel))
17561 (home-page "https://github.com/mapbox/snuggs")
17562 (synopsis "Snuggs are S-expressions for Numpy")
17563 (description "Snuggs are S-expressions for Numpy.")
17564 (license license:expat)))
17565
17566(define-public python-geojson
17567 (package
17568 (name "python-geojson")
17569 (version "3.2.0")
17570 (source
17571 (origin
17572 (method url-fetch)
17573 (uri (pypi-uri "geojson" version))
17574 (sha256
17575 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
17576 (build-system pyproject-build-system)
17577 (native-inputs (list python-pytest python-setuptools))
17578 (home-page "https://github.com/jazzband/geojson")
17579 (synopsis "Python bindings and utilities for GeoJSON")
17580 (description
17581 "This package provides Python bindings and utilities for
17582@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
17583structures.")
17584 (license license:bsd-3)))
17585
17586;; pyowm only accepts a version less than version 3.
17587(define-public python-geojson-for-pyowm
17588 (package
17589 (inherit python-geojson)
17590 (version "2.5.0")
17591 (source
17592 (origin
17593 (method url-fetch)
17594 (uri (pypi-uri "geojson" version))
17595 (sha256
17596 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
17597 (arguments
17598 ;; https://github.com/jazzband/geojson/issues/175
17599 (list #:tests? #f))))
17600
17601(define-public python-gpxpy
17602 (package
17603 (name "python-gpxpy")
17604 (version "1.6.2")
17605 (source
17606 (origin
17607 (method url-fetch)
17608 (uri (pypi-uri "gpxpy" version))
17609 (sha256
17610 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
17611 (build-system pyproject-build-system)
17612 (arguments
17613 (list #:test-backend #~'unittest))
17614 (native-inputs
17615 (list python-setuptools))
17616 (home-page "https://github.com/tkrajina/gpxpy")
17617 (synopsis "Python GPX parser")
17618 (description "GPX file parser and GPS track manipulation library.")
17619 (license license:asl2.0)))
17620
17621(define-public python-get-version
17622 (package
17623 (name "python-get-version")
17624 (version "3.5.5")
17625 (source
17626 (origin
17627 (method url-fetch)
17628 (uri (pypi-uri "get_version" version))
17629 (sha256
17630 (base32
17631 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
17632 (build-system pyproject-build-system)
17633 (arguments
17634 ;; XXX: No tests in PyPI and building from GitHub fails because of the
17635 ;; lack of git metadata in the checkout.
17636 (list #:tests? #f))
17637 (native-inputs (list python-flit-core))
17638 (propagated-inputs (list python-dunamai))
17639 (home-page "https://github.com/flying-sheep/get_version")
17640 (synopsis "Version helper in the spirit of versioneer")
17641 (description
17642 "This package provides a version helper that lets you automatically use
17643the latest @code{vX.X.X} Git tag as the version in your Python package. It
17644also supports getting the version from Python source distributions or, once
17645your package is installed, via @code{pkg_resources} (part of
17646@code{setuptools}).")
17647 (license license:gpl3+)))
17648
17649(define-public python-filetype
17650 (package
17651 (name "python-filetype")
17652 (version "1.2.0")
17653 (source
17654 (origin
17655 (method url-fetch)
17656 (uri (pypi-uri "filetype" version))
17657 (sha256
17658 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
17659 (build-system pyproject-build-system)
17660 (native-inputs (list python-pytest
17661 python-pytest-benchmark
17662 python-setuptools
17663 python-wheel))
17664 (home-page "https://github.com/h2non/filetype.py")
17665 (synopsis "Infer file type and MIME type of any file/buffer")
17666 (description "@code{filetype} is a small and dependency free Python
17667package to infer file type and MIME type checking the magic numbers
17668signature of a file or buffer.")
17669 (license license:expat)))
17670
17671(define-public python-cachelib
17672 (package
17673 (name "python-cachelib")
17674 (version "0.13.0")
17675 (source
17676 (origin
17677 (method url-fetch)
17678 (uri (pypi-uri "cachelib" version))
17679 (sha256
17680 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
17681 (build-system pyproject-build-system)
17682 (arguments
17683 ;; These tests use a remote connection.
17684 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
17685 "--ignore" "tests/test_mongodb_cache.py")))
17686 (native-inputs
17687 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
17688 (home-page "https://github.com/pallets-eco/cachelib")
17689 (synopsis "Collection of cache libraries")
17690 (description "Cachelib is a library extracted from @code{werkzeug} which
17691provides a collection of cache libraries in the same API interface.")
17692 (license license:bsd-3)))
17693
17694(define-public python-pylru
17695 (package
17696 (name "python-pylru")
17697 (version "1.2.0")
17698 (source
17699 (origin
17700 (method git-fetch)
17701 (uri (git-reference
17702 (url "https://github.com/jlhutch/pylru")
17703 (commit (string-append "v" version))))
17704 (file-name (git-file-name name version))
17705 (sha256
17706 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
17707 (build-system pyproject-build-system)
17708 (arguments
17709 (list
17710 #:test-backend #~'custom
17711 #:test-flags #~(list "test.py")))
17712 (native-inputs (list python-pytest python-setuptools))
17713 (home-page "https://github.com/jlhutch/pylru")
17714 (synopsis "Least recently used (LRU) cache implementation")
17715 (description
17716 "Pylru implements a true LRU cache along with several support classes.
17717Pylru provides a cache class with a simple dict interface. It also provides
17718classes to wrap any object that has a dict interface with a cache. Both
17719write-through and write-back semantics are supported. Pylru also provides
17720classes to wrap functions in a similar way, including a function decorator.")
17721 (license license:gpl2+)))
17722
17723(define-public python-legacy-api-wrap
17724 (package
17725 (name "python-legacy-api-wrap")
17726 (version "1.4.1")
17727 (source
17728 (origin
17729 (method url-fetch)
17730 (uri (pypi-uri "legacy_api_wrap" version))
17731 (sha256
17732 (base32
17733 "1d5jyd8d2wxm6y0s39wwqw87gdm4zqlbyz78cf3yqbrim1xdch4w"))))
17734 (build-system pyproject-build-system)
17735 (native-inputs
17736 (list python-hatch-vcs
17737 python-hatchling
17738 python-pytest))
17739 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
17740 (synopsis "Legacy API wrapper")
17741 (description "This module defines a decorator to wrap legacy APIs. The
17742primary use case is APIs defined before keyword-only parameters existed.")
17743 (license license:gpl3+)))
17744
17745(define-public python-langdetect
17746 (package
17747 (name "python-langdetect")
17748 (version "1.0.9")
17749 (source
17750 (origin
17751 (method url-fetch)
17752 (uri (pypi-uri "langdetect" version))
17753 (sha256
17754 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
17755 (build-system pyproject-build-system)
17756 (native-inputs
17757 (list python-pytest
17758 python-setuptools))
17759 (propagated-inputs
17760 (list python-six))
17761 (home-page "https://github.com/Mimino666/langdetect")
17762 (synopsis "Language detection library")
17763 (description
17764 "This library is a port of Nakatani Shuyo's language-detection library
17765(version from 03/03/2014) to Python.")
17766 (license license:expat)))
17767
17768(define-public python-pyasn1
17769 (package
17770 (name "python-pyasn1")
17771 (version "0.6.1")
17772 (source
17773 (origin
17774 (method url-fetch)
17775 (uri (pypi-uri "pyasn1" version))
17776 (sha256
17777 (base32
17778 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
17779 (build-system pyproject-build-system)
17780 (arguments
17781 (list #:test-backend #~'unittest
17782 #:test-flags #~(list "discover" "tests")))
17783 (native-inputs
17784 (list python-setuptools))
17785 (home-page "https://github.com/pyasn1/pyasn1")
17786 (synopsis "ASN.1 types and codecs")
17787 (description
17788 "This is an implementation of ASN.1 types and codecs in Python. It is
17789suitable for a wide range of protocols based on the ASN.1 specification.")
17790 (license license:bsd-2)))
17791
17792(define-public python-pyasn1-modules
17793 (package
17794 (name "python-pyasn1-modules")
17795 (version "0.4.2")
17796 (source
17797 (origin
17798 (method url-fetch)
17799 (uri (pypi-uri "pyasn1_modules" version))
17800 (sha256
17801 (base32
17802 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
17803 (build-system pyproject-build-system)
17804 (arguments
17805 (list #:test-backend #~'unittest
17806 #:test-flags #~(list "discover" "tests")))
17807 (native-inputs
17808 (list python-setuptools))
17809 (propagated-inputs
17810 (list python-pyasn1))
17811 (home-page "https://github.com/pyasn1/pyasn1-modules")
17812 (synopsis "ASN.1 codec implementations")
17813 (description
17814 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
17815implementations of ASN.1-based codecs and protocols.")
17816 (license license:bsd-3)))
17817
17818(define-public python-asn1tools
17819 (package
17820 (name "python-asn1tools")
17821 (version "0.167.0")
17822 (source
17823 (origin
17824 (method url-fetch)
17825 (uri (pypi-uri "asn1tools" version))
17826 (sha256
17827 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
17828 (build-system pyproject-build-system)
17829 (arguments
17830 (list
17831 #:test-flags
17832 #~(list "-k" (string-join
17833 ;; Tests fail with error: IndexError: string index out of
17834 ;; range. It may be some incompatability wit pyparsing,
17835 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
17836 (list "not test_c_source"
17837 "test_command_line_generate_c_source_oer"
17838 "test_command_line_generate_c_source_uper"
17839 "test_command_line_generate_rust_source_uper"
17840 "test_missing_parameterized_value"
17841 "test_c_source"
17842 "test_parse_parameterization")
17843 " and not "))))
17844 (native-inputs
17845 (list python-pytest
17846 python-setuptools
17847 python-wheel))
17848 (propagated-inputs
17849 (list python-bitstruct
17850 python-diskcache
17851 python-prompt-toolkit
17852 python-pyparsing))
17853 (home-page "https://github.com/eerimoq/asn1tools")
17854 (synopsis "ASN.1 parsing, encoding and decoding")
17855 (description "This package provides ASN.1 parsing, encoding and decoding
17856for Python, including constraints checking. It supports several
17857codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
17858for OER and UPER.")
17859 (license license:expat)))
17860
17861(define-public python-idna
17862 (package
17863 (name "python-idna")
17864 (version "3.10")
17865 (source
17866 (origin
17867 (method url-fetch)
17868 (uri (pypi-uri "idna" version))
17869 (sha256
17870 (base32
17871 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
17872 (build-system pyproject-build-system)
17873 (native-inputs
17874 (list python-flit-core))
17875 (home-page "https://github.com/kjd/idna")
17876 (synopsis "Internationalized domain names in applications")
17877 (description
17878 "This is a library to support the Internationalised Domain Names in
17879Applications (IDNA) protocol as specified in RFC 5891. This version of the
17880protocol is often referred to as “IDNA2008” and can produce different results
17881from the earlier standard from 2003. The library is also intended to act as a
17882suitable drop-in replacement for the “encodings.idna” module that comes with
17883the Python standard library but currently only supports the older 2003
17884specification.")
17885 (license license:bsd-4)))
17886
17887(define-public python-libsass
17888 (package
17889 (name "python-libsass")
17890 (version "0.23.0")
17891 (source
17892 (origin
17893 ;; PyPI tarball is missing some test files.
17894 (method git-fetch)
17895 (uri (git-reference
17896 (url "https://github.com/sass/libsass-python")
17897 (commit version)))
17898 (file-name (git-file-name name version))
17899 (sha256
17900 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
17901 (build-system pyproject-build-system)
17902 (arguments
17903 '(#:phases
17904 (modify-phases %standard-phases
17905 ;; Use Guix package of libsass instead of compiling from a checkout.
17906 (add-before 'build 'set-libsass
17907 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
17908 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
17909 ;; https://github.com/sass/libsass-python/issues/440. It passed with
17910 ;; [email protected] which requires rebuild the world (1200+ packages),
17911 ;; remove when v3.6.5 is available.
17912 (add-before 'check 'silent-failing-tests
17913 (lambda _
17914 (substitute* "sasstests.py"
17915 (("def test_build_one")
17916 "def __off_test_build_one")
17917 (("def test_stack_trace_formatting")
17918 "def __off_test_stack_trace_formatting"))))
17919 (replace 'check
17920 (lambda* (#:key tests? #:allow-other-keys)
17921 (when tests?
17922 (invoke "pytest" "sasstests.py"))))
17923 (add-after 'install 'delete-test
17924 (lambda* (#:key inputs outputs #:allow-other-keys)
17925 ;; Delete sasstests.py because it attempts to open a file
17926 ;; that is not installed when loaded, which breaks the sanity
17927 ;; check.
17928 (delete-file (string-append
17929 (assoc-ref outputs "out")
17930 "/lib/python"
17931 (python-version
17932 (dirname (dirname
17933 (search-input-file inputs "bin/python"))))
17934 "/site-packages/sasstests.py")))))))
17935 (native-inputs
17936 (list python-pytest python-setuptools python-werkzeug python-wheel))
17937 (inputs
17938 (list libsass))
17939 (home-page "https://sass.github.io/libsass-python/")
17940 (synopsis "Straightforward binding of libsass for Python")
17941 (description
17942 "This package provides a simple Python extension module @code{sass} which
17943is binding LibSass.")
17944 (license license:expat)))
17945
17946(define-public python-idna-ssl
17947 (package
17948 (name "python-idna-ssl")
17949 (version "1.0.1")
17950 (source
17951 (origin
17952 (method git-fetch)
17953 (uri (git-reference
17954 (url "https://github.com/aio-libs/idna-ssl")
17955 (commit (string-append "v" version))))
17956 (file-name (git-file-name name version))
17957 (sha256
17958 (base32 "1fj4zkcnx3mk7kbnf4d6pjgv331n17wzpphpwdnmr498ghbsph9k"))))
17959 (build-system pyproject-build-system)
17960 (arguments (list #:tests? #f)) ;circular dependency with python-aiohttp
17961 (native-inputs (list python-setuptools))
17962 (propagated-inputs (list python-idna))
17963 (home-page "https://github.com/aio-libs/idna-ssl")
17964 (synopsis "Support Unicode(idna) domains for Python's @code{ssl} module")
17965 (description
17966 "This package provides Unicode(idna) domains support for Python's
17967@code{ssl} module. It patches @code{ssl.match_hostname} for that purpose.")
17968 (license license:expat)))
17969
17970(define-public python-path
17971 (package
17972 (name "python-path")
17973 (version "17.1.0")
17974 (source
17975 (origin
17976 (method url-fetch)
17977 (uri (pypi-uri "path" version))
17978 (sha256
17979 (base32 "1scqbwgcbisx8mb28hw789a7np953851wg6z0bbzdm519znha7nl"))))
17980 (build-system pyproject-build-system)
17981 (arguments
17982 (list
17983 #:tests? (not (%current-target-system))
17984 #:test-flags
17985 #~(list "-k"
17986 (string-append
17987 ;; Do not test the myproject.toml build as it tries
17988 ;; to pull dependencies from the Internet.
17989 "not project "
17990 ;; This tests assumes a root user exists.
17991 "and not test_get_owner"))))
17992 (native-inputs
17993 (list python-appdirs
17994 python-more-itertools
17995 python-packaging
17996 python-pygments
17997 python-pytest
17998 python-setuptools
17999 python-setuptools-scm))
18000 (home-page "https://github.com/jaraco/path")
18001 (synopsis "Object-oriented file system path manipulation library")
18002 (description "@code{path} (formerly @code{path.py}) implements path
18003objects as first-class entities, allowing common operations on files to be
18004invoked on those path objects directly.")
18005 (license license:expat)))
18006
18007;; It may be removed after 2026-01-24.
18008(define-deprecated/public-alias python-path-bootstrap python-path)
18009(define-deprecated/public-alias python-pathpy python-path)
18010
18011(define-public python-pretend
18012 (package
18013 (name "python-pretend")
18014 (version "1.0.9")
18015 (source
18016 (origin
18017 (method git-fetch) ;no tests in PyPI archive
18018 (uri (git-reference
18019 (url "https://github.com/alex/pretend")
18020 (commit (string-append "v" version))))
18021 (file-name (git-file-name name version))
18022 (sha256
18023 (base32 "156l685r9mg7i4xyrk9ql3sxk088irxlg8x7md5i0d05hdw1z8rs"))))
18024 (build-system pyproject-build-system)
18025 (native-inputs
18026 (list python-pytest
18027 python-setuptools))
18028 (home-page "https://github.com/alex/pretend")
18029 (synopsis "Library for stubbing in Python")
18030 (description
18031 "Pretend is a library to make stubbing with Python easier. Stubbing is a
18032technique for writing tests. You may hear the term mixed up with mocks,fakes,
18033or doubles. Basically, a stub is an object that returns pre-canned responses,
18034rather than doing any computation.")
18035 (license license:bsd-3)))
18036
18037(define-public python-pip-run
18038 (package
18039 (name "python-pip-run")
18040 (version "8.8.0")
18041 (source
18042 (origin
18043 (method git-fetch)
18044 (uri (git-reference
18045 (url "https://github.com/jaraco/pip-run")
18046 (commit (string-append "v" version))))
18047 (file-name (git-file-name name version))
18048 (sha256
18049 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
18050 (build-system pyproject-build-system)
18051 (arguments
18052 (list
18053 #:tests? (not (%current-target-system))
18054 #:test-flags
18055 #~(list "-k" (string-append
18056 ;; Do not test the myproject.toml build as it tries
18057 ;; to pull dependencies from the internet.
18058 "not project "
18059 ;; These tests attempt to install dependencies from
18060 ;; the network and fail.
18061 "and not test_pkg_imported "
18062 "and not test_pkg_loaded_from_alternate_index "
18063 "and not test_pkg_loaded_from_url "))
18064 #:phases
18065 #~(modify-phases %standard-phases
18066 (add-before 'build 'pretend-version
18067 (lambda _
18068 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
18069 (native-inputs
18070 (list python-nbformat
18071 python-pygments
18072 python-pytest
18073 python-setuptools
18074 python-setuptools-scm))
18075 (propagated-inputs
18076 (list python-autocommand
18077 python-packaging
18078 python-path
18079 python-pip))
18080 (home-page "https://github.com/jaraco/pip-run")
18081 (synopsis "Dynamic dependency loader for Python")
18082 (description "The @command{pip-run} command provides on-demand temporary
18083package installation for a single interpreter run. It replaces this series of
18084commands:
18085@example
18086$ virtualenv --python pythonX.X --system-site-packages /tmp/env
18087$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
18088$ /tmp/env/bin/python ...
18089$ rm -rf /tmp/env
18090@end example")
18091 (license license:expat)))
18092
18093;; It may be removed after 2026-01-24.
18094(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
18095
18096(define-public python-libarchive-c
18097 (package
18098 (name "python-libarchive-c")
18099 (version "5.2")
18100 (source (origin
18101 (method url-fetch)
18102 (uri (pypi-uri "libarchive_c" version))
18103 (sha256
18104 (base32
18105 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
18106 (build-system pyproject-build-system)
18107 (arguments
18108 (list
18109 #:phases
18110 #~(modify-phases %standard-phases
18111 (add-before 'build 'reference-libarchive
18112 (lambda* (#:key inputs #:allow-other-keys)
18113 ;; Retain the absolute file name of libarchive.so.
18114 (substitute* "libarchive/ffi.py"
18115 (("find_library\\('archive'\\)")
18116 (string-append
18117 "'"
18118 (search-input-file inputs "/lib/libarchive.so")
18119 "'"))))))))
18120 (native-inputs
18121 (list python-setuptools python-wheel python-pytest))
18122 (inputs
18123 (list libarchive))
18124 (home-page "https://github.com/Changaco/python-libarchive-c")
18125 (synopsis "Python interface to libarchive")
18126 (description
18127 "This package provides Python bindings to libarchive, a C library to
18128access possibly compressed archives in many different formats. It uses
18129Python's @code{ctypes} foreign function interface (FFI).")
18130 (license license:lgpl2.0+)))
18131
18132(define-public python-file
18133 (package/inherit file
18134 (name "python-file")
18135 (build-system pyproject-build-system)
18136 (arguments
18137 (list
18138 #:tests? #f ;no tests
18139 #:phases
18140 #~(modify-phases %standard-phases
18141 (add-before 'build 'change-directory
18142 (lambda _
18143 (chdir "python")))
18144 (add-before 'build 'set-library-file-name
18145 (lambda* (#:key inputs #:allow-other-keys)
18146 (substitute* "magic.py"
18147 (("find_library\\('magic'\\)")
18148 (format #f "~s" (search-input-file inputs
18149 "lib/libmagic.so")))))))))
18150 (inputs (list file))
18151 (native-inputs (cons* python-setuptools
18152 (if (%current-target-system)
18153 (list this-package)
18154 '())))
18155 (synopsis "Python bindings to the libmagic file type guesser")
18156 (description "This package provides Python bindings to the libmagic file
18157type guesser.
18158
18159Note that this module and the @code{python-magic} module both provide a
18160@file{magic.py} file; these two modules, which are different and were
18161developed separately, both serve the same purpose: provide Python bindings for
18162libmagic.")))
18163
18164(define-public python-pydevd
18165 (package
18166 (name "python-pydevd")
18167 (version "3.2.3")
18168 (source
18169 (origin
18170 (method git-fetch)
18171 (uri (git-reference
18172 (url "https://github.com/fabioz/PyDev.Debugger")
18173 (commit (string-append
18174 "pydev_debugger_"
18175 (string-join (string-split version #\.) "_")))))
18176 (modules '((guix build utils)))
18177 (snippet '(begin
18178 ;; Delete pre-built binaries.
18179 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
18180 ;; This source is generated via Cython.
18181 (delete-file "_pydevd_bundle/pydevd_cython.c")))
18182 (file-name (git-file-name name version))
18183 (sha256
18184 (base32
18185 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
18186 (build-system pyproject-build-system)
18187 (arguments
18188 (list
18189 #:test-flags
18190 #~(list "-n" (number->string (parallel-job-count))
18191 "-m" "not flaky"
18192 "-k"
18193 (string-join
18194 (list
18195 ;; The two "break_01" tests have been failing on
18196 ;; Python 3.10:
18197 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
18198 "not test_set_pydevd_break_01 "
18199 ;; the GUI event loop requires an X server.
18200 "test_gui_event_loop_custom"
18201 ;; This test validates that 'pydevd' is not in the
18202 ;; exception message, but it is due to being part
18203 ;; of the build file name present in the message.
18204 "test_evaluate_exception_trace"
18205 ;; This test fail with TimeoutError, no message on stderr.
18206 "test_soft_terminate"
18207 "test_debugger_case_deadlock_interrupt_thread"
18208 ;; subprocess.CalledProcessError
18209 ;; Python 3.11/3.12 specific issue:
18210 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
18211 "test_find_main_thread_id")
18212 " and not "))
18213 #:phases
18214 #~(modify-phases %standard-phases
18215 (add-after 'unpack 'fix-tests
18216 (lambda _
18217 (substitute* "tests_python/test_convert_utilities.py"
18218 ;; Add missing trailing '/'.
18219 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
18220 (string-append all "/")))))
18221 (add-after 'unpack 'patch-command-paths
18222 (lambda* (#:key inputs #:allow-other-keys)
18223 (substitute* "_pydevd_bundle/pydevd_api.py"
18224 (("'kill'")
18225 (format #f "~s" (search-input-file inputs "bin/kill")))
18226 (("'pgrep'")
18227 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
18228 (add-after 'unpack 'generate-sources
18229 (lambda _
18230 (setenv "PYTHONPATH" (getcwd))
18231 (invoke "python" "build_tools/build.py")))
18232 (add-after 'unpack 'adjust-attach-binary-name
18233 (lambda _
18234 (substitute*
18235 '("pydevd_tracing.py"
18236 "pydevd_attach_to_process/add_code_to_python_process.py")
18237 (("def get_(target|python_helper_lib)_filename.*" all)
18238 (format #f "~a return ~s~%" all
18239 (string-append #$output "/lib/attach.so"))))))
18240 (add-after 'unpack 'patch-gdb
18241 (lambda* (#:key inputs #:allow-other-keys)
18242 (substitute*
18243 "pydevd_attach_to_process/add_code_to_python_process.py"
18244 (("'gdb',")
18245 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
18246 (add-after 'build 'build-attach-linux-binary
18247 (lambda _
18248 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
18249 "-fPIC" "-nostartfiles"
18250 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
18251 (add-before 'check 'pre-check
18252 (lambda* (#:key tests? #:allow-other-keys)
18253 (when tests?
18254 (setenv "PYDEVD_USE_CYTHON" "YES"))))
18255 (add-after 'install 'install-attach-binary
18256 (lambda _
18257 (install-file "attach.so"
18258 (string-append #$output "/lib"))))
18259 ;; Some modules aren't designed to be loadable by themselves, such
18260 ;; as 'pydev_app_engine_debug_startup' and fail.
18261 (delete 'sanity-check))))
18262 (native-inputs
18263 (list python-cython
18264 python-numpy
18265 python-psutil
18266 python-pytest
18267 python-pytest-xdist
18268 python-setuptools
18269 python-trio
18270 python-untangle
18271 python-wheel))
18272 (inputs (list coreutils gdb/pinned procps))
18273 (home-page "https://github.com/fabioz/PyDev.Debugger/")
18274 (synopsis "Python debugger")
18275 (description "PyDev.Debugger is a capable Python debugger used in PyDev
18276and other @acronym{IDEs, Integrated Development Environments}.")
18277 (license license:epl1.0)))
18278
18279(define-public python-debugpy
18280 (package
18281 (name "python-debugpy")
18282 (version "1.8.17")
18283 (source
18284 (origin
18285 (method git-fetch)
18286 (uri (git-reference ;no tests in PyPI archive
18287 (url "https://github.com/microsoft/debugpy")
18288 (commit (string-append "v" version))))
18289 (file-name (git-file-name name version))
18290 (modules '((guix build utils)))
18291 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
18292 ;; attach binary.
18293 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
18294 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
18295 (sha256
18296 (base32
18297 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
18298 (build-system pyproject-build-system)
18299 (arguments
18300 (list
18301 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
18302 #:phases
18303 #~(modify-phases %standard-phases
18304 (add-after 'unpack 'patch-sh-in-tests
18305 (lambda _
18306 (substitute* "tests/debugpy/test_run.py"
18307 (("#!/bin/sh")
18308 (string-append "#!" (which "sh"))))))
18309 (add-after 'unpack 'fix-version
18310 ;; Versioneer is useless when there is no git metadata.
18311 (lambda _
18312 (substitute* "setup.py"
18313 (("version=versioneer.get_version\\(),")
18314 (format #f "version=~s," #$version)))))
18315 (add-before 'build 'configure
18316 (lambda _
18317 ;; This adjusts the behavior of debugpy to load pydevd from
18318 ;; Python site packages.
18319 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
18320 (native-inputs
18321 (list python-setuptools))
18322 (propagated-inputs
18323 (list python-pydevd))
18324 (home-page "https://aka.ms/debugpy")
18325 (synopsis "Debug Adapter Protocol Python implementation")
18326 (description "An implementation of the Debug Adapter Protocol for
18327Python.")
18328 (license license:expat)))
18329
18330(define-public python-debian
18331 (package
18332 (name "python-debian")
18333 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
18334 (version "0.1.49")
18335 (source
18336 (origin
18337 ;; Use git-fetch, as pypi doesn't include test suite.
18338 (method git-fetch)
18339 (uri (git-reference
18340 (url home-page)
18341 (commit version)))
18342 (file-name (git-file-name name version))
18343 (sha256
18344 (base32
18345 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
18346 (modules '((guix build utils)))
18347 (snippet
18348 #~(begin
18349 ;; python-apt, apt and dpkg are not yet available in guix,
18350 ;; and these tests heavily depend on them.
18351 (for-each delete-file
18352 '("lib/debian/tests/test_deb822.py"
18353 "lib/debian/tests/test_debfile.py"))
18354
18355 ;; for reproducible builds, otherwise python-debian
18356 ;; generates a _version.py including the date
18357 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
18358 (substitute* "lib/debian/_version.py"
18359 (("__CHANGELOG_VERSION__") #$version))))))
18360 (build-system pyproject-build-system)
18361 (native-inputs
18362 (list python-pytest python-setuptools))
18363 (propagated-inputs
18364 (list python-six python-chardet))
18365 (synopsis "Debian package related modules")
18366 (description
18367 "This package provides Python modules that abstract many formats of
18368Debian-related files, such as:
18369@itemize
18370@item Debtags information;
18371@item @file{debian/changelog} files;
18372@item packages files, pdiffs;
18373@item control files of single or multiple RFC822-style paragraphs---e.g.
18374 @file{debian/control}, @file{.changes}, @file{.dsc};
18375@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
18376 contained files and meta-information.
18377@end itemize")
18378 ;; Modules are either GPLv2+ or GPLv3+.
18379 (license license:gpl3+)))
18380
18381(define-public python-json-spec
18382 (package
18383 (name "python-json-spec")
18384 (version "0.12.0")
18385 (source
18386 (origin
18387 (method git-fetch) ;no tests in PyPI archive
18388 (uri (git-reference
18389 (url "https://github.com/johnnoone/json-spec")
18390 (commit version)))
18391 (file-name (git-file-name name version))
18392 (sha256
18393 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
18394 (build-system pyproject-build-system)
18395 (native-inputs
18396 (list python-pytest
18397 python-poetry-core))
18398 (propagated-inputs
18399 (list python-termcolor)) ;for the CLI
18400 (home-page "https://json-spec.readthedocs.io/")
18401 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
18402 (description
18403 "This Python library implements several JSON specs, like JSON Schema,
18404JSON Reference and JSON Pointer.")
18405 (license license:bsd-3)))
18406
18407(define-public python-fastbencode
18408 (package
18409 (name "python-fastbencode")
18410 (version "0.3.2") ;the last non Rust version
18411 (source
18412 (origin
18413 (method url-fetch)
18414 (uri (pypi-uri "fastbencode" version))
18415 (modules '((guix build utils)))
18416 ;; Delete pre-generated Cython C files.
18417 (snippet '(for-each delete-file (find-files "." "\\.c$")))
18418 (sha256
18419 (base32 "1daal7xgsl2sjxq8pcilcas9wd9j9796wd4rlkhrvv5h0k2k4k53"))))
18420 (build-system pyproject-build-system)
18421 (arguments
18422 (list
18423 #:test-backend #~'unittest
18424 #:test-flags #~(list "fastbencode.tests.test_suite")))
18425 (native-inputs
18426 (list python-cython
18427 python-setuptools))
18428 (home-page "https://github.com/breezy-team/fastbencode")
18429 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
18430 (description
18431 "The fastbencode Python package implements the bencode serialization
18432format for storing and transmitting loosely structured data, originally used
18433by BitTorrent.
18434
18435The format can encode four different types of values: byte strings, integers,
18436lists, and dictionaries (associative arrays). It's simple and unaffected by
18437endianness,
18438
18439This package includes both a pure-Python version and an optional C extension
18440based on Cython. Both provide the same functionality, but the C version has
18441significantly better performance.")
18442 (license (list license:expat ; _bencode_py.py
18443 license:gpl2+)))) ; __init__.py
18444
18445(define-public python-fastjsonschema
18446 (package
18447 (name "python-fastjsonschema")
18448 (version "2.21.1")
18449 (source
18450 (origin
18451 (method git-fetch) ; no tests in PyPI release
18452 (uri (git-reference
18453 (url "https://github.com/horejsek/python-fastjsonschema")
18454 (commit (string-append "v" version))))
18455 (file-name (git-file-name name version))
18456 (sha256
18457 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
18458 (build-system pyproject-build-system)
18459 (arguments
18460 (list
18461 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
18462 (native-inputs
18463 (list python-json-spec
18464 python-jsonschema
18465 python-pytest
18466 python-pytest-benchmark
18467 python-setuptools))
18468 (home-page "https://github.com/horejsek/python-fastjsonschema")
18469 (synopsis "Fast Python implementation of JSON schema")
18470 (description
18471 "This library implements validation of JSON documents by JSON schema for
18472drafts 04, 06 and 07.")
18473 (license license:bsd-3)))
18474
18475(define-public python-nbformat
18476 (package
18477 (name "python-nbformat")
18478 (version "5.10.4")
18479 ;; The PyPi release tarball lacks some test cases and test data.
18480 (source (origin
18481 (method git-fetch)
18482 (uri (git-reference
18483 (url "https://github.com/jupyter/nbformat")
18484 (commit (string-append "v" version))))
18485 (sha256
18486 (base32
18487 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
18488 (file-name (git-file-name name version))))
18489 (build-system pyproject-build-system)
18490 (arguments
18491 (list
18492 #:phases
18493 #~(modify-phases %standard-phases
18494 ;; We don't want to use hatch-nodejs just to get a version string.
18495 (add-after 'unpack 'patch-pyproject
18496 (lambda _
18497 (substitute* "pyproject.toml"
18498 ((", \"hatch-nodejs-version\"") "")
18499 (("dynamic = \\[\"version\"\\]")
18500 (string-append "version = \"" #$version "\""))))))))
18501 (propagated-inputs
18502 (list python-fastjsonschema python-jsonschema python-jupyter-core
18503 python-traitlets))
18504 (native-inputs
18505 (list python-hatchling
18506 python-pep440
18507 python-pytest
18508 python-testpath))
18509 (home-page "https://jupyter.org")
18510 (synopsis "Jupyter Notebook format")
18511 (description "This package provides the reference implementation of the
18512Jupyter Notebook format and Python APIs for working with notebooks.")
18513 (license license:bsd-3)))
18514
18515(define-public python-nb-clean
18516 (package
18517 (name "python-nb-clean")
18518 (version "4.0.1")
18519 (source
18520 (origin
18521 (method git-fetch) ; no tests in PyPI
18522 (uri (git-reference
18523 (url "https://github.com/srstevenson/nb-clean")
18524 (commit version)))
18525 (file-name (git-file-name name version))
18526 (sha256
18527 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
18528 (build-system pyproject-build-system)
18529 (native-inputs (list python-poetry-core
18530 python-pytest
18531 python-pytest-cov ; runs by default
18532 python-pytest-mock))
18533 (propagated-inputs (list python-nbformat))
18534 (home-page "https://github.com/srstevenson/nb-clean")
18535 (synopsis "Clean Jupyter notebooks for versioning")
18536 (description "This package cleans Jupyter notebooks of cell execution
18537counts, metadata, outputs, and empty cells, preparing them for committing to
18538version control. It provides a Git filter to automatically clean notebooks
18539before they're staged, and can also be used with other version control
18540systems, as a command line tool, and as a Python library.")
18541 (license license:isc)))
18542
18543(define-public python-bleach
18544 (package
18545 (name "python-bleach")
18546 (version "6.2.0")
18547 (source
18548 (origin
18549 (method url-fetch)
18550 (uri (pypi-uri "bleach" version))
18551 (sha256
18552 (base32 "07wrbzlmd6x63dz7lcdih9c4xkn79inimv6kh3yrk9dq310qjghj"))
18553 (snippet
18554 #~(begin
18555 (use-modules (guix build utils))
18556 (substitute* (find-files "." "\\.py$")
18557 (("bleach\\._vendor\\.html5lib") "html5lib"))
18558 (delete-file-recursively "bleach/_vendor/html5lib")))))
18559 (build-system pyproject-build-system)
18560 (native-inputs
18561 (list python-pytest
18562 python-setuptools))
18563 (propagated-inputs
18564 (list python-html5lib
18565 python-webencodings))
18566 (home-page "https://github.com/mozilla/bleach")
18567 (synopsis "Whitelist-based HTML-sanitizing tool")
18568 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
18569 (license license:asl2.0)))
18570
18571(define-public python-entrypoints
18572 (package
18573 (name "python-entrypoints")
18574 (version "0.4")
18575 (source
18576 (origin
18577 (method url-fetch)
18578 (uri (pypi-uri "entrypoints" version))
18579 (sha256
18580 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
18581 (build-system pyproject-build-system)
18582 (native-inputs
18583 (list python-flit-core
18584 python-pytest))
18585 (home-page "https://github.com/takluyver/entrypoints")
18586 (synopsis "Discover and load entry points from installed Python packages")
18587 (description "Entry points are a way for Python packages to advertise
18588objects with some common interface. The most common examples are
18589@code{console_scripts} entry points, which define shell commands by
18590identifying a Python function to run. The @code{entrypoints} module contains
18591functions to find and load entry points.")
18592 (license license:expat)))
18593
18594(define-public python-epc
18595 (package
18596 (name "python-epc")
18597 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
18598 (revision . "0")))
18599 (version (git-version "0.0.5"
18600 (assoc-ref properties 'revision)
18601 (assoc-ref properties 'commit)))
18602 (source
18603 (origin
18604 (method git-fetch)
18605 (uri (git-reference
18606 (url "https://github.com/tkf/python-epc")
18607 (commit (assoc-ref properties 'commit))))
18608 (file-name (git-file-name name version))
18609 (sha256
18610 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
18611 (build-system pyproject-build-system)
18612 (arguments (list #:test-backend #~'nose))
18613 (propagated-inputs (list python-sexpdata))
18614 (native-inputs (list python-pynose python-setuptools))
18615 (home-page "https://github.com/tkf/python-epc")
18616 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
18617 (description
18618 "Python-EPC can call elisp functions from Python and Python functions
18619from elisp.")
18620 (license license:gpl3)))
18621
18622(define-public python-forex-python
18623 (package
18624 (name "python-forex-python")
18625 (version "1.5")
18626 (source
18627 (origin
18628 (method git-fetch)
18629 (uri (git-reference
18630 (url "https://github.com/MicroPyramid/forex-python")
18631 (commit version)))
18632 (file-name (git-file-name name version))
18633 (sha256
18634 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
18635 (build-system pyproject-build-system)
18636 (arguments (list #:tests? #f)) ; Tests require online data.
18637 (native-inputs (list python-setuptools))
18638 (propagated-inputs (list python-requests python-simplejson))
18639 (home-page "https://github.com/MicroPyramid/forex-python")
18640 (synopsis "Foreign exchange rates and currency conversion")
18641 (description
18642 "@code{python-forex-python} can be used to manipulate foreign
18643exchange rates and to operate currency conversions.
18644
18645Features:
18646@itemize
18647@item List all currency rates.
18648@item BitCoin price for all currencies.
18649@item Converting amount to BitCoins.
18650@item Get historical rates for any day since 1999.
18651@item Conversion rate for one currency(ex; USD to INR).
18652@item Convert amount from one currency to other.('USD 10$' to INR).
18653@item Currency symbols.
18654@item Currency names.
18655@end itemize")
18656 (license license:expat)))
18657
18658(define-public python-simpleeval
18659 (package
18660 (name "python-simpleeval")
18661 (version "0.9.12")
18662 (source
18663 (origin
18664 (method git-fetch)
18665 (uri (git-reference
18666 (url "https://github.com/danthedeckie/simpleeval")
18667 (commit version)))
18668 (file-name (git-file-name name version))
18669 (sha256
18670 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
18671 (build-system pyproject-build-system)
18672 (native-inputs (list python-pytest python-setuptools))
18673 (home-page "https://github.com/danthedeckie/simpleeval")
18674 (synopsis "Simple, safe single expression evaluator library")
18675 (description
18676 "This package provides a quick single file library for easily adding
18677evaluatable expressions into python projects. Say you want to allow a user
18678to set an alarm volume, which could depend on the time of day, alarm level,
18679how many previous alarms had gone off, and if there is music playing at the
18680time.")
18681 (license license:expat)))
18682
18683(define-public python-nbconvert
18684 (package
18685 (name "python-nbconvert")
18686 (version "7.16.6")
18687 (source
18688 (origin
18689 (method url-fetch)
18690 (uri (pypi-uri "nbconvert" version))
18691 (sha256
18692 (base32
18693 "10pmq31p2srwcdrc7k71dj0l6hl42xnadvsy8swaf3a8qqvpwsjp"))))
18694 (build-system pyproject-build-system)
18695 (arguments
18696 (list
18697 #:test-flags
18698 '(list "-k"
18699 (string-append
18700 ;; These tests require pyppeteer, not yet
18701 ;; available in Guix.
18702 "not test_webpdf_with_chromium"
18703 " and not test_webpdf.py"
18704 ;; These tests require ipywidgets, which would
18705 ;; introduce a dependency cycle.
18706 " and not test_execute_widgets_from_nbconvert"
18707 " and not test_execute_multiple_notebooks"
18708
18709 ;; This test calls nbconvert itself via "sys.executable -m
18710 ;; nbconvert". It's probably harmless.
18711 " and not test_default_config"))
18712 #:phases
18713 #~(modify-phases %standard-phases
18714 (add-after 'unpack 'fix-paths
18715 (lambda* (#:key inputs #:allow-other-keys)
18716 ;; Use pandoc binary from input.
18717 (substitute* "nbconvert/utils/pandoc.py"
18718 (("'pandoc'")
18719 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
18720 ;; Same for LaTeX.
18721 (substitute* "nbconvert/exporters/pdf.py"
18722 (("\"xelatex\"")
18723 (format #f "~s" (search-input-file inputs "bin/xelatex")))
18724 (("\"bibtex\"")
18725 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
18726 ;; Likewise for Inkscape.
18727 (substitute* "nbconvert/preprocessors/svg2pdf.py"
18728 (("inkscape_path = which\\(\"inkscape\")")
18729 (format #f "inkscape_path = ~s"
18730 (search-input-file inputs "bin/inkscape"))))))
18731 (add-after 'unpack 'ignore-deprecation-warnings
18732 (lambda _
18733 (substitute* "pyproject.toml"
18734 (("\"ignore:nbconvert.utils" m)
18735 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
18736 m)))))
18737 (add-before 'check 'pre-check
18738 (lambda _
18739 ;; Tests depend on templates installed to output.
18740 (setenv "JUPYTER_PATH"
18741 (string-append #$output "/share/jupyter:"
18742 (getenv "JUPYTER_PATH")))
18743 ;; jupyter-core demands this
18744 (setenv "JUPYTER_PLATFORM_DIRS" "1")
18745 ;; Tests need writable HOME and TEXMFVAR.
18746 (setenv "HOME" "/tmp")
18747 (setenv "TEXMFVAR" "/tmp"))))))
18748 (inputs
18749 (list inkscape/pinned pandoc))
18750 (native-inputs
18751 (list python-flaky
18752 python-hatchling
18753 python-ipykernel
18754 ;; Adding ipywidgets would create a cycle.
18755 ;;python-ipywidgets
18756 python-pytest
18757 (texlive-local-tree
18758 (list texlive-adjustbox
18759 texlive-booktabs
18760 texlive-caption
18761 texlive-enumitem
18762 texlive-eurosym
18763 texlive-fancyvrb
18764 texlive-float
18765 texlive-fontspec
18766 texlive-grffile
18767 texlive-jknapltx
18768 texlive-parskip
18769 texlive-pdfcol
18770 texlive-rsfs
18771 texlive-soul
18772 texlive-tcolorbox
18773 texlive-titling
18774 texlive-ulem
18775 texlive-unicode-math
18776 texlive-upquote
18777 texlive-xetex))))
18778 (propagated-inputs
18779 (list python-beautifulsoup4
18780 python-bleach
18781 python-defusedxml
18782 python-importlib-metadata
18783 python-jinja2
18784 python-jupyter-core
18785 python-jupyterlab-pygments
18786 python-markupsafe
18787 python-mistune
18788 python-nbclient
18789 python-nbformat
18790 python-packaging
18791 python-pandocfilters
18792 python-pygments
18793 python-tinycss2
18794 python-traitlets
18795 ;; Required, even if [serve] is not used.
18796 python-tornado-6
18797 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
18798 texlive-adjustbox
18799 texlive-amsmath
18800 texlive-booktabs
18801 texlive-caption
18802 texlive-collection-basic
18803 texlive-enumitem
18804 texlive-environ
18805 texlive-etoolbox
18806 texlive-eurosym
18807 texlive-etoolbox
18808 texlive-fancyvrb
18809 texlive-float
18810 texlive-fontspec
18811 texlive-geometry
18812 texlive-grffile
18813 texlive-hyperref
18814 texlive-infwarerr
18815 texlive-jknapltx
18816 texlive-kvoptions
18817 texlive-lm
18818 texlive-lm-math
18819 texlive-mathpazo
18820 texlive-parskip
18821 texlive-pdfcol
18822 texlive-pgf
18823 texlive-rsfs
18824 texlive-soul
18825 texlive-stringenc
18826 texlive-tcolorbox
18827 texlive-titling
18828 texlive-tools
18829 texlive-trimspaces
18830 texlive-ucs
18831 texlive-ulem
18832 texlive-unicode-math
18833 texlive-upquote
18834 texlive-xcolor
18835 texlive-xetex
18836 texlive-zapfding))
18837 (home-page "https://jupyter.org")
18838 (synopsis "Converting Jupyter Notebooks")
18839 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
18840notebooks to various other formats via Jinja templates. It allows you to
18841convert an @code{.ipynb} notebook file into various static formats including:
18842
18843@enumerate
18844@item HTML
18845@item LaTeX
18846@item PDF
18847@item Reveal JS
18848@item Markdown (md)
18849@item ReStructured Text (rst)
18850@item executable script
18851@end enumerate\n")
18852 (license license:bsd-3)))
18853
18854(define-public python-ipywidgets
18855 (package
18856 (name "python-ipywidgets")
18857 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
18858 (version "8.1.4")
18859 (source
18860 (origin
18861 (method url-fetch)
18862 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
18863 (uri (pypi-uri "ipywidgets" version))
18864 (sha256
18865 (base32
18866 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
18867 (build-system pyproject-build-system)
18868 (native-inputs
18869 (list python-ipykernel
18870 python-jsonschema
18871 python-pytest
18872 python-pytz
18873 python-setuptools))
18874 (propagated-inputs
18875 (list python-comm
18876 python-ipython
18877 python-jupyterlab-widgets
18878 python-traitlets
18879 python-widgetsnbextension))
18880 (home-page "https://ipython.org")
18881 (synopsis "IPython HTML widgets for Jupyter")
18882 (description "Ipywidgets are interactive HTML widgets for Jupyter
18883notebooks and the IPython kernel. Notebooks come alive when interactive
18884widgets are used. Users gain control of their data and can visualize changes
18885in the data.")
18886 (license license:bsd-3)))
18887
18888(define-public python-jsbeautifier
18889 (package
18890 (name "python-jsbeautifier")
18891 (version "1.15.3")
18892 (home-page "https://github.com/beautify-web/js-beautify")
18893 (source
18894 (origin
18895 (method git-fetch)
18896 (uri (git-reference
18897 (url home-page)
18898 (commit (string-append "v" version))))
18899 (file-name (git-file-name name version))
18900 (sha256
18901 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
18902 (build-system pyproject-build-system)
18903 (arguments
18904 (list
18905 #:phases
18906 #~(modify-phases %standard-phases
18907 (add-after 'unpack 'chdir
18908 (lambda _
18909 (chdir "python")
18910 (rename-file "setup-js.py" "setup.py"))))))
18911 (propagated-inputs (list python-editorconfig python-six))
18912 (native-inputs (list python-pytest python-setuptools))
18913 (synopsis "JavaScript unobfuscator and beautifier")
18914 (description
18915 "This packages provides tooling to beautify, unpack or deobfuscate
18916JavaScript, leveraging popular online obfuscators.")
18917 (license license:expat)))
18918
18919(define-public python-chardet
18920 (package
18921 (name "python-chardet")
18922 (version "5.2.0")
18923 (source
18924 (origin
18925 (method url-fetch)
18926 (uri (pypi-uri "chardet" version))
18927 (sha256
18928 (base32
18929 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
18930 (native-inputs
18931 (list python-pytest python-setuptools python-wheel))
18932 (build-system pyproject-build-system)
18933 (arguments
18934 (list #:test-flags
18935 ;; Disable test that fails sporadically:
18936 ;; https://github.com/chardet/chardet/issues/256
18937 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
18938 #:phases
18939 #~(modify-phases %standard-phases
18940 ;; This package provides a 'chardetect' executable that only
18941 ;; depends on Python, so customize the wrap phase to avoid
18942 ;; adding pytest and friends in order to save size.
18943 ;; (See also <https://bugs.gnu.org/25235>.)
18944 (replace 'wrap
18945 (lambda* (#:key inputs outputs #:allow-other-keys)
18946 (let* ((sitedir (site-packages inputs outputs))
18947 (python (dirname (dirname
18948 (search-input-file
18949 inputs "bin/python"))))
18950 (python-sitedir
18951 (string-append python "/lib/python"
18952 (python-version python)
18953 "/site-packages")))
18954 (wrap-program (string-append #$output "/bin/chardetect")
18955 `("GUIX_PYTHONPATH" ":" suffix
18956 ,(list sitedir python-sitedir)))))))))
18957 (home-page "https://github.com/chardet/chardet")
18958 (synopsis "Universal encoding detector for Python 2 and 3")
18959 (description
18960 "This package provides @code{chardet}, a Python module that can
18961automatically detect a wide range of file encodings.")
18962 (license license:lgpl2.1+)))
18963
18964(define-public python-charset-normalizer
18965 (package
18966 (name "python-charset-normalizer")
18967 (version "3.4.2")
18968 (source
18969 (origin
18970 (method url-fetch)
18971 (uri (pypi-uri "charset_normalizer" version))
18972 (sha256
18973 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
18974 (build-system pyproject-build-system)
18975 (arguments
18976 (list
18977 #:phases
18978 #~(modify-phases %standard-phases
18979 ;; https://github.com/jawah/charset_normalizer/issues/625
18980 ;; https://github.com/jawah/charset_normalizer/pull/626
18981 (add-after 'unpack 'fix-scripts
18982 (lambda _
18983 (substitute* "pyproject.toml"
18984 (("charset_normalizer:cli.cli_detect")
18985 "charset_normalizer.cli:cli_detect")))))))
18986 (native-inputs
18987 (list python-pytest
18988 python-setuptools))
18989 (home-page "https://github.com/ousret/charset_normalizer")
18990 (synopsis "Universal Charset Detector, alternative to Chardet")
18991 (description "This library helps you read text from an unknown charset
18992encoding. Motivated by @code{chardet}, it tries to resolve the issue by
18993taking a new approach. All IANA character set names for which the Python core
18994library provides codecs are supported.")
18995 (license license:expat)))
18996
18997(define-deprecated/public-alias python-charset-normalizer-3
18998 python-charset-normalizer) ;may be removed after 2025-12-01
18999
19000(define-public python-docopt
19001 (package
19002 (name "python-docopt")
19003 (version "0.6.2")
19004 (source
19005 (origin
19006 (method git-fetch) ;no tests in PyPI archive
19007 (uri (git-reference
19008 (url "https://github.com/docopt/docopt")
19009 (commit version)))
19010 (file-name (git-file-name name version))
19011 (sha256
19012 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
19013 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
19014 (build-system pyproject-build-system)
19015 (native-inputs
19016 (list python-pytest python-setuptools))
19017 (home-page "http://docopt.org")
19018 (synopsis "Command-line interface description language for Python")
19019 (description
19020 "This library allows the user to define a command-line interface from a
19021program's help message rather than specifying it programmatically with
19022command-line parsers like @code{getopt} and @code{argparse}.")
19023 (license license:expat)))
19024
19025(define-public python-pythonanywhere
19026 (package
19027 (name "python-pythonanywhere")
19028 (version "0.17.0")
19029 (source
19030 (origin
19031 (method git-fetch)
19032 (uri (git-reference
19033 (url "https://github.com/pythonanywhere/helper_scripts")
19034 (commit (string-append "v" version))))
19035 (file-name (git-file-name name version))
19036 (sha256
19037 (base32 "0hsxrw1inqqnxbfvjk0j218ijx5xv4lkfh1qzvay7pzk9ifc0sfz"))))
19038 (build-system pyproject-build-system)
19039 (arguments
19040 (list
19041 #:test-flags
19042 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
19043 "-k" (string-join
19044 ;; Network access is required to clone external
19045 ;; repositories.
19046 (list "not test_actually_creates_django_project_in_vir"
19047 "test_actually_downloads_repo"
19048 "test_actually_installing_a_real_package"
19049 "test_actually_works_against_example_repo"
19050 "test_autoconfigure_actually_works_against_example_repo"
19051 "test_exits_because_boolean_not_satisfied"
19052 "test_gets_version"
19053 "test_nuke_option_lets_you_run_twice"
19054 "test_nuke_option_lets_you_run_twice"
19055 "test_start_actually_creates_django_project_in_vir")
19056 " and not "))
19057 #:phases
19058 #~(modify-phases %standard-phases
19059 (add-before 'check 'change-home
19060 (lambda _
19061 (setenv "HOME" "/tmp"))))))
19062 (native-inputs
19063 (list python-psutil
19064 python-pytest
19065 python-pytest-mock
19066 python-responses
19067 python-setuptools))
19068 (propagated-inputs
19069 (list python-dateutil
19070 python-docopt
19071 python-packaging
19072 python-pythonanywhere-core
19073 python-requests
19074 python-schema
19075 python-snakesay
19076 python-tabulate
19077 python-typer))
19078 (home-page "https://github.com/pythonanywhere/helper_scripts/")
19079 (synopsis "PythonAnywhere helper tools for users")
19080 (description
19081 "PythonAnywhere provides a command-line interface and an application
19082programming interface that allows managing files Web apps, scheduled
19083tasks and students. It includes single-command deployment for the Django Girls
19084tutorial.")
19085 (license license:expat)))
19086
19087(define-public python-pythonanywhere-core
19088 (package
19089 (name "python-pythonanywhere-core")
19090 (version "0.2.7")
19091 (source
19092 (origin
19093 (method git-fetch)
19094 (uri (git-reference
19095 (url "https://github.com/pythonanywhere/pythonanywhere-core")
19096 (commit (string-append "v" version))))
19097 (file-name (git-file-name name version))
19098 (sha256
19099 (base32 "1p9zlq3is0jvbni9ydiv6f0fw89lm44hkgbj6nari2a3gb3qw856"))))
19100 (build-system pyproject-build-system)
19101 (arguments
19102 (list
19103 #:phases
19104 #~(modify-phases %standard-phases
19105 (add-before 'check 'pre-check
19106 (lambda _
19107 (setenv "HOME" "/tmp"))))))
19108 (native-inputs
19109 (list python-poetry-core
19110 python-pytest
19111 python-pytest-mock
19112 python-responses))
19113 (propagated-inputs
19114 (list python-dateutil
19115 python-requests
19116 python-snakesay
19117 python-typing-extensions))
19118 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
19119 (synopsis "API wrapper for PythonAnywhere services")
19120 (description
19121 "This package provides an API wrapper for programmatic management of
19122@code{PythonAnywhere} services.")
19123 (license license:expat)))
19124
19125(define-public python-dialog
19126 (package
19127 (name "python-dialog")
19128 (version "3.5.3")
19129 (source
19130 (origin
19131 (method url-fetch)
19132 (uri (pypi-uri "pythondialog" version))
19133 (sha256
19134 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
19135 (modules '((guix build utils)))
19136 (snippet #~(delete-file-recursively "doc"))))
19137 (build-system pyproject-build-system)
19138 (arguments
19139 (list
19140 ;; XXX: There are no tests, but some examples. However, they need to
19141 ;; be run on a terminal.
19142 #:tests? #f
19143 #:phases
19144 #~(modify-phases %standard-phases
19145 (add-after 'unpack 'patch-path
19146 (lambda* (#:key inputs #:allow-other-keys)
19147 (substitute* "dialog.py"
19148 (("_path_to_executable\\(dialog\\)")
19149 (format #f "os.path.realpath(~s)"
19150 (search-input-file inputs "bin/dialog")))))))))
19151 (native-inputs (list python-setuptools))
19152 (inputs (list dialog))
19153 (home-page "https://pythondialog.sourceforge.net/")
19154 (synopsis "Python interface to the UNIX dialog utility")
19155 (description
19156 "A Python wrapper for the dialog utility. Its purpose is to provide an
19157easy to use, pythonic and comprehensive Python interface to dialog. This
19158allows one to make simple text-mode user interfaces on Unix-like systems")
19159 (license license:lgpl2.1)))
19160
19161(define-public python-pythondialog
19162 (deprecated-package "python-pythondialog" python-dialog))
19163
19164(define-public python-confection
19165 (package
19166 (name "python-confection")
19167 (version "0.1.5")
19168 (source (origin
19169 (method url-fetch)
19170 (uri (pypi-uri "confection" version))
19171 (sha256
19172 (base32
19173 "03hgb6601mx6iip4nr8i0is8x5vmh85z286j7j8lhkxxlqydswlf"))))
19174 (build-system pyproject-build-system)
19175 (propagated-inputs (list python-pydantic python-srsly))
19176 (native-inputs (list python-pytest python-setuptools python-wheel))
19177 (home-page "https://github.com/explosion/confection")
19178 (synopsis "Config system for Python")
19179 (description "Confection is a lightweight library that offers a
19180configuration system letting you conveniently describe arbitrary trees of
19181objects.")
19182 (license license:expat)))
19183
19184(define-public python-configobj
19185 (package
19186 (name "python-configobj")
19187 (version "5.0.9")
19188 (source
19189 (origin
19190 (method url-fetch)
19191 (uri (pypi-uri "configobj" version))
19192 (sha256
19193 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
19194 (build-system pyproject-build-system)
19195 (native-inputs
19196 (list python-pytest
19197 python-setuptools))
19198 (home-page "https://github.com/DiffSK/configobj")
19199 (synopsis "Config file reading, writing and validation")
19200 (description
19201 "ConfigObj is a simple but powerful config file reader and writer: an
19202 ini file round tripper. Its main feature is that it is very easy to use,
19203with a straightforward programmer’s interface and a simple syntax for config
19204files.")
19205 (license license:bsd-3)))
19206
19207(define-public python-omegaconf
19208 (let ((commit "117f7de07285e4d1324b9229eaf873de15279457")
19209 (revision "0"))
19210 (package
19211 (name "python-omegaconf")
19212 (version (git-version "2.3.0" revision commit))
19213 (source
19214 (origin
19215 (method git-fetch)
19216 (uri (git-reference
19217 (url "https://github.com/omry/omegaconf")
19218 (commit commit)))
19219 (file-name (git-file-name name version))
19220 (modules '((guix build utils)))
19221 (snippet
19222 #~(begin
19223 (delete-file-recursively "build_helpers/bin")
19224 (substitute* "build_helpers/build_helpers.py"
19225 (("java") "antlr4")
19226 (("\"-jar\",") "")
19227 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
19228 (sha256
19229 (base32 "0f922dar5dwyyfk1bwsbs9gws0vyj1w2h9n3148hcfa8c4hg2ysv"))))
19230 (build-system pyproject-build-system)
19231 (arguments
19232 (list
19233 #:test-flags
19234 ;; XXX: Those tests currently fail collection.
19235 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
19236 "--ignore=tests/test_basic_ops_list.py"
19237 "--ignore=tests/test_merge.py"
19238 "--ignore=tests/test_select.py")
19239 #:phases
19240 #~(modify-phases %standard-phases
19241 (add-after 'unpack 'loosen-requirements
19242 (lambda _
19243 (substitute* "requirements/base.txt"
19244 (("antlr4-python3-runtime==.*")
19245 "antlr4-python3-runtime >=4.9\n"))
19246 ;; Ignore deprecation warnings.
19247 (substitute* "pyproject.toml"
19248 (("-Werror") "")))))))
19249 (native-inputs
19250 (list icedtea
19251 antlr4
19252 python-pytest
19253 python-pytest-mock
19254 python-setuptools
19255 python-wheel))
19256 (propagated-inputs
19257 (list java-antlr4-runtime-python
19258 python-pydevd
19259 python-pyyaml))
19260 (home-page "https://github.com/omry/omegaconf")
19261 (synopsis "Flexible configuration system")
19262 (description
19263 "OmegaConf is a hierarchical configuration system and supports merging
19264configurations from multiple sources. It provides a consistent API regardless
19265of how the configuration was created.")
19266 (license license:bsd-3))))
19267
19268(define-public python-configargparse
19269 (package
19270 (name "python-configargparse")
19271 (version "1.7")
19272 (source (origin
19273 (method url-fetch)
19274 (uri (pypi-uri "ConfigArgParse" version))
19275 (sha256
19276 (base32
19277 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
19278 (build-system pyproject-build-system)
19279 (propagated-inputs
19280 (list python-pyyaml))
19281 (native-inputs
19282 (list python-mock python-pytest python-setuptools python-wheel))
19283 (synopsis "Replacement for argparse")
19284 (description "A drop-in replacement for argparse that allows options to also
19285be set via config files and/or environment variables.")
19286 (home-page "https://github.com/bw2/ConfigArgParse")
19287 (license license:expat)))
19288
19289(define-public python-connection-pool
19290 (package
19291 (name "python-connection-pool")
19292 (version "0.0.3")
19293 (source
19294 (origin
19295 (method git-fetch)
19296 (uri (git-reference
19297 (url "https://github.com/zhouyl/ConnectionPool")
19298 (commit version)))
19299 (file-name (git-file-name name version))
19300 (sha256
19301 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
19302 (build-system pyproject-build-system)
19303 (arguments (list #:tests? #f)) ; No tests.
19304 (native-inputs (list python-setuptools))
19305 (home-page "https://github.com/zhouyl/ConnectionPool")
19306 (synopsis "Thread-safe connection pool")
19307 (description
19308 "This package provides a library implementing a thread-safe connection
19309pool.")
19310 (license license:expat)))
19311
19312(define-public python-argparse-dataclass
19313 (package
19314 (name "python-argparse-dataclass")
19315 (version "2.0.0")
19316 (source
19317 (origin
19318 (method git-fetch) ;no tests in PyPI archive
19319 (uri (git-reference
19320 (url "https://github.com/mivade/argparse_dataclass")
19321 (commit version)))
19322 (file-name (git-file-name name version))
19323 (sha256
19324 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
19325 (build-system pyproject-build-system)
19326 (native-inputs (list python-pytest python-setuptools python-wheel))
19327 (home-page "https://github.com/mivade/argparse_dataclass")
19328 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
19329 (description
19330 "This package provides declarative command-line interfaces using argparse
19331and dataclasses.")
19332 (license license:expat)))
19333
19334(define-public python-argparse-manpage
19335 (package
19336 (name "python-argparse-manpage")
19337 (version "4.7")
19338 (source
19339 (origin
19340 (method url-fetch)
19341 (uri (pypi-uri "argparse_manpage" version))
19342 (sha256
19343 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
19344 (build-system pyproject-build-system)
19345 (arguments
19346 (list
19347 #:test-flags
19348 ;; Tests require PIP.
19349 #~(list "--ignore=tests/test_examples.py")))
19350 (native-inputs
19351 (list python-pytest
19352 python-setuptools))
19353 (home-page "https://github.com/praiskup/argparse-manpage")
19354 (synopsis "Build manual page from Python's ArgumentParser object")
19355 (description
19356 "This package provides tools to build manual pages from Python's
19357@code{ArgumentParser} object.")
19358 (license license:asl2.0)))
19359
19360(define-public python-atomicwrites
19361 (package
19362 (name "python-atomicwrites")
19363 (version "1.4.0")
19364 (source
19365 (origin
19366 (method git-fetch)
19367 (uri (git-reference
19368 (url "https://github.com/untitaker/python-atomicwrites")
19369 (commit version)))
19370 (file-name (git-file-name name version))
19371 (sha256
19372 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
19373 (build-system pyproject-build-system)
19374 (native-inputs (list python-pytest python-setuptools))
19375 (synopsis "Atomic file writes in Python")
19376 (description
19377 "Library for atomic file writes using platform dependent tools
19378for atomic file system operations.")
19379 (home-page "https://github.com/untitaker/python-atomicwrites")
19380 (license license:expat)))
19381
19382(define-public python-qstylizer
19383 (package
19384 (name "python-qstylizer")
19385 (version "0.2.4")
19386 (source
19387 (origin
19388 (method git-fetch)
19389 (uri (git-reference
19390 (url "https://github.com/blambright/qstylizer")
19391 (commit version)))
19392 (file-name (git-file-name name version))
19393 (sha256
19394 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
19395 (build-system pyproject-build-system)
19396 (arguments
19397 (list
19398 #:phases
19399 #~(modify-phases %standard-phases
19400 (add-before 'build 'set-pbr-version
19401 (lambda _
19402 (setenv "PBR_VERSION" "3.0.1"))))))
19403 (native-inputs
19404 (list python-pbr
19405 python-pytest
19406 python-pytest-mock
19407 python-setuptools
19408 python-wheel))
19409 (propagated-inputs
19410 (list python-inflection
19411 python-tinycss2))
19412 (home-page "https://github.com/blambright/qstylizer")
19413 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
19414 (description "@code{qstylizer} is a Python package designed to help with
19415the construction of PyQt/PySide stylesheets.")
19416 (license license:expat)))
19417
19418(define-public python-click-threading
19419 (package
19420 (name "python-click-threading")
19421 (version "0.5.0")
19422 (source
19423 (origin
19424 (method git-fetch)
19425 (uri (git-reference
19426 (url "https://github.com/click-contrib/click-threading")
19427 (commit version)))
19428 (file-name (git-file-name name version))
19429 (sha256
19430 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
19431 (build-system pyproject-build-system)
19432 (native-inputs (list python-pytest python-setuptools))
19433 (propagated-inputs (list python-click))
19434 (synopsis "Utilities for multithreading in Click")
19435 (description
19436 "This package provides utilities for multithreading in Click
19437applications.")
19438 (home-page "https://github.com/click-contrib/click-threading")
19439 (license license:expat)))
19440
19441(define-public python-click-log
19442 (package
19443 (name "python-click-log")
19444 (version "0.3.2")
19445 (source
19446 (origin
19447 (method git-fetch)
19448 (uri (git-reference
19449 (url "https://github.com/click-contrib/click-log")
19450 (commit version)))
19451 (file-name (git-file-name name version))
19452 (sha256
19453 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
19454 (build-system pyproject-build-system)
19455 (native-inputs (list python-pytest python-setuptools))
19456 (propagated-inputs (list python-click))
19457 (synopsis "Logging for click applications")
19458 (description
19459 "This package provides a Python library for logging Click applications.")
19460 (home-page "https://github.com/click-contrib/click-log")
19461 (license license:expat)))
19462
19463(define-public python-click-default-group
19464 (package
19465 (name "python-click-default-group")
19466 (version "1.2.4")
19467 (source
19468 (origin
19469 (method git-fetch) ; no tests in PyPI release
19470 (uri (git-reference
19471 (url "https://github.com/click-contrib/click-default-group")
19472 (commit (string-append "v" version))))
19473 (file-name (git-file-name name version))
19474 (sha256
19475 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
19476 (build-system pyproject-build-system)
19477 (propagated-inputs
19478 (list python-click))
19479 (native-inputs
19480 (list python-flit-core python-pytest))
19481 (synopsis "Extends click.Group")
19482 (description "This package extends click.Group to invoke a command without
19483explicit subcommand name.")
19484 (home-page "https://github.com/click-contrib/click-default-group")
19485 (license license:bsd-3)))
19486
19487(define-public python-apipkg
19488 (package
19489 (name "python-apipkg")
19490 (version "3.0.2")
19491 (source
19492 (origin
19493 (method url-fetch)
19494 (uri (pypi-uri "apipkg" version))
19495 (sha256
19496 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
19497 (build-system pyproject-build-system)
19498 (arguments (list #:tests? #f)) ;no tests in PyPI archvie
19499 (native-inputs
19500 (list python-hatch-vcs
19501 python-hatchling))
19502 (home-page "https://github.com/pytest-dev/apipkg")
19503 (synopsis "Namespace control and lazy-import mechanism")
19504 (description "With apipkg you can control the exported namespace of a Python
19505package and greatly reduce the number of imports for your users. It is a small
19506pure Python module that works on virtually all Python versions.")
19507 (license license:expat)))
19508
19509(define-public python-essentials
19510 (package
19511 (name "python-essentials")
19512 (version "1.1.8")
19513 (source
19514 (origin
19515 (method git-fetch)
19516 (uri (git-reference
19517 (url "https://github.com/Neoteroi/essentials")
19518 (commit (string-append "v" version))))
19519 (file-name (git-file-name name version))
19520 (sha256
19521 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
19522 (build-system pyproject-build-system)
19523 (native-inputs
19524 (list python-hatchling
19525 python-pydantic
19526 python-pytest-asyncio))
19527 (home-page "https://github.com/Neoteroi/essentials/wiki")
19528 (synopsis
19529 "Utility functions, exceptions, and classes for Python applications")
19530 (description
19531 "Essentials is a collection of functions, exceptions, and classes for Python
19532applications. Examples of utilities are exceptions for common scenarios,
19533friendly JSON encoder, decorators for retries and logging.")
19534 (license license:expat)))
19535
19536(define-public python-execnet
19537 (package
19538 (name "python-execnet")
19539 (version "2.1.1")
19540 (source (origin
19541 (method git-fetch)
19542 (uri (git-reference
19543 (url "https://github.com/pytest-dev/execnet")
19544 (commit (string-append "v" version))))
19545 (file-name (git-file-name name version))
19546 (sha256
19547 (base32
19548 "0xlfd0h9sjl0jpc2fc689a497chwbagali7qr364k75hdyax3jfq"))))
19549 (build-system pyproject-build-system)
19550 (arguments
19551 (list
19552 ;; ;; This test hasn't been updated for the latest Pytest yet:
19553 ;; #:test-flags #~(list "--ignore" "testing/test_rsync.py")
19554 #:phases
19555 #~(modify-phases %standard-phases
19556 (add-after 'unpack 'adjust-for-pytest-7.2+
19557 (lambda _
19558 ;; This test fails with an error because @py.test has been
19559 ;; deprecated for @pytest in recent Pytest.
19560 (substitute* "testing/test_rsync.py"
19561 (("@py.test")
19562 "@pytest"))))
19563 (add-before 'build 'pretend-version
19564 ;; The version string is usually derived via setuptools-scm, but
19565 ;; without the git metadata available this fails.
19566 (lambda _
19567 ;; hatch-vcs uses setuptools under the hood.
19568 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
19569 ;; Massage the version string to a PEP-0440 compatible
19570 ;; one.
19571 #$(car (string-split version #\-)))))
19572 (add-before 'check 'prepare-for-tests
19573 (lambda _
19574 ;; Unset PYTHONDONTWRITEBYTECODE to match the
19575 ;; expectations of a test in
19576 ;; 'testing/test_gateway.py'.
19577 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
19578 (native-inputs
19579 (list python-hatchling
19580 python-hatch-vcs
19581 python-pytest-bootstrap))
19582 (synopsis "Rapid multi-Python deployment")
19583 (description "Execnet provides a share-nothing model with
19584channel-send/receive communication for distributing execution across many
19585Python interpreters across version, platform and network barriers. It has a
19586minimal and fast API targeting the following uses:
19587@enumerate
19588@item distribute tasks to (many) local or remote CPUs
19589@item write and deploy hybrid multi-process applications
19590@item write scripts to administer multiple environments
19591@end enumerate")
19592 (home-page "https://codespeak.net/execnet/")
19593 (license license:expat)))
19594
19595(define-public python-icalendar
19596 (package
19597 (name "python-icalendar")
19598 (version "5.0.13")
19599 (source (origin
19600 (method url-fetch)
19601 (uri (pypi-uri "icalendar" version))
19602 (sha256
19603 (base32
19604 "01lp0advx60z8wgng8aga1p1668ydn1r6d9qm3d622yfikg9yycj"))))
19605 (build-system pyproject-build-system)
19606 (arguments
19607 (list
19608 #:phases
19609 #~(modify-phases %standard-phases
19610 (replace 'check
19611 (lambda* (#:key tests? #:allow-other-keys)
19612 (when tests?
19613 (invoke "pytest" "-vv" "src/icalendar/tests")))))))
19614 (propagated-inputs
19615 (list python-dateutil python-pytz python-tzdata))
19616 (native-inputs
19617 (list python-pytest python-pytz python-setuptools python-wheel))
19618 (synopsis "Python library for parsing and generating iCalendar files")
19619 (description
19620 "@code{icalendar} is a Python library for parsing and generating iCalendar files.")
19621 (home-page "https://github.com/collective/icalendar")
19622 (license license:bsd-2)))
19623
19624(define-public python-args
19625 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
19626 (revision "0"))
19627 (package
19628 (name "python-args")
19629 (version (git-version "0.1.0" revision commit))
19630 (source
19631 (origin
19632 (method git-fetch)
19633 (uri (git-reference
19634 (url "https://github.com/kennethreitz-archive/args")
19635 (commit commit)))
19636 (file-name (git-file-name name version))
19637 (sha256
19638 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
19639 (build-system pyproject-build-system)
19640 (arguments
19641 (list
19642 #:tests? #f ; XXX: python-nose is deprecated.
19643 #:phases
19644 #~(modify-phases %standard-phases
19645 (add-after 'unpack 'patch-args.py
19646 (lambda _
19647 (substitute* "args.py"
19648 (("basestring")
19649 "str")))))))
19650 (native-inputs (list python-setuptools python-wheel))
19651 (home-page "https://github.com/kennethreitz-archive/args")
19652 (synopsis "Command-line argument parser")
19653 (description
19654 "This library provides a Python module to parse command-line arguments.")
19655 (license license:bsd-3))))
19656
19657(define-public python-clint
19658 (package
19659 (name "python-clint")
19660 (version "0.5.1")
19661 (source (origin
19662 (method url-fetch)
19663 (uri (pypi-uri "clint" version))
19664 (sha256
19665 (base32
19666 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
19667 (build-system pyproject-build-system)
19668 (native-inputs
19669 (list python-pytest python-setuptools python-wheel))
19670 (propagated-inputs
19671 (list python-args))
19672 (home-page "https://github.com/kennethreitz/clint")
19673 (synopsis "Command-line interface tools")
19674 (description
19675 "Clint is a Python module filled with a set of tools for developing
19676command-line applications, including tools for colored and indented
19677output, progress bar display, and pipes.")
19678 (license license:isc)))
19679
19680(define-public python-rply
19681 (package
19682 (name "python-rply")
19683 (version "0.7.8")
19684 (source
19685 (origin
19686 (method git-fetch)
19687 (uri (git-reference
19688 (url "https://github.com/alex/rply")
19689 (commit (string-append "v" version))))
19690 (file-name (git-file-name name version))
19691 (sha256
19692 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
19693 (build-system pyproject-build-system)
19694 (arguments
19695 (list
19696 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
19697 #:phases
19698 #~(modify-phases %standard-phases
19699 (add-before 'check 'fix-pytest-use
19700 (lambda _
19701 (substitute* (find-files "tests" "\\.py$")
19702 (("import py")
19703 "import pytest")
19704 (("py\\.test")
19705 "pytest"))
19706 (setenv "HOME" (getcwd)))))))
19707 (native-inputs (list python-pytest python-setuptools))
19708 (propagated-inputs (list python-appdirs))
19709 (home-page "https://github.com/alex/rply")
19710 (synopsis "Parser generator for Python")
19711 (description
19712 "This package provides a pure Python based parser generator, that also
19713works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
19714with a new public API, and RPython support.")
19715 (license license:bsd-3)))
19716
19717(define-public python-hy
19718 (package
19719 (name "python-hy")
19720 (version "1.1.0")
19721 (source
19722 (origin
19723 (method git-fetch) ;no tests in PyPI release
19724 (uri (git-reference
19725 (url "https://github.com/hylang/hy")
19726 (commit version)))
19727 (file-name (git-file-name name version))
19728 (sha256
19729 (base32 "1g7h7c9zwbcvsi1l3mydhv27bjkiz5wawmdklmryjnv6qkvdx96d"))))
19730 (build-system pyproject-build-system)
19731 (arguments
19732 (list
19733 ;; This test expects the hy executable to be called 'hy', but in Guix
19734 ;; it's .hy-real.
19735 #:test-flags #~(list "-k" "not test_sys_executable")))
19736 (native-inputs (list python-pytest python-setuptools python-wheel))
19737 (propagated-inputs (list python-funcparserlib))
19738 (home-page "https://docs.hylang.org/en/stable/")
19739 (synopsis "Lisp frontend to Python")
19740 (description
19741 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
19742its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
19743Python at your fingertips, in Lisp form.")
19744 (license license:expat)))
19745
19746(define-public python-hissp
19747 (package
19748 (name "python-hissp")
19749 (version "0.5.0")
19750 (source
19751 (origin
19752 (method git-fetch)
19753 (uri (git-reference
19754 (url "https://github.com/gilch/hissp")
19755 (commit (string-append "v" version))))
19756 (file-name (git-file-name name version))
19757 (sha256
19758 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
19759 (build-system pyproject-build-system)
19760 (arguments (list #:test-backend #~'unittest))
19761 (native-inputs (list python-hypothesis python-setuptools))
19762 (home-page "https://github.com/gilch/hissp")
19763 (synopsis "It's Python with a Lissp")
19764 (description
19765 "Hissp is a modular Lisp implementation that compiles to a functional
19766subset of Python—Syntactic macro metaprogramming with full access to the
19767Python ecosystem.")
19768 (license license:asl2.0)))
19769
19770(define-public python-promise
19771 (package
19772 (name "python-promise")
19773 (version "2.3.0")
19774 (source
19775 (origin
19776 (method git-fetch)
19777 (uri (git-reference
19778 (url "https://github.com/syrusakbary/promise")
19779 (commit (string-append "v" version))))
19780 (file-name (git-file-name name version))
19781 (sha256
19782 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
19783 (build-system pyproject-build-system)
19784 (arguments
19785 (list
19786 #:test-flags
19787 #~(list "--ignore=tests/test_benchmark.py"
19788 ;; Issues with pytest-asyncio
19789 "--ignore=tests/test_awaitable.py"
19790 "-k" (string-join
19791 (list "not test_issue_9_safe"
19792 ;; Stacktrace issues.
19793 "test_thrown_exceptions_have_stacktrace"
19794 "test_thrown_exceptions_preserve_stacktrace")
19795 " and not "))))
19796 (native-inputs
19797 (list python-mock
19798 python-pytest
19799 python-pytest-asyncio
19800 python-setuptools))
19801 (propagated-inputs (list python-six))
19802 (home-page "https://github.com/syrusakbary/promise")
19803 (synopsis "Promises/A+ implementation for Python")
19804 (description
19805 "This package provides an implementation of Promises in Python. It is a
19806super set of Promises/A+ designed to have readable, performant code and to
19807provide just the extensions that are absolutely necessary for using promises
19808in Python.")
19809 (license license:expat)))
19810
19811(define-public python-progress
19812 (package
19813 (name "python-progress")
19814 (version "1.6")
19815 (source
19816 (origin
19817 (method git-fetch)
19818 (uri (git-reference
19819 (url "https://github.com/verigak/progress/")
19820 (commit version)))
19821 (file-name (git-file-name name version))
19822 (sha256
19823 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
19824 (snippet #~(delete-file "demo.gif"))))
19825 (build-system pyproject-build-system)
19826 (arguments
19827 (list
19828 #:test-backend #~'custom
19829 #:test-flags #~(list "test_progress.py")))
19830 (native-inputs (list python-setuptools))
19831 (home-page "https://github.com/verigak/progress/")
19832 (synopsis "Progress reporting bars for Python")
19833 (description
19834 "This Python package provides progress reporting for visual of progress
19835of long running operations. There are multiple choices of progress bars and
19836spinners, with customizable options, such as width, fill character, and
19837suffix.")
19838 (license license:isc)))
19839
19840(define-public python-progressbar2
19841 (package
19842 (name "python-progressbar2")
19843 (version "4.5.0")
19844 (source
19845 (origin
19846 (method url-fetch)
19847 (uri (pypi-uri "progressbar2" version))
19848 (sha256
19849 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
19850 (build-system pyproject-build-system)
19851 (arguments
19852 (list
19853 #:test-flags #~(list "--pyargs" "progressbar" "tests")
19854 #:phases
19855 #~(modify-phases %standard-phases
19856 (add-after 'unpack 'fix-pytest-config
19857 (lambda _
19858 ;; Drop test coverage requirements.
19859 (substitute* "pytest.ini"
19860 ((".*-cov.*") "")))))))
19861 (native-inputs
19862 (list python-dill
19863 python-pytest
19864 python-freezegun
19865 python-setuptools
19866 python-setuptools-scm
19867 python-wheel))
19868 (propagated-inputs
19869 (list python-utils))
19870 (home-page "https://github.com/WoLpH/python-progressbar")
19871 (synopsis "Text progress bar library for Python")
19872 (description
19873 "This package provides a Python progressbar library to provide
19874visual (yet text based) progress to long running operations.")
19875 (license license:bsd-3)))
19876
19877(define-public python-progressbar33
19878 (package
19879 (name "python-progressbar33")
19880 (version "2.4")
19881 (source
19882 (origin
19883 (method git-fetch)
19884 (uri (git-reference
19885 (url "https://github.com/germangh/python-progressbar")
19886 (commit (string-append "v" version))))
19887 (file-name (git-file-name name version))
19888 (sha256
19889 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
19890 (build-system pyproject-build-system)
19891 (arguments
19892 (list
19893 #:test-backend #~'custom
19894 #:test-flags #~(list "examples.py")))
19895 (native-inputs (list python-setuptools))
19896 (home-page "https://github.com/germangh/python-progressbar")
19897 (synopsis "Text progress bar library for Python")
19898 (description
19899 "This package provides a text progress bar library for Python. This
19900version only differs from the original @code{progressbar} package in that it
19901uses relative package imports instead of absolute imports, which is necessary
19902for the module to work under Python 3.3.")
19903 ;; Either or both of these licenses may be selected.
19904 (license (list license:lgpl2.1+ license:bsd-3))))
19905
19906(define-public python-colorama
19907 (package
19908 (name "python-colorama")
19909 (version "0.4.6")
19910 (source
19911 (origin
19912 (method url-fetch)
19913 (uri (pypi-uri "colorama" version))
19914 (sha256
19915 (base32 "0i3fpq0w5mbfdpy3z9p5raw4fg17jxr6jwh5l8qhavpdnxf5ys88"))))
19916 (build-system pyproject-build-system)
19917 (native-inputs (list python-hatchling python-pytest))
19918 (home-page "https://pypi.org/project/colorama/")
19919 (synopsis "Colored terminal text rendering for Python")
19920 (description "Colorama is a Python library for rendering colored terminal
19921text.")
19922 (license license:bsd-3)))
19923
19924;; XXX: Not maintained since 2012.
19925(define-public python-monthdelta
19926 (package
19927 (name "python-monthdelta")
19928 (version "0.9.1")
19929 (source
19930 (origin
19931 (method url-fetch)
19932 (uri (pypi-uri "MonthDelta" version))
19933 (sha256
19934 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
19935 (build-system pyproject-build-system)
19936 (arguments
19937 (list #:test-backend #~'unittest))
19938 (native-inputs (list python-setuptools))
19939 (home-page "http://packages.python.org/MonthDelta")
19940 (synopsis "Date computations with months")
19941 (description
19942 "MonthDelta provides functionality to do date computations with months.")
19943 (license license:expat)))
19944
19945(define-public python-moto
19946 (package
19947 (name "python-moto")
19948 (version "5.1.5")
19949 (source (origin
19950 (method url-fetch)
19951 (uri (pypi-uri "moto" version))
19952 (sha256
19953 (base32 "0kpqdn96gw9h2bq05bp943q85f4lq89c4nk1gf71w60nkbm65cs2"))))
19954 (build-system pyproject-build-system)
19955 (arguments
19956 (list
19957 ;; tests: 10158 passed, 41 skipped, 143 deselected, 2 xfailed, 4 warnings
19958 #:test-flags
19959 #~(list "-m" "not network and not requires_docker"
19960 ;; Not all of the tests are thread save, see:
19961 ;; <https://github.com/getmoto/moto/issues/7786>.
19962 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
19963 "-k" (string-join
19964 ;; Outbound access to AWS servcies is required to reach
19965 ;; endpoint URLs:
19966 ;; "https://s3.amazonaws.com/"
19967 ;; "https://realbucket.s3.amazonaws.com/"
19968 ;; "https://s3.amazonaws.com/companyname_prod"
19969 (list "not test_passthrough_calls_for_entire_service"
19970 "test_passthrough_calls_for_specific_url"
19971 "test_passthrough_calls_for_wildcard_urls"
19972 ;; TypeError: Got unexpected keyword argument
19973 ;; 'account_id_endpoint_mode'
19974 "test_dynamodb_with_account_id_routing[disabled]"
19975 "test_dynamodb_with_account_id_routing[preferred]"
19976 "test_dynamodb_with_account_id_routing[required]"
19977 ;; botocore.exceptions.ParamValidationError:
19978 ;; Parameter validation failed: Missing required
19979 ;; parameter in input: "VpcId"; Missing required
19980 ;; parameter in input: "SubnetMappings"
19981 "test_create_firewall"
19982 "test_describe_logging_configuration"
19983 "test_list_firewalls"
19984 "test_update_logging_configuration"
19985 ;; RuntimeError: Firehose PutRecord(Batch) to HTTP
19986 ;; destination failed
19987 "test_put_record_http_destination"
19988 "test_put_record_batch_http_destination"
19989 ;; Timed out to connect to foo.localhost:5001
19990 "test_with_custom_request_header"
19991 ;; Timed out to connect to testcors.localhost:6789
19992 "test_s3_server_post_cors_multiple_origins"
19993 ;; AttributeError: 'TimestreamInfluxDB' object has
19994 ;; no attribute 'list_db_clusters'
19995 "test_list_db_clusters"
19996 "test_get_db_cluster"
19997 "test_create_db_cluster"
19998 ;; Checksum error
19999 "test_upload_file_with_checksum_algorithm"
20000 "test_list_objects_v2_checksum_algo"
20001 ;; Assertion is not equal
20002 "test_create_describe_update_and_delete_ledger"
20003 "test_s3tables_get_table"
20004 "test_tag_resource_and_list_tags_for_resource"
20005
20006 ;; XXX: Probably will be resolved in the next
20007 ;; release, as botocore's refresh pace is fast.
20008 ;;
20009 ;; botocore.exceptions.UnknownServiceError: Unknown
20010 ;; service: <...>
20011 "test_create_app_response"
20012 "test_describe_apps"
20013 "test_create_instance"
20014 "test_describe_instances"
20015 "test_ec2_integration"
20016 "test_create_layer_response"
20017 "test_describe_layers"
20018 "test_create_stack_response"
20019 "test_describe_stacks"
20020 "test_robot_application"
20021 "test_create_describe_update_and_delete_ledger"
20022 "test_tag_resource_and_list_tags_for_resource"
20023 ;; botocore.exceptions.ClientError: An error
20024 ;; occurred (404) when calling <...>
20025 "test_create_event_source_mapping"
20026 "test_delete_event_source_mapping"
20027 "test_delete_table_deletes_underlying_table_storage"
20028 "test_event_source_mapping_create_from_cloudformation_json"
20029 "test_event_source_mapping_delete_from_cloudformation_json"
20030 "test_event_source_mapping_delete_stack"
20031 "test_event_source_mapping_update_from_cloudformation_json"
20032 "test_get_event_source_mapping"
20033 "test_get_table"
20034 "test_invoke_fake_function_from_sqs_queue"
20035 "test_list_event_source_mappings"
20036 "test_rename_table"
20037 "test_underlying_table_storage_does_not_support_delete_object"
20038 "test_underlying_table_storage_does_not_support_list_objects"
20039 "test_update_event_source_mapping"
20040 "test_update_table_metadata_location"
20041 "test_write_metadata_to_table"
20042 ;; botocore.exceptions.ParamValidationError:
20043 ;; Parameter validation failed <...>
20044 "test_create_db_proxy"
20045 "test_create_db_proxy_duplicate_name"
20046 "test_create_db_proxy_invalid_subnet"
20047 "test_describe_db_proxies"
20048 "test_list_tags_db_proxy")
20049 " and not ")
20050 "tests")
20051 #:phases
20052 #~(modify-phases %standard-phases
20053 (add-after 'unpack 'patch-hardcoded-executable-names
20054 (lambda* (#:key inputs #:allow-other-keys)
20055 (let ((bash-exec (search-input-file inputs "/bin/sh")))
20056 (substitute* "moto/batch/models.py"
20057 (("/bin/sh") bash-exec))
20058 (substitute* (find-files "tests" "\\.py$")
20059 (("#!/bin/bash") (string-append "#!" bash-exec))))))
20060 (add-before 'check 'pre-check
20061 (lambda _
20062 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
20063 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
20064 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
20065 (native-inputs
20066 (list python-flask
20067 python-flask-cors
20068 python-freezegun
20069 python-pycognito
20070 python-pyotp
20071 python-pytest
20072 python-setuptools))
20073 (inputs
20074 (list bash-minimal))
20075 (propagated-inputs
20076 (list java-antlr4-runtime-python
20077 python-aws-xray-sdk
20078 python-boto3
20079 python-botocore
20080 python-cfn-lint
20081 python-cryptography
20082 python-dateutil
20083 python-graphql-core
20084 python-jinja2
20085 python-joserfc
20086 python-jsonpath-ng
20087 python-multipart
20088 python-openapi-spec-validator
20089 python-py-partiql-parser
20090 python-pyparsing
20091 python-requests
20092 python-responses
20093 python-werkzeug
20094 python-xmltodict))
20095 (home-page "https://github.com/spulec/moto")
20096 (synopsis "Mock out the boto library")
20097 (description
20098 "@code{moto} is a library designed to easily mock out the
20099@code{boto} library.")
20100 (license license:asl2.0)))
20101
20102(define-public python-plumbum
20103 (package
20104 (name "python-plumbum")
20105 (version "1.7.0")
20106 (source
20107 (origin
20108 (method git-fetch)
20109 (uri (git-reference
20110 (url "https://github.com/tomerfiliba/plumbum")
20111 (commit (string-append "v" version))))
20112 (file-name (git-file-name name version))
20113 (sha256
20114 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
20115 (build-system pyproject-build-system)
20116 (arguments
20117 (list
20118 #:test-flags
20119 #~(list "--ignore=tests/test_remote.py"
20120 "--ignore=tests/test_putty.py"
20121 "--ignore=tests/test_sudo.py"
20122 "-k"
20123 (string-join (list "not test_home"
20124 "test_iter_lines_error"
20125 "test_quoting"
20126 "test_copy_move_delete")
20127 " and not "))
20128 #:phases
20129 #~(modify-phases %standard-phases
20130 (add-before 'build 'set-version
20131 (lambda _
20132 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
20133 (native-inputs
20134 (list procps
20135 python-psutil
20136 python-pytest
20137 python-pytest-cov
20138 python-setuptools
20139 python-setuptools-scm
20140 python-wheel))
20141 (home-page "https://plumbum.readthedocs.io")
20142 (synopsis "Python shell combinators library")
20143 (description
20144 "Plumbum is a library of tools for replacing shell scripts with Python
20145code.")
20146 (license license:expat)))
20147
20148(define-public python-deprecation
20149 (package
20150 (name "python-deprecation")
20151 (version "2.1.0")
20152 (source
20153 (origin
20154 (method url-fetch)
20155 (uri (pypi-uri "deprecation" version))
20156 (sha256
20157 (base32
20158 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
20159 (build-system pyproject-build-system)
20160 (arguments
20161 (list
20162 #:test-backend #~'unittest
20163 #:phases
20164 #~(modify-phases %standard-phases
20165 (add-after 'unpack 'drop-unittest2
20166 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
20167 (lambda _
20168 (substitute* "tests/test_deprecation.py"
20169 (("import unittest2")
20170 "import unittest as unittest2")))))))
20171 (native-inputs
20172 (list python-setuptools))
20173 (propagated-inputs
20174 (list python-packaging))
20175 (home-page "https://deprecation.readthedocs.io/")
20176 (synopsis "Python library to handle automated deprecations")
20177 (description
20178 "This is a library that enables automated deprecations. It offers the
20179@code{deprecated()} decorator to wrap functions, providing proper warnings
20180both in documentation and via Python’s warnings system, as well as the
20181@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
20182that deprecated code is eventually removed.")
20183 (license license:asl2.0)))
20184
20185(define-public python-jmespath
20186 (package
20187 (name "python-jmespath")
20188 (version "1.0.1")
20189 (source
20190 (origin
20191 (method url-fetch)
20192 (uri (pypi-uri "jmespath" version))
20193 (sha256
20194 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
20195 (build-system pyproject-build-system)
20196 (native-inputs
20197 (list python-pytest
20198 python-setuptools))
20199 (home-page "https://github.com/jmespath/jmespath.py")
20200 (synopsis "JSON Matching Expressions")
20201 (description
20202 "JMESPath (pronounced “james path”) is a Python library that allows one
20203to declaratively specify how to extract elements from a JSON document.")
20204 (license license:expat)))
20205
20206(define-public python-asteval
20207 (package
20208 (name "python-asteval")
20209 (version "1.0.6")
20210 (source
20211 (origin
20212 (method url-fetch)
20213 (uri (pypi-uri "asteval" version))
20214 (sha256
20215 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
20216 (build-system pyproject-build-system)
20217 (native-inputs
20218 (list python-pytest
20219 python-pytest-cov
20220 python-setuptools
20221 python-setuptools-scm))
20222 (home-page "https://github.com/newville/asteval")
20223 (synopsis "Minimalistic evaluator of Python expressions")
20224 (description
20225 "This package provides a minimalistic evaluator of Python expression
20226using the @code{ast} module.")
20227 (license license:expat)))
20228
20229(define-public python-lmfit
20230 (package
20231 (name "python-lmfit")
20232 (version "1.3.4")
20233 (source
20234 (origin
20235 (method url-fetch)
20236 (uri (pypi-uri "lmfit" version))
20237 (sha256
20238 (base32
20239 "15z4zcyc4crfdw22qnbaq8wrf552jgl83gd3nk2zc5zp8f6c48iw"))))
20240 (build-system pyproject-build-system)
20241 (arguments
20242 (list
20243 #:test-flags
20244 ;; Costly tests that may fail with multiprocessing.context.TimeoutError.
20245 #~(list "--ignore=tests/test_jacobian_pickling.py")
20246 #:phases
20247 #~(modify-phases %standard-phases
20248 ;; XXX: Unclear why, but the phase seems broken.
20249 ;; asteval>=1.0 is not understood correctly.
20250 (delete 'sanity-check))))
20251 (propagated-inputs
20252 (list python-asteval python-dill python-numpy python-scipy
20253 python-uncertainties))
20254 (native-inputs
20255 (list python-pytest python-pytest-cov python-setuptools))
20256 (home-page "https://lmfit.github.io/lmfit-py/")
20257 (synopsis "Least-Squares minimization with bounds and constraints")
20258 (description
20259 "Lmfit provides a high-level interface to non-linear optimization and
20260curve fitting problems for Python. It builds on and extends many of the
20261optimization methods of @code{scipy.optimize}. Initially inspired by (and
20262named for) extending the Levenberg-Marquardt method from
20263@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
20264enhancements to optimization and data fitting problems.")
20265 (license license:bsd-3)))
20266
20267(define-public python-bokeh
20268 (package
20269 (name "python-bokeh")
20270 (version "3.7.3")
20271 (source (origin
20272 (method url-fetch)
20273 (uri (pypi-uri "bokeh" version))
20274 (sha256
20275 (base32
20276 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
20277 (build-system pyproject-build-system)
20278 (arguments
20279 (list
20280 ;; FIXME: Most of the tests do not work, figure out how to enable some
20281 ;; portion.
20282 #:tests? #f
20283 #:test-flags
20284 '(list
20285 ;; These require selenium.
20286 "--ignore=tests/unit/bokeh/io/test_export.py"
20287 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
20288 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
20289
20290 ;; Doesn't find ManagedServerLoop fixture
20291 "--ignore=tests/unit/bokeh/test_client_server.py"
20292
20293 ;; This fails because of the Guix wrapper around pytest
20294 "--ignore=tests/unit/bokeh/io/test_util__io.py"
20295
20296 ;; Fixture ipython not found.
20297 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
20298 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
20299
20300 ;; pd fixture not found.
20301 "--ignore=tests/unit/bokeh/models/test_mappers.py"
20302 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
20303 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
20304 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
20305 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
20306 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
20307 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
20308 "--ignore=tests/unit/bokeh/core/property/test_container.py"
20309 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
20310 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
20311 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
20312
20313 ;; nx fixture not found.
20314 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
20315 "--ignore=tests/unit/bokeh/models/test_graphs.py"
20316 "--ignore=tests/unit/bokeh/io/test_showing.py"
20317 "--ignore=tests/unit/bokeh/document/test_events__document.py"
20318
20319 ;; These tests need external sample data
20320 "--ignore-glob=tests/unit/bokeh/sampledata/*"
20321
20322 ;; Attempts to install something via npm.
20323 "--ignore=tests/unit/bokeh/test_ext.py"
20324
20325 ;; More failures due to set up problems.
20326 "--ignore=tests/unit/bokeh/server/test_server__server.py"
20327 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
20328 "--ignore=tests/unit/bokeh/util/test_serialization.py"
20329 "--ignore=tests/unit/bokeh/util/test_hex.py"
20330 "--ignore=tests/unit/bokeh/models/test_sources.py"
20331 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
20332
20333 "-k"
20334 (string-append
20335 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
20336 ;; Did you mean: 'assert_called_once_with'?
20337 "not test_set_from_json"
20338
20339 ;; XXX: This one test transforms a gif of a red box. It transforms
20340 ;; it all right but the base64 doesn't look as expected, probably
20341 ;; because of a change in pillow.
20342 " and not test_transform_PIL"))
20343 #:phases
20344 #~(modify-phases %standard-phases
20345 (add-before 'build 'set-version
20346 (lambda _
20347 (substitute* "pyproject.toml"
20348 ((", \"setuptools-git-versioning\"") "")
20349 (("dynamic = \\[\"version\"\\]")
20350 (string-append "version = '" #$version "'"))))))))
20351 (propagated-inputs
20352 (list node-lts
20353 python-contourpy
20354 python-jinja2
20355 python-narwhals
20356 python-numpy
20357 python-packaging
20358 python-pandas
20359 python-pillow
20360 python-pyyaml
20361 python-tornado-6
20362 python-xyzservices))
20363 (native-inputs
20364 (list python-beautifulsoup4
20365 python-dateutil
20366 python-flaky
20367 python-mock
20368 python-nbconvert
20369 python-pandas
20370 python-pytest
20371 python-pytz
20372 python-requests
20373 python-setuptools
20374 python-wheel))
20375 (home-page "https://github.com/bokeh/bokeh")
20376 (synopsis "Interactive plots and applications in the browser from Python")
20377 (description
20378 "This package provides tools for interactive plots and applications in the
20379browser from Python.")
20380 (license license:bsd-3)))
20381
20382(define-public python-botocore
20383 ;; Note: When updating botocore, also make sure that boto3 and awscli
20384 ;; are compatible.
20385 (package
20386 (name "python-botocore")
20387 (version "1.40.61")
20388 (source
20389 (origin
20390 (method url-fetch)
20391 (uri (pypi-uri "botocore" version))
20392 (sha256
20393 (base32
20394 "1kajxzrh4nq4hx7rgbam0sffx06d45q7rw2csv69q3q9kgb7lj52"))))
20395 (build-system pyproject-build-system)
20396 (arguments
20397 (list
20398 ;; tests: 4491 passed, 72 skipped
20399 #:test-flags
20400 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
20401 ;; The full test suite is huge, run some of it's portion.
20402 "--ignore=tests/integration"
20403 "--ignore=tests/functional")))
20404 (native-inputs
20405 (list python-jsonschema
20406 python-pytest
20407 python-pytest-xdist
20408 python-setuptools))
20409 (propagated-inputs
20410 (list python-dateutil
20411 python-jmespath
20412 python-urllib3))
20413 (home-page "https://github.com/boto/botocore")
20414 (synopsis "Low-level interface to AWS")
20415 (description
20416 "Botocore is a Python library that provides a low-level interface to the
20417Amazon Web Services (AWS) API.")
20418 (license license:asl2.0)))
20419
20420(define-public python-boto3
20421 (package
20422 (name "python-boto3")
20423 (version "1.40.61")
20424 (source
20425 (origin
20426 (method git-fetch)
20427 (uri (git-reference
20428 (url "https://github.com/boto/boto3")
20429 (commit version)))
20430 (file-name (git-file-name name version))
20431 (sha256
20432 (base32 "0rjcs9grnrcak6w4l5plqcbwvknmg1k3q0xzg11kpp0sfiszbdph"))))
20433 (build-system pyproject-build-system)
20434 (arguments
20435 (list
20436 ;; tests: 1415 passed, 17 skipped, 1 warning
20437 #:test-flags
20438 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
20439 ;; Integration tests are trying to connect to AWS.
20440 "--ignore=tests/integration")))
20441 (native-inputs
20442 (list python-mock
20443 python-pytest
20444 python-pytest-xdist
20445 python-setuptools))
20446 (propagated-inputs
20447 (list python-botocore
20448 python-jmespath
20449 python-s3transfer))
20450 (home-page "https://github.com/boto/boto3")
20451 (synopsis "AWS SDK for Python")
20452 (description
20453 "Boto3 is a Python library for writing programs that interact with
20454@acronym{AWS,Amazon Web Services}.")
20455 (license license:asl2.0)))
20456
20457(define-public python-pyfiglet
20458 (package
20459 (name "python-pyfiglet")
20460 (version "1.0.4")
20461 (source
20462 (origin
20463 (method git-fetch)
20464 (uri (git-reference
20465 (url "https://github.com/pwaller/pyfiglet")
20466 (commit (string-append "v" version))))
20467 (file-name (git-file-name name version))
20468 (sha256
20469 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
20470 (build-system pyproject-build-system)
20471 (arguments
20472 (list
20473 #:phases
20474 #~(modify-phases %standard-phases
20475 (add-after 'unpack 'fallback-on-default-build
20476 (lambda _
20477 ;; This pyproject has little value and fails because of the
20478 ;; :__legacy__ suffix. Removing it to rely on defaults.
20479 (delete-file "pyproject.toml"))))))
20480 (native-inputs (list python-pytest python-setuptools))
20481 (home-page "https://github.com/pwaller/pyfiglet")
20482 (synopsis "Draw ASCII art big letters in Python")
20483 (description
20484 "This module lets you draw large letter from ordinary characters in pure
20485 Python.")
20486 (license license:expat)))
20487
20488(define-public python-mako
20489 (package
20490 (name "python-mako")
20491 (version "1.3.10")
20492 (source
20493 (origin
20494 (method url-fetch)
20495 (uri (pypi-uri "mako" version))
20496 (sha256
20497 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
20498 (build-system pyproject-build-system)
20499 (native-inputs
20500 (list python-pytest
20501 python-setuptools
20502 python-wheel))
20503 (propagated-inputs
20504 (list python-markupsafe))
20505 (home-page "https://www.makotemplates.org/")
20506 (synopsis "Templating language for Python")
20507 (description "Mako is a templating language for Python that compiles
20508templates into Python modules.")
20509 (license license:expat)))
20510
20511(define-public python-cookiecutter
20512 (package
20513 (name "python-cookiecutter")
20514 (version "2.6.0")
20515 (source
20516 (origin
20517 (method url-fetch)
20518 (uri (pypi-uri "cookiecutter" version))
20519 (sha256
20520 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
20521 (build-system pyproject-build-system)
20522 (arguments
20523 (list
20524 #:phases #~(modify-phases %standard-phases
20525 (add-before 'check 'pre-check
20526 (lambda _
20527 ;; test_get_user_config.py requires a writable home
20528 ;; directory.
20529 (setenv "HOME"
20530 (getcwd))
20531 ;; test_hooks.py dynamically creates shell scripts
20532 ;; with a /bin/bash shebang. We have to patch these.
20533 (substitute* "tests/test_hooks.py"
20534 (("/bin/bash")
20535 (string-append #$(this-package-native-input
20536 "bash-minimal") "/bin/bash"))))))))
20537 (native-inputs (list bash-minimal
20538 git-minimal
20539 python-freezegun
20540 python-pytest
20541 python-pytest-cov
20542 python-pytest-mock
20543 python-setuptools
20544 python-wheel))
20545 (propagated-inputs (list python-arrow
20546 python-binaryornot
20547 python-click
20548 python-jinja2
20549 python-pyyaml
20550 python-requests
20551 python-rich
20552 python-slugify))
20553 (home-page "https://github.com/cookiecutter/cookiecutter")
20554 (synopsis
20555 "Command-line utility that creates projects from project templates")
20556 (description
20557 "This package provides a command-line utility that creates projects from
20558project templates, e.g. creating a Python package project from a Python package
20559project template.")
20560 (license license:bsd-3)))
20561
20562(define-public python-pyquery
20563 (package
20564 (name "python-pyquery")
20565 (version "2.0.1")
20566 (source
20567 (origin
20568 (method url-fetch)
20569 (uri (pypi-uri "pyquery" version))
20570 (sha256
20571 (base32
20572 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
20573 (build-system pyproject-build-system)
20574 (arguments
20575 (list
20576 #:test-flags
20577 #~(list #$@(map (lambda (test) (string-append
20578 "--deselect=tests/test_pyquery.py::"
20579 test))
20580 (list
20581 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
20582 "TestWebScrapping::test_post"
20583 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
20584 "TestWebScrapping::test_session"
20585 ;; Assertion is not equal.
20586 "TestManipulating::test_val_for_textarea"
20587 "TestHTMLParser::test_replaceWith"
20588 "TestHTMLParser::test_replaceWith_with_function"
20589 ;; Network access is required.
20590 "TestWebScrapping::test_get"
20591 "TestWebScrappingEncoding::test_get")))))
20592 (native-inputs
20593 (list python-pytest
20594 python-pytest-cov
20595 python-requests
20596 python-setuptools
20597 python-webob
20598 python-webtest
20599 python-wheel))
20600 (propagated-inputs
20601 (list python-cssselect python-lxml))
20602 (home-page "https://github.com/gawel/pyquery")
20603 (synopsis "Make jQuery-like queries on xml documents")
20604 (description "pyquery allows you to make jQuery queries on xml documents.
20605The API is as much as possible the similar to jQuery. pyquery uses lxml for
20606fast xml and html manipulation.")
20607 (license license:bsd-3)))
20608
20609(define-public python-amqp
20610 (package
20611 (name "python-amqp")
20612 (version "5.1.1")
20613 (source
20614 (origin
20615 (method url-fetch)
20616 (uri (pypi-uri "amqp" version))
20617 (sha256
20618 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
20619 (build-system pyproject-build-system)
20620 (arguments
20621 (list ; Integration tests require network connectivity.
20622 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
20623 (native-inputs (list python-pytest python-setuptools python-wheel))
20624 (propagated-inputs (list python-vine))
20625 (home-page "https://github.com/celery/py-amqp")
20626 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
20627 (description
20628 "This is a fork of amqplib which was originally written by Barry Pederson.
20629It is maintained by the Celery project, and used by kombu as a pure python
20630alternative when librabbitmq is not available.")
20631 (license license:lgpl2.1+)))
20632
20633(define-public python-benchmark-4dn
20634 (package
20635 (name "python-benchmark-4dn")
20636 (version "0.5.24")
20637 (source (origin
20638 (method url-fetch)
20639 (uri (pypi-uri "benchmark_4dn" version))
20640 (sha256
20641 (base32
20642 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
20643 (properties '(("upstream-name" . "benchmark_4dn")))
20644 (build-system pyproject-build-system)
20645 ;; There are none.
20646 (arguments (list #:tests? #false))
20647 (native-inputs
20648 (list python-poetry-core))
20649 (home-page "https://github.com/SooLee/Benchmark/")
20650 (synopsis "Benchmark functions for CWL workflows")
20651 (description
20652 "This package provides benchmark functions that return total space, memory,
20653CPUs required per given input size, and parameters for CWL workflows.")
20654 (license license:expat)))
20655
20656(define-public python-beniget
20657 (package
20658 (name "python-beniget")
20659 (version "0.4.2.post1")
20660 (source
20661 (origin
20662 (method url-fetch)
20663 (uri (pypi-uri "beniget" version))
20664 (sha256
20665 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
20666 (build-system pyproject-build-system)
20667 (native-inputs
20668 (list python-pytest
20669 python-setuptools))
20670 (propagated-inputs
20671 (list python-gast))
20672 (home-page "https://github.com/serge-sans-paille/beniget")
20673 (synopsis "Extract semantic information about static Python code")
20674 (description
20675 "Beniget is a collection of analyzers for Python @acronym{AST,
20676Abstract Syntax Tree}. It is a building block for writing a static analyzer
20677or compiler for Python.")
20678 (license license:bsd-3)))
20679
20680(define-public python-kombu
20681 (package
20682 (name "python-kombu")
20683 (version "5.6.0")
20684 (source
20685 (origin
20686 (method git-fetch)
20687 (uri (git-reference
20688 (url "https://github.com/celery/kombu")
20689 (commit (string-append "v" version))))
20690 (file-name (git-file-name name version))
20691 (sha256
20692 (base32 "10h73mxfqy8g02bmibc9m2xklcm4pxc9r674c8l6j0v2igf3ycmb"))))
20693 (build-system pyproject-build-system)
20694 (arguments
20695 (list
20696 ;; tests: 854 passed, 196 skipped
20697 #:test-flags
20698 #~(list
20699 ;; TODO: Package azure-identity (required for this file)
20700 "--ignore=t/unit/transport/test_azurestoragequeues.py"
20701 ;; XXX: Requires google-cloud-pubsub.
20702 "--ignore=t/unit/transport/test_gcpubsub.py")
20703 #:phases
20704 #~(modify-phases %standard-phases
20705 (add-after 'unpack 'relax-requirements
20706 (lambda _
20707 (substitute* "requirements/default.txt"
20708 (("tzdata>=2025.2")
20709 "tzdata>=2025.1")))))))
20710 (native-inputs
20711 (list python-botocore
20712 python-pyro4
20713 python-pytest
20714 python-pytest-freezer
20715 python-pytest-sugar
20716 python-setuptools))
20717 (propagated-inputs
20718 (list python-amqp
20719 python-packaging
20720 python-tzdata
20721 python-vine))
20722 (home-page "https://kombu.readthedocs.io")
20723 (synopsis "Message passing library for Python")
20724 (description
20725 "The aim of Kombu is to make messaging in Python as easy as possible by
20726providing an idiomatic high-level interface for the AMQ protocol, and also
20727provide proven and tested solutions to common messaging problems. AMQP is the
20728Advanced Message Queuing Protocol, an open standard protocol for message
20729orientation, queuing, routing, reliability and security, for which the
20730RabbitMQ messaging server is the most popular implementation.")
20731 (license license:bsd-3)))
20732
20733(define-public python-billiard
20734 (package
20735 (name "python-billiard")
20736 (version "4.2.2")
20737 (source
20738 (origin
20739 (method git-fetch)
20740 (uri (git-reference
20741 (url "https://github.com/celery/billiard")
20742 (commit (string-append "v" version))))
20743 (file-name (git-file-name name version))
20744 (sha256
20745 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
20746 (build-system pyproject-build-system)
20747 (arguments
20748 (list
20749 #:phases
20750 #~(modify-phases %standard-phases
20751 (add-after 'unpack 'remove-win-files
20752 (lambda _
20753 (for-each delete-file-recursively
20754 '("billiard/popen_spawn_win32.py"
20755 "billiard/_win.py")))))))
20756 (native-inputs (list python-psutil python-pytest python-setuptools))
20757 (home-page "https://github.com/celery/billiard")
20758 (synopsis "Python multiprocessing fork with improvements and bugfixes")
20759 (description
20760 "Billiard is a fork of the Python 2.7 multiprocessing package. The
20761multiprocessing package itself is a renamed and updated version of R Oudkerk's
20762pyprocessing package. This standalone variant is intended to be compatible with
20763Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
20764 (license license:bsd-3)))
20765
20766(define-public python-celery
20767 (package
20768 (name "python-celery")
20769 (version "5.6.2")
20770 (source
20771 (origin
20772 (method url-fetch)
20773 (uri (pypi-uri "celery" version))
20774 (sha256
20775 (base32 "16q0hlsw9p2mri1c1i2l4knq2d8hf83h4a9vglqpdbgjzk1j32aa"))))
20776 (build-system pyproject-build-system)
20777 (arguments
20778 (list
20779 ;; tests: 3248 passed, 26 skipped, 8 deselected, 3 xfailed, 54 warnings,
20780 ;; 28958 subtests passed
20781 #:test-flags
20782 ;; The MongoDB backend test appears to expect an older version of
20783 ;; MongoDB which provided its own bson module, fails with "
20784 ;; AttributeError: module 'bson' has no attribute 'encode'".
20785 #~(list "--ignore=t/unit/backends/test_mongodb.py"
20786 ;; XXX: Requires google-cloud-firestore
20787 "--ignore=t/unit/backends/test_gcs.py"
20788 "-k" (string-join
20789 (list ;; AssertionError.
20790 "not test_check_privileges_no_fchown"
20791 ;; These 3 tests error out on ci.guix.gnu.org with
20792 ;; OSError: [Errno 24] Too many open files
20793 "test_register_with_event_loop__no_on_tick_dupes"
20794 "test_with_autoscaler_file_descriptor_safety"
20795 "test_with_file_descriptor_safety"
20796 ;; XXX: Fails to compare local timezones.
20797 "test_use_local_timezone")
20798 " and not "))))
20799 (native-inputs
20800 (list python-azure-core
20801 python-dnspython
20802 python-flaky
20803 python-gevent
20804 python-google-cloud-storage
20805 python-iniconfig
20806 python-moto
20807 python-msgpack
20808 python-pymongo
20809 python-pytest
20810 python-pytest-celery
20811 python-pytest-click
20812 python-pytest-order
20813 python-pytest-subtests
20814 python-pytest-timeout
20815 python-redis
20816 python-setuptools))
20817 (propagated-inputs
20818 (list python-billiard
20819 python-click
20820 python-click-didyoumean
20821 python-click-plugins-1
20822 python-click-repl
20823 python-dateutil
20824 python-kombu
20825 python-tzlocal
20826 python-vine))
20827 (home-page "https://celeryproject.org")
20828 (synopsis "Distributed Task Queue")
20829 (description
20830 "Celery is an asynchronous task queue/job queue based on distributed
20831message passing. It is focused on real-time operation, but supports
20832scheduling as well. The execution units, called tasks, are executed
20833concurrently on a single or more worker servers using multiprocessing,
20834Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
20835synchronously (wait until ready).")
20836 (license license:bsd-3)))
20837
20838;; A bare minimal package, mainly to use in tests and reduce closure
20839;; size. Tests are left out in the main package to slim down native-inputs.
20840(define-public python-celery-minimal
20841 (package/inherit python-celery
20842 (name "python-celery-minimal")
20843 (arguments
20844 (list #:tests? #f))
20845 (native-inputs
20846 (list python-setuptools))))
20847
20848(define-public python-anyqt
20849 (package
20850 (name "python-anyqt")
20851 (version "0.2.1")
20852 (source
20853 (origin
20854 (method git-fetch)
20855 (uri (git-reference
20856 (url "https://github.com/ales-erjavec/anyqt")
20857 (commit version)))
20858 (file-name (git-file-name name version))
20859 (sha256
20860 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
20861 (build-system pyproject-build-system)
20862 (arguments
20863 (list
20864 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
20865 ;; TODO Add/configure the right Qt inputs.
20866 #:test-flags
20867 #~(list "--ignore-glob=tests/test_q*.py")
20868 #:phases
20869 #~(modify-phases %standard-phases
20870 (add-after 'unpack 'delete-files
20871 ;; Delete files related to other operating systems.
20872 (lambda _
20873 (delete-file "AnyQt/QtMacExtras.py")
20874 (delete-file "AnyQt/QtWinExtras.py"))))))
20875 (native-inputs
20876 (list python-pyqt-6
20877 python-pytest
20878 python-pytest-qt
20879 python-setuptools))
20880 (home-page "https://github.com/ales-erjavec/anyqt")
20881 (synopsis "PyQt compatibility layer")
20882 (description
20883 "This package provides a PyQt/PySide compatibility layer. More precisely,
20884it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
20885PySide, PySide2.")
20886 (license license:gpl3)))
20887
20888(define-public python-qasync
20889 (package
20890 (name "python-qasync")
20891 (version "0.28.0")
20892 (source
20893 (origin
20894 (method git-fetch)
20895 (uri (git-reference
20896 (url "https://github.com/CabbageDevelopment/qasync/")
20897 (commit (string-append "v" version))))
20898 (file-name (git-file-name name version))
20899 (sha256
20900 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
20901 (build-system pyproject-build-system)
20902 (arguments
20903 (list
20904 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
20905 #:phases
20906 #~(modify-phases %standard-phases
20907 (add-before 'check 'set-qpa
20908 (lambda _
20909 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
20910 (native-inputs
20911 (list python-poetry-core python-pytest))
20912 (propagated-inputs
20913 (list python-pyqt-6))
20914 (home-page "https://github.com/CabbageDevelopment/qasync")
20915 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
20916 (description
20917 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
20918by providing an implementation of the PEP 3156 event-loop.")
20919 (license license:bsd-2)))
20920
20921(define-public python-editor
20922 (package
20923 (name "python-editor")
20924 (version "1.0.4")
20925 (source
20926 (origin
20927 (method git-fetch)
20928 (uri (git-reference
20929 (url "https://github.com/fmoo/python-editor")
20930 (commit version)))
20931 (file-name (git-file-name name version))
20932 (sha256
20933 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
20934 (build-system pyproject-build-system)
20935 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
20936 (native-inputs (list python-setuptools))
20937 (home-page "https://github.com/fmoo/python-editor")
20938 (synopsis "Programmatically open an editor, capture the result")
20939 (description
20940 "This package provides the editor module for programmatically interfacing
20941with your system's $EDITOR.")
20942 (license license:asl2.0)))
20943
20944(define-public python-multiprocessing-logging
20945 (package
20946 (name "python-multiprocessing-logging")
20947 (version "0.3.4")
20948 (home-page "https://github.com/jruere/multiprocessing-logging")
20949 (source
20950 (origin
20951 (method git-fetch)
20952 (uri (git-reference
20953 (url home-page)
20954 (commit (string-append "v" version))))
20955 (file-name (git-file-name name version))
20956 (sha256
20957 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
20958 (build-system pyproject-build-system)
20959 (arguments (list #:test-backend #~'unittest))
20960 (native-inputs (list python-setuptools))
20961 (synopsis "Manage logs from multiple processes")
20962 (description
20963 "This Python module implements a multiprocessing-aware @code{Handler}
20964that, when set on the root @code{Logger}, will tunnel log records to the
20965main process so that they are handled correctly.")
20966 (license license:lgpl3+)))
20967
20968(define-public python-munkres
20969 (package
20970 (name "python-munkres")
20971 (version "1.1.4")
20972 (source
20973 (origin
20974 (method url-fetch)
20975 (uri (pypi-uri "munkres" version))
20976 (sha256
20977 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
20978 (build-system pyproject-build-system)
20979 (arguments
20980 (list
20981 ;; See https://github.com/bmc/munkres/issues/40
20982 #:test-flags
20983 (if (member (%current-system) %32bit-supported-systems)
20984 #~(list "-k" "not test_profit_float")
20985 #~(list))))
20986 (native-inputs (list python-pytest python-setuptools))
20987 (home-page "https://software.clapper.org/munkres/")
20988 (synopsis "Implementation of the Munkres algorithm")
20989 (description
20990 "The Munkres module provides an implementation of the Munkres algorithm
20991(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
20992for solving the Assignment Problem.")
20993 (license license:bsd-3)))
20994
20995(define-public python-codespell
20996 (package
20997 (name "python-codespell")
20998 (version "2.3.0")
20999 (source
21000 (origin
21001 (method url-fetch)
21002 (uri (pypi-uri "codespell" version))
21003 (sha256
21004 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
21005 (build-system pyproject-build-system)
21006 (arguments
21007 (list
21008 #:phases
21009 #~(modify-phases %standard-phases
21010 (add-after 'unpack 'fix-pytest-config
21011 (lambda _
21012 ;; Drop test coverage requirements.
21013 (substitute* "pyproject.toml"
21014 (("\"--cov=codespell_lib\",") "")
21015 (("\"--cov-report=\",") "")))))))
21016 (native-inputs
21017 (list python-pygments
21018 python-pytest
21019 python-pytest-dependency
21020 python-setuptools
21021 python-setuptools-scm
21022 python-wheel))
21023 (propagated-inputs
21024 (list python-chardet))
21025 (home-page "https://github.com/codespell-project/codespell/")
21026 (synopsis "Spellchecker for code")
21027 (description
21028 "Codespell fixes common misspellings in text files. It's designed
21029primarily for checking misspelled words in source code, but it can be used
21030with other files as well. It does not check for word membership in a complete
21031dictionary, but instead looks for a set of common misspellings. Therefore it
21032should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
21033also means it shouldn't generate false-positives when you use a niche term it
21034doesn't know about.")
21035 (license
21036 (list
21037 ; for codespell and codespell_lib
21038 license:gpl2
21039 ; for dictionary*.txt
21040 license:cc-by-sa3.0))))
21041
21042(define-public python-jellyfish
21043 (package
21044 (name "python-jellyfish")
21045 (version "1.2.1")
21046 (source
21047 (origin
21048 (method git-fetch)
21049 (uri (git-reference
21050 (url "https://github.com/jamesturk/jellyfish")
21051 (commit (string-append "v" version))))
21052 (file-name (git-file-name name version))
21053 (sha256
21054 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
21055 (build-system pyproject-build-system)
21056 (arguments
21057 (list
21058 #:imported-modules (append %cargo-build-system-modules
21059 %pyproject-build-system-modules)
21060 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
21061 (guix build pyproject-build-system)
21062 (guix build utils))
21063 #:phases
21064 #~(modify-phases %standard-phases
21065 (add-after 'unpack 'prepare-cargo-build-system
21066 (lambda args
21067 (for-each
21068 (lambda (phase)
21069 (format #t "Running cargo phase: ~a~%" phase)
21070 (apply (assoc-ref cargo:%standard-phases phase)
21071 #:cargo-target #$(cargo-triplet)
21072 args))
21073 '(unpack-rust-crates
21074 configure
21075 check-for-pregenerated-files
21076 patch-cargo-checksums)))))))
21077 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
21078 (native-inputs
21079 (append
21080 (list python-pytest
21081 python-setuptools
21082 rust
21083 `(,rust "cargo"))
21084 (or (and=> (%current-target-system)
21085 (compose list make-rust-sysroot))
21086 '())))
21087 (home-page "https://www.jpt.sh/projects/jellyfish/")
21088 (synopsis "Approximate and phonetic matching of strings")
21089 (description "Jellyfish uses a variety of string comparison and phonetic
21090encoding algorithms to do fuzzy string matching.")
21091 (license license:bsd-2)))
21092
21093(define-public python-pdfminer-six
21094 (package
21095 (name "python-pdfminer-six")
21096 (version "20240706")
21097 ;; There are no tests in the PyPI tarball.
21098 (source
21099 (origin
21100 (method git-fetch)
21101 (uri (git-reference
21102 (url "https://github.com/pdfminer/pdfminer.six")
21103 (commit version)))
21104 (file-name (git-file-name name version))
21105 (sha256
21106 (base32 "0vdwps38q2414lwjz266rabxrcw2a5s1pgxyjsffiifi010cd3k9"))))
21107 (build-system pyproject-build-system)
21108 (arguments
21109 (list #:phases
21110 #~(modify-phases %standard-phases
21111 ;; Tests write to the source tree.
21112 (add-after 'unpack 'make-git-checkout-writable
21113 (lambda _
21114 (for-each make-file-writable (find-files ".")))))))
21115 (propagated-inputs
21116 (list python-charset-normalizer python-cryptography))
21117 (native-inputs
21118 (list python-pytest python-setuptools python-wheel))
21119 (home-page "https://github.com/pdfminer/pdfminer.six")
21120 (synopsis "PDF parser and analyzer")
21121 (description "@code{pdfminer.six} is a community maintained fork of
21122the original PDFMiner. It is a tool for extracting information from PDF
21123documents. It focuses on getting and analyzing text data. Pdfminer.six
21124extracts the text from a page directly from the sourcecode of the PDF. It
21125can also be used to get the exact location, font or color of the text.")
21126 (license license:expat)))
21127
21128(define-public python-rarfile
21129 (package
21130 (name "python-rarfile")
21131 (version "4.2")
21132 (source
21133 (origin
21134 (method git-fetch)
21135 (uri (git-reference
21136 (url "https://github.com/markokr/rarfile")
21137 (commit (string-append "v" version))))
21138 (file-name (git-file-name name version))
21139 (sha256
21140 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
21141 (build-system pyproject-build-system)
21142 (arguments
21143 (list
21144 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
21145 #:phases
21146 #~(modify-phases %standard-phases
21147 (add-after 'unpack 'patch
21148 (lambda* (#:key inputs #:allow-other-keys)
21149 (substitute* "rarfile.py"
21150 ;; Disable unrar and unar, which are unavailable on Guix.
21151 (("(unrar|unar)=True" all tool)
21152 (string-append tool "=False"))
21153 ;; Hardcode path to bsdtar
21154 (("\"bsdtar\"")
21155 (format #f "~s"
21156 (search-input-file inputs "bin/bsdtar")))))))))
21157 (native-inputs (list python-pytest python-setuptools))
21158 (inputs (list libarchive))
21159 (home-page "https://github.com/markokr/rarfile")
21160 (synopsis "RAR archive reader for Python")
21161 (description
21162 "This is Python module for RAR archive reading. The interface is made as
21163zipfile like as possible.")
21164 (license license:isc)))
21165
21166(define-public python-slugid
21167 (package
21168 (name "python-slugid")
21169 (version "2.0.0")
21170 (source
21171 (origin
21172 (method git-fetch)
21173 (uri (git-reference
21174 (url "https://github.com/taskcluster/slugid.py")
21175 (commit (string-append "v" version))))
21176 (file-name (git-file-name name version))
21177 (sha256
21178 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
21179 (build-system pyproject-build-system)
21180 (arguments (list #:test-backend #~'nose))
21181 (native-inputs (list python-pynose python-setuptools))
21182 (home-page "http://taskcluster.github.io/slugid.py")
21183 (synopsis "Module for Base64 encoded UUID v4 slugs")
21184 (description
21185 "This package provides a module for generating v4 UUIDs and encoding them
21186into 22 character URL-safe base64 slug representation.")
21187 (license license:mpl2.0)))
21188
21189(define-public python-rich
21190 (package
21191 (name "python-rich")
21192 (version "13.7.1")
21193 (source
21194 (origin
21195 ;; There are no tests in the PyPI tarball.
21196 (method git-fetch)
21197 (uri (git-reference
21198 (url "https://github.com/willmcgugan/rich")
21199 (commit (string-append "v" version))))
21200 (file-name (git-file-name name version))
21201 (sha256
21202 (base32
21203 "0jvkcp473c0icbb8md3grc3285j2cy0z0swxgk2g67d9n0zfdfzc"))))
21204 (build-system pyproject-build-system)
21205 (arguments
21206 (list
21207 #:test-flags
21208 ;; These fail for unknown reasons, but the results look identical.
21209 ;; Perhaps only the terminal escape sequences are superficially
21210 ;; different?
21211 '(list "-k" (string-append "not test_card_render"
21212 " and not test_markdown_render"
21213 " and not test_python_render"
21214 " and not test_python_render_simple"
21215 " and not test_python_render_simple_passing_lexer_instance"
21216 " and not test_python_render_indent_guides"
21217 " and not test_option_no_wrap"
21218 " and not test_syntax_highlight_ranges"
21219 " and not test_inline_code"
21220 " and not test_blank_lines"))))
21221 (propagated-inputs
21222 (list python-markdown-it-py python-pygments))
21223 (native-inputs
21224 (list python-poetry-core python-pytest))
21225 (home-page "https://github.com/willmcgugan/rich")
21226 (synopsis "Render rich text and more to the terminal")
21227 (description
21228 "This is a Python package for rendering rich text, tables, progress bars,
21229syntax highlighting, markdown and more to the terminal.")
21230 (license license:expat)))
21231
21232(define-public python-rich-next
21233 (package
21234 (inherit python-rich)
21235 (name "python-rich")
21236 (version "14.2.0")
21237 (source
21238 (origin
21239 (method git-fetch)
21240 (uri (git-reference
21241 (url "https://github.com/willmcgugan/rich")
21242 (commit (string-append "v" version))))
21243 (file-name (git-file-name name version))
21244 (sha256
21245 (base32 "0zwjry4ylqncqvxrywp0km96jng4f288dgz8kz5vymk7nr2z21m1"))))
21246 (native-inputs (modify-inputs (package-native-inputs python-rich)
21247 (append which)))))
21248
21249(define-public python-rich-click
21250 (package
21251 (name "python-rich-click")
21252 (version "1.8.9")
21253 (source
21254 (origin
21255 (method git-fetch)
21256 (uri (git-reference
21257 (url "https://github.com/ewels/rich-click")
21258 (commit (string-append "v" version))))
21259 (file-name (git-file-name name version))
21260 (sha256
21261 (base32 "0kc2wcb5dpgxhdcz8fy6gfhl7vra03xwgwfg7h0qxxibr8yzhmmq"))))
21262 (build-system pyproject-build-system)
21263 (native-inputs
21264 (list python-pytest
21265 python-setuptools))
21266 (propagated-inputs
21267 (list python-click
21268 python-rich
21269 python-typing-extensions))
21270 (home-page "https://github.com/ewels/rich-click")
21271 (synopsis "Format click help output nicely with rich")
21272 (description "Click is a \"Python package for creating beautiful command
21273line interfaces\". Rich is a \"Python library for rich text and beautiful
21274formatting in the terminal\". The intention of rich-click is to provide
21275attractive help output from click, formatted with rich, with minimal
21276customization required.")
21277 (license license:expat)))
21278
21279(define-public python-magic
21280 (package
21281 (name "python-magic")
21282 (version "0.4.27")
21283 (home-page "https://github.com/ahupp/python-magic")
21284 (source
21285 (origin
21286 (method git-fetch)
21287 (uri (git-reference (url home-page) (commit version)))
21288 (file-name (git-file-name name version))
21289 (sha256
21290 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
21291 (build-system pyproject-build-system)
21292 (arguments
21293 (list
21294 #:test-backend #~'custom
21295 #:test-flags #~(list "test/libmagic_test.py")
21296 #:phases
21297 #~(modify-phases %standard-phases
21298 (add-after 'unpack 'fix-tests
21299 (lambda _
21300 ;; Adjust expected output for [email protected].
21301 (substitute* "test/libmagic_test.py"
21302 (("PDF document, version 1\\.2, 2 pages")
21303 "PDF document, version 1.2, 2 page(s)"))))
21304 ;; Replace a specific method call with a hard-coded path to the
21305 ;; necessary libmagic.so file in the store.
21306 (add-before 'build 'hard-code-path-to-libmagic
21307 (lambda* (#:key inputs #:allow-other-keys)
21308 (substitute* "magic/loader.py"
21309 (("find_library\\('magic'\\)")
21310 (format #f "~s"
21311 (search-input-file inputs "lib/libmagic.so")))))))))
21312 (native-inputs (list which python-setuptools))
21313 (inputs
21314 ;; python-magic needs to be able to find libmagic.so.
21315 (list file))
21316 (synopsis "File type identification using libmagic")
21317 (description
21318 "This module uses ctypes to access the libmagic file type identification
21319library. It makes use of the local magic database and supports both textual
21320and MIME-type output. Note that this module and the python-file module both
21321provide a \"magic.py\" file; these two modules, which are different and were
21322developed separately, both serve the same purpose: to provide Python bindings
21323for libmagic.")
21324 (license license:expat)))
21325
21326(define-public python-securetar
21327 (package
21328 (name "python-securetar")
21329 (version "2025.1.4")
21330 (source
21331 (origin
21332 (method git-fetch)
21333 (uri (git-reference
21334 (url "https://github.com/pvizeli/securetar")
21335 (commit version)))
21336 (file-name (git-file-name name version))
21337 (sha256
21338 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
21339 (build-system pyproject-build-system)
21340 (native-inputs (list python-setuptools python-wheel python-pytest))
21341 (propagated-inputs (list python-cryptography))
21342 (home-page "https://github.com/pvizeli/securetar")
21343 (synopsis "Python module to handle tarfile backups")
21344 (description
21345 "This library provides a streaming wrapper around python tarfile and allow
21346secure handling files and support encryption.")
21347 (license license:asl2.0)))
21348
21349(define-public python-pkgconfig
21350 (package
21351 (name "python-pkgconfig")
21352 (version "1.5.5")
21353 (source
21354 (origin
21355 (method url-fetch)
21356 (uri (pypi-uri "pkgconfig" version))
21357 (sha256
21358 (base32
21359 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
21360 (build-system pyproject-build-system)
21361 (arguments
21362 (list
21363 #:tests? #false ;there are none
21364 #:phases
21365 '(modify-phases %standard-phases
21366 (add-before 'build 'patch
21367 ;; Hard-code the path to pkg-config.
21368 (lambda _
21369 (substitute* "pkgconfig/pkgconfig.py"
21370 (("'pkg-config'")
21371 (string-append "'" (which "pkg-config") "'"))))))))
21372 (native-inputs (list python-poetry-core))
21373 (inputs (list pkg-config))
21374 (home-page "https://github.com/matze/pkgconfig")
21375 (synopsis "Python interface for pkg-config")
21376 (description "This module provides a Python interface to pkg-config. It
21377can be used to find all pkg-config packages, check if a package exists,
21378check if a package meets certain version requirements, query CFLAGS and
21379LDFLAGS and parse the output to build extensions with setup.py.")
21380 (license license:expat)))
21381
21382;; This package is unmaintained since 2014, but still used in `khmer'.
21383(define-public python-bz2file
21384 (package
21385 (name "python-bz2file")
21386 (version "0.98")
21387 (source
21388 (origin
21389 (method url-fetch)
21390 (uri (pypi-uri "bz2file" version))
21391 (sha256
21392 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
21393 (build-system pyproject-build-system)
21394 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
21395 (native-inputs (list python-setuptools))
21396 (home-page "https://github.com/nvawda/bz2file")
21397 (synopsis "Read and write bzip2-compressed files")
21398 (description
21399 "Bz2file is a Python library for reading and writing bzip2-compressed
21400files. It contains a drop-in replacement for the I/O interface in the
21401standard library's @code{bz2} module, including features from the latest
21402development version of CPython that are not available in older releases.")
21403 (license license:asl2.0)))
21404
21405(define-public python-future
21406 (package
21407 (name "python-future")
21408 (version "1.0.0")
21409 (source
21410 (origin
21411 (method url-fetch)
21412 (uri (pypi-uri "future" version))
21413 (sha256
21414 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
21415 (build-system pyproject-build-system)
21416 (arguments
21417 (list
21418 #:test-flags
21419 ;; Self tests failed.
21420 #~(list "--ignore=tests/test_future/test_futurize.py"
21421 "-k" (string-join
21422 ;; Self tests failed.
21423 (list "not test_division"
21424 "test_functions_unchanged"
21425 "test_mixed_annotations"
21426 "test_multiple_param_annotations"
21427 "test_print"
21428 "test_range_slice"
21429 ;; Network access is required.
21430 "test_ftp"
21431 "test_main"
21432 "test_moves_urllib_request_http"
21433 "test_urllib_request_http")
21434 " and not "))))
21435 (native-inputs
21436 (list python-pytest
21437 python-setuptools))
21438 (home-page "https://python-future.org")
21439 (synopsis "Single-source support for Python 3 and 2")
21440 (description
21441 "@code{python-future} is the missing compatibility layer between Python 2
21442and Python 3. It allows you to use a single, clean Python 3.x-compatible
21443codebase to support both Python 2 and Python 3 with minimal overhead.")
21444 (license license:expat)))
21445
21446(define-public python-cysignals
21447 (package
21448 (name "python-cysignals")
21449 (version "1.12.3")
21450 (source
21451 (origin
21452 (method url-fetch)
21453 (uri (pypi-uri "cysignals" version))
21454 (sha256
21455 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
21456 (build-system pyproject-build-system)
21457 (native-inputs (list meson-python
21458 pkg-config
21459 python-cython
21460 python-pytest
21461 python-sphinx))
21462 (home-page "https://github.com/sagemath/cysignals")
21463 (synopsis "Handling of interrupts and signals for Cython")
21464 (description
21465 "The cysignals package provides mechanisms to handle interrupts (and
21466other signals and errors) in Cython code, using two related approaches,
21467for mixed Cython/Python code or external C libraries and pure Cython code,
21468respectively.")
21469 (license license:lgpl3+)))
21470
21471(define-public python-rope
21472 (package
21473 (name "python-rope")
21474 (version "1.13.0")
21475 (source
21476 (origin
21477 (method url-fetch)
21478 (uri (pypi-uri "rope" version))
21479 (sha256
21480 (base32
21481 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
21482 (build-system pyproject-build-system)
21483 (arguments
21484 (list
21485 #:test-flags
21486 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
21487 (propagated-inputs (list python-pytoolconfig))
21488 (native-inputs
21489 (list python-pytest python-pytest-timeout python-setuptools))
21490 (home-page "https://github.com/python-rope/rope")
21491 (synopsis "Refactoring library for Python")
21492 (description
21493 "Rope is a refactoring library for Python. It facilitates the renaming,
21494moving and extracting of attributes, functions, modules, fields and parameters
21495in Python source code. These refactorings can also be applied to occurrences
21496in strings and comments.")
21497 (license license:lgpl3+)))
21498
21499(define-public python-py3status
21500 (package
21501 (name "python-py3status")
21502 (version "3.62")
21503 (source
21504 (origin
21505 (method git-fetch)
21506 (uri (git-reference
21507 (url "https://github.com/ultrabug/py3status")
21508 (commit version)))
21509 (file-name (git-file-name name version))
21510 (sha256
21511 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
21512 (build-system pyproject-build-system)
21513 (arguments
21514 (list
21515 #:phases
21516 #~(modify-phases %standard-phases
21517 (add-before 'build 'hardcode-file-path
21518 (lambda* (#:key inputs #:allow-other-keys)
21519 (substitute* "py3status/parse_config.py"
21520 (("\\[\"file\", \"-b\"")
21521 (format #f "[~s, \"-b\""
21522 (search-input-file inputs "bin/file")))))))))
21523 (native-inputs (list python-hatchling python-pytest))
21524 (inputs (list file))
21525 (home-page "https://github.com/ultrabug/py3status")
21526 (synopsis "Extensible i3status wrapper written in Python")
21527 (description
21528 "py3status is an i3status wrapper which extends i3status functionality in
21529a modular way, allowing you to extend your panel with your own code,
21530responding to click events and updating clock every second.")
21531 (license license:bsd-3)))
21532
21533(define-public python-greenlet
21534 (package
21535 (name "python-greenlet")
21536 (version "3.1.1")
21537 (source
21538 (origin
21539 (method url-fetch)
21540 (uri (pypi-uri "greenlet" version))
21541 (sha256
21542 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
21543 (build-system pyproject-build-system)
21544 (arguments
21545 (list
21546 ;; AssertionError: 'Exception' not found in ''
21547 #:test-flags
21548 #~(list (string-join
21549 (list "--deselect=src/greenlet/tests/test_greenlet.py"
21550 "TestGreenlet"
21551 "test_dealloc_catches_GreenletExit_throws_other")
21552 "::"))
21553 #:phases
21554 #~(modify-phases %standard-phases
21555 (add-before 'check 'build-extensions
21556 (lambda _
21557 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
21558 (native-inputs
21559 (list python-objgraph
21560 python-pytest
21561 python-psutil
21562 python-setuptools
21563 python-wheel))
21564 (home-page "https://greenlet.readthedocs.io/")
21565 (synopsis "Lightweight in-process concurrent programming")
21566 (description
21567 "Greenlet package is a spin-off of Stackless, a version of CPython
21568that supports micro-threads called \"tasklets\". Tasklets run
21569pseudo-concurrently (typically in a single or a few OS-level threads) and
21570are synchronized with data exchanges on \"channels\".")
21571 (license (list license:psfl license:expat))))
21572
21573(define-public python-greenlet-2
21574 (hidden-package
21575 (package
21576 (inherit python-greenlet)
21577 (version "2.0.2")
21578 (source
21579 (origin
21580 (method url-fetch)
21581 (uri (pypi-uri "greenlet" version))
21582 (sha256
21583 (base32 "1h1l1mll5s4y1b09asf2jps0m7wyshnis1aassz9gc3xmw9xrj77")))))))
21584
21585(define-public python-objgraph
21586 (package
21587 (name "python-objgraph")
21588 (version "3.6.2")
21589 (source
21590 (origin
21591 (method url-fetch)
21592 (uri (pypi-uri "objgraph" version))
21593 (sha256
21594 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
21595 (build-system pyproject-build-system)
21596 (arguments
21597 (list
21598 #:test-flags
21599 #~(list "tests.py"
21600 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
21601 ;; [], [], [], [], [], [], [], ...
21602 "-k" "not test_at_addrs")))
21603 (native-inputs
21604 (list graphviz
21605 python-pytest
21606 python-setuptools
21607 python-wheel))
21608 (propagated-inputs
21609 (list python-graphviz))
21610 (home-page "https://mg.pov.lt/objgraph/")
21611 (synopsis "Draw Python object reference graphs with graphviz")
21612 (description
21613 "This package provides tools to draw Python object reference graphs with
21614graphviz.")
21615 (license license:expat)))
21616
21617(define-public python-gevent
21618 (package
21619 (name "python-gevent")
21620 (version "24.11.1")
21621 (source (origin
21622 (method url-fetch)
21623 (uri (pypi-uri "gevent" version))
21624 (sha256
21625 (base32
21626 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
21627 (modules '((guix build utils)))
21628 (snippet
21629 '(begin
21630 ;; unbunding libev and c-ares
21631 (delete-file-recursively "deps")
21632 ;; Remove cythonized files.
21633 (with-directory-excursion "src/gevent"
21634 (for-each delete-file
21635 (append (list "resolver/cares.c"
21636 "queue.c"
21637 "local.c"
21638 "libev/corecext.h"
21639 "libev/corecext.c"
21640 "greenlet.c"
21641 "event.c"
21642 "_waiter.c"
21643 "_tracer.c"
21644 "_semaphore.c"
21645 "_imap.c"
21646 "_ident.c"
21647 "_hub_primitives.c"
21648 "_hub_local.c"
21649 "_greenlet_primitives.c"
21650 "_abstract_linkable.c")
21651 (find-files "." "\\.html$"))))))))
21652 (build-system pyproject-build-system)
21653 (arguments
21654 (list
21655 #:test-flags
21656 '(list
21657 ;; These tests relies on networking which is
21658 ;; not available in the build container.
21659 "test__getaddrinfo_import.py"
21660 ;; These tests rely on KeyboardInterrupts which do not
21661 ;; work inside the build container for some reason
21662 ;; (lack of controlling terminal?).
21663 "test__issues461_471.py"
21664 ;; TODO: Patch out the tests that use getprotobyname, etc
21665 ;; instead of disabling all the tests from these files.
21666 "test__resolver_dnspython.py"
21667 ;; This test contains 'test_unlink', which
21668 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
21669 "test__core_stat.py")
21670 #:phases
21671 #~(modify-phases %standard-phases
21672 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
21673 (lambda _
21674 (substitute* "src/gevent/subprocess.py"
21675 (("/bin/sh") (which "sh")))
21676 (for-each (lambda (file)
21677 (substitute* file
21678 (("/bin/sh") (which "sh"))
21679 (("/bin/true") (which "true"))))
21680 (find-files "src/greentest" "\\.py$"))))
21681 (add-before 'build 'do-not-use-bundled-sources
21682 (lambda _
21683 (setenv "GEVENTSETUP_EMBED" "0")
21684
21685 ;; Prevent building bundled libev.
21686 (substitute* "setup.py"
21687 (("run_make=_BUILDING")
21688 "run_make=False"))))
21689 (add-before 'build 'augment-C_INCLUDE_PATH
21690 (lambda* (#:key inputs #:allow-other-keys)
21691 (let* ((python (dirname (dirname
21692 (search-input-file
21693 inputs "bin/python"))))
21694 (version (python-version python))
21695 (greenlet (string-append
21696 #$(this-package-input "python-greenlet")
21697 "/include/python" version)))
21698 (setenv "C_INCLUDE_PATH"
21699 (string-append greenlet "/:"
21700 (or (getenv "C_INCLUDE_PATH")
21701 ""))))))
21702 (add-before 'check 'pretend-to-be-CI
21703 (lambda _
21704 ;; A few tests are skipped due to network constraints or
21705 ;; get longer timeouts when running in a CI environment.
21706 ;; Piggy-back on that, as we need the same adjustments.
21707 (setenv "TRAVIS" "1")
21708 (setenv "APPVEYOR" "1")))
21709 (add-before 'check 'adjust-tests
21710 (lambda* (#:key test-flags #:allow-other-keys)
21711 (call-with-output-file "skipped_tests.txt"
21712 (lambda (port)
21713 (format port "~a~%" (string-join test-flags "\n"))))))
21714 (replace 'check
21715 (lambda* (#:key tests? #:allow-other-keys)
21716 (when tests?
21717 ;; Use the build daemons configured number of workers.
21718 (setenv "NWORKERS" (number->string (parallel-job-count)))
21719 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
21720 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
21721 (propagated-inputs
21722 (list python-greenlet python-zope-event python-zope-interface))
21723 (native-inputs
21724 (list python-cffi
21725 python-cython
21726 python-dnspython
21727 python-idna
21728 python-objgraph
21729 python-psutil
21730 python-requests
21731 python-setuptools))
21732 (inputs
21733 (list c-ares libev libuv))
21734 (home-page "https://www.gevent.org/")
21735 (synopsis "Coroutine-based network library")
21736 (description
21737 "@code{gevent} is a coroutine-based Python networking library that uses
21738@code{greenlet} to provide a high-level synchronous API on top of the
21739@code{libev} event loop.")
21740 (license license:expat)))
21741
21742(define-public python-fastimport
21743 (package
21744 (name "python-fastimport")
21745 (version "0.9.16")
21746 (source
21747 (origin
21748 (method git-fetch)
21749 (uri (git-reference
21750 (url "https://github.com/jelmer/python-fastimport")
21751 (commit (string-append "v" version))))
21752 (file-name (git-file-name name version))
21753 (sha256
21754 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
21755 (build-system pyproject-build-system)
21756 (arguments (list #:test-backend #~'unittest))
21757 (native-inputs (list python-setuptools))
21758 (home-page "https://github.com/jelmer/python-fastimport")
21759 (synopsis "VCS fastimport parser and generator in Python")
21760 (description
21761 "This package provides a parser for and generator of the Git
21762@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
21763format.")
21764 (license license:gpl2+)))
21765
21766(define-public python-pika
21767 (package
21768 (name "python-pika")
21769 (version "1.3.2")
21770 (source
21771 (origin
21772 (method git-fetch)
21773 (uri (git-reference
21774 (url "https://github.com/pika/pika")
21775 (commit version)))
21776 (file-name (git-file-name name version))
21777 (sha256
21778 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
21779 (build-system pyproject-build-system)
21780 (arguments
21781 (list
21782 #:test-flags
21783 ;; XXX: These test most likely require a running RabbitMQ server.
21784 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
21785 #:phases
21786 #~(modify-phases %standard-phases
21787 (add-before 'check 'configure-tests
21788 (lambda* (#:key tests? #:allow-other-keys)
21789 (when tests?
21790 (setenv "PYTHONPATH" (getcwd))))))))
21791 (native-inputs (list python-pytest
21792 python-gevent
21793 python-tornado
21794 python-twisted
21795 python-setuptools))
21796 (home-page "https://pika.readthedocs.org")
21797 (synopsis "Pure Python AMQP Client Library")
21798 (description
21799 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
21800Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
21801network support library.")
21802 (license license:bsd-3)))
21803
21804;; WARNING: This package is a dependency of mesa.
21805(define-public python-ply
21806 (package
21807 (name "python-ply")
21808 (version "3.11")
21809 (source
21810 (origin
21811 (method url-fetch)
21812 (uri (pypi-uri "ply" version))
21813 (sha256
21814 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
21815 (build-system pyproject-build-system)
21816 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archvie, there are in Git
21817 (native-inputs
21818 (list python-setuptools
21819 python-wheel))
21820 (home-page "http://www.dabeaz.com/ply/")
21821 (synopsis "Python Lex & Yacc")
21822 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
21823It uses LR parsing and does extensive error checking.")
21824 (license license:bsd-3)))
21825
21826(define-public python-kazoo
21827 (package
21828 (name "python-kazoo")
21829 (version "2.10.0")
21830 (source
21831 (origin
21832 (method git-fetch)
21833 (uri (git-reference
21834 (url "https://github.com/python-zk/kazoo")
21835 (commit version)))
21836 (file-name (git-file-name name version))
21837 (sha256
21838 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
21839 (build-system pyproject-build-system)
21840 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
21841 (native-inputs (list python-setuptools))
21842 (home-page "https://kazoo.readthedocs.org")
21843 (synopsis "High-level Zookeeper client library")
21844 (description
21845 "Kazoo is a Python client library for the Apache Zookeeper distributed
21846application service. It is designed to be easy to use and to avoid common
21847programming errors.")
21848 (license license:asl2.0)))
21849
21850(define-public python-columnize
21851 (package
21852 (name "python-columnize")
21853 (version "0.3.11")
21854 (source
21855 (origin
21856 (method url-fetch)
21857 (uri (pypi-uri "columnize" version))
21858 (sha256
21859 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
21860 (build-system pyproject-build-system)
21861 (native-inputs (list python-pytest python-setuptools))
21862 (home-page "https://github.com/rocky/pycolumnize")
21863 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
21864 (description
21865 "This package provides a way to format a simple (i.e. not nested) list
21866into aligned columns.")
21867 (license license:expat)))
21868
21869(define-public python-chai
21870 (package
21871 (name "python-chai")
21872 (version "1.1.2")
21873 (source
21874 (origin
21875 (method url-fetch)
21876 (uri (pypi-uri "chai" version))
21877 (sha256
21878 (base32 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
21879 (patches (search-patches "python-chai-drop-python2.patch"))))
21880 (build-system pyproject-build-system)
21881 (native-inputs (list python-pytest python-setuptools))
21882 (home-page "https://github.com/agoragames/chai")
21883 (synopsis "Mocking framework for Python")
21884 (description
21885 "Chai provides an api for mocking, stubbing and spying your python
21886objects, patterned after the Mocha library for Ruby.")
21887 (license license:bsd-3)))
21888
21889(define-public python-pysol-cards
21890 (package
21891 (name "python-pysol-cards")
21892 (version "0.24.0")
21893 (source
21894 (origin
21895 (method url-fetch)
21896 (uri (pypi-uri "pysol_cards" version))
21897 (sha256
21898 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
21899 (build-system pyproject-build-system)
21900 (arguments
21901 (list
21902 #:phases
21903 #~(modify-phases %standard-phases
21904 (replace 'check
21905 (lambda* (#:key test-flags tests? #:allow-other-keys)
21906 (when tests?
21907 (apply invoke
21908 "python"
21909 "-m"
21910 "unittest"
21911 "discover"
21912 "tests"
21913 test-flags)))))))
21914 (native-inputs (list python-setuptools python-wheel))
21915 (home-page "https://github.com/shlomif/pysol_cards")
21916 (synopsis "Deal PySol FC Cards")
21917 (description
21918 "The pysol-cards python modules provide code to generate the initial deals of
21919some PySol games.")
21920 (license license:expat)))
21921
21922(define-public python-freecell-solver
21923 (package
21924 (name "python-freecell-solver")
21925 (version "0.6.0")
21926 (source
21927 (origin
21928 (method url-fetch)
21929 (uri (pypi-uri "freecell_solver" version))
21930 (sha256
21931 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
21932 (build-system pyproject-build-system)
21933 (arguments
21934 (list
21935 #:phases
21936 #~(modify-phases %standard-phases
21937 (replace 'check
21938 (lambda* (#:key test-flags tests? #:allow-other-keys)
21939 (when tests?
21940 (apply invoke
21941 "python"
21942 "-m"
21943 "unittest"
21944 "discover"
21945 "tests"
21946 test-flags)))))))
21947 (propagated-inputs (list python-cffi))
21948 (native-inputs (list python-setuptools python-wheel))
21949 (home-page "https://pypi.org/project/freecell-solver/")
21950 (synopsis "Freecell Solver bindings")
21951 (description
21952 "This package provides Python bindings for the freecell-solver
21953package. Freecell Solver is a program that automatically solves layouts of
21954Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
21955and Seahaven Towers, as well as Simple Simon boards.")
21956 (license license:expat)))
21957
21958(define-public python-inflect
21959 (package
21960 (name "python-inflect")
21961 (version "7.5.0")
21962 (source (origin
21963 (method url-fetch)
21964 (uri (pypi-uri "inflect" version))
21965 (sha256
21966 (base32
21967 "07spmlkmskwhxc0j5j4ms3w0f6pyv3h8iqwcbahdabklqc0riwgs"))))
21968 (build-system pyproject-build-system)
21969 (propagated-inputs (list python-more-itertools python-typeguard
21970 python-typing-extensions))
21971 (native-inputs (list python-pygments python-pytest python-setuptools
21972 python-setuptools-scm python-wheel))
21973 (home-page "https://github.com/jaraco/inflect")
21974 (synopsis "Correctly generate plurals, singular nouns, ordinals, indefinite articles")
21975 (description
21976 "This Python module lets you correctly generate plurals, singular nouns,
21977ordinals, indefinite articles; it also can convert numbers to words.")
21978 (license license:expat)))
21979
21980(define-public python-inflection
21981 (package
21982 (name "python-inflection")
21983 (version "0.5.1")
21984 (source
21985 (origin
21986 (method git-fetch)
21987 (uri (git-reference
21988 (url "https://github.com/jpvanhal/inflection")
21989 (commit version)))
21990 (file-name (git-file-name name version))
21991 (sha256
21992 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
21993 (build-system pyproject-build-system)
21994 (native-inputs (list python-pytest python-setuptools))
21995 (home-page "https://github.com/jpvanhal/inflection")
21996 (synopsis "Python string transformation library")
21997 (description
21998 "Inflection is a string transformation library. It singularizes
21999and pluralizes English words, and transforms strings from CamelCase to
22000underscored string.")
22001 (license license:expat)))
22002
22003(define-public python-krb5
22004 (package
22005 (name "python-krb5")
22006 (version "0.5.1")
22007 (source
22008 (origin
22009 (method url-fetch)
22010 (uri (pypi-uri "krb5" version))
22011 (sha256
22012 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
22013 (build-system pyproject-build-system)
22014 (inputs (list mit-krb5))
22015 (native-inputs (list python-cython python-k5test python-pytest
22016 python-setuptools python-wheel))
22017 (home-page "https://github.com/jborean93/pykrb5")
22018 (synopsis "Kerberos API bindings for Python")
22019 (description "This library provides Python functions that wraps the
22020Kerberos 5 C API.")
22021 (license license:expat)))
22022
22023(define-public python-pylev
22024 (package
22025 (name "python-pylev")
22026 (version "1.4.0")
22027 (source
22028 (origin
22029 (method git-fetch)
22030 (uri (git-reference
22031 (url "https://github.com/toastdriven/pylev")
22032 (commit (string-append "v" version))))
22033 (file-name (git-file-name name version))
22034 (sha256
22035 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
22036 (build-system pyproject-build-system)
22037 (arguments
22038 (list
22039 #:test-backend #~'custom
22040 #:test-flags #~(list "tests.py")))
22041 (native-inputs (list python-setuptools))
22042 (home-page "https://github.com/toastdriven/pylev")
22043 (synopsis "Levenshtein distance implementation in Python")
22044 (description
22045 "Pure Python Levenshtein implementation, based off the Wikipedia code
22046samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
22047 (license license:bsd-3)))
22048
22049(define-public python-cleo
22050 (package
22051 (name "python-cleo")
22052 (version "2.1.0")
22053 (source (origin
22054 (method url-fetch)
22055 (uri (pypi-uri "cleo" version))
22056 (sha256
22057 (base32
22058 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
22059 (build-system pyproject-build-system)
22060 (native-inputs
22061 (list python-poetry-core
22062 python-mock
22063 python-pytest-mock
22064 python-pytest))
22065 (propagated-inputs
22066 (list python-crashtest python-rapidfuzz))
22067 (home-page "https://github.com/sdispater/cleo")
22068 (synopsis "Command-line arguments library for Python")
22069 (description
22070 "Cleo allows you to create command-line commands with signature in
22071docstring and colored output.")
22072 (license license:expat)))
22073
22074(define-public python-shellingham
22075 (package
22076 (name "python-shellingham")
22077 (version "1.5.4")
22078 (source
22079 (origin
22080 (method url-fetch)
22081 (uri (pypi-uri "shellingham" version))
22082 (sha256
22083 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
22084 (build-system pyproject-build-system)
22085 (native-inputs
22086 (list python-pytest python-pytest-mock python-setuptools python-wheel))
22087 (home-page "https://github.com/sarugaku/shellingham")
22088 (synopsis "Tool to detect surrounding shell")
22089 (description
22090 "Shellingham detects what shell the current Python executable is
22091running in.")
22092 (license license:isc)))
22093
22094(define-public python-shshsh
22095 (package
22096 (name "python-shshsh")
22097 (version "1.0.5")
22098 (source
22099 (origin
22100 (method git-fetch)
22101 (uri
22102 (git-reference
22103 (url "https://github.com/zqqqqz2000/shshsh")
22104 (commit
22105 "fd21c8696aebaae04507760c16cb45979291fef5")))
22106 (file-name (git-file-name name version))
22107 (sha256
22108 (base32
22109 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
22110 (build-system pyproject-build-system)
22111 (native-inputs
22112 (list python-poetry-core
22113 python-pytest))
22114 (home-page "https://github.com/zqqqqz2000/shshsh")
22115 (synopsis "Write Shell commands simply and safely within Python")
22116 (description "This package provides a way to write Shell commands from
22117within Python. Python functions can be chained together to process input
22118Bash control characters are escapted so that parameters can be passed
22119without worrying about command injection.")
22120 (license license:expat)))
22121
22122(define-public python-memcached
22123 (package
22124 (name "python-memcached")
22125 (version "1.62")
22126 (source
22127 (origin
22128 (method git-fetch)
22129 (uri (git-reference
22130 (url "https://github.com/linsomniac/python-memcached")
22131 (commit version)))
22132 (file-name (git-file-name name version))
22133 (sha256
22134 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
22135 (build-system pyproject-build-system)
22136 (arguments
22137 (list
22138 #:tests? #f ;Requires a connection to a socket.
22139 #:test-backend #~'unittest))
22140 (native-inputs (list python-setuptools))
22141 (home-page "https://github.com/linsomniac/python-memcached")
22142 (synopsis "Pure python memcached client")
22143 (description
22144 "This software is a pure Python interface to the memcached memory cache
22145daemon. It is the client side software which allows storing values in one or
22146more, possibly remote, memcached servers.")
22147 (license license:psfl)))
22148
22149(define-public python-mergedeep
22150 (package
22151 (name "python-mergedeep")
22152 (version "1.3.4")
22153 (source
22154 (origin
22155 (method git-fetch)
22156 (uri (git-reference
22157 (url "https://github.com/clarketm/mergedeep")
22158 (commit (string-append "v" version))))
22159 (file-name (git-file-name name version))
22160 (sha256
22161 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
22162 (build-system pyproject-build-system)
22163 (arguments (list #:test-backend #~'unittest))
22164 (native-inputs (list python-setuptools))
22165 (home-page "https://github.com/clarketm/mergedeep")
22166 (synopsis "Deep merge function for Python")
22167 (description
22168 "This package provides a deep merge function for Python, useful to
22169combine multiple data objects as one.")
22170 (license license:expat)))
22171
22172(define-public python-clikit
22173 (package
22174 (name "python-clikit")
22175 (version "0.6.2")
22176 (source
22177 (origin
22178 (method git-fetch)
22179 (uri (git-reference
22180 (url "https://github.com/sdispater/clikit")
22181 (commit version)))
22182 (file-name (git-file-name name version))
22183 (sha256
22184 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
22185 (build-system pyproject-build-system)
22186 (arguments
22187 (list
22188 #:phases
22189 #~(modify-phases %standard-phases
22190 (add-after 'unpack 'relax-requirements
22191 (lambda _
22192 (substitute* "pyproject.toml"
22193 (("^crashtest.*")
22194 (format #f "crashtest=~s"
22195 #$(package-version
22196 (this-package-input "python-crashtest"))))))))))
22197 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
22198 (propagated-inputs (list python-crashtest python-pastel python-pylev))
22199 (home-page "https://github.com/sdispater/clikit")
22200 (synopsis "Group of utilities to build command line interfaces")
22201 (description
22202 "CliKit is a group of utilities to build testable command line
22203interfaces.")
22204 (license license:expat)))
22205
22206(define-public python-cattrs
22207 (package
22208 (name "python-cattrs")
22209 (version "24.1.2")
22210 (source (origin
22211 (method git-fetch) ;for tests
22212 (uri (git-reference
22213 (url "https://github.com/python-attrs/cattrs")
22214 (commit (string-append "v" version))))
22215 (file-name (git-file-name name version))
22216 (sha256
22217 (base32
22218 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
22219 (build-system pyproject-build-system)
22220 (arguments
22221 (list
22222 #:test-flags
22223 '(list "--numprocesses" (number->string (parallel-job-count))
22224 ;; Skip all benchmark tests.
22225 "--ignore=bench/test_attrs_collections.py"
22226 "--ignore=bench/test_attrs_nested.py"
22227 "--ignore=bench/test_attrs_primitives.py"
22228 "--ignore=bench/test_primitives.py"
22229 "-k"
22230 (string-join
22231 ;; XXX: Tests fail with error: AssertionError: assert ...,
22232 ;; check why.
22233 (list "not test_msgspec_json_converter"
22234 "test_structure_simple_from_dict_default"
22235 "test_310_optional_field_roundtrip"
22236 "test_310_union_field_roundtrip"
22237 "test_individual_overrides"
22238 "test_nested_roundtrip"
22239 "test_nested_roundtrip_tuple"
22240 "test_omit_default_roundtrip"
22241 "test_optional_field_roundtrip"
22242 "test_renaming"
22243 ;; 'utf-8' codec can't encode character '\ud800' in
22244 ;; position 0: surrogates not allowed
22245 "test_simple_classes"
22246 ;; This test fails with an assertion error on the build
22247 ;; farm, but not on my laptop.
22248 "test_nodefs_generated_unstructuring_cl"
22249 ;; See https://github.com/python-attrs/cattrs/issues/575
22250 "test_simple_roundtrip"
22251 "test_simple_roundtrip_defaults"
22252 "test_simple_roundtrip_defaults_tuple"
22253 "test_simple_roundtrip_tuple"
22254 "test_simple_roundtrip_with_extra_keys_forbidden"
22255 "test_structure_simple_from_dict_default"
22256 "test_union_field_roundtrip"
22257 "test_unmodified_generated_structuring")
22258 " and not "))
22259 #:phases
22260 #~(modify-phases %standard-phases
22261 (add-after 'unpack 'patch-pyproject
22262 (lambda _
22263 (substitute* "pyproject.toml"
22264 ;; Fix version string
22265 (("dynamic = \\[\"version\"\\]")
22266 (string-append "version = \"" #$version "\""))
22267 ;; Just run pytest with no frills
22268 (("addopts = \"-l.*") ""))))
22269 ;; XXX Our python-hypothesis package is too old.
22270 (add-after 'unpack 'compatibility
22271 (lambda _
22272 (substitute* "tests/typed.py"
22273 (("characters\\(codec=codec\\)")
22274 "characters()")))))))
22275 (native-inputs
22276 (list python-hatchling
22277 python-hatch-vcs
22278 python-hypothesis
22279 python-immutables
22280 python-msgpack
22281 python-msgspec
22282 python-poetry-core
22283 python-pymongo ;for the bson module
22284 python-pytest
22285 python-pytest-benchmark
22286 python-pytest-xdist))
22287 (propagated-inputs
22288 (list python-attrs
22289 python-cbor2
22290 python-exceptiongroup
22291 python-orjson
22292 python-pyyaml
22293 python-tomlkit
22294 python-typing-extensions
22295 python-ujson))
22296 (home-page "https://github.com/python-attrs/cattrs")
22297 (synopsis "Python library for structuring and unstructuring data")
22298 (description "@code{cattrs} is an Python library for structuring and
22299unstructuring data. @code{cattrs} works best with @code{attrs} classes,
22300@code{dataclasses} and the usual Python collections, but other kinds of
22301classes can also be supported by manually registering converters.")
22302 (license license:expat)))
22303
22304(define-public python-cachy
22305 (package
22306 (name "python-cachy")
22307 (version "0.3.0")
22308 (source
22309 (origin
22310 (method url-fetch)
22311 (uri (pypi-uri "cachy" version))
22312 (sha256
22313 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
22314 (build-system pyproject-build-system)
22315 (arguments
22316 (list
22317 #:phases
22318 #~(modify-phases %standard-phases
22319 (replace 'check
22320 (lambda* (#:key tests? #:allow-other-keys)
22321 (when tests?
22322 ;; Make it compatible with python-flexmock 0.12.
22323 (substitute* (find-files "tests" "\\.py$")
22324 (("from flexmock import flexmock, flexmock_teardown")
22325 (string-append "from flexmock import flexmock\n"
22326 "from flexmock._api import flexmock_teardown")))
22327 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
22328 "pytest")))))))
22329 (native-inputs
22330 (list memcached
22331 python-fakeredis
22332 python-flexmock
22333 python-pifpaf
22334 python-pytest
22335 python-setuptools
22336 python-wheel))
22337 (propagated-inputs
22338 (list python-memcached
22339 python-msgpack
22340 python-redis))
22341 (home-page "https://github.com/sdispater/cachy")
22342 (synopsis "Simple yet effective caching library")
22343 (description
22344 "Cachy provides a simple yet effective caching library. A simple but
22345powerful API: thread-safety; decorator syntax; support for memcached, redis,
22346database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
22347 (license license:expat)))
22348
22349(define-public python-pyproject-api
22350 (package
22351 (name "python-pyproject-api")
22352 (version "1.8.0")
22353 (source
22354 (origin
22355 (method url-fetch)
22356 (uri (pypi-uri "pyproject_api" version))
22357 (sha256
22358 (base32 "15l4fx1v4dqhhysxd2mcm1vn4qvrwbqmf6y2zkp36pgb5ygh9f3p"))))
22359 (build-system pyproject-build-system)
22360 (arguments
22361 (list
22362 #:test-flags
22363 '(list "-k" (string-append
22364 ;; This fails because of extraneous parentheses
22365 "not test_setuptools_prepare_metadata_for_build_wheel"
22366 ;; This fails because wheel shows up in requirements
22367 " and not test_setuptools_get_requires_for_build_wheel"))))
22368 (native-inputs
22369 (list python-covdefaults
22370 python-hatch-vcs
22371 python-hatchling
22372 python-pytest
22373 python-pytest-cov
22374 python-pytest-mock
22375 python-setuptools
22376 python-wheel))
22377 (propagated-inputs
22378 (list python-packaging python-tomli))
22379 (home-page "https://pyproject-api.readthedocs.io/latest/")
22380 (synopsis "API to interact with the Python pyproject.toml based projects")
22381 (description
22382 "@code{pyproject-api} aims to abstract away interaction with
22383@code{pyproject.toml} style projects in a flexible way.")
22384 (license license:expat)))
22385
22386(define-public python-pyproject-hooks
22387 (package
22388 (name "python-pyproject-hooks")
22389 (version "1.2.0")
22390 (source
22391 (origin
22392 (method url-fetch)
22393 (uri (pypi-uri "pyproject_hooks" version))
22394 (sha256
22395 (base32 "1y511nblr0lslz1d5s46844f5raryjnp3n1dci499bhgqkarp18y"))))
22396 (build-system pyproject-build-system)
22397 (native-inputs
22398 (list python-flit-core
22399 python-pytest
22400 python-testpath))
22401 (home-page "https://github.com/pypa/pyproject-hooks")
22402 (synopsis "Low-level library for calling @file{pyproject.toml} backends")
22403 (description
22404 "@code{pyproject-hooks} is a low-level library for calling build backends
22405in @file{pyproject.toml}-based projects. It provides basic functionality to
22406write tooling that generates distribution files from Python projects.")
22407 (license license:expat)))
22408
22409(define-public python-lark
22410 (package
22411 (name "python-lark")
22412 (version "1.2.2")
22413 (source
22414 (origin
22415 (method url-fetch)
22416 (uri (pypi-uri "lark" version))
22417 (sha256
22418 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
22419 (build-system pyproject-build-system)
22420 (native-inputs (list python-pytest python-setuptools python-wheel))
22421 (home-page "https://github.com/lark-parser/lark")
22422 (synopsis "Multi-language parser for Python")
22423 (description
22424 "Lark is a parser built with a focus on ergonomics, performance and
22425resilience. Lark can parse all context-free languages. That means it is
22426capable of parsing almost any programming language out there, and to
22427some degree most natural languages too.")
22428 (license license:expat)))
22429
22430(define-public python-find-libpython
22431 (package
22432 (name "python-find-libpython")
22433 (version "0.4.1")
22434 (source
22435 (origin
22436 (method git-fetch)
22437 (uri (git-reference
22438 (url "https://github.com/ktbarrett/find_libpython")
22439 (commit (string-append "v" version))))
22440 (file-name (git-file-name name version))
22441 (sha256
22442 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
22443 (build-system pyproject-build-system)
22444 (native-inputs (list python-setuptools python-wheel
22445 ;; tests
22446 python-pytest))
22447 (home-page "https://github.com/ktbarrett/find_libpython")
22448 (synopsis "Find the path to the @code{libpython} dynamic library")
22449 (description
22450 "@code{find_libpython} helps find the path to the
22451@code{libpython} dynamic library for the current Python environment. It is
22452both a script and a Python package.")
22453 (license license:expat)))
22454
22455(define-public python-libcst
22456 (package
22457 (name "python-libcst")
22458 (version "1.6.0")
22459 (source (origin
22460 (method url-fetch)
22461 (uri (pypi-uri "libcst" version))
22462 (sha256
22463 (base32
22464 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
22465 (snippet
22466 #~(begin (use-modules (guix build utils))
22467 ;; This is mostly to keep the cargo-build-system happy
22468 (with-output-to-file "Cargo.toml"
22469 (lambda ()
22470 (format #t "\
22471[workspace]
22472
22473members = [
22474 \"native\",]")))))))
22475 (build-system cargo-build-system)
22476 (arguments
22477 (list
22478 #:install-source? #false
22479 #:cargo-test-flags
22480 ;; According to .github/workflows/ci.yml
22481 '(list "--manifest-path=native/Cargo.toml"
22482 "--release"
22483 "--no-default-features")
22484 #:imported-modules `(,@%pyproject-build-system-modules
22485 ,@%cargo-build-system-modules)
22486 #:modules `((guix build cargo-build-system)
22487 ((guix build pyproject-build-system) #:prefix py:)
22488 (guix build utils))
22489 #:phases
22490 (with-extensions (list (pyproject-guile-json))
22491 #~(modify-phases %standard-phases
22492 (add-after 'unpack 'prepare-source
22493 (lambda _
22494 (delete-file "native/Cargo.lock")))
22495 (replace 'build
22496 (assoc-ref py:%standard-phases 'build))
22497 (add-after 'install 'wrap
22498 (lambda _
22499 ;; Collection of python- and pyproject-build-system phases
22500 ;; between 'install and 'check.
22501 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
22502 (assoc-ref py:%standard-phases 'add-install-to-path)
22503 (assoc-ref py:%standard-phases 'wrap)
22504 (assoc-ref py:%standard-phases 'create-entrypoints)
22505 (assoc-ref py:%standard-phases 'compile-bytecode)))
22506 ;; We are not the only ones who cannot load libcst.native
22507 ;; during the 'check phase
22508 ;; https://github.com/Instagram/LibCST/issues/1176
22509 ;; (add-after 'wrap 'python-check
22510 ;; (lambda args
22511 ;; (apply (assoc-ref py:%standard-phases 'check)
22512 ;; #:test-flags '()
22513 ;; args)))
22514 (replace 'install
22515 (assoc-ref py:%standard-phases 'install))))))
22516 (native-inputs
22517 (list python-minimal-wrapper
22518 python-hypothesmith
22519 python-pytest
22520 python-setuptools
22521 python-setuptools-rust
22522 python-setuptools-scm
22523 python-wheel))
22524 (inputs (cons maturin (cargo-inputs 'python-libcst)))
22525 (propagated-inputs
22526 (list python-pyyaml))
22527 (home-page "https://github.com/Instagram/LibCST")
22528 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
22529 (description
22530 "LibCST parses Python source code as a CST tree that keeps all
22531formatting details (comments, whitespaces, parentheses, etc). It's useful
22532for building automated refactoring (codemod) applications and linters.
22533LibCST creates a compromise between an Abstract Syntax Tree (AST) and
22534a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
22535naming node types and fields, LibCST creates a lossless CST that looks and
22536feels like an AST.")
22537 (license (list license:expat
22538 ;; Some files unde libcst/_parser/ are under Python Software
22539 ;; Foundation license (see LICENSE file for details)
22540 license:psfl
22541 ;; libcst/_add_slots.py
22542 license:asl2.0))))
22543
22544(define-public python-libcst-minimal
22545 (hidden-package
22546 (package
22547 (inherit python-libcst)
22548 (name "python-libcst-minimal")
22549 (arguments
22550 (substitute-keyword-arguments (package-arguments python-libcst)
22551 ((#:tests? _ #t) #f)))
22552 (native-inputs
22553 (list python-minimal-wrapper
22554 python-setuptools
22555 python-setuptools-rust
22556 python-setuptools-scm
22557 python-wheel)))))
22558
22559(define-public python-lazy-loader
22560 (package
22561 (name "python-lazy-loader")
22562 (version "0.4")
22563 (source (origin
22564 (method url-fetch)
22565 (uri (pypi-uri "lazy_loader" version))
22566 (sha256
22567 (base32
22568 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
22569 (build-system pyproject-build-system)
22570 (native-inputs
22571 (list python-numpy python-pytest python-setuptools))
22572 (propagated-inputs
22573 (list python-flit-core
22574 python-setuptools
22575 python-wheel))
22576 (home-page "https://scientific-python.org/specs/spec-0001/")
22577 (synopsis "Load subpackages and functions on demand")
22578 (description "@code{python-lazy-loader} makes it easy to load subpackages
22579and functions on demand. Its main features are:
22580
22581@itemize
22582@item Allow subpackages to be made visible to users without incurring import
22583costs.
22584@item Allow external libraries to be imported only when used, improving import
22585times.
22586@end itemize")
22587 (license license:bsd-3)))
22588
22589(define-public python-lazy-object-proxy
22590 (package
22591 (name "python-lazy-object-proxy")
22592 (version "1.11.0")
22593 (source
22594 (origin
22595 (method url-fetch)
22596 (uri (pypi-uri "lazy_object_proxy" version))
22597 (sha256
22598 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
22599 (build-system pyproject-build-system)
22600 (native-inputs
22601 (list python-pytest
22602 python-pytest-benchmark
22603 python-setuptools
22604 python-setuptools-scm
22605 python-wheel))
22606 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
22607 (synopsis "Lazy object proxy for Python")
22608 (description
22609 "Lazy object proxy is an object that wraps a callable but defers the call
22610until the object is actually required, and caches the result of said call.")
22611 (license license:bsd-2)))
22612
22613(define-public python-dnspython
22614 (package
22615 (name "python-dnspython")
22616 (version "2.7.0")
22617 (source
22618 (origin
22619 (method url-fetch)
22620 (uri (pypi-uri "dnspython" version))
22621 (sha256
22622 (base32 "1wgsbiz90npdi47cilmwdccm29hl9qddzkm533v1rj8dv8p4776f"))))
22623 (build-system pyproject-build-system)
22624 (arguments
22625 (list
22626 #:test-flags
22627 #~(list
22628 ;; AssertionError: assert False
22629 "--deselect=tests/test_features.py::test_have"
22630 ;; dns.exception.SyntaxError: protocol not found
22631 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text"
22632 ;; ECDSA with deterministic signature (RFC 6979) is not supported by
22633 ;; this version of OpenSSL.
22634 "-k" (string-append "not testDeterministicSignatureECDSAP256SHA256"
22635 " and not testSignatureECDSAP256SHA256"
22636 " and not testSignatureECDSAP384SHA384"
22637 " and not test_ecdsa"))
22638 #:phases
22639 #~(modify-phases %standard-phases
22640 (add-after 'unpack 'patch-getprotobyname-calls
22641 ;; These calls are problematic in the build environment as there is
22642 ;; no /etc/protocols. This breaks the sanity-check phase of any
22643 ;; package depending on this one.
22644 (lambda _
22645 (substitute* "dns/rdtypes/IN/WKS.py"
22646 (("socket.getprotobyname\\('tcp'\\)")
22647 "6")
22648 (("socket.getprotobyname\\('udp'\\)")
22649 "17")))))))
22650 (native-inputs
22651 (list python-hatchling
22652 python-pytest))
22653 (propagated-inputs
22654 (append
22655 (if (supported-package? python-cryptography)
22656 (list ;; DNSSEC
22657 python-cryptography
22658 ;; DNS over Quic
22659 python-aioquic
22660 ;; DNS over HTTPS
22661 python-h2
22662 python-httpcore
22663 python-httpx)
22664 '())
22665 (list python-idna
22666 python-trio)))
22667 (home-page "https://www.dnspython.org")
22668 (synopsis "DNS toolkit for Python")
22669 (description
22670 "dnspython is a DNS toolkit for Python. It supports almost all record
22671types. It can be used for queries, zone transfers, and dynamic updates.
22672It supports TSIG authenticated messages and EDNS0.")
22673 (license license:expat)))
22674
22675(define-public python-dnspython-1.16
22676 (package
22677 (inherit python-dnspython)
22678 (version "1.16.0")
22679 (source (origin
22680 (method url-fetch)
22681 (uri (string-append "http://www.dnspython.org/kits/"
22682 version "/dnspython-" version ".tar.gz"))
22683 (sha256
22684 (base32
22685 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
22686 (arguments
22687 (list
22688 #:phases
22689 #~(modify-phases %standard-phases
22690 (add-after 'unpack 'compatibility
22691 (lambda _
22692 (substitute* "dns/namedict.py"
22693 (("collections.MutableMapping")
22694 "collections.abc.MutableMapping"))))
22695 (add-after 'unpack 'patch-getprotobyname-calls
22696 ;; These calls are problematic in the build environment as there is
22697 ;; no /etc/protocols. This breaks the sanity-check phase of any
22698 ;; package depending on this one.
22699 (lambda _
22700 (substitute* "dns/rdtypes/IN/WKS.py"
22701 (("socket.getprotobyname\\('tcp'\\)")
22702 "6")
22703 (("socket.getprotobyname\\('udp'\\)")
22704 "17")))))))
22705 (native-inputs (list python-pytest python-setuptools python-wheel))))
22706
22707(define-public python-py3dns
22708 (package
22709 (name "python-py3dns")
22710 (version "4.0.2")
22711 (source
22712 (origin
22713 (method url-fetch)
22714 (uri (pypi-uri "py3dns" version))
22715 (sha256
22716 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
22717 (build-system pyproject-build-system)
22718 (arguments
22719 ;; This package wants to read /etc/resolv.conf. We can't patch it without
22720 ;; removing functionality so we don't run tests.
22721 (list #:tests? #f))
22722 (native-inputs (list python-flit-core))
22723 (home-page "https://launchpad.net/py3dns")
22724 (synopsis "Python 3 DNS library")
22725 (description
22726 "This Python 3 module provides a DNS API for looking up DNS entries from
22727within Python 3 modules and applications. This module is a simple,
22728lightweight implementation.")
22729 (license license:psfl)))
22730
22731(define-public python-email-validator
22732 (package
22733 (name "python-email-validator")
22734 (version "2.2.0")
22735 (source
22736 (origin
22737 (method url-fetch)
22738 (uri (pypi-uri "email_validator" version))
22739 (sha256
22740 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
22741 (build-system pyproject-build-system)
22742 (arguments
22743 (list
22744 #:test-flags
22745 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
22746 #~(list "-k" "not test_caching_dns_resolver")))
22747 (native-inputs
22748 (list python-pytest
22749 python-setuptools
22750 python-wheel))
22751 (propagated-inputs
22752 (list python-dnspython
22753 python-idna))
22754 (home-page "https://github.com/JoshData/python-email-validator")
22755 (synopsis "Email address validation library for Python")
22756 (description
22757 "This library validates email address syntax and deliverability.")
22758 (license license:cc0)))
22759
22760(define-public python-faker
22761 (package
22762 (name "python-faker")
22763 (version "37.4.2")
22764 (source
22765 (origin
22766 (method url-fetch)
22767 (uri (pypi-uri "faker" version))
22768 (sha256
22769 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
22770 (build-system pyproject-build-system)
22771 ;; tests: 2104 passed, 12 skipped, 2 warnings
22772 (native-inputs
22773 (list python-freezegun
22774 python-pytest
22775 python-setuptools
22776 python-ukpostcodeparser
22777 python-validators))
22778 (propagated-inputs
22779 (list python-tzdata))
22780 (home-page "https://github.com/joke2k/faker")
22781 (synopsis "Python package that generates fake data")
22782 (description
22783 "Faker is a Python package that generates fake data such as names,
22784addresses, and phone numbers.")
22785 (license license:expat)))
22786
22787(define-public python-pyaml
22788 (package
22789 (name "python-pyaml")
22790 (version "25.7.0")
22791 (source
22792 (origin
22793 (method url-fetch)
22794 (uri (pypi-uri "pyaml" version))
22795 (sha256
22796 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
22797 (build-system pyproject-build-system)
22798 (native-inputs
22799 (list python-pytest
22800 python-setuptools))
22801 (propagated-inputs
22802 (list python-pyyaml))
22803 (home-page "https://github.com/mk-fg/pretty-yaml")
22804 (synopsis "YAML pretty-print library for Python")
22805 (description
22806 "pyaml is a PyYAML based python module to produce pretty and readable
22807YAML-serialized data.")
22808 (license license:wtfpl2)))
22809
22810(define-public python-pyyaml-env-tag
22811 (package
22812 (name "python-pyyaml-env-tag")
22813 (version "1.1")
22814 (source
22815 (origin
22816 (method git-fetch)
22817 (uri (git-reference
22818 (url "https://github.com/waylan/pyyaml-env-tag")
22819 (commit version)))
22820 (file-name (git-file-name name version))
22821 (sha256
22822 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
22823 (build-system pyproject-build-system)
22824 (native-inputs (list python-pytest python-setuptools))
22825 (propagated-inputs (list python-pyyaml))
22826 (home-page "https://github.com/waylan/pyyaml-env-tag")
22827 (synopsis "Custom YAML tag for environment variables")
22828 (description
22829 "This package provides a custom YAML tag for referencing environment
22830variables in YAML files.")
22831 (license license:expat)))
22832
22833(define-public python-prompt-toolkit
22834 (package
22835 (name "python-prompt-toolkit")
22836 (version "3.0.51")
22837 (source
22838 (origin
22839 (method url-fetch)
22840 (uri (pypi-uri "prompt_toolkit" version))
22841 (sha256
22842 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
22843 (build-system pyproject-build-system)
22844 (arguments
22845 (list
22846 #:phases
22847 #~(modify-phases %standard-phases
22848 (add-before 'check 'pre-check
22849 (lambda _
22850 ;; HOME is needed for the test
22851 ;; "test_pathcompleter_can_expanduser".
22852 (setenv "HOME" "/tmp"))))))
22853 (native-inputs
22854 (list python-pytest
22855 python-setuptools))
22856 (propagated-inputs
22857 (list python-wcwidth))
22858 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
22859 (synopsis "Library for building command line interfaces in Python")
22860 (description
22861 "Prompt-Toolkit is a library for building interactive command line
22862interfaces in Python. It's like GNU Readline but it also features syntax
22863highlighting while typing, out-of-the-box multi-line input editing, advanced
22864code completion, incremental search, support for Chinese double-width
22865characters, mouse support, and auto suggestions.")
22866 (license license:bsd-3)))
22867
22868(define-public python-proselint
22869 (package
22870 (name "python-proselint")
22871 (version "0.14.0")
22872 (source
22873 (origin
22874 (method url-fetch)
22875 (uri (pypi-uri "proselint" version))
22876 (sha256
22877 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
22878 (build-system pyproject-build-system)
22879 (arguments
22880 (list
22881 #:phases
22882 #~(modify-phases %standard-phases
22883 (add-after 'unpack 'set-home-directory
22884 (lambda _
22885 (setenv "HOME" "/tmp"))))))
22886 (native-inputs
22887 (list python-poetry-core
22888 python-pytest))
22889 (propagated-inputs
22890 (list python-click))
22891 (home-page "http://proselint.com/")
22892 (synopsis "Linter for prose")
22893 (description "@code{python-proselint} is a linter for English prose, that
22894scans through a file and detects issues.")
22895 (license license:bsd-3)))
22896
22897(define-public python-jedi
22898 (package
22899 (name "python-jedi")
22900 (version "0.19.2")
22901 (source
22902 (origin
22903 (method git-fetch)
22904 (uri (git-reference
22905 (url "https://github.com/davidhalter/jedi")
22906 (commit (string-append "v" version))
22907 (recursive? #true)))
22908 (file-name (git-file-name name version))
22909 (sha256
22910 (base32
22911 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
22912 (build-system pyproject-build-system)
22913 (arguments
22914 (list
22915 #:phases
22916 '(modify-phases %standard-phases
22917 (add-before 'check 'set-HOME
22918 (lambda _ (setenv "HOME" "/tmp"))))))
22919 (native-inputs
22920 (list python-docopt
22921 python-pytest
22922 python-setuptools
22923 python-wheel))
22924 (propagated-inputs
22925 (list python-parso))
22926 (home-page "https://github.com/davidhalter/jedi")
22927 (synopsis "Autocompletion and static analysis library for Python")
22928 (description
22929 "Jedi is a static analysis tool for Python that can be used in Integrated
22930Development Environments (@dfn{IDE}s) and text editors. It understands Python
22931on a deeper level than many other static analysis frameworks for Python.
22932
22933Jedi understands docstrings and you can use Jedi autocompletion in your REPL
22934as well.")
22935 (license license:expat)))
22936
22937(define-public ptpython
22938 (package
22939 (name "ptpython")
22940 (version "3.0.20")
22941 (source
22942 (origin
22943 (method git-fetch)
22944 (uri (git-reference
22945 (url "https://github.com/jonathanslenders/ptpython")
22946 (commit version)))
22947 (file-name (git-file-name name version))
22948 (sha256
22949 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
22950 (build-system pyproject-build-system)
22951 (arguments
22952 (list
22953 ;; XXX: There is a tests/run_tests.py file but all it does is a
22954 ;; sanity check.
22955 #:tests? #f))
22956 (native-inputs (list python-setuptools))
22957 (propagated-inputs
22958 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
22959 (home-page "https://github.com/jonathanslenders/ptpython")
22960 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
22961 (description
22962 "ptpython is a Python read-eval-print loop with IDE-like features.
22963It supports syntax highlighting, multiline editing, autocompletion, mouse,
22964color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
22965etc.")
22966 (license license:bsd-3)))
22967
22968(define-public python-easyprocess
22969 (package
22970 (name "python-easyprocess")
22971 (version "1.1")
22972 (source
22973 (origin
22974 (method git-fetch)
22975 (uri (git-reference
22976 (url "https://github.com/ponty/easyprocess")
22977 (commit version)))
22978 (file-name (git-file-name name version))
22979 (sha256
22980 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
22981 (build-system pyproject-build-system)
22982 (arguments
22983 ;; Tests require pyvirtualdisplay, which requires this package.
22984 (list #:tests? #f))
22985 (native-inputs (list python-setuptools))
22986 (home-page "https://github.com/ponty/easyprocess")
22987 (synopsis "Python subprocess interface")
22988 (description
22989 "@code{easyprocess} is an easy to use Python subprocess interface.")
22990 (license license:bsd-3)))
22991
22992(define-public python-entrypoint2
22993 (package
22994 (name "python-entrypoint2")
22995 (version "0.2.4")
22996 (source
22997 (origin
22998 (method url-fetch)
22999 (uri (pypi-uri "entrypoint2" version))
23000 (sha256
23001 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
23002 (build-system pyproject-build-system)
23003 (native-inputs (list python-easyprocess python-pytest python-pytest-runner
23004 python-setuptools python-wheel))
23005 (home-page "https://github.com/ponty/entrypoint2")
23006 (synopsis "Command-line interface for Python modules")
23007 (description
23008 "@code{entrypoint2} is an easy to use command-line interface for Python
23009 modules based on @code{argparse}. It translates function signature and
23010 documentation to argparse configuration.")
23011 (license license:bsd-3)))
23012
23013(define-public python-pyvirtualdisplay
23014 (package
23015 (name "python-pyvirtualdisplay")
23016 (version "3.0")
23017 (source
23018 (origin
23019 (method url-fetch)
23020 (uri (pypi-uri "PyVirtualDisplay" version))
23021 (sha256
23022 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23023 (build-system pyproject-build-system)
23024 (arguments
23025 (list
23026 ;; tests: 27 passed, 8 deselected
23027 #:test-flags
23028 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23029 ;; OSError: Pillow was built without XCB support
23030 #~(list #$@(map (lambda (test) (string-append "--deselect="
23031 "tests/"
23032 test))
23033 (list "test_smart.py::test_slowshot"
23034 "test_smart.py::test_slowshot_with"
23035 "test_smart.py::test_slowshot_nocrop"
23036 "test_smart.py::test_slowshot_timeout"
23037 "test_smart.py::test_slowshot_timeout_nocrop"
23038 "test_smart2.py::test_double"
23039 "test_smart_thread.py::test_smart"
23040 "test_examples.py::test_screenshot")))))
23041 (native-inputs
23042 (list python-easyprocess
23043 python-entrypoint2
23044 python-psutil
23045 python-pytest
23046 python-setuptools
23047 python-vncdotool-bootstrap
23048 xmessage
23049 xorg-server-for-tests))
23050 (home-page "https://github.com/ponty/pyvirtualdisplay")
23051 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23052 (description
23053 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23054 (license license:bsd-3)))
23055
23056(define-public python-pyserial
23057 (package
23058 (name "python-pyserial")
23059 (version "3.5")
23060 (source
23061 (origin
23062 (method url-fetch)
23063 (uri (pypi-uri "pyserial" version))
23064 (sha256
23065 (base32
23066 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
23067 (build-system pyproject-build-system)
23068 (native-inputs
23069 (list python-pytest
23070 python-setuptools
23071 python-wheel))
23072 (home-page "https://github.com/pyserial/pyserial")
23073 (synopsis "Python Serial Port Bindings")
23074 (description
23075 "@code{pyserial} provide serial port bindings for Python. It supports
23076different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
23077Xon/Xoff. The port is accessed in RAW mode.")
23078 (license license:bsd-3)))
23079
23080(define-public python-pyserial-asyncio
23081 (package
23082 (name "python-pyserial-asyncio")
23083 (version "0.6")
23084 (source
23085 (origin
23086 (method git-fetch)
23087 (uri (git-reference
23088 (url "https://github.com/pyserial/pyserial-asyncio")
23089 (commit (string-append "v" version))))
23090 (file-name (git-file-name name version))
23091 (sha256
23092 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
23093 (build-system pyproject-build-system)
23094 (arguments (list #:test-backend #~'unittest))
23095 (native-inputs (list python-setuptools))
23096 (propagated-inputs (list python-pyserial))
23097 (home-page "https://github.com/pyserial/pyserial-asyncio")
23098 (synopsis "Pyserial asynchronous I/O extension")
23099 (description
23100 "This package extends Pyserial with asynchronous I/O support.")
23101 (license license:bsd-3)))
23102
23103(define-public python-pymemcache
23104 (package
23105 (name "python-pymemcache")
23106 (version "4.0.0")
23107 (source
23108 (origin
23109 (method url-fetch)
23110 (uri (pypi-uri "pymemcache" version))
23111 (sha256
23112 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
23113 (build-system pyproject-build-system)
23114 (arguments
23115 ;; We don't have the zstd module.
23116 (list
23117 #:test-flags
23118 '(list "--ignore=pymemcache/test/test_compression.py")))
23119 (native-inputs
23120 (list python-faker python-pytest python-pytest-cov python-setuptools
23121 python-wheel))
23122 (home-page "https://github.com/pinterest/pymemcache")
23123 (synopsis "Comprehensive, fast, pure Python memcached client")
23124 (description
23125 "This package provides a comprehensive, fast, pure Python memcached
23126client.")
23127 (license license:asl2.0)))
23128
23129(define-public python-pymodbus
23130 (package
23131 (name "python-pymodbus")
23132 (version "3.8.6")
23133 (source
23134 (origin
23135 (method git-fetch)
23136 (uri (git-reference
23137 (url "https://github.com/riptideio/pymodbus")
23138 (commit (string-append "v" version))))
23139 (file-name (git-file-name name version))
23140 (sha256
23141 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
23142 (build-system pyproject-build-system)
23143 (arguments
23144 (list
23145 #:test-flags
23146 #~(list "--ignore"
23147 "test/server/test_simulator_api.py"
23148 ;; These tests require the presence of a certificate.
23149 "--ignore-glob"
23150 "test/examples/*"
23151 "--ignore"
23152 "test/client/test_client.py")))
23153 (native-inputs (list python-mock
23154 python-pytest
23155 python-pytest-asyncio
23156 python-pytest-cov
23157 python-pytest-xdist
23158 python-redis
23159 python-setuptools
23160 python-sqlalchemy
23161 python-tornado
23162 python-twisted
23163 python-wheel))
23164 (propagated-inputs (list python-pyserial
23165 python-six
23166 ;; For the REPL.
23167 python-aiohttp
23168 python-click
23169 python-prompt-toolkit
23170 python-pygments
23171 python-pyserial-asyncio))
23172 (home-page "https://github.com/riptideio/pymodbus/")
23173 (synopsis "Modbus protocol stack in Python")
23174 (description
23175 "Pymodbus is a full Modbus protocol implementation using
23176 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
23177 communications core. It includes the following @emph{client} features:
23178 @itemize
23179 @item full read/write protocol on discrete and register
23180 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
23181 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23182 @item asynchronous and synchronous versions
23183 @item payload builder/decoder utilities
23184 @item pymodbus read eval print loop (REPL).
23185 @end itemize
23186 It also includes the following @emph{server} features:
23187 @itemize
23188 @item can function as a fully implemented Modbus server
23189 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23190 @item asynchronous and synchronous versions
23191 @item full server control context (device information, counters, etc)
23192 @item a number of backing contexts (database, redis, sqlite, a slave device).
23193 @end itemize")
23194 (license license:bsd-3)))
23195
23196(define-public python-exodriver
23197 (package
23198 (name "python-exodriver")
23199 (version "2.6.0")
23200 (source (origin
23201 (method git-fetch)
23202 (uri (git-reference
23203 (url "https://github.com/labjack/exodriver")
23204 (commit (string-append "v" version))))
23205 (file-name (git-file-name name version))
23206 (sha256
23207 (base32
23208 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
23209 (outputs (list "out"
23210 "doc")) ;544 KiB of examples
23211 (build-system gnu-build-system)
23212 (arguments
23213 (list
23214 #:tests? #f ;no test suite
23215 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
23216 (string-append "PREFIX=" #$output)
23217 "RUN_LDCONFIG=0"
23218 "LINK_SO=1")
23219 #:phases
23220 #~(modify-phases %standard-phases
23221 (delete 'configure)
23222 (replace 'build
23223 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23224 (with-directory-excursion "liblabjackusb"
23225 (apply (assoc-ref %standard-phases 'build)
23226 `(,@args #:make-flags ,make-flags)))))
23227 (replace 'install
23228 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23229 (with-directory-excursion "liblabjackusb"
23230 (apply (assoc-ref %standard-phases 'install)
23231 `(,@args #:make-flags ,make-flags)))
23232 ;; Install udev rules.
23233 (install-file "90-labjack.rules"
23234 (string-append #$output "/lib/udev/rules.d"))
23235 ;; Install examples.
23236 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
23237 (mkdir-p doc)
23238 (copy-recursively "examples"
23239 (string-append doc "/examples"))))))))
23240 (inputs (list libusb))
23241 (home-page "https://github.com/labjack/exodriver")
23242 (synopsis "USB driver for LabJack data acquisition instruments")
23243 (description "This package provides @code{liblabjackusb}, a USB library for low-level
23244communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
23245instruments. A udev rule is also included to allow unprivileged users to
23246communicate with the instruments via USB.")
23247 (license license:expat))) ;see README
23248
23249(define-public python-labjack
23250 (package
23251 (name "python-labjack")
23252 (version "2.1.0")
23253 (source (origin
23254 (method url-fetch)
23255 (uri (pypi-uri "LabJackPython" version))
23256 (sha256
23257 (base32
23258 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
23259 (build-system pyproject-build-system)
23260 (arguments
23261 (list
23262 #:tests? #f ;no test suite
23263 #:phases
23264 #~(modify-phases %standard-phases
23265 (add-after 'unpack 'patch-liblabjackusb.so
23266 (lambda* (#:key inputs #:allow-other-keys)
23267 (substitute* (find-files "." "\\.py$")
23268 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
23269 (format #f "ctypes.CDLL(~s"
23270 (search-input-file inputs
23271 "lib/liblabjackusb.so")))))))))
23272 (native-inputs (list python-setuptools))
23273 ;; exodriver is provided as a regular input, as only its shared object is
23274 ;; used, not its Python API.
23275 (inputs (list python-exodriver))
23276 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
23277 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
23278 (description
23279 "This Python library allows communicating with the U3, U6, UE9 and U12
23280LabJack data acquisition (DAQ) modules.")
23281 (license license:expat))) ;see setup.py
23282
23283(define-public python-kivy-garden
23284 (package
23285 (name "python-kivy-garden")
23286 (version "0.1.5")
23287 (source
23288 (origin
23289 (method git-fetch) ; source was removed from PyPI
23290 (uri (git-reference
23291 (url "https://github.com/kivy-garden/garden")
23292 (commit (string-append "v" version))))
23293 (file-name (git-file-name name version))
23294 (sha256
23295 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
23296 (build-system pyproject-build-system)
23297 (arguments
23298 (list
23299 #:tests? #f)) ; no tests in PyPI or Git distributions
23300 (native-inputs
23301 (list python-setuptools
23302 python-wheel))
23303 (propagated-inputs
23304 (list python-requests))
23305 (home-page "https://github.com/kivy-garden/garden")
23306 (synopsis "Garden tool for Kivy flowers")
23307 (description
23308 "This package provides the @command{garden} command to install packages
23309for Kivy, the multitouch application platform.")
23310 (license license:expat)))
23311
23312(define-public python-async-lru
23313 (package
23314 (name "python-async-lru")
23315 (version "2.0.4")
23316 (source
23317 (origin
23318 (method url-fetch)
23319 (uri (pypi-uri "async-lru" version))
23320 (sha256
23321 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
23322 (build-system pyproject-build-system)
23323 (native-inputs
23324 (list python-pytest
23325 python-pytest-asyncio
23326 python-pytest-cov
23327 python-pytest-timeout
23328 python-setuptools
23329 python-wheel))
23330 (propagated-inputs
23331 (list python-typing-extensions))
23332 (home-page "https://github.com/aio-libs/async-lru")
23333 (synopsis "Simple LRU cache for asyncio")
23334 (description
23335 "This package is a port of Python's built-in @code{functools.lru_cache}
23336function for @code{asyncio}. To better handle async behaviour, it also
23337ensures multiple concurrent calls will only result in 1 call to the wrapped
23338function, with all awaits receiving the result of that call when it
23339completes.")
23340 (license license:expat)))
23341
23342(define-public python-asyncinject
23343 (package
23344 (name "python-asyncinject")
23345 (version "0.6")
23346 (source
23347 (origin
23348 (method url-fetch)
23349 (uri (pypi-uri "asyncinject" version))
23350 (sha256
23351 (base32 "0x57idiy19lzyn32klgm06r223z8gr2aqqk91gysbshq7jg8g3pf"))))
23352 (build-system pyproject-build-system)
23353 (native-inputs (list python-pytest python-pytest-asyncio
23354 python-setuptools python-wheel))
23355 (home-page "https://github.com/simonw/asyncinject")
23356 (synopsis
23357 "Run async workflows using pytest-fixtures-style dependency injection")
23358 (description
23359 "This package lets you run asynchronous workflows using
23360pytest-fixtures-style dependency injection.")
23361 (license license:asl2.0)))
23362
23363(define-public python-binaryornot
23364 (package
23365 (name "python-binaryornot")
23366 (version "0.4.4")
23367 (source
23368 (origin
23369 (method url-fetch)
23370 (uri (pypi-uri "binaryornot" version))
23371 (sha256
23372 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
23373 (build-system pyproject-build-system)
23374 (arguments
23375 (list
23376 #:test-backend #~'unittest
23377 #:test-flags #~(list "discover" "tests")
23378 #:phases
23379 #~(modify-phases %standard-phases
23380 (add-after 'unpack 'patch-tests
23381 (lambda _
23382 ;; TypeError: binary() got an unexpected keyword argument
23383 ;; 'average_size'.
23384 (substitute* "tests/test_check.py"
23385 (("average_size=512") "")))))))
23386 (native-inputs
23387 (list python-hypothesis
23388 python-setuptools))
23389 (propagated-inputs
23390 (list python-chardet))
23391 (home-page "https://github.com/audreyr/binaryornot")
23392 (synopsis "Package to check if a file is binary or text")
23393 (description "Ultra-lightweight pure Python package to check if a file is
23394 binary or text.")
23395 (license license:bsd-3)))
23396
23397(define-public python-bson
23398 (package
23399 (name "python-bson")
23400 (version "0.5.10")
23401 (source
23402 (origin
23403 (method git-fetch) ;for tests
23404 (uri (git-reference
23405 (url "https://github.com/py-bson/bson")
23406 (commit version)))
23407 (file-name (git-file-name name version))
23408 (sha256
23409 (base32
23410 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
23411 (build-system pyproject-build-system)
23412 (native-inputs
23413 (list python-pytest
23414 python-setuptools))
23415 (propagated-inputs
23416 (list python-dateutil
23417 python-six))
23418 (home-page "https://github.com/py-bson/bson")
23419 (synopsis "BSON (Binary JSON) codec for Python")
23420 (description "@code{bson} is a Python library implementing a BSON (Binary
23421JSON) codec.")
23422 (license license:asl2.0)))
23423
23424(define-public python-nltk
23425 (package
23426 (name "python-nltk")
23427 (version "3.9.1")
23428 (source
23429 (origin
23430 (method url-fetch)
23431 (uri (pypi-uri "nltk" version))
23432 (sha256
23433 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
23434 (build-system pyproject-build-system)
23435 (arguments
23436 ;; Tests require some extra resources to be downloaded.
23437 ;; TODO Try packaging these resources.
23438 '(#:tests? #f))
23439 (propagated-inputs (list python-click python-joblib python-regex
23440 python-tqdm))
23441 (native-inputs (list python-setuptools python-wheel))
23442 (home-page "https://www.nltk.org/")
23443 (synopsis "Natural Language Toolkit")
23444 (description
23445 "NLTK provides interfaces to over 50 corpora and lexical resources such as
23446WordNet, along with a suite of text processing libraries for classification,
23447tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
23448natural language processing libraries.")
23449 (license license:asl2.0)))
23450
23451(define-public python-pymongo
23452 (package
23453 (name "python-pymongo")
23454 (version "4.16.0")
23455 (source
23456 (origin
23457 (method url-fetch)
23458 (uri (pypi-uri "pymongo" version))
23459 (sha256
23460 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
23461 (build-system pyproject-build-system)
23462 (arguments
23463 (list
23464 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
23465 #:test-flags
23466 ;; Tests need access to /etc/resolve.conf.
23467 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
23468 "--ignore=test/test_srv_polling.py"
23469 "-k" (string-join
23470 ;; Tests need access to /etc/resolve.conf
23471 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
23472 "test_detected_environment_warning"
23473 ;; XXX: Tests fail with assertion is not equal.
23474 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
23475 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
23476 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
23477 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
23478 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
23479 " and not "))))
23480 (native-inputs
23481 (list python-hatch-requirements-txt
23482 python-hatchling
23483 python-pytest
23484 python-pytest-asyncio
23485 python-setuptools))
23486 (propagated-inputs
23487 (list python-certifi
23488 python-dnspython))
23489 (home-page "https://github.com/mongodb/mongo-python-driver")
23490 (synopsis "Python driver for MongoDB")
23491 (description "Python driver for MongoDB.")
23492 (license license:asl2.0)))
23493
23494(define-public python-py-consul
23495 (package
23496 (name "python-py-consul")
23497 (version "1.6.0")
23498 (source
23499 (origin
23500 (method git-fetch)
23501 (uri (git-reference
23502 ;; Fork from https://github.com/cablehead/python-consul
23503 (url "https://github.com/criteo/py-consul")
23504 (commit (string-append "v" version))))
23505 (file-name (git-file-name name version))
23506 (sha256
23507 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
23508 (build-system pyproject-build-system)
23509 (arguments (list #:tests? #f)) ; Tests require docker.
23510 (native-inputs (list python-setuptools))
23511 (propagated-inputs (list python-requests))
23512 (home-page "https://github.com/criteo/py-consul")
23513 (synopsis "Python client for Consul")
23514 (description
23515 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
23516discovery, monitoring and configuration.")
23517 (license license:expat)))
23518
23519(define-deprecated-package python-consul python-py-consul)
23520
23521(define-public python-schematics
23522 (package
23523 (name "python-schematics")
23524 (version "2.1.1")
23525 (source
23526 (origin
23527 (method git-fetch)
23528 (uri (git-reference
23529 (url "https://github.com/schematics/schematics")
23530 (commit (string-append "v" version))))
23531 (file-name (git-file-name name version))
23532 (sha256
23533 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
23534 (build-system pyproject-build-system)
23535 (native-inputs
23536 (list python-dateutil python-mock python-pytest python-setuptools))
23537 (home-page "https://github.com/schematics/schematics")
23538 (synopsis "Python Data Structures for Humans")
23539 (description
23540 "Schematics is a Python library to combine types into structures,
23541validate them, and transform the shapes of your data based on simple
23542descriptions.
23543
23544The internals are similar to ORM type systems, but there is no database layer
23545in Schematics. Instead, building a database layer is easily made when
23546Schematics handles everything except for writing the query. Schematics can be
23547used for tasks where having a database involved is unusual.")
23548 (license license:bsd-3)))
23549
23550(define-public python-odfpy
23551 (package
23552 (name "python-odfpy")
23553 (version "1.4.2")
23554 (source
23555 (origin
23556 (method git-fetch)
23557 (uri (git-reference
23558 (url "https://github.com/eea/odfpy")
23559 (commit (string-append "release-" version))))
23560 (file-name (git-file-name name version))
23561 (sha256
23562 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
23563 (build-system pyproject-build-system)
23564 (native-inputs (list python-pytest python-setuptools))
23565 (propagated-inputs (list python-defusedxml))
23566 (home-page "https://github.com/eea/odfpy")
23567 (synopsis "Python API and tools to manipulate OpenDocument files")
23568 (description
23569 "Collection of libraries and utility programs written in Python to
23570manipulate OpenDocument 1.2 files.")
23571 (license
23572 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
23573 ;; number of files with other licenses.
23574 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
23575
23576(define-public python-namex
23577 (package
23578 (name "python-namex")
23579 (version "0.0.7")
23580 (source
23581 (origin
23582 (method url-fetch)
23583 (uri (pypi-uri "namex" version))
23584 (sha256
23585 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
23586 (build-system pyproject-build-system)
23587 (arguments (list #:tests? #false)) ;there are none
23588 (native-inputs (list python-setuptools python-wheel))
23589 (home-page "https://github.com/fchollet/namex")
23590 (synopsis
23591 "Separate implementation and public API surface of Python packages")
23592 (description
23593 "This package provides a simple utility to separate the
23594implementation of your Python package and its public API surface.")
23595 (license license:asl2.0)))
23596
23597(define-public python-natsort
23598 (package
23599 (name "python-natsort")
23600 (version "8.4.0")
23601 (source
23602 (origin
23603 (method url-fetch)
23604 (uri (pypi-uri "natsort" version))
23605 (sha256
23606 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
23607 (build-system pyproject-build-system)
23608 (native-inputs
23609 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
23610 python-pytest
23611 python-pytest-mock
23612 python-setuptools))
23613 (propagated-inputs
23614 (list python-fastnumbers
23615 python-pyicu))
23616 (home-page "https://github.com/SethMMorton/natsort")
23617 (synopsis "Natural sorting for python and shell")
23618 (description
23619 "Natsort lets you apply natural sorting on lists instead of
23620lexicographical. If you use the built-in @code{sorted} method in python on a
23621list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
23622it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
23623@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
23624numbers and sorts them separately from strings. It can also sort version
23625numbers, real numbers, mixed types and more, and comes with a shell command
23626@command{natsort} that exposes this functionality in the command line.")
23627 (license license:expat)))
23628
23629(define-public python-graphql-core
23630 (package
23631 (name "python-graphql-core")
23632 (version "3.1.2")
23633 (source
23634 (origin
23635 (method url-fetch)
23636 (uri (pypi-uri "graphql-core" version))
23637 (sha256
23638 (base32
23639 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
23640 (build-system pyproject-build-system)
23641 (arguments
23642 (list
23643 #:phases
23644 '(modify-phases %standard-phases
23645 (add-after 'unpack 'use-poetry-core
23646 (lambda _
23647 ;; Patch to use the core poetry API.
23648 (substitute* "pyproject.toml"
23649 (("poetry.masonry.api")
23650 "poetry.core.masonry.api")
23651 ;; Poetry does not like line breaks.
23652 (("description = \"\"\"")
23653 "description = \"GraphQL-core is a Python port of GraphQL.js.\"\n")
23654 (("^GraphQL-core is a Python.*") "")
23655 (("^ the JavaScript reference.*") ""))))
23656 (add-after 'unpack 'patch-setup.py
23657 (lambda _
23658 (substitute* "setup.py"
23659 ;; Relax hardcoded version
23660 (("'gevent==1.1rc1'") "'gevent'")
23661 ;; Poetry complains about this line break.
23662 (("a port of GraphQL.js,\"")
23663 (string-append "a port of GraphQL.js, "
23664 "the JavaScript reference implementation for GraphQL."))
23665 ((" \" the JavaScript reference.*") "")))))))
23666 (native-inputs
23667 (list python-gevent
23668 python-mock
23669 python-poetry-core
23670 python-pytest
23671 python-pytest-benchmark
23672 python-pytest-mock))
23673 (propagated-inputs
23674 (list python-promise python-six))
23675 (home-page "https://github.com/graphql-python/graphql-core")
23676 (synopsis "GraphQL implementation for Python")
23677 (description
23678 "GraphQL implementation for Python. GraphQL is a data query language and
23679 runtime designed and used to request and deliver data to mobile and web apps.
23680 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
23681 to Python.")
23682 (license license:expat)))
23683
23684(define-public python-graphql-relay
23685 (package
23686 (name "python-graphql-relay")
23687 (version "3.1.0")
23688 (source
23689 (origin
23690 (method git-fetch)
23691 (uri (git-reference
23692 (url "https://github.com/graphql-python/graphql-relay-py")
23693 (commit (string-append "v" version))))
23694 (file-name (git-file-name name version))
23695 (sha256
23696 (base32 "06ybi4bwqdffa5kn8xnns06wh3l0zj3qlzrxk1wpxqq320hyzx9x"))))
23697 (build-system pyproject-build-system)
23698 (arguments (list #:test-flags #~(list "tests")))
23699 (native-inputs
23700 (list python-pytest python-pytest-asyncio python-poetry-core))
23701 (propagated-inputs (list python-graphql-core))
23702 (home-page "https://github.com/graphql-python/graphql-relay-py")
23703 (synopsis "Relay implementation for Python")
23704 (description
23705 "This is a library to allow the easy creation of Relay-compliant servers
23706using the GraphQL Python reference implementation of a GraphQL server. It
23707should be noted that the code is a exact port of the original
23708@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
23709implementation} from Facebook.")
23710 (license license:expat)))
23711
23712(define-public python-graphene
23713 (package
23714 (name "python-graphene")
23715 (version "3.4.3")
23716 (source
23717 (origin
23718 (method url-fetch)
23719 (uri (pypi-uri "graphene" version))
23720 (sha256
23721 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
23722 (build-system pyproject-build-system)
23723 (arguments
23724 (list #:tests? #f)) ;XXX: tests fail to load
23725 (native-inputs
23726 (list python-setuptools))
23727 (propagated-inputs
23728 (list python-dateutil
23729 python-graphql-core
23730 python-graphql-relay
23731 python-typing-extensions))
23732 (home-page "https://graphene-python.org/")
23733 (synopsis "GraphQL Framework for Python")
23734 (description
23735 "Graphene is a Python library for building GraphQL schemas/types. A
23736GraphQL schema describes your data model, and provides a GraphQL server with
23737an associated set of resolve methods that know how to fetch data.")
23738 (license license:expat)))
23739
23740(define-public python-rodi
23741 (package
23742 (name "python-rodi")
23743 (version "2.0.8")
23744 (source
23745 (origin
23746 (method git-fetch)
23747 (uri (git-reference
23748 (url "https://github.com/Neoteroi/rodi")
23749 (commit (string-append "v" version))))
23750 (file-name (git-file-name name version))
23751 (sha256
23752 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
23753 (build-system pyproject-build-system)
23754 (native-inputs
23755 (list python-hatchling
23756 python-pytest
23757 python-pytest-asyncio))
23758 (home-page "https://github.com/Neoteroi/rodi")
23759 (synopsis "Dependency injection framework for Python")
23760 (description
23761 "Rodi is a dependency injection framework for Python applications.
23762
23763Its features include
23764
23765@itemize
23766@item Type resolution by signature types annotations.
23767@item Type resolution by class annotations.
23768@item Type resolution by names and aliases.
23769@item Build graph of objects without the need for source code changes.
23770@item Minimum overhead to obtain services, once the objects graph is built.
23771@item Support for singleton, transient, and scoped services.
23772@end itemize")
23773 (license license:expat)))
23774
23775;; XXX: The last time updated in 2015, consider to remove it when nothing is
23776;; depend on it.
23777(define-public python-snowballstemmer
23778 (package
23779 (name "python-snowballstemmer")
23780 (version "2.2.0")
23781 (source
23782 (origin
23783 (method url-fetch)
23784 (uri (pypi-uri "snowballstemmer" version))
23785 (sha256
23786 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
23787 (build-system pyproject-build-system)
23788 (arguments
23789 (list
23790 #:tests? #f)) ; no tests
23791 (native-inputs
23792 (list python-setuptools
23793 python-wheel))
23794 (home-page "https://github.com/shibukawa/snowball_py")
23795 (synopsis "Snowball stemming library collection for Python")
23796 (description
23797 "This package provides 16 word stemmer algorithms generated from Snowball
23798algorithms. It includes the 15 original ones plus the Poerter English
23799stemmer.")
23800 (license license:bsd-3)))
23801
23802(define-public python-setproctitle
23803 (package
23804 (name "python-setproctitle")
23805 (version "1.3.7")
23806 (source
23807 (origin
23808 (method git-fetch)
23809 (uri (git-reference
23810 (url "https://github.com/dvarrazzo/py-setproctitle")
23811 (commit (string-append "version-" version))))
23812 (file-name (git-file-name name version))
23813 (sha256
23814 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
23815 (build-system pyproject-build-system)
23816 (arguments
23817 (list
23818 #:phases
23819 #~(modify-phases %standard-phases
23820 (add-before 'check 'configure-tests
23821 (lambda* (#:key tests? #:allow-other-keys)
23822 (when tests?
23823 (setenv "PYTHON"
23824 (or (which "python3")
23825 (which "python")))
23826 (setenv "PYCONFIG"
23827 (if (which "python3-config")
23828 "python3-config --embed"
23829 "python-config"))
23830 (substitute* "tests/conftest.py"
23831 (("cc") "gcc"))))))))
23832 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
23833 (home-page "https://github.com/dvarrazzo/py-setproctitle")
23834 (synopsis
23835 "Setproctitle implementation for Python to customize the process title")
23836 (description
23837 "The library allows a process to change its title (as displayed by system
23838tools such as @code{ps} and @code{top}).
23839
23840Changing the title is mostly useful in multi-process systems, for example when a
23841master process is forked: changing the children's title allows identifying the
23842task each process is busy with. The technique is used by PostgreSQL and the
23843OpenSSH Server for example.")
23844 (license license:bsd-3)))
23845
23846(define-public python-pyelftools
23847 (package
23848 (name "python-pyelftools")
23849 (version "0.32")
23850 (source
23851 (origin
23852 (method git-fetch)
23853 (uri (git-reference
23854 (url "https://github.com/eliben/pyelftools")
23855 (commit (string-append "v" version))))
23856 (file-name (git-file-name name version))
23857 (sha256
23858 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
23859 (snippet
23860 #~(begin
23861 ;; Delete bundled readelf and llvm-dwardump executables. Project
23862 ;; also ships quite a lot binary files mainly for tests, check
23863 ;; with:
23864 ;;
23865 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
23866 ;;
23867 (delete-file "test/external_tools/readelf")
23868 (delete-file "test/external_tools/llvm-dwarfdump")))))
23869 (build-system pyproject-build-system)
23870 (arguments
23871 (list
23872 #:phases
23873 #~(modify-phases %standard-phases
23874 (replace 'check
23875 (lambda* (#:key tests? #:allow-other-keys)
23876 (when tests?
23877 ;; Run just basic unit and example tests, dwarfdump and
23878 ;; readelf tests are not selected as they are fragile and
23879 ;; arch-specific.
23880 (invoke "python" "test/run_all_unittests.py")
23881 (invoke "python" "test/run_examples_test.py")))))))
23882 (home-page "https://github.com/eliben/pyelftools")
23883 (native-inputs
23884 (list python-setuptools
23885 python-wheel))
23886 (synopsis "Analyze binary and library file information")
23887 (description
23888 "This Python library provides interfaces for parsing and analyzing two
23889binary and library file formats ; the Executable and Linking Format (ELF), and
23890debugging information in the Debugging With Attributed Record
23891Format (DWARF).")
23892 (license license:public-domain)))
23893
23894(define-public python-pefile
23895 (package
23896 (name "python-pefile")
23897 (version "2024.8.26")
23898 (source
23899 (origin
23900 (method git-fetch)
23901 (uri (git-reference
23902 (url "https://github.com/erocarrera/pefile")
23903 (commit (string-append "v" version))))
23904 (file-name (git-file-name name version))
23905 (sha256
23906 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
23907 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
23908 (build-system pyproject-build-system)
23909 (arguments
23910 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
23911 ;; It seems clear however that test_data.tar.bz2.enc needs to be
23912 ;; decrypted and unpacked before we can run them.
23913 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
23914 (native-inputs (list python-pytest python-setuptools))
23915 (propagated-inputs (list python-future))
23916 (home-page "https://github.com/erocarrera/pefile")
23917 (synopsis "Portable Executable (PE) file parser")
23918 (description
23919 "This python library provides interfaces for parsing and working with
23920Portable Executable (PE) files. It makes to most information from the header,
23921as well as section details and data available.")
23922 (license license:expat)))
23923
23924(define-public python-pyemd
23925 (package
23926 (name "python-pyemd")
23927 (version "1.0.0")
23928 (source (origin
23929 (method url-fetch)
23930 (uri (pypi-uri "pyemd" version))
23931 (sha256
23932 (base32
23933 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
23934 (build-system pyproject-build-system)
23935 (native-inputs
23936 (list python-cython
23937 python-pytest
23938 python-setuptools
23939 python-setuptools-scm))
23940 (propagated-inputs
23941 (list python-numpy-1))
23942 (home-page "https://github.com/wmayner/pyemd")
23943 (synopsis
23944 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
23945 (description
23946 "This package provides a Python wrapper for Ofir Pele and Michael
23947Werman's implementation of the Earth Mover's Distance.")
23948 (license license:expat)))
23949
23950(define-public python-imagesize
23951 (package
23952 (name "python-imagesize")
23953 (version "1.4.1")
23954 (source
23955 (origin
23956 (method url-fetch)
23957 (uri (pypi-uri "imagesize" version))
23958 (sha256
23959 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
23960 (build-system pyproject-build-system)
23961 (arguments (list #:test-backend #~'unittest))
23962 (native-inputs
23963 (list python-setuptools
23964 python-wheel))
23965 (home-page "https://github.com/shibukawa/imagesize_py")
23966 (synopsis "Gets image size of files in various formats in Python")
23967 (description
23968 "This package allows determination of image size from PNG, JPEG,
23969JPEG2000 and GIF files in pure Python.")
23970 (license license:expat)))
23971
23972(define-public python-argcomplete
23973 (package
23974 (name "python-argcomplete")
23975 (version "3.6.2")
23976 (source
23977 (origin
23978 (method url-fetch)
23979 (uri (pypi-uri "argcomplete" version))
23980 (sha256
23981 (base32
23982 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
23983 (build-system pyproject-build-system)
23984 (arguments
23985 (list
23986 #:test-backend #~'custom
23987 #:test-flags #~(list "test/test.py" "-v")
23988 #:phases
23989 #~(modify-phases %standard-phases
23990 (add-before 'check 'disable-pip-tests
23991 (lambda _
23992 ;; pip: command not found
23993 (substitute* "test/test.py"
23994 (("def test_console_script")
23995 "def __disable_test_console_script")))))))
23996 (native-inputs
23997 (list python-hatch-vcs
23998 python-hatchling
23999 python-pexpect
24000 tcsh
24001 fish
24002 bash ;full Bash for 'test_file_completion'
24003 zsh))
24004 (home-page "https://github.com/kislyuk/argcomplete")
24005 (synopsis "Shell tab completion for Python argparse")
24006 (description "argcomplete provides extensible command line tab completion
24007of arguments and options for Python scripts using @code{argparse}. It's
24008particularly useful for programs with many options or sub-parsers that can
24009dynamically suggest completions ; for example, when browsing resources over
24010the network.")
24011 (license license:asl2.0)))
24012
24013(define-public python-csscompressor
24014 (package
24015 (name "python-csscompressor")
24016 (version "0.9.5")
24017 (source
24018 (origin
24019 (method git-fetch)
24020 (uri (git-reference
24021 (url "https://github.com/sprymix/csscompressor")
24022 (commit (string-append "v" version))))
24023 (file-name (git-file-name name version))
24024 (sha256
24025 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24026 (build-system pyproject-build-system)
24027 (native-inputs (list python-pytest python-setuptools))
24028 (home-page "https://github.com/sprymix/csscompressor")
24029 (synopsis "Python port of YUI CSS Compressor")
24030 (description "This package provides a python port of YUI CSS Compressor.")
24031 (license license:bsd-3)))
24032
24033(define-public python-rcssmin
24034 (package
24035 (name "python-rcssmin")
24036 (version "1.2.0")
24037 (source
24038 (origin
24039 (method url-fetch)
24040 (uri (pypi-uri "rcssmin" version))
24041 (sha256
24042 (base32
24043 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24044 (build-system pyproject-build-system)
24045 (native-inputs (list python-pytest python-setuptools python-wheel))
24046 (home-page "http://opensource.perlig.de/rcssmin/")
24047 (synopsis "CSS Minifier")
24048 (description "The minifier is based on the semantics of the YUI compressor,
24049 which itself is based on the rule list by Isaac Schlueter.")
24050 (license license:asl2.0)))
24051
24052(define-public python-rjsmin
24053 (package
24054 (name "python-rjsmin")
24055 (version "1.2.3")
24056 (source
24057 (origin
24058 (method url-fetch)
24059 (uri (pypi-uri "rjsmin" version))
24060 (sha256
24061 (base32
24062 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
24063 (modules '((guix build utils)))
24064 (snippet
24065 '(for-each delete-file (find-files "bench" "\\.js$")))))
24066 (build-system pyproject-build-system)
24067 (native-inputs
24068 (list python-pytest python-setuptools python-wheel))
24069 (home-page "http://opensource.perlig.de/rjsmin/")
24070 (synopsis "Javascript Minifier")
24071 (description "@code{rJSmin} is a javascript minifier written in Python.
24072The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
24073module is a re-implementation aiming for speed, so it can be used at
24074runtime (rather than during a preprocessing step).")
24075 (license license:asl2.0)))
24076
24077(define-public python-cheetah
24078 (package
24079 (name "python-cheetah")
24080 (version "3.3.1")
24081 (source
24082 (origin
24083 (method url-fetch)
24084 (uri (pypi-uri "CT3" version))
24085 (sha256
24086 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
24087 (build-system pyproject-build-system)
24088 (arguments
24089 (list
24090 #:test-backend #~'custom
24091 #:test-flags #~(list "Cheetah/Tests/Test.py")
24092 #:phases
24093 #~(modify-phases %standard-phases
24094 (add-after 'unpack 'use-absolute-python
24095 (lambda _
24096 (substitute* "Cheetah/CheetahWrapper.py"
24097 (("#!/usr/bin/env python")
24098 (string-append "#!" (which "python"))))))
24099 (add-before 'check 'configure-tests
24100 (lambda* (#:key tests? #:allow-other-keys)
24101 (substitute* "Cheetah/Tests/ImportHooks.py"
24102 (("os.path.dirname\\(__file__\\)")
24103 (string-append "'" (getcwd) "/Cheetah/Tests'")))
24104 (substitute* "Cheetah/Tests/Test.py"
24105 (("unittest.TextTestRunner\\(\\)")
24106 "unittest.TextTestRunner(verbosity=2)"))
24107 (setenv "TMPDIR" "/tmp"))))))
24108 (native-inputs (list python-setuptools))
24109 (propagated-inputs (list python-markdown)) ;optional
24110 (home-page "https://cheetahtemplate.org/")
24111 (synopsis "Template engine")
24112 (description
24113 "Cheetah is a text-based template engine and Python code generator.
24114
24115 Cheetah can be used as a standalone templating utility or referenced as a
24116library from other Python applications. It has many potential uses, but web
24117developers looking for a viable alternative to ASP, JSP, PHP and PSP are
24118expected to be its principle user group.
24119
24120Features:
24121@enumerate
24122@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
24123other text-based format.
24124@item Cleanly separates content, graphic design, and program code.
24125@item Blends the power and flexibility of Python with a simple template
24126language that non-programmers can understand.
24127@item Gives template writers full access to any Python data structure, module,
24128function, object, or method in their templates.
24129@item Makes code reuse easy by providing an object-orientated interface to
24130templates that is accessible from Python code or other Cheetah templates. One
24131template can subclass another and selectively reimplement sections of it.
24132@item Provides a simple, yet powerful, caching mechanism that can dramatically
24133improve the performance of a dynamic website.
24134@item Compiles templates into optimized, yet readable, Python code.
24135@end enumerate")
24136 (license (license:x11-style "file://LICENSE"))))
24137
24138(define-public python-chevron
24139 (package
24140 (name "python-chevron")
24141 (version "0.14.0")
24142 (source (origin
24143 (method url-fetch)
24144 (uri (pypi-uri "chevron" version))
24145 (sha256
24146 (base32
24147 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
24148 (build-system pyproject-build-system)
24149 (arguments (list #:tests? #false)) ;there are none
24150 (native-inputs (list python-setuptools python-wheel))
24151 (home-page "https://github.com/noahmorrison/chevron")
24152 (synopsis "Mustache templating language renderer")
24153 (description "This package provides a Python implementation of the
24154Mustache templating language renderer.")
24155 (license license:expat)))
24156
24157(define-public python-dulwich
24158 (package
24159 (name "python-dulwich")
24160 (version "0.21.7")
24161 (source
24162 (origin
24163 (method url-fetch)
24164 (uri (list (string-append "https://www.dulwich.io/releases/"
24165 "dulwich-" version ".tar.gz")
24166 (pypi-uri "dulwich" version)))
24167 (sha256
24168 (base32
24169 "0s79c3g19m052jbxm66amxv5v60ijx5px4hjmk1q19ff6dlcdsd9"))))
24170 (build-system pyproject-build-system)
24171 (arguments
24172 (list
24173 #:test-flags
24174 ;; DULWICH_SWIFT_CFG is not set.
24175 '(list "--ignore=dulwich/contrib/test_swift_smoke.py"
24176 "-k"
24177 ;; 'HTTPClient' object has no attribute 'get_base_url'
24178 "not test_init_connector")
24179 #:phases
24180 '(modify-phases %standard-phases
24181 (add-after 'unpack 'fix-tests
24182 (lambda* (#:key inputs #:allow-other-keys)
24183 (substitute* '("dulwich/tests/test_repository.py"
24184 "dulwich/tests/test_porcelain.py"
24185 "dulwich/tests/test_hooks.py")
24186 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
24187 (add-before 'check 'pre-check
24188 (lambda _ (setenv "PYTHONHASHSEED" "random"))))))
24189 (propagated-inputs
24190 (list python-fastimport python-urllib3))
24191 (native-inputs
24192 (list gnupg
24193 git-minimal/pinned
24194 python-geventhttpclient
24195 python-mypy
24196 python-paramiko
24197 python-pytest
24198 python-requests
24199 python-setuptools
24200 python-wheel))
24201 (home-page "https://www.dulwich.io/")
24202 (synopsis "Git implementation in Python")
24203 (description "Dulwich is an implementation of the Git file formats and
24204protocols written in pure Python.")
24205 ;; Can be used with either license.
24206 (license (list license:asl2.0 license:gpl2+))))
24207
24208(define-public python-dulwich-0.24
24209 (package/inherit python-dulwich
24210 (name "python-dulwich")
24211 (version "0.24.1")
24212 (source
24213 (origin
24214 (method url-fetch)
24215 (uri (pypi-uri "dulwich" version))
24216 (sha256
24217 (base32 "0n3p8jyxl4zwc63la10v8llc58fc5pcnfqdq9f1vn0hgy5jdi7z1"))))
24218 (build-system pyproject-build-system)
24219 (native-inputs
24220 (modify-inputs (package-native-inputs python-dulwich)
24221 (prepend python-setuptools-rust)))
24222 (arguments
24223 (list
24224 #:test-flags
24225 ;; DULWICH_SWIFT_CFG is not set.
24226 '(list "--ignore=tests/contrib/test_swift_smoke.py"
24227 ;; AttributeError: 'SwiftPackData' object has no attribute '_file'
24228 "--ignore=tests/contrib/test_swift.py"
24229 ;; No git repository was found at .
24230 "--ignore=tests/test_cli.py"
24231 ;; 'HTTPClient' object has no attribute 'get_base_url'
24232 ;; 'NoneType' object has no attribute 'Merge3'
24233 "--ignore=tests/test_cli_merge.py"
24234 "--ignore=tests/test_merge_drivers.py"
24235 "--ignore=tests/test_porcelain_cherry_pick.py"
24236 "--ignore=tests/test_porcelain_merge.py"
24237 "--ignore=tests/test_rebase.py"
24238 "--ignore=tests/test_repository.py"
24239 "--ignore=tests/test_worktree.py"
24240 "--ignore=tests/test_porcelain.py"
24241 "--ignore=tests/test_porcelain_filters.py"
24242 ;; False is not true (interesting capitalization?)
24243 "--ignore=tests/test_hooks.py")
24244 #:phases
24245 #~(modify-phases %standard-phases
24246 (add-after 'unpack 'patch-pyproject
24247 (lambda _
24248 ;; setuptools cannot handle both license and license-files
24249 (substitute* "pyproject.toml"
24250 (("^license = .*") "license = {text = \"Apache-2.0\"}\n")
24251 (("^license-files = .*") ""))))
24252 (add-before 'check 'pre-check
24253 (lambda* (#:key tests? #:allow-other-keys)
24254 (when tests?
24255 (setenv "HOME" "/tmp")))))))))
24256
24257(define-public python-dunamai
24258 (package
24259 (name "python-dunamai")
24260 (version "1.21.2")
24261 (source
24262 (origin
24263 (method url-fetch)
24264 (uri (pypi-uri "dunamai" version))
24265 (sha256
24266 (base32 "1i35i8ym6n8mpgrq31hivrvfciy12gv26jwlzimmkx9jy2spz0h5"))))
24267 (build-system pyproject-build-system)
24268 (arguments
24269 (list
24270 #:test-flags
24271 #~(list "-k" "not test__version__from_git__shallow")
24272 #:phases
24273 #~(modify-phases %standard-phases
24274 ;; These steps are taked from NixOS package definition:
24275 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
24276 (add-before 'check 'pre-check
24277 (lambda _
24278 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
24279 (setenv "HOME" "/tmp")
24280 (invoke "git" "config" "--global" "user.email" "[email protected]")
24281 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
24282 (propagated-inputs
24283 (list python-packaging))
24284 (native-inputs
24285 (list git-minimal
24286 python-poetry-core
24287 python-pytest))
24288 (home-page "https://github.com/mtkennerly/dunamai")
24289 (synopsis "Dynamic version generation")
24290 (description
24291 "Dunamai is Python library and command line tool for producing dynamic,
24292standards-compliant version strings, derived from tags in your version control
24293system. This facilitates uniquely identifying nightly or per-commit builds in
24294continuous integration and releasing new versions of your software simply by
24295creating a tag.")
24296 (license license:expat)))
24297
24298(define-public python-pbkdf2
24299 (package
24300 (name "python-pbkdf2")
24301 (version "1.3")
24302 (source
24303 (origin
24304 (method url-fetch)
24305 (uri (pypi-uri "pbkdf2" version))
24306 (sha256
24307 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
24308 (build-system pyproject-build-system)
24309 (arguments
24310 (list
24311 #:test-backend #~'custom
24312 #:test-flags #~(list "test/test_pbkdf2.py")))
24313 (native-inputs (list python-setuptools))
24314 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
24315 (synopsis "Password-based key derivation")
24316 (description
24317 "This module implements the password-based key derivation function,
24318PBKDF2, specified in RSA PKCS#5 v2.0.
24319
24320PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
24321is part of the RSA Public Key Cryptography Standards series. The provided
24322implementation takes a password or a passphrase and a salt value (and
24323optionally a iteration count, a digest module, and a MAC module) and provides
24324a file-like object from which an arbitrarily-sized key can be read.")
24325 (license license:expat)))
24326
24327(define-public python-qrcode
24328 (package
24329 (name "python-qrcode")
24330 (version "8.2")
24331 (source
24332 (origin
24333 (method url-fetch)
24334 (uri (pypi-uri "qrcode" version))
24335 (sha256
24336 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
24337 (build-system pyproject-build-system)
24338 (native-inputs
24339 (list python-poetry-core
24340 python-pytest))
24341 (home-page "https://github.com/lincolnloop/python-qrcode")
24342 (synopsis "QR Code image generator")
24343 (description
24344 "This package provides a pure Python QR Code generator module. It uses
24345the Python Imaging Library (PIL) to allow for the generation of QR Codes.
24346
24347In addition this package provides a command line tool to generate QR codes and
24348either write these QR codes to a file or do the output as ascii art at the
24349console.")
24350 (license license:bsd-3)))
24351
24352(define-public python-rst2ansi
24353 (package
24354 (name "python-rst2ansi")
24355 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
24356 (revision . "0")))
24357 (version (git-version "0.1.5"
24358 (assoc-ref properties 'revision)
24359 (assoc-ref properties 'commit)))
24360 (source
24361 (origin
24362 (method git-fetch)
24363 (uri (git-reference
24364 (url "https://github.com/Snaipe/python-rst-to-ansi")
24365 (commit (assoc-ref properties 'commit))))
24366 (file-name (git-file-name name version))
24367 (sha256
24368 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
24369 (build-system pyproject-build-system)
24370 (arguments
24371 (list
24372 #:tests? #f ; 2 tests fail with additional line characters
24373 #:phases
24374 #~(modify-phases %standard-phases
24375 (replace 'check
24376 (lambda* (#:key tests? #:allow-other-keys)
24377 (when tests?
24378 (invoke "cram" "test" "-v")))))))
24379 (native-inputs (list python-cram python-setuptools))
24380 (propagated-inputs (list python-docutils))
24381 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
24382 (synopsis "Convert RST to ANSI-decorated console output")
24383 (description
24384 "Python module dedicated to rendering RST (reStructuredText) documents to
24385ansi-escaped strings suitable for display in a terminal.")
24386 (license license:expat)))
24387
24388(define-public python-ansi2html
24389 (package
24390 (name "python-ansi2html")
24391 (version "1.9.2")
24392 (source
24393 (origin
24394 (method url-fetch)
24395 (uri (pypi-uri "ansi2html" version))
24396 (sha256
24397 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
24398 (build-system pyproject-build-system)
24399 (native-inputs
24400 (list python-mock
24401 python-pytest
24402 python-setuptools
24403 python-wheel))
24404 (home-page "https://github.com/ralphbean/ansi2html")
24405 (synopsis "Convert ANSI-decorated console output to HTML")
24406 (description
24407 "@command{ansi2html} is a Python library and command line utility for
24408converting text with ANSI color codes to HTML or LaTeX.")
24409 (license license:gpl3+)))
24410
24411(define-public python-easy-ansi
24412 (package
24413 (name "python-easy-ansi")
24414 (version "2.1")
24415 (source
24416 (origin
24417 (method git-fetch)
24418 (uri (git-reference
24419 (url "https://gitlab.com/joeysbytes/easy-ansi")
24420 (commit (string-append "v" version))))
24421 (file-name (git-file-name name version))
24422 (sha256
24423 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
24424 (build-system pyproject-build-system)
24425 (arguments
24426 (list
24427 #:phases
24428 #~(modify-phases %standard-phases
24429 (add-after 'install 'remove-extra
24430 (lambda* (#:key inputs outputs #:allow-other-keys)
24431 (with-directory-excursion (site-packages inputs outputs)
24432 (delete-file-recursively "tests")
24433 (delete-file "setup.py")))))))
24434 (native-inputs (list python-pytest python-setuptools))
24435 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
24436 (synopsis "Terminal framework API")
24437 (description
24438 "Easy ANSI is a terminal framework API to give you an easy way to use
24439colors, cursor control movements, and line/box drawing. It is not meant as a
24440replacement to more full-featured frameworks (such as curses or urwid), but as
24441a tool to quickly create nice-looking screens in your terminal window. You
24442can even create animations with the cursor controls.")
24443 (license license:expat)))
24444
24445(define-public python-easy-ansi-0.3
24446 (package
24447 (inherit python-easy-ansi)
24448 (name "python-easy-ansi")
24449 (version "0.3")
24450 (source
24451 (origin
24452 (method git-fetch)
24453 (uri (git-reference
24454 (url "https://gitlab.com/joeysbytes/easy-ansi")
24455 (commit (string-append "v" version))))
24456 (file-name (git-file-name name version))
24457 (sha256
24458 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
24459 (arguments '())))
24460
24461(define-public python-pycosat
24462 (package
24463 (name "python-pycosat")
24464 (version "0.6.6")
24465 (source
24466 (origin
24467 (method git-fetch)
24468 (uri (git-reference
24469 (url "https://github.com/ContinuumIO/pycosat")
24470 (commit version)))
24471 (file-name (git-file-name name version))
24472 (sha256
24473 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
24474 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
24475 (build-system pyproject-build-system)
24476 (arguments (list #:test-backend #~'unittest))
24477 (native-inputs (list unzip python-setuptools))
24478 (home-page "https://github.com/ContinuumIO/pycosat")
24479 (synopsis "Bindings to picosat (a SAT solver)")
24480 (description
24481 "This package provides efficient Python bindings to @code{picosat} on the
24482C level. When importing pycosat, the @code{picosat} solver becomes part of
24483the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
24484Problem} (SAT) solver.")
24485 (license license:expat)))
24486
24487(define-public python-pypeg2
24488 (package
24489 (name "python-pypeg2")
24490 (version "2.15.2")
24491 (source
24492 (origin
24493 (method url-fetch)
24494 (uri (pypi-uri "pyPEG2" version))
24495 (sha256
24496 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
24497 (build-system pyproject-build-system)
24498 (native-inputs (list python-pytest python-setuptools))
24499 (propagated-inputs (list python-lxml))
24500 (home-page "https://fdik.org/pyPEG/")
24501 (synopsis "Parsing Expression Grammars in Python")
24502 (description
24503 "PyPEG is an intrinsic parser interpreter framework for Python. It is
24504based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
24505formal languages.")
24506 (license license:gpl2)))
24507
24508(define-public python-pyformlang
24509 (package
24510 (name "python-pyformlang")
24511 (version "1.0.10")
24512 (source
24513 (origin
24514 (method url-fetch)
24515 (uri (pypi-uri "pyformlang" version))
24516 (sha256
24517 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
24518 (build-system pyproject-build-system)
24519 (native-inputs
24520 (list python-pytest
24521 python-setuptools
24522 python-wheel))
24523 (propagated-inputs
24524 (list python-networkx
24525 python-numpy
24526 python-pydot))
24527 (home-page "https://github.com/Aunsiels/pyformlang")
24528 (synopsis "Framework for interacting with formal grammars")
24529 (description
24530 "This package provides a framework for working with formal
24531language grammars. The library was originally developed for educational
24532purposes and therefore implements many textbook algorithms regarding the
24533manipulation and interaction with formal grammars.")
24534 (license license:expat)))
24535
24536(define-public python-incremental
24537 (package
24538 (name "python-incremental")
24539 (version "24.7.2")
24540 (source
24541 (origin
24542 (method url-fetch)
24543 (uri (pypi-uri "incremental" version))
24544 (sha256
24545 (base32
24546 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
24547 (build-system pyproject-build-system)
24548 (arguments
24549 ;; Tests require twisted, which needs this package.
24550 (list #:tests? #false
24551 #:build-backend "setuptools.build_meta"))
24552 (native-inputs
24553 (list python-setuptools))
24554 (home-page "https://github.com/hawkowl/incremental")
24555 (synopsis "Library for versioning Python projects")
24556 (description "Incremental is a small library that versions your Python
24557 projects.")
24558 (license license:expat)))
24559
24560(define-public python-invoke
24561 (package
24562 (name "python-invoke")
24563 (version "2.2.1")
24564 (source
24565 (origin
24566 (method url-fetch)
24567 (uri (pypi-uri "invoke" version))
24568 (sha256
24569 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
24570 ;; TODO: invoke/vendor contains:
24571 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
24572 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
24573 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
24574 (build-system pyproject-build-system)
24575 (arguments
24576 (list
24577 ;; XXX: Requires many dependencies that are not yet in Guix.
24578 #:tests? #f
24579 #:phases
24580 #~(modify-phases %standard-phases
24581 (add-after 'unpack 'fix-bash-path
24582 (lambda _
24583 (let ((bash #$(this-package-input "bash-minimal")))
24584 (substitute* "invoke/config.py"
24585 (("shell = \"/bin/bash\"")
24586 (string-append "shell = \"" bash "/bin/bash\""))))))
24587 (add-after 'wrap 'fix-entry-points
24588 ;; TODO: Remove after https://codeberg.org/guix/guix/issues/4509
24589 ;; is fixed.
24590 (lambda _
24591 (substitute* (list (string-append #$output "/bin/.invoke-real")
24592 (string-append #$output "/bin/.inv-real"))
24593 (("from invoke.main import program.run")
24594 "from invoke.main import program")))))))
24595 (native-inputs
24596 (list python-setuptools
24597 python-wheel))
24598 (inputs
24599 (list bash-minimal))
24600 (home-page "https://www.pyinvoke.org/")
24601 (synopsis "Pythonic task execution")
24602 (description
24603 "Invoke is a Python task execution tool and library, drawing inspiration
24604from various sources to arrive at a powerful and clean feature set. It is
24605evolved from the Fabric project, but focuses on local and abstract concerns
24606instead of servers and network commands.")
24607 (license license:bsd-3)))
24608
24609(define-public python-automat
24610 (package
24611 (name "python-automat")
24612 (version "24.8.1")
24613 (source (origin
24614 (method url-fetch)
24615 (uri (pypi-uri "Automat" version))
24616 (sha256
24617 (base32
24618 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
24619 (build-system pyproject-build-system)
24620 (arguments
24621 (list
24622 #:phases
24623 #~(modify-phases %standard-phases
24624 (replace 'check
24625 (lambda* (#:key tests? test-flags #:allow-other-keys)
24626 (with-directory-excursion #$output
24627 (apply invoke "pytest" "-vv" test-flags))))
24628 ;; Remove script, because it depends on python-twisted.
24629 (add-after 'unpack 'remove-entrypoint
24630 (lambda _
24631 (substitute* "pyproject.toml"
24632 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
24633 (native-inputs
24634 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
24635 (propagated-inputs
24636 (list python-graphviz python-typing-extensions))
24637 (home-page "https://github.com/glyph/Automat")
24638 (synopsis "Self-service finite-state machines")
24639 (description "Automat is a library for concise, idiomatic Python
24640 expression of finite-state automata (particularly deterministic finite-state
24641 transducers).")
24642 (license license:expat)))
24643
24644(define-public python-constantly
24645 (package
24646 (name "python-constantly")
24647 (version "23.10.4")
24648 (source
24649 (origin
24650 (method url-fetch)
24651 (uri (pypi-uri "constantly" version))
24652 (sha256
24653 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
24654 (build-system pyproject-build-system)
24655 (arguments
24656 (list #:tests? #f)) ;cycles with python-twisted
24657 (native-inputs
24658 (list python-setuptools
24659 python-versioneer))
24660 (home-page "https://github.com/twisted/constantly")
24661 (synopsis "Symbolic constants in Python")
24662 (description "Constantly is a Python library that provides symbolic
24663 constant support. It includes collections and constants with text, numeric,
24664 and bit flag values.")
24665 (license license:expat)))
24666
24667(define-public python-attrs
24668 (package
24669 (name "python-attrs")
24670 (version "25.3.0")
24671 (source
24672 (origin
24673 (method url-fetch)
24674 (uri (pypi-uri "attrs" version))
24675 (sha256
24676 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
24677 (build-system pyproject-build-system)
24678 (native-inputs
24679 (list python-hatch-fancy-pypi-readme
24680 python-hatch-vcs
24681 python-hatchling
24682 python-hypothesis
24683 python-pytest))
24684 (home-page "https://github.com/python-attrs/attrs/")
24685 (synopsis "Attributes without boilerplate")
24686 (description "@code{attrs} is a Python package with class decorators that
24687 ease the chores of implementing the most common attribute-related object
24688 protocols.")
24689 (license license:expat)))
24690
24691(define-public python-attrs-bootstrap
24692 (package
24693 (inherit python-attrs)
24694 (name "python-attrs-bootstrap")
24695 (native-inputs (list python-hatchling
24696 python-hatch-fancy-pypi-readme
24697 python-hatch-vcs))
24698 (arguments `(#:tests? #f))))
24699
24700(define-public python-cliapp
24701 (package
24702 (name "python-cliapp")
24703 (version "1.20180812.1")
24704 (source
24705 (origin
24706 (method url-fetch)
24707 (uri (string-append
24708 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
24709 version ".tar.gz"))
24710 (sha256
24711 (base32
24712 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
24713 (build-system python-build-system)
24714 (arguments
24715 `(;; XXX: The tests only do style and coverage checks, which
24716 ;; fails due to deprecation warnings, etc.
24717 #:tests? #f))
24718 (native-inputs
24719 (list python-coverage-test-runner))
24720 (propagated-inputs
24721 (list python-pyaml))
24722 (home-page "https://liw.fi/cliapp/")
24723 (synopsis "Python framework for command line programs")
24724 (description "@code{cliapp} is a Python framework for command line
24725 programs. It contains the typical stuff such programs need to do, such
24726 as parsing the command line for options, and iterating over input files.")
24727 (license license:gpl2+)))
24728
24729(define-public python-astroid
24730 (package
24731 (name "python-astroid")
24732 (version "3.3.11")
24733 (source
24734 (origin
24735 (method git-fetch)
24736 (uri (git-reference
24737 (url "https://github.com/PyCQA/astroid")
24738 (commit (string-append "v" version))))
24739 (file-name (git-file-name name version))
24740 (sha256
24741 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
24742 (build-system pyproject-build-system)
24743 (arguments
24744 ;; UserWarning: pkg_resources is deprecated as an API. See
24745 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
24746 ;; pkg_resources package is slated for removal as early as
24747 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
24748 (list #:test-flags
24749 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
24750 (native-inputs
24751 (list python-mypy-minimal
24752 python-pytest
24753 python-setuptools
24754 python-wheel))
24755 (propagated-inputs
24756 (list python-lazy-object-proxy
24757 python-typing-extensions
24758 python-wrapt))
24759 (home-page "https://github.com/PyCQA/astroid")
24760 (synopsis "Python source code base representation")
24761 (description "@code{python-astroid} provides a common base representation
24762of Python source code for projects such as pychecker, pyreverse, pylint, etc.
24763It provides a compatible representation which comes from the _ast module. It
24764rebuilds the tree generated by the builtin _ast module by recursively walking
24765down the AST and building an extended ast. The new node classes have
24766additional methods and attributes for different usages. They include some
24767support for static inference and local name scopes. Furthermore, astroid
24768builds partial trees by inspecting living objects.")
24769 (license license:lgpl2.1+)))
24770
24771(define-public python-isbnlib
24772 (package
24773 (name "python-isbnlib")
24774 (version "3.10.14")
24775 (source
24776 (origin
24777 (method git-fetch)
24778 (uri (git-reference
24779 (url "https://github.com/xlcnd/isbnlib")
24780 (commit (string-append "v" version))))
24781 (file-name (git-file-name name version))
24782 (sha256
24783 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
24784 (build-system pyproject-build-system)
24785 (arguments
24786 (list
24787 #:test-flags #~(list "-m" "not network")))
24788 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
24789 (home-page "https://github.com/xlcnd/isbnlib")
24790 (synopsis "Python library to work with ISBN strings")
24791 (description
24792 "@code{python-isbnlib} is a (pure) python library that provides several
24793useful methods and functions to validate, clean, transform, hyphenate and get
24794metadata for ISBN strings. Its origin was as the core of isbntools. This
24795short version, is suitable to be include as a dependency in other projects.")
24796 (license license:lgpl3+)))
24797
24798(define-public python-isoduration
24799 (package
24800 (name "python-isoduration")
24801 (version "20.11.0")
24802 (source
24803 (origin
24804 (method url-fetch)
24805 (uri (pypi-uri "isoduration" version))
24806 (sha256
24807 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
24808 (build-system pyproject-build-system)
24809 (arguments '(#:tests? #f)) ;no tests in PyPI archive
24810 (propagated-inputs (list python-arrow))
24811 (native-inputs (list python-setuptools python-wheel))
24812 (home-page "https://github.com/bolsote/isoduration")
24813 (synopsis "Operations with ISO 8601 durations")
24814 (description "ISO 8601 is most commonly known as a way to exchange
24815datetimes in textual format. A lesser known aspect of the standard is the
24816representation of durations. The state of the art of ISO 8601 duration
24817handling in Python is more or less limited to what's offered by isodate. This
24818package attempts to address the shortcomings of @code{isodate}.")
24819 (license license:isc)))
24820
24821(define-public python-isort
24822 (package
24823 (name "python-isort")
24824 (version "6.0.1")
24825 (source
24826 (origin
24827 (method git-fetch) ;no tests in PyPI archive
24828 (uri (git-reference
24829 (url "https://github.com/timothycrosley/isort")
24830 (commit version)))
24831 (file-name (git-file-name name version))
24832 (modules '((guix build utils)))
24833 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
24834 (sha256
24835 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
24836 (build-system pyproject-build-system)
24837 (arguments
24838 (list
24839 #:test-flags
24840 ;; Ignore benchmark and integration to reduce closure size.
24841 #~(list "--ignore=tests/benchmark/"
24842 "--ignore=tests/integration/"
24843 "--ignore=tests/unit/profiles/test_black.py"
24844 "-k" (string-join
24845 (list "not test_gitignore"
24846 "test_isort_supports_shared_profiles_issue_970"
24847 "test_requirements_dir"
24848 "test_requirements_finder"
24849 "test_sort_configurable_sort_issue_1732"
24850 "test_sort_imports_error_handling")
24851 " and not "))
24852 ;; TODO: Package example plugins separately, available in PyPI:
24853 ;; - example_isort_formatting_plugin
24854 ;; - example_isort_sorting_plugin
24855 ;; - example_shared_isort_profile
24856 #:phases
24857 #~(modify-phases %standard-phases
24858 (add-before 'build 'pretend-version
24859 (lambda _
24860 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
24861 (native-inputs
24862 (list python-colorama
24863 python-hatch-vcs
24864 python-hatchling
24865 python-hypothesis
24866 python-pylama
24867 python-pytest))
24868 (home-page "https://github.com/PyCQA/isort")
24869 (synopsis "Python utility/library to sort python imports")
24870 (description
24871 "@code{python-isort} is a python utility/library to sort imports
24872alphabetically, and automatically separated into sections. It provides a
24873command line utility, a python library and plugins for various editors.")
24874 (license license:expat)))
24875
24876(define-public python-configparser
24877 (package
24878 (name "python-configparser")
24879 (version "7.2.0")
24880 (source
24881 (origin
24882 (method url-fetch)
24883 (uri (pypi-uri "configparser" version))
24884 (sha256
24885 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
24886 (build-system pyproject-build-system)
24887 (native-inputs
24888 (list python-pytest
24889 python-setuptools
24890 python-setuptools-scm
24891 python-wheel))
24892 (home-page "https://github.com/jaraco/configparser/")
24893 (synopsis "Backport of configparser from python 3.5")
24894 (description "@code{python-configparser} is a backport of
24895 @code{configparser} from Python 3.5 so that it can be used directly
24896 in other versions.")
24897 (license license:expat)))
24898
24899(define-public python-iniconfig
24900 (package
24901 (name "python-iniconfig")
24902 (version "2.1.0")
24903 (source
24904 (origin
24905 (method url-fetch)
24906 (uri (pypi-uri "iniconfig" version))
24907 (sha256
24908 (base32 "1iz1fg3n6pv4q8jzv1q0izl5001diwqggizrg3p3ywrn1gix5frs"))))
24909 (build-system pyproject-build-system)
24910 (arguments (list #:tests? #f)) ;no tests in PyPI, tests introduce cycle with pytest
24911 (native-inputs
24912 (list python-hatch-vcs
24913 python-hatchling))
24914 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
24915 (synopsis "Simple INI-file parser")
24916 (description "The @code{iniconfig} package provides a small and simple
24917 INI-file parser module having a unique set of features ; @code{iniconfig}
24918 @itemize
24919 @item maintains the order of sections and entries ;
24920 @item supports multi-line values with or without line-continuations ;
24921 @item supports \"#\" comments everywhere ;
24922 @item raises errors with proper line-numbers ;
24923 @item raises an error when two sections have the same name.
24924 @end itemize")
24925 (license license:expat)))
24926
24927(define-public python-mando
24928 (package
24929 (name "python-mando")
24930 (version "0.8.2")
24931 (source
24932 (origin
24933 (method url-fetch)
24934 (uri (pypi-uri "mando" version))
24935 (sha256
24936 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
24937 (build-system pyproject-build-system)
24938 (native-inputs
24939 (list python-pytest python-setuptools))
24940 (home-page "https://mando.readthedocs.org/")
24941 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
24942 (description
24943 "This package is a wrapper around argparse, allowing you to write complete CLI
24944applications in seconds while maintaining all the flexibility.")
24945 (license license:expat)))
24946
24947(define-public python-mwclient
24948 (package
24949 (name "python-mwclient")
24950 (version "0.11.0")
24951 (source
24952 (origin
24953 (method git-fetch)
24954 (uri (git-reference
24955 (url "https://github.com/mwclient/mwclient")
24956 (commit (string-append "v" version))))
24957 (file-name (git-file-name name version))
24958 (sha256
24959 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
24960 (build-system pyproject-build-system)
24961 (propagated-inputs
24962 (list python-requests-oauthlib))
24963 (native-inputs
24964 (list python-mock
24965 python-pytest
24966 python-pytest-cov
24967 python-responses
24968 python-setuptools))
24969 (home-page "https://github.com/btongminh/mwclient")
24970 (synopsis "MediaWiki API client")
24971 (description "This package provides a MediaWiki API client.")
24972 (license license:expat)))
24973
24974(define-public python-kneed
24975 (package
24976 (name "python-kneed")
24977 (version "0.8.5")
24978 (source
24979 (origin
24980 (method git-fetch)
24981 (uri (git-reference
24982 (url "https://github.com/arvkevi/kneed")
24983 (commit (string-append "v" version))))
24984 (file-name (git-file-name name version))
24985 (sha256
24986 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
24987 (build-system pyproject-build-system)
24988 (arguments
24989 (list
24990 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
24991 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
24992 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
24993 (home-page "https://github.com/arvkevi/kneed")
24994 (synopsis "Knee-point detection in Python")
24995 (description
24996 "This package implements the kneedle algorithm. Given a set of x and y
24997values, kneed will return the knee point of the function. The knee point is
24998the point of maximum curvature.")
24999 (license license:bsd-3)))
25000
25001(define-public python-diff-cover
25002 (package
25003 (name "python-diff-cover")
25004 (version "9.7.1")
25005 (source
25006 (origin
25007 (method url-fetch)
25008 (uri (pypi-uri "diff_cover" version))
25009 (sha256
25010 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25011 (build-system pyproject-build-system)
25012 (arguments
25013 (list
25014 #:test-flags
25015 ;; Dropp check of flake8 in tests.
25016 #~(list "-k" "not test_file_does_not_exist")))
25017 (native-inputs
25018 (list python-pycodestyle
25019 python-poetry-core
25020 python-pyflakes
25021 python-pylint
25022 python-pytest
25023 python-pytest-datadir
25024 python-pytest-mock))
25025 (propagated-inputs
25026 (list python-chardet
25027 python-jinja2
25028 python-pluggy
25029 python-pygments
25030 python-setuptools ; For pkg_resources.
25031 python-tomli))
25032 (home-page "https://github.com/Bachmann1234/diff_cover")
25033 (synopsis "Run coverage and linting reports on diffs")
25034 (description
25035 "Automatically find diff lines that need test coverage. It also finds
25036diff lines that have violations (according to tools such as pycodestyle,
25037pyflakes, flake8, or pylint). This is used as a code quality metric during
25038code reviews.")
25039 (license license:asl2.0)))
25040
25041(define-public python-diff-match-patch
25042 (package
25043 (name "python-diff-match-patch")
25044 (version "20241021")
25045 (source
25046 (origin
25047 (method url-fetch)
25048 (uri (pypi-uri "diff_match_patch" version))
25049 (sha256
25050 (base32
25051 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25052 (build-system pyproject-build-system)
25053 (native-inputs (list python-flit-core python-pytest))
25054 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25055 (synopsis "Synchronize plain text")
25056 (description "Diff Match and Patch libraries offer robust algorithms to
25057 perform the operations required for synchronizing plain text.")
25058 (license license:asl2.0)))
25059
25060(define-public python-icdiff
25061 (package
25062 (name "python-icdiff")
25063 (version "2.0.7")
25064 (source (origin
25065 (method git-fetch)
25066 (uri (git-reference
25067 (url "https://github.com/jeffkaufman/icdiff")
25068 (commit (string-append "release-" version))))
25069 (file-name (git-file-name name version))
25070 (sha256
25071 (base32
25072 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25073 (build-system pyproject-build-system)
25074 (arguments
25075 (list #:tests? #f)) ; there are no test scripts
25076 (native-inputs (list python-setuptools python-wheel))
25077 (home-page "https://www.jefftk.com/icdiff")
25078 (synopsis "Improved colored diff")
25079 (description "This package provides colored diff functions that highlight
25080parts of the lines that were modified.")
25081 (license license:psfl)))
25082
25083(define-public python-dirsync
25084 (package
25085 (name "python-dirsync")
25086 (version "2.2.6")
25087 (source
25088 (origin
25089 (method url-fetch)
25090 (uri (pypi-uri "dirsync" version))
25091 (sha256
25092 (base32
25093 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25094 (build-system pyproject-build-system)
25095 (arguments
25096 ;; No tests in PyPI release and GitHub repository does not have the
25097 ;; latest release tag.
25098 (list #:tests? #f))
25099 (native-inputs (list python-setuptools python-wheel))
25100 (home-page "https://github.com/tkhyn/dirsync")
25101 (synopsis "Advanced directory tree synchronisation tool")
25102 (description
25103 "Dirsync is an advanced directory tree synchronisation tool.")
25104 (license license:expat)))
25105
25106(define-public python-levenshtein
25107 (package
25108 (name "python-levenshtein")
25109 (version "0.27.1")
25110 (source
25111 (origin
25112 (method git-fetch)
25113 (uri (git-reference
25114 (url "https://github.com/rapidfuzz/Levenshtein")
25115 (commit (string-append "v" version))))
25116 (file-name (git-file-name name version))
25117 (sha256
25118 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
25119 (build-system pyproject-build-system)
25120 (propagated-inputs (list python-rapidfuzz))
25121 (native-inputs
25122 (list cmake-minimal
25123 python-cython
25124 python-pytest
25125 python-scikit-build-core
25126 python-setuptools
25127 rapidfuzz-cpp))
25128 (home-page "https://github.com/rapidfuzz/Levenshtein")
25129 (synopsis "Fast computation of Levenshtein distance and string similarity")
25130 (description
25131 "The Levenshtein Python C extension module contains functions for fast computation of
25132@enumerate
25133@item Levenshtein (edit) distance, and edit operations
25134@item string similarity
25135@item approximate median strings, and generally string averaging
25136@item string sequence and set similarity
25137@end enumerate
25138It supports both normal and Unicode strings.")
25139 (license license:gpl2+)))
25140
25141(define-public python-factory-boy
25142 (package
25143 (name "python-factory-boy")
25144 (version "3.3.3")
25145 (source
25146 (origin
25147 (method url-fetch)
25148 (uri (pypi-uri "factory_boy" version))
25149 (sha256
25150 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25151 (build-system pyproject-build-system)
25152 (arguments
25153 ;; Tests are not included in the tarball.
25154 `(#:tests? #f))
25155 (native-inputs (list python-setuptools))
25156 (propagated-inputs (list python-faker))
25157 (home-page "https://github.com/FactoryBoy/factory_boy")
25158 (synopsis "Versatile test fixtures replacement")
25159 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
25160factory_girl. As a fixtures replacement tool, it aims to replace static, hard
25161to maintain fixtures with easy-to-use factories for complex object. Instead
25162of building an exhaustive test setup with every possible combination of corner
25163cases, factory_boy allows you to use objects customized for the current test,
25164while only declaring the test-specific fields.")
25165 (license license:expat)))
25166
25167(define-public python-gtts
25168 (package
25169 (name "python-gtts")
25170 (version "2.3.1")
25171 (source (origin
25172 (method url-fetch)
25173 (uri (pypi-uri "gTTS" version))
25174 (sha256
25175 (base32
25176 "1jsg1prpzr7gj5sn385mkv2v1i8xfc83ycm87hvsi2j0y366plps"))))
25177 (build-system pyproject-build-system)
25178 (arguments
25179 ;; Disable tests that require internet.
25180 (list #:test-flags '(list "-k" "not net")))
25181 (native-inputs
25182 (list python-pytest python-testfixtures python-click python-requests
25183 python-setuptools python-wheel))
25184 (home-page "https://github.com/pndurette/gTTS")
25185 (synopsis "Google Translate text-to-speech interface")
25186 (description
25187 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
25188interface with the Google Translate text-to-speech API. It lets you write
25189spoken MP3 data to a file, a file-like object (bytestring) for further audio
25190manipulation, or @code{stdout}.")
25191 (license license:expat)))
25192
25193(define-public python-packaging
25194 (package/inherit python-packaging-bootstrap
25195 (name "python-packaging")
25196 (arguments
25197 `(#:phases (modify-phases %standard-phases
25198 (replace 'check
25199 (lambda* (#:key tests? #:allow-other-keys)
25200 (if tests?
25201 (invoke "pytest" "-vv")
25202 (format #t "test suite not run~%")))))))
25203 (native-inputs
25204 (list python-flit-core
25205 python-pretend python-pytest))
25206 (propagated-inputs (list python-pyparsing python-six))
25207 (home-page "https://github.com/pypa/packaging")
25208 (synopsis "Core utilities for Python packages")
25209 (description "Packaging is a Python module for dealing with Python packages.
25210 It offers an interface for working with package versions, names, and dependency
25211 information.")
25212 ;; From 'LICENSE': This software is made available under the terms of
25213 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
25214 ;; Contributions to this software is made under the terms of *both* these
25215 ;; licenses.
25216 (license (list license:asl2.0 license:bsd-2))))
25217
25218(define-public python-packaging-legacy
25219 (package
25220 (name "python-packaging-legacy")
25221 (version "23.0.post0")
25222 (source
25223 (origin
25224 (method url-fetch)
25225 (uri (pypi-uri "packaging_legacy" version))
25226 (sha256
25227 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
25228 (build-system pyproject-build-system)
25229 (propagated-inputs (list python-packaging))
25230 (native-inputs
25231 (list python-pretend
25232 python-pytest
25233 python-setuptools
25234 python-wheel))
25235 (home-page "https://pypi.org/project/packaging-legacy/")
25236 (synopsis "Core utilities for legacy Python packages")
25237 (description "This library provides support for legacy Python Packaging
25238functionality removed from @code{packaging}.")
25239 (license license:asl2.0)))
25240
25241(define-public python-relatorio
25242 (package
25243 (name "python-relatorio")
25244 (version "0.11.1")
25245 (source
25246 (origin
25247 (method url-fetch)
25248 (uri (pypi-uri "relatorio" version))
25249 (sha256
25250 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
25251 (build-system pyproject-build-system)
25252 (native-inputs
25253 (list python-pytest
25254 python-setuptools))
25255 (propagated-inputs
25256 (list python-genshi
25257 python-lxml
25258 python-magic))
25259 (home-page "https://relatorio.tryton.org/")
25260 (synopsis "Templating library able to output ODT and PDF files")
25261 (description
25262 "Relatorio is a templating library which provides a way to easily output
25263ODT, ODS, PNG, SVG and several other kinds of files. Support for more
25264filetypes can be easily added by creating plugins for them.")
25265 (license license:gpl3+)))
25266
25267(define-public python-radon
25268 (package
25269 (name "python-radon")
25270 (version "6.0.1")
25271 (source
25272 (origin
25273 (method git-fetch)
25274 (uri (git-reference
25275 (url "https://github.com/rubik/radon")
25276 (commit (string-append "v" version))))
25277 (file-name (git-file-name name version))
25278 (sha256
25279 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
25280 (build-system pyproject-build-system)
25281 (arguments
25282 (list
25283 #:phases
25284 #~(modify-phases %standard-phases
25285 (add-after 'unpack 'relax-requirements
25286 (lambda _
25287 (substitute* (list "pyproject.toml" "requirements.txt")
25288 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
25289 mando-lower-bound)))))))
25290 (propagated-inputs (list python-colorama python-mando))
25291 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
25292 python-setuptools))
25293 (home-page "https://radon.readthedocs.org/")
25294 (synopsis "Code Metrics in Python")
25295 (description
25296 "Radon is a Python tool which computes various code metrics. Supported
25297metrics are:
25298@itemize @bullet
25299@item raw metrics: SLOC, comment lines, blank lines, &c.
25300@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
25301@item Halstead metrics (all of them)
25302@item the Maintainability Index (a Visual Studio metric)
25303@end itemize")
25304 (license license:expat)))
25305
25306(define-public python-rgbxy
25307 (package
25308 (name "python-rgbxy")
25309 (version "0.5")
25310 (source
25311 (origin
25312 (method url-fetch)
25313 (uri (pypi-uri "rgbxy" version))
25314 (sha256
25315 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
25316 (build-system pyproject-build-system)
25317 (arguments
25318 (list #:tests? #f)) ;no tests in PyPI or Git
25319 (native-inputs
25320 (list python-setuptools))
25321 (home-page "https://github.com/benknight/hue-python-rgb-converter")
25322 (synopsis "RGB conversion tool in Python")
25323 (description
25324 "This package implements functionality of RGB/CIE1931 'xy' gammuts
25325conversion: Gamut A, B, and C.")
25326 (license license:expat)))
25327
25328(define-public python-jsonpointer
25329 (package
25330 (name "python-jsonpointer")
25331 (version "3.0.0")
25332 (source
25333 (origin
25334 (method url-fetch)
25335 (uri (pypi-uri "jsonpointer" version))
25336 (sha256
25337 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
25338 (build-system pyproject-build-system)
25339 (arguments (list #:test-backend #~'unittest))
25340 (native-inputs
25341 (list python-setuptools
25342 python-wheel))
25343 (home-page "https://github.com/stefankoegl/python-json-pointer")
25344 (synopsis "Identify specific nodes in a JSON document")
25345 (description "@code{jsonpointer} allows you to access specific nodes
25346 by path in a JSON document (see RFC 6901).")
25347 (license license:bsd-3)))
25348
25349(define-public python-jsonpatch
25350 (package
25351 (name "python-jsonpatch")
25352 (version "1.33")
25353 (source
25354 (origin
25355 (method git-fetch)
25356 ;; pypi version lacks tests.js
25357 (uri (git-reference
25358 (url "https://github.com/stefankoegl/python-json-patch")
25359 (commit (string-append "v" version))))
25360 (file-name (git-file-name name version))
25361 (sha256
25362 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
25363 (build-system pyproject-build-system)
25364 (arguments
25365 (list #:test-backend #~'custom
25366 #:test-flags #~(list "tests.py")))
25367 (native-inputs
25368 (list python-setuptools))
25369 (propagated-inputs
25370 (list python-jsonpointer))
25371 (home-page "https://github.com/stefankoegl/python-json-patch")
25372 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
25373 (description "@code{jsonpatch} is a library and program that allows
25374 applying JSON Patches according to RFC 6902.")
25375 (license license:bsd-3)))
25376
25377(define-public python-rfc3986
25378 (package
25379 (name "python-rfc3986")
25380 (version "2.0.0")
25381 (source
25382 (origin
25383 (method url-fetch)
25384 (uri (pypi-uri "rfc3986" version))
25385 (sha256
25386 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
25387 (build-system pyproject-build-system)
25388 (native-inputs
25389 (list python-pytest python-setuptools))
25390 (home-page "https://rfc3986.readthedocs.io/")
25391 (synopsis "Parse and validate URI references")
25392 (description
25393 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
25394validation and authority parsing. This module also supports RFC@tie{}6874
25395which adds support for zone identifiers to IPv6 addresses.")
25396 (license license:asl2.0)))
25397
25398(define-public python-rfc3986-validator
25399 (package
25400 (name "python-rfc3986-validator")
25401 (version "0.1.1")
25402 (source
25403 (origin
25404 (method url-fetch)
25405 (uri (pypi-uri "rfc3986_validator" version))
25406 (sha256
25407 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
25408 (build-system pyproject-build-system)
25409 (native-inputs
25410 (list python-pytest
25411 python-rfc3987
25412 python-setuptools))
25413 (home-page "https://github.com/naimetti/rfc3986-validator")
25414 (synopsis "Pure python rfc3986 validator")
25415 (description "This package implements a URI validator according to RFC3986
25416in pure Python.")
25417 (license license:expat)))
25418
25419(define-public python-rfc3987
25420 (package
25421 (name "python-rfc3987")
25422 (version "1.3.8")
25423 (source
25424 (origin
25425 (method url-fetch)
25426 (uri (pypi-uri "rfc3987" version))
25427 (sha256
25428 (base32
25429 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
25430 (build-system pyproject-build-system)
25431 (arguments
25432 (list #:test-backend #~'custom
25433 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
25434 (native-inputs
25435 (list python-setuptools))
25436 ;; Source: <https://codeberg.org/atufi/rfc3987>.
25437 (home-page "https://pypi.org/project/rfc3987/")
25438 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
25439 (description "@code{rfc3987} provides routines for parsing and
25440 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
25441 (license license:gpl3+)))
25442
25443;; The latest commit contains fixes for building with both python3 and python2.
25444(define-public python-rfc6555
25445 (package
25446 (name "python-rfc6555")
25447 (version "0.1.0")
25448 (source
25449 (origin
25450 (method git-fetch)
25451 (uri (git-reference
25452 (url "https://github.com/sethmlarson/rfc6555")
25453 (commit (string-append "v" version))))
25454 (file-name (git-file-name name version))
25455 (sha256
25456 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
25457 (build-system pyproject-build-system)
25458 (arguments
25459 (list
25460 ;; Other tests require network access.
25461 #:test-flags #~(list "tests/test_ipv6.py")))
25462 (native-inputs (list python-pytest python-setuptools))
25463 (home-page "https://pypi.org/project/rfc6555/")
25464 (synopsis "Python implementation of RFC 6555")
25465 (description
25466 "Python implementation of the Happy Eyeballs Algorithm described in RFC
254676555. Provided with a single file and dead-simple API to allow easy vendoring
25468and integration into other projects.")
25469 (license license:asl2.0)))
25470
25471(define-public python-sacn
25472 (package
25473 (name "python-sacn")
25474 (version "1.11.0")
25475 (source
25476 (origin
25477 (method url-fetch)
25478 (uri (pypi-uri "sacn" version))
25479 (sha256
25480 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
25481 (build-system pyproject-build-system)
25482 (native-inputs (list python-pytest python-setuptools python-wheel))
25483 (home-page "https://github.com/Hundemeier/sacn")
25484 (synopsis "Python library for sending and receiving sACN data")
25485 (description
25486 "This package provides a Python library for sending and receiving
25487 sACN (Streaming Architecture for Control Networks) data, a standard
25488 protocol used for controlling lighting and other devices over
25489 a network.")
25490 (license license:expat)))
25491
25492(define-public python-bagit
25493 (package
25494 (name "python-bagit")
25495 (version "1.9.0")
25496 (source
25497 (origin
25498 (method git-fetch) ; no tests in PyPI
25499 (uri (git-reference
25500 (url "https://github.com/LibraryOfCongress/bagit-python")
25501 (commit (string-append "v" version))))
25502 (file-name (git-file-name name version))
25503 (sha256
25504 (base32
25505 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
25506 (build-system pyproject-build-system)
25507 (arguments
25508 (list #:phases
25509 #~(modify-phases %standard-phases
25510 (add-before 'build 'pretend-version
25511 (lambda _
25512 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
25513 #$(package-version this-package))))
25514 (replace 'check
25515 (lambda* (#:key tests? #:allow-other-keys)
25516 (when tests?
25517 (invoke "pytest" "-vv" "test.py")))))))
25518 (native-inputs
25519 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25520 (home-page "https://libraryofcongress.github.io/bagit-python/")
25521 (synopsis "Create and validate BagIt packages")
25522 (description "Bagit is a Python library and command line utility for working
25523 with BagIt style packages. BagIt is a minimalist packaging format for digital
25524 preservation.")
25525 (license license:cc0)))
25526
25527(define-public python-prov
25528 (package
25529 (name "python-prov")
25530 (version "2.1.1")
25531 (source
25532 (origin
25533 (method git-fetch)
25534 (uri (git-reference
25535 (url "https://github.com/trungdong/prov")
25536 (commit version)))
25537 (file-name (git-file-name name version))
25538 (sha256
25539 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
25540 (build-system pyproject-build-system)
25541 (arguments
25542 (list
25543 #:test-backend #~'unittest
25544 #:test-flags #~(list "discover" "-s" "src")
25545 #:phases
25546 #~(modify-phases %standard-phases
25547 (add-before 'check 'disable-tests
25548 (lambda _
25549 ;; prov.model.ProvException: The provided identifier
25550 ;; "http://www.example.org/bundle" is not valid
25551 (substitute* "src/prov/tests/qnames.py"
25552 (("test_namespace_inheritance")
25553 "disabled_test_namespace_inheritance")
25554 (("test_default_namespace_inheritance")
25555 "disabled_test_default_namespace_inheritance")))))))
25556 (native-inputs
25557 (list python-setuptools))
25558 (propagated-inputs
25559 (list graphviz
25560 python-dateutil
25561 python-networkx
25562 python-pydot
25563 ;; optional dependencies, also needed for tests
25564 python-lxml
25565 python-rdflib))
25566 (home-page "https://github.com/trungdong/prov")
25567 (synopsis
25568 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
25569 (description
25570 "This package provides a library for W3C Provenance Data Model supporting
25571 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
25572 (license license:expat)))
25573
25574(define-public python-arcp
25575 (package
25576 (name "python-arcp")
25577 (version "0.2.1")
25578 (source
25579 (origin
25580 (method git-fetch)
25581 (uri (git-reference
25582 (url "https://github.com/stain/arcp-py")
25583 (commit version)))
25584 (file-name (git-file-name name version))
25585 (sha256
25586 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
25587 (build-system pyproject-build-system)
25588 (native-inputs (list python-pytest python-setuptools))
25589 (home-page "https://arcp.readthedocs.io/")
25590 (synopsis "Archive and Package URI parser and generator")
25591 (description
25592 "@acronym{arcp, Archive and Package} provides functions for creating
25593@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
25594files packaged in an archive or package, like a ZIP file. arcp URIs can be
25595used to consume or reference hypermedia resources bundled inside a file
25596archive or an application package, as well as to resolve URIs for archive
25597resources within a programmatic framework. This URI scheme provides
25598mechanisms to generate a unique base URI to represent the root of the archive,
25599so that relative URI references in a bundled resource can be resolved within
25600the archive without having to extract the archive content on the local file
25601system. An arcp URI can be used for purposes of isolation (e.g. when
25602consuming multiple archives), security constraints (avoiding \"climb out\"
25603from the archive), or for externally identiyfing sub-resources referenced by
25604hypermedia formats.")
25605 (license license:asl2.0)))
25606
25607(define-public python-shellescape
25608 (package
25609 (name "python-shellescape")
25610 (version "3.8.1")
25611 (source
25612 (origin
25613 (method git-fetch)
25614 (uri (git-reference
25615 (url "https://github.com/chrissimpkins/shellescape")
25616 (commit (string-append "v" version))))
25617 (file-name (git-file-name name version))
25618 (sha256
25619 (base32
25620 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
25621 (build-system python-build-system)
25622 (arguments
25623 '(#:phases
25624 (modify-phases %standard-phases
25625 (replace 'check
25626 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
25627 (when tests?
25628 (add-installed-pythonpath inputs outputs)
25629 (invoke "python" "tests/test_shellescape.py"))
25630 #t)))))
25631 (native-inputs
25632 (list python-pytest))
25633 (home-page "https://github.com/chrissimpkins/shellescape")
25634 (synopsis
25635 "Shell escape a string to safely use it as a token in a shell command")
25636 (description
25637 "The shellescape Python module defines the @code{shellescape.quote()}
25638 function that returns a shell-escaped version of a Python string. This is a
25639 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
25640 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
25641 (license license:expat)))
25642
25643;; XXX: Project has no updates since 2019, consider to remove when nothing
25644;; depends on it in the next refresh cycle.
25645;; See: <https://github.com/pipermerriam/flex/issues/237>.
25646(define-public python-flex
25647 (package
25648 (name "python-flex")
25649 (version "6.14.1")
25650 (source
25651 (origin
25652 (method url-fetch)
25653 (uri (pypi-uri "flex" version))
25654 (sha256
25655 (base32
25656 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
25657 (build-system pyproject-build-system)
25658 (arguments (list #:tests? #f)) ;no tests in PyPI archive
25659 (native-inputs
25660 (list python-setuptools))
25661 (propagated-inputs
25662 (list python-click
25663 python-jsonpointer
25664 python-pyyaml
25665 python-requests
25666 python-rfc3987
25667 python-six
25668 python-strict-rfc3339
25669 python-validate-email))
25670 (home-page "https://github.com/pipermerriam/flex")
25671 (synopsis "Validates Swagger schemata")
25672 (description "@code{flex} can be used to validate Swagger schemata.")
25673 (license license:bsd-3)))
25674
25675(define-public python-marshmallow
25676 (package
25677 (name "python-marshmallow")
25678 (version "4.0.0")
25679 (source
25680 (origin
25681 (method url-fetch)
25682 (uri (pypi-uri "marshmallow" version))
25683 (sha256
25684 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
25685 (build-system pyproject-build-system)
25686 (arguments
25687 (list
25688 #:phases
25689 #~(modify-phases %standard-phases
25690 (add-before 'check 'set-check-environment
25691 (lambda* (#:key inputs #:allow-other-keys)
25692 (setenv "TZ" "UTC")
25693 (setenv "TZDIR"
25694 (search-input-directory inputs
25695 "share/zoneinfo")))))))
25696 (native-inputs
25697 (list python-flit-core
25698 python-pytest
25699 python-simplejson
25700 tzdata-for-tests))
25701 (home-page "https://github.com/marshmallow-code/marshmallow")
25702 (synopsis "Convert complex datatypes to and from native Python datatypes")
25703 (description
25704 "@code{marshmallow} provides a library for converting complex datatypes
25705to and from native Python datatypes.")
25706 (license license:expat)))
25707
25708(define-public python-marshmallow-3
25709 (package
25710 (inherit python-marshmallow)
25711 (version "3.22.0")
25712 (source
25713 (origin
25714 (method url-fetch)
25715 (uri (pypi-uri "marshmallow" version))
25716 (sha256
25717 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
25718 (arguments '())
25719 (native-inputs
25720 (list python-pytest
25721 python-pytz
25722 python-simplejson
25723 python-flit-core))
25724 (propagated-inputs
25725 (list python-packaging))))
25726
25727
25728(define-public python-apispec
25729 (package
25730 (name "python-apispec")
25731 (version "6.8.2")
25732 (source
25733 (origin
25734 (method url-fetch)
25735 (uri (pypi-uri "apispec" version))
25736 (sha256
25737 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
25738 (build-system pyproject-build-system)
25739 (native-inputs
25740 (list python-flit-core
25741 python-openapi-spec-validator
25742 python-pytest))
25743 (propagated-inputs
25744 (list python-marshmallow
25745 python-packaging
25746 python-pyyaml))
25747 (home-page "https://github.com/marshmallow-code/apispec")
25748 (synopsis "Swagger/OpenAPI specification generator")
25749 (description
25750 "@code{python-apispec} is a pluggable API specification generator. It
25751currently supports the OpenAPI specification, formerly known as Swagger.")
25752 (license license:expat)))
25753
25754(define-public python-apispec-webframeworks
25755 (package
25756 (name "python-apispec-webframeworks")
25757 (version "1.2.0")
25758 (source
25759 (origin
25760 (method url-fetch)
25761 (uri (pypi-uri "apispec_webframeworks" version))
25762 (sha256
25763 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
25764 (build-system pyproject-build-system)
25765 (native-inputs
25766 (list python-aiohttp
25767 python-flit-core
25768 python-bottle
25769 python-flask
25770 python-pytest
25771 python-pyyaml
25772 python-tornado
25773 python-wheel))
25774 (propagated-inputs
25775 (list python-apispec))
25776 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
25777 (synopsis "Web framework plugins for apispec")
25778 (description "This package provides plugins for using @code{apispec} with
25779web frameworks.")
25780 (license license:expat)))
25781
25782(define-public python-flasgger
25783 (package
25784 (name "python-flasgger")
25785 (version "0.9.7.1")
25786 (source
25787 (origin
25788 (method git-fetch)
25789 (uri (git-reference
25790 (url "https://github.com/rochacbruno/flasgger")
25791 (commit (string-append "v" version))))
25792 (file-name (git-file-name name version))
25793 (sha256
25794 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))))
25795 (build-system pyproject-build-system)
25796 (arguments
25797 (list
25798 #:test-flags
25799 #~(list "--ignore=tests/test_examples.py"
25800 "-k" "not test_swag")))
25801 (propagated-inputs
25802 (list python-flask
25803 python-pyyaml
25804 python-jsonschema
25805 python-mistune
25806 python-six))
25807 (native-inputs
25808 (list python-pytest
25809 python-setuptools))
25810 (home-page "https://github.com/rochacbruno/flasgger/")
25811 (synopsis "Extract Swagger specs from your Flask project")
25812 (description "@code{python-flasgger} allows extracting Swagger specs
25813 from your Flask project. It is a fork of Flask-Swagger.")
25814 (license license:expat)))
25815
25816(define-public python-apache-libcloud
25817 (package
25818 (name "python-apache-libcloud")
25819 (version "3.8.0")
25820 (source
25821 (origin
25822 (method url-fetch)
25823 (uri (pypi-uri "apache-libcloud" version))
25824 (sha256
25825 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
25826 (build-system pyproject-build-system)
25827 (arguments
25828 (list
25829 #:tests? #f ; XXX: all tests fail requiring additional credentials
25830 #:phases
25831 #~(modify-phases %standard-phases
25832 (add-after 'unpack 'patch-ssh
25833 (lambda* (#:key inputs #:allow-other-keys)
25834 (substitute* "libcloud/compute/ssh.py"
25835 (("'ssh'")
25836 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
25837 (add-after 'unpack 'patch-tests
25838 (lambda _
25839 (substitute* "libcloud/test/compute/test_ssh_client.py"
25840 (("^class ShellOutSSHClientTests")
25841 "@unittest.skip(\"Guix container doesn't have ssh service\")
25842class ShellOutSSHClientTests"))))
25843 (add-before 'check 'copy-secret
25844 (lambda _
25845 (copy-file "libcloud/test/secrets.py-dist"
25846 "libcloud/test/secrets.py"))))))
25847 (inputs
25848 (list openssh))
25849 (propagated-inputs
25850 (list python-requests))
25851 (native-inputs
25852 (list python-pytest python-requests-mock python-setuptools))
25853 (home-page "https://libcloud.apache.org/")
25854 (synopsis "Unified Cloud API")
25855 (description
25856 "@code{libcloud} is a Python library for interacting with many of the
25857popular cloud service providers using a unified API.")
25858 (license license:asl2.0)))
25859
25860(define-public python-smmap
25861 (package
25862 (name "python-smmap")
25863 (version "5.0.2")
25864 (source
25865 (origin
25866 (method url-fetch)
25867 (uri (pypi-uri "smmap" version))
25868 (sha256
25869 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
25870 (build-system pyproject-build-system)
25871 (native-inputs
25872 (list python-pytest
25873 python-setuptools
25874 python-wheel))
25875 (home-page "https://github.com/Byron/smmap")
25876 (synopsis "Python sliding window memory map manager")
25877 (description "@code{smmap} is a pure Python implementation of a sliding
25878 window memory map manager.")
25879 (license license:bsd-3)))
25880
25881(define-public python-regex
25882 (package
25883 (name "python-regex")
25884 (version "2024.11.6")
25885 (source
25886 (origin
25887 (method url-fetch)
25888 (uri (pypi-uri "regex" version))
25889 (sha256
25890 (base32 "06amb1sxhbab03cy73q7wcp131bsingngr44r0rh6an5cfq5kcbs"))))
25891 (build-system pyproject-build-system)
25892 (arguments
25893 (list #:test-backend #~'unittest))
25894 (native-inputs
25895 (list python-setuptools))
25896 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
25897 (synopsis "Alternative regular expression module")
25898 (description
25899 "This regular expression implementation is backwards-compatible with the
25900standard @code{re} module, but offers additional functionality like full
25901case-folding for case-insensitive matches in Unicode.")
25902 (license license:psfl)))
25903
25904(define-public python-pysocks
25905 (package
25906 (name "python-pysocks")
25907 (version "1.7.1")
25908 (source
25909 (origin
25910 (method url-fetch)
25911 (uri (pypi-uri "PySocks" version))
25912 (sha256
25913 (base32
25914 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
25915 (build-system pyproject-build-system)
25916 (arguments `(#:tests? #f))
25917 (native-inputs
25918 (list python-setuptools))
25919 (home-page "https://github.com/Anorov/PySocks")
25920 (synopsis "SOCKS client module")
25921 (description "@code{pysocks} is an updated and semi-actively maintained
25922version of @code{SocksiPy} with bug fixes and extra features.")
25923 (license license:bsd-3)))
25924
25925(define-public python-pydub
25926 (package
25927 (name "python-pydub")
25928 (version "0.25.1")
25929 (source
25930 (origin
25931 (method git-fetch)
25932 (uri (git-reference
25933 (url "https://github.com/jiaaro/pydub")
25934 (commit (string-append "v" version))))
25935 (file-name (git-file-name name version))
25936 (sha256
25937 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))))
25938 (build-system pyproject-build-system)
25939 (arguments
25940 (list
25941 #:test-backend ''unittest
25942 #:phases
25943 #~(modify-phases %standard-phases
25944 (add-after 'unpack 'fix-ffmpeg-path
25945 (lambda* (#:key inputs #:allow-other-keys)
25946 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
25947 (substitute* "pydub/utils.py"
25948 (("return \"ffmpeg\"")
25949 (string-append "return \"" bin "/ffmpeg\""))
25950 (("return \"ffplay\"")
25951 (string-append "return \"" bin "/ffplay\""))
25952 (("return \"ffprobe\"")
25953 (string-append "return \"" bin "/ffprobe\""))
25954 (("warn\\(\"Couldn't find ff")
25955 "# warn\\(\"Couldn't find ff"))))))))
25956 (native-inputs (list python-setuptools))
25957 (home-page "https://pydub.com")
25958 (inputs (list ffmpeg))
25959 (propagated-inputs (list python-scipy))
25960 (synopsis "Manipulate audio with a high level interface in Python")
25961 (description
25962 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
25963@code{ffmpeg} to open various audio formats.")
25964 (license license:expat))) ; MIT license
25965
25966(define-public python-pkginfo
25967 (package
25968 (name "python-pkginfo")
25969 (version "1.12.1.2")
25970 (source
25971 (origin
25972 (method url-fetch)
25973 (uri (pypi-uri "pkginfo" version))
25974 (sha256
25975 (base32
25976 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
25977 (build-system pyproject-build-system)
25978 (arguments
25979 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
25980 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
25981 (native-inputs
25982 (list python-pytest
25983 python-setuptools
25984 python-wheel))
25985 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
25986 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
25987 (description
25988 "API to query the distutils metadata written in @file{PKG-INFO} inside a
25989source distriubtion (an sdist) or a binary distribution (e.g., created by
25990running bdist_egg). It can also query the EGG-INFO directory of an installed
25991distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
25992created by running @code{python setup.py develop}).")
25993 (license license:expat)))
25994
25995;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
25996;; read-only. Consider to remvoe when nothing depends on it.
25997(define-public python-ratelimiter
25998 ;; From https://github.com/RazerM/ratelimiter/pull/11
25999 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
26000 (revision "0"))
26001 (package
26002 (name "python-ratelimiter")
26003 (version (git-version "1.2.0.post1" revision commit))
26004 (source
26005 (origin
26006 (method git-fetch)
26007 (uri (git-reference
26008 (url "https://github.com/RazerM/ratelimiter")
26009 (commit commit)))
26010 (sha256
26011 (base32
26012 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26013 (build-system pyproject-build-system)
26014 (arguments
26015 (list #:phases
26016 '(modify-phases %standard-phases
26017 (add-after 'unpack 'pytest-compatibility
26018 (lambda _
26019 (substitute* "tests/conftest.py"
26020 (("pytest.collect.File") "pytest.File")))))))
26021 (native-inputs
26022 (list python-pytest
26023 python-pytest-asyncio-0.26
26024 python-setuptools))
26025 (home-page "https://github.com/RazerM/ratelimiter")
26026 (synopsis "Simple rate limiting object")
26027 (description
26028 "The @code{ratelimiter} module ensures that an operation will not be
26029executed more than a given number of times during a given period.")
26030 (license license:asl2.0))))
26031
26032(define-public python-rbfly
26033 (package
26034 (name "python-rbfly")
26035 (version "0.10.0")
26036 (source
26037 (origin
26038 (method url-fetch)
26039 (uri (pypi-uri "rbfly" version))
26040 (sha256
26041 (base32 "019fs94qzbxb43vahcm0va53m5d4nxrib5pkl29m4hx9adcccpf6"))))
26042 (build-system pyproject-build-system)
26043 (arguments
26044 (list
26045 #:test-flags #~(list "--pyargs" "rbfly")
26046 #:phases
26047 #~(modify-phases %standard-phases
26048 (add-after 'unpack 'fix-pytest-config
26049 (lambda _
26050 ;; Drop test coverage requirements.
26051 (substitute* "pyproject.toml"
26052 ((".*addopts.*") "")))))))
26053 (native-inputs
26054 (list python-cython
26055 python-pytest
26056 python-pytest-asyncio
26057 python-pytest-timeout
26058 python-setuptools
26059 python-wheel))
26060 (home-page "https://wrobell.dcmod.org/rbfly/")
26061 (synopsis "Work with RabbitMQ Streams in Python")
26062 (description
26063 "This package implements a functionality to deal with
26064@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26065@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26066
26067It is designed and implemented with the following qualities in mind:
26068@itemize
26069@item asynchronous Pythonic API with type annotations
26070@item use of
26071@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
260721.0 message format to enable interoperability between RabbitMQ Stream. clients
26073@item auto reconnection to RabbitMQ broker with lazily created connection
26074objects
26075@end itemize
26076
26077Support of many RabbitMQ Streams broker features:
26078@itemize
26079@item publishing single messages, or in batches, with confirmation
26080@item subscribing to a stream at a specific point in time, from a specific
26081offset, or using offset reference
26082@item stream message filtering
26083@item writing stream offset reference
26084@item message deduplication
26085@item integration with AMQP 1.0 ecosystem at message format level
26086@end itemize")
26087 (license license:gpl3+)))
26088
26089(define-public python-jsonrpclib-pelix
26090 (package
26091 (name "python-jsonrpclib-pelix")
26092 (version "0.3.2")
26093 (source
26094 (origin
26095 (method git-fetch)
26096 (uri (git-reference
26097 (url "https://github.com/tcalmant/jsonrpclib")
26098 (commit (string-append "v" version))))
26099 (file-name (git-file-name name version))
26100 (sha256
26101 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26102 (build-system pyproject-build-system)
26103 (arguments
26104 (list
26105 #:test-backend #~'unittest
26106 #:test-flags #~(list "-k" "not test_multicall_success")))
26107 (native-inputs (list python-setuptools))
26108 (home-page "https://github.com/tcalmant/jsonrpclib")
26109 (synopsis "JSON-RPC 2.0 client library for Python")
26110 (description
26111 "This library implements the JSON-RPC v2.0 specification
26112(backwards-compatible) as a client library for Python. This version is a fork
26113of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26114 (license license:asl2.0)))
26115
26116(define-public python-setuptools-git
26117 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26118 ;; refresh cycle.
26119 (package
26120 (name "python-setuptools-git")
26121 (version "1.2")
26122 (source
26123 (origin
26124 (method url-fetch)
26125 (uri (pypi-uri "setuptools-git" version))
26126 (sha256
26127 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26128 (build-system pyproject-build-system)
26129 (arguments
26130 (list
26131 #:tests? #f ;no tests in PyPI
26132 #:phases
26133 #~(modify-phases %standard-phases
26134 ;; This is needed for tests.
26135 (add-after 'unpack 'configure-git
26136 (lambda _
26137 (setenv "HOME" "/tmp")
26138 (invoke "git" "config" "--global" "user.email" "guix")
26139 (invoke "git" "config" "--global" "user.name" "guix"))))))
26140 (native-inputs
26141 (list git-minimal/pinned python-setuptools python-wheel))
26142 (home-page "https://github.com/msabramo/setuptools-git")
26143 (synopsis "Setuptools revision control system plugin for Git")
26144 (description
26145 "This package provides a plugin for Setuptools for revision control with
26146Git.")
26147 (license license:bsd-3)))
26148
26149(define-public python-setuptools-rust
26150 (package
26151 (name "python-setuptools-rust")
26152 (version "1.11.1")
26153 (source
26154 (origin
26155 (method url-fetch)
26156 (uri (pypi-uri "setuptools_rust" version))
26157 (sha256
26158 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
26159 (build-system pyproject-build-system)
26160 (arguments
26161 (list #:tests? #f)) ;tests rquire Cargo
26162 (propagated-inputs
26163 (list python-semantic-version
26164 python-setuptools))
26165 (home-page "https://github.com/PyO3/setuptools-rust")
26166 (synopsis "Setuptools plugin for Rust extensions")
26167 (description
26168 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
26169Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
26170 (license license:expat)))
26171
26172(define-public python-setuptools-gettext
26173 (package
26174 (name "python-setuptools-gettext")
26175 (version "0.1.14")
26176 (source
26177 (origin
26178 (method git-fetch)
26179 (uri (git-reference
26180 (url "https://github.com/breezy-team/setuptools-gettext")
26181 (commit (string-append "v" version))))
26182 (file-name (git-file-name name version))
26183 (sha256
26184 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
26185 (build-system pyproject-build-system)
26186 (native-inputs (list python-pytest python-tomli python-setuptools))
26187 (home-page "https://github.com/breezy-team/setuptools-gettext")
26188 (synopsis "Setuptools plugin for gettext")
26189 (description "This package provides a plugin for Setuptools for gettext.")
26190 (license license:gpl2+)))
26191
26192(define-public python-pyclibrary
26193 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
26194 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
26195 (revision "0"))
26196 (package
26197 (name "python-pyclibrary")
26198 (version (git-version "0.2.2" revision commit))
26199 (source
26200 (origin
26201 (method git-fetch)
26202 (uri (git-reference
26203 (url "https://github.com/MatthieuDartiailh/pyclibrary")
26204 (commit commit)))
26205 (file-name (git-file-name name version))
26206 (sha256
26207 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
26208 (build-system pyproject-build-system)
26209 (arguments
26210 (list
26211 #:phases
26212 #~(modify-phases %standard-phases
26213 (add-after 'unpack 'set-version
26214 (lambda _
26215 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" "0.2.2"))))))
26216 (native-inputs
26217 (list python-pytest
26218 python-setuptools
26219 python-setuptools-scm))
26220 (propagated-inputs
26221 (list python-pyparsing))
26222 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
26223 (synopsis "Wrap dynamic libraries in Python")
26224 (description
26225 "This package helps wrapping dynamic libraries in Python. It includes
26226a pure-Python C parser and an automation library that uses C header file
26227definitions to simplify the use of C bindings.")
26228 (license license:expat))))
26229
26230(define-public python-pyclipper
26231 (package
26232 (name "python-pyclipper")
26233 (version "1.3.0.post6")
26234 (source
26235 (origin
26236 (method git-fetch)
26237 (uri (git-reference
26238 (url "https://github.com/greginvm/pyclipper")
26239 (commit version)))
26240 (file-name (git-file-name name version))
26241 (sha256
26242 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
26243 (build-system pyproject-build-system)
26244 (arguments
26245 (list
26246 #:phases
26247 #~(modify-phases %standard-phases
26248 (add-after 'unpack 'set-version
26249 (lambda _
26250 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
26251 (add-before 'build 'cythonize-sources
26252 (lambda _
26253 (with-directory-excursion "src/pyclipper"
26254 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
26255 (native-inputs
26256 (list python-cython
26257 python-pytest
26258 python-setuptools
26259 python-setuptools-scm))
26260 (home-page "https://github.com/greginvm/pyclipper")
26261 (synopsis "Wrapper for Angus Johnson's Clipper library")
26262 (description
26263 "Pyclipper is a Cython wrapper for the C++ translation of the
26264Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
26265 (license license:expat)))
26266
26267(define-public python-semver
26268 (package
26269 (name "python-semver")
26270 (version "3.0.4")
26271 (source
26272 (origin
26273 (method url-fetch)
26274 (uri (pypi-uri "semver" version))
26275 (sha256
26276 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
26277 (build-system pyproject-build-system)
26278 (native-inputs (list python-pytest python-pytest-cov python-setuptools
26279 python-wheel))
26280 (home-page "https://github.com/k-bx/python-semver")
26281 (synopsis "Python helper for Semantic Versioning")
26282 (description
26283 "This package provides a Python library for @url{Semantic Versioning,
26284http://semver.org/}.")
26285 (license license:bsd-3)))
26286
26287(define-public python-pyro4
26288 (package
26289 (name "python-pyro4")
26290 (version "4.82")
26291 (source
26292 (origin
26293 (method url-fetch)
26294 (uri (pypi-uri "Pyro4" version))
26295 (sha256
26296 (base32 "1yr1rv2afmq55wb14sx9qplzkqw7fya9rprsqdyxfbg90h45n7si"))))
26297 (build-system pyproject-build-system)
26298 (arguments
26299 (list #:test-flags
26300 #~(list "-k"
26301 (string-join
26302 ;; Those tests require network.
26303 (list "testBCstart"
26304 "testAutoClean"
26305 "testDaemonPyroObj"
26306 "testLookupAndRegister"
26307 "testLookupInvalidHmac"
26308 "testLookupUnixsockParsing"
26309 "testMulti"
26310 "testRefuseDottedNames"
26311 "testResolve"
26312 "testBCLookup0000"
26313 "testPyroname"
26314 "testResolveAsymmetricHmacUsage"
26315 "testResolveWrongHmac"
26316 "testStartNSfunc"
26317 "testCustomDictClass"
26318 "testDictClassFail"
26319 "testBroadcast"
26320 "testGetIP"
26321 ;; XXX: Unclear why this test fails.
26322 "testCustomClassFail")
26323 " and not "))
26324 #:phases
26325 #~(modify-phases %standard-phases
26326 (replace 'check
26327 (lambda* (#:key tests? test-flags #:allow-other-keys)
26328 (if tests?
26329 (apply invoke "python" "-m" "unittest" test-flags)
26330 (format #t "test suite not run.~%")))))))
26331 (native-inputs
26332 (list python-cloudpickle
26333 python-dill
26334 python-msgpack
26335 python-setuptools
26336 python-wheel))
26337 (propagated-inputs
26338 (list python-serpent))
26339 (home-page "https://pyro4.readthedocs.io")
26340 (synopsis "Distributed object middleware for Python")
26341 (description
26342 "Pyro enables you to build applications in which objects can talk to each
26343other over the network. You can just use normal Python method calls to call
26344objects on other machines, also known as remote procedure calls (RPC).")
26345 (license license:expat)))
26346
26347(define-public python-phonenumbers
26348 (package
26349 (name "python-phonenumbers")
26350 (version "8.13.37")
26351 (source
26352 (origin
26353 (method git-fetch)
26354 (uri (git-reference
26355 (url "https://github.com/daviddrysdale/python-phonenumbers")
26356 (commit (string-append "v" version))))
26357 (file-name (git-file-name name version))
26358 (sha256
26359 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
26360 (build-system pyproject-build-system)
26361 (arguments
26362 (list
26363 #:test-backend #~'custom
26364 #:test-flags #~(list "-m" "testwrapper")
26365 #:phases
26366 #~(modify-phases %standard-phases
26367 (add-after 'unpack 'chdir
26368 (lambda _
26369 (chdir "python"))))))
26370 (propagated-inputs (list python-protobuf))
26371 (native-inputs (list python-setuptools))
26372 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
26373 (synopsis "Python library for dealing with international phone numbers")
26374 (description
26375 "This package provides a Python port of Google's libphonenumber library.")
26376 (license license:asl2.0)))
26377
26378(define-public python-heapdict
26379 (package
26380 (name "python-heapdict")
26381 (version "1.0.1")
26382 (source
26383 (origin
26384 (method url-fetch)
26385 (uri (pypi-uri "HeapDict" version))
26386 (sha256
26387 (base32
26388 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
26389 (build-system pyproject-build-system)
26390 (arguments (list #:test-backend #~'unittest))
26391 (native-inputs (list python-setuptools))
26392 (home-page "http://stutzbachenterprises.com/")
26393 (synopsis "Heap with decrease-key and increase-key operations")
26394 (description
26395 "heapdict implements the MutableMapping ABC, meaning it works pretty much
26396like a regular Python @code{dict}. It’s designed to be used as a priority
26397queue.")
26398 (license license:bsd-3)))
26399
26400(define-public python-send2trash
26401 (package
26402 (name "python-send2trash")
26403 (version "1.8.2")
26404 (source
26405 (origin (method git-fetch)
26406 ;; Source tarball on PyPI doesn't include tests.
26407 (uri (git-reference
26408 (url "https://github.com/arsenetar/send2trash")
26409 (commit version)))
26410 (file-name (git-file-name name version))
26411 (sha256
26412 (base32
26413 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
26414 (build-system pyproject-build-system)
26415 (arguments
26416 (list
26417 #:phases
26418 '(modify-phases %standard-phases
26419 (add-before 'check 'pre-check
26420 (lambda _ (setenv "HOME" "/tmp"))))))
26421 (native-inputs (list python-pytest python-setuptools python-wheel))
26422 (home-page "https://github.com/arsenetar/send2trash")
26423 (synopsis "Send files to the user's @file{~/Trash} directory")
26424 (description "This package provides a Python library to send files to the
26425user's @file{~/Trash} directory.")
26426 (license license:bsd-3)))
26427
26428(define-public python-pyfavicon
26429 (package
26430 (name "python-pyfavicon")
26431 (version "0.1.1")
26432 (source
26433 (origin
26434 (method git-fetch)
26435 (uri (git-reference
26436 (url "https://github.com/bilelmoussaoui/pyfavicon")
26437 (commit version)))
26438 (file-name (git-file-name name version))
26439 (sha256
26440 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
26441 (build-system pyproject-build-system)
26442 (arguments
26443 (list
26444 #:test-backend #~'unittest
26445 #:test-flags
26446 #~(list "-k" (string-join (list
26447 ;; Socket name resolution fails.
26448 "not test_url_icon_link_type"
26449 "test_icon_sizes"
26450 ;; Tuples differ.
26451 "test_largest_icon")
26452 " and not "))))
26453 (native-inputs (list python-setuptools))
26454 (propagated-inputs
26455 (list python-aiohttp python-beautifulsoup4 python-pillow))
26456 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
26457 (synopsis "Async favicon fetcher")
26458 (description
26459 "@code{pyfavicon} is an async favicon fetcher.")
26460 (license license:expat)))
26461
26462(define-public python-gyp
26463 ;; Google does not release versions.
26464 (let ((commit "1615ec326858f8c2bd8f30b3a86ea71830409ce4")
26465 (revision "2"))
26466 (package
26467 (name "python-gyp")
26468 (version (git-version "0.0.0" revision commit))
26469 (source
26470 (origin
26471 (method git-fetch)
26472 (uri (git-reference
26473 (url "https://chromium.googlesource.com/external/gyp")
26474 (commit commit)))
26475 (file-name (git-file-name name version))
26476 (sha256
26477 (base32 "02rnmw7k2r33x5nbb5xb8kk170hk0s1wmwfqpsx4cij1wbi4bqhk"))))
26478 (build-system pyproject-build-system)
26479 (arguments
26480 (list
26481 #:test-flags
26482 #~(list "--ignore-glob=test/win/**/*.py")
26483 #:phases
26484 #~(modify-phases %standard-phases
26485 (add-after 'unpack 'remove-six-requirements
26486 (lambda _
26487 (substitute* "pylib/gyp/generator/ninja.py"
26488 (("six\\.ensure_binary\\(outputs\\[0\\]\\)")
26489 "outputs[0].encode('utf-8')")
26490 (("import six")
26491 ""))
26492 (substitute* '("pylib/gyp/common.py"
26493 "pylib/gyp/msvs_emulation.py"
26494 "test/lib/TestGyp.py")
26495 (("from six\\.moves import collections_abc")
26496 "import collections")
26497 (("collections_abc")
26498 "collections.abc"))))
26499 (add-before 'check 'configure-tests
26500 (lambda _
26501 (setenv "PYTHONPATH"
26502 (string-append (getcwd) "/test/lib:"
26503 (getenv "GUIX_PYTHONPATH"))))))))
26504 (native-inputs (list python-pytest python-setuptools))
26505 (home-page "https://gyp.gsrc.io/")
26506 (synopsis "GYP is a Meta-Build system")
26507 (description
26508 "GYP builds build systems for large, cross platform applications.
26509It can be used to generate XCode projects, Visual Studio projects, Ninja build
26510files, and Makefiles.")
26511 (license license:bsd-3))))
26512
26513(define-public python-funcy
26514 (package
26515 (name "python-funcy")
26516 (version "1.11")
26517 (source
26518 (origin
26519 (method git-fetch)
26520 (uri (git-reference
26521 (url "https://github.com/Suor/funcy")
26522 (commit version)))
26523 (sha256
26524 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
26525 (file-name (git-file-name name version))))
26526 (build-system pyproject-build-system)
26527 (native-inputs
26528 (list python-pytest python-whatever python-setuptools python-wheel))
26529 (home-page "https://github.com/Suor/funcy")
26530 (synopsis "Functional tools")
26531 (description "@code{funcy} is a library that provides functional tools.
26532Examples are:
26533@enumerate
26534@item merge - Merges collections of the same type
26535@item walk - Type-preserving map
26536@item select - Selects a part of a collection
26537@item take - Takes the first n items of a collection
26538@item first - Takes the first item of a collection
26539@item remove - Predicated-removes items of a collection
26540@item concat - Concatenates two collections
26541@item flatten - Flattens a collection with subcollections
26542@item distinct - Returns only distinct items
26543@item split - Predicated-splits a collection
26544@item split_at - Splits a collection at a given item
26545@item group_by - Groups items by group
26546@item pairwise - Pairs off adjacent items
26547@item partial - Partially-applies a function
26548@item curry - Curries a function
26549@item compose - Composes functions
26550@item complement - Complements a predicate
26551@item all_fn - \"all\" with predicate
26552@end enumerate")
26553 (license license:bsd-3)))
26554
26555(define-public python-funcy-1.14
26556 (package/inherit python-funcy
26557 (name "python-funcy")
26558 (version "1.14")
26559 (source
26560 (origin
26561 (method git-fetch)
26562 (uri (git-reference
26563 (url "https://github.com/Suor/funcy")
26564 (commit version)))
26565 (sha256
26566 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
26567 (file-name (git-file-name name version))))))
26568
26569(define-public python-isoweek
26570 (package
26571 (name "python-isoweek")
26572 (version "1.3.3")
26573 (source
26574 (origin
26575 (method url-fetch)
26576 (uri (pypi-uri "isoweek" version))
26577 (sha256
26578 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
26579 (build-system pyproject-build-system)
26580 (arguments (list #:test-backend #~'unittest))
26581 (native-inputs (list python-setuptools))
26582 (home-page "https://github.com/gisle/isoweek")
26583 (synopsis "Objects representing a week")
26584 (description "The @code{isoweek} module provide the class Week that
26585implements the week definition of ISO 8601. This standard also defines
26586a notation for identifying weeks; yyyyWww (where the W is a literal).
26587Week instances stringify to this form.")
26588 (license license:bsd-3)))
26589
26590(define-public bpython
26591 (package
26592 (name "bpython")
26593 (version "0.25")
26594 (source
26595 (origin
26596 (method url-fetch)
26597 (uri (pypi-uri "bpython" version))
26598 (sha256
26599 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
26600 (build-system pyproject-build-system)
26601 (arguments
26602 (list
26603 #:test-flags
26604 ;; Tests can't import curtsies, pygments and urwid.
26605 #~(list "-k" (string-join
26606 (list "not test_issue108"
26607 "test_issue133")
26608 " and not " ))
26609 #:phases
26610 #~(modify-phases %standard-phases
26611 (add-after 'wrap 'add-aliases
26612 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
26613 (lambda _
26614 (for-each
26615 (lambda (old new)
26616 (symlink old (string-append #$output "/bin/" new)))
26617 '("bpython" "bpython-urwid" "bpdb")
26618 '("bpython3" "bpython3-urwid" "bpdb3")))))))
26619 (native-inputs
26620 (list python-mock
26621 python-pytest
26622 python-setuptools))
26623 (propagated-inputs
26624 (list python-curtsies
26625 python-cwcwidth
26626 python-greenlet
26627 python-pygments
26628 python-pyxdg
26629 python-requests
26630 ;; [optional]
26631 python-pyperclip
26632 python-jedi
26633 python-urwid-2
26634 python-watchdog))
26635 (home-page "https://bpython-interpreter.org/")
26636 (synopsis "Fancy interface to the Python interpreter")
26637 (description "Bpython is a fancy interface to the Python
26638interpreter. bpython's main features are
26639
26640@enumerate
26641@item in-line syntax highlighting,
26642@item readline-like autocomplete with suggestions displayed as you type,
26643@item expected parameter list for any Python function,
26644@item \"rewind\" function to pop the last line of code from memory and
26645 re-evaluate,
26646@item send the code you've entered off to a pastebin,
26647@item save the code you've entered to a file, and
26648@item auto-indentation.
26649@end enumerate")
26650 (license license:expat)))
26651
26652(define-public python-pyinotify
26653 (package
26654 (name "python-pyinotify")
26655 (version "0.9.6")
26656 (source
26657 (origin
26658 (method git-fetch)
26659 (uri (git-reference
26660 (url "https://github.com/seb-m/pyinotify")
26661 (commit version)))
26662 (file-name (git-file-name name version))
26663 (sha256
26664 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
26665 (build-system pyproject-build-system)
26666 (arguments
26667 (list
26668 #:tests? #f ;no tests
26669 #:phases
26670 #~(modify-phases %standard-phases
26671 (add-after 'unpack 'drop-shebang
26672 (lambda _
26673 ;; Dropping this shebang prevents the build system from adding
26674 ;; python-wrapper as an input, reducing package closure size from
26675 ;; ~200 MiB to ~0.2 MiB.
26676 (substitute* "python3/pyinotify.py"
26677 (("#!/usr/bin/env python") "")))))))
26678 (native-inputs
26679 (list python-setuptools))
26680 (home-page "https://github.com/seb-m/pyinotify")
26681 (synopsis "Python library for monitoring inotify events")
26682 (description
26683 "@code{pyinotify} provides a Python interface for monitoring file system
26684events on Linux.")
26685 (license license:expat)))
26686
26687(define-public python-pyinotify-cli
26688 (package
26689 (inherit python-pyinotify)
26690 (name "python-pyinotify-cli")
26691 (arguments
26692 (substitute-keyword-arguments (package-arguments python-pyinotify)
26693 ((#:phases phases #~%standard-phases)
26694 #~(modify-phases #$phases
26695 (delete 'drop-shebang)
26696 (add-after 'install 'install-entrypoint
26697 (lambda _
26698 (let ((entrypoint
26699 (string-append #$output "/lib/python"
26700 (python-version (which "python"))
26701 "/site-packages/pyinotify.py"))
26702 (bin (string-append #$output "/bin")))
26703 (mkdir-p bin)
26704 (invoke "chmod" "+x" entrypoint)
26705 (symlink
26706 entrypoint (string-append #$output "/bin/pyinotify")))))))))
26707 (description
26708 "This package provides, in addition to the @code{pyinotify} Python library,
26709a command line application exposing the same functionality.")))
26710
26711(define-public python-more-itertools
26712 (package
26713 (name "python-more-itertools")
26714 (version "10.6.0")
26715 (source
26716 (origin
26717 (method url-fetch)
26718 (uri (pypi-uri "more-itertools" version))
26719 (sha256
26720 (base32
26721 "0fzfnfga0jdx217kff57lx3pam76162i0dd0nsgwqccw038zmmrc"))
26722 (snippet
26723 ;; distutils.errors.DistutilsOptionError: No configuration found for
26724 ;; dynamic 'description'. Some dynamic fields need to be specified via
26725 ;; `tool.setuptools.dynamic`others must be specified via the equivalent
26726 ;; attribute in `setup.py`.
26727 '(delete-file "setup.py"))))
26728 (build-system pyproject-build-system)
26729 (arguments
26730 (list
26731 #:phases
26732 #~(modify-phases %standard-phases
26733 (replace 'check
26734 (lambda* (#:key tests? #:allow-other-keys)
26735 (when tests?
26736 (invoke "python" "-m" "unittest")))))))
26737 (native-inputs
26738 (list python-flit-core))
26739 (home-page "https://github.com/erikrose/more-itertools")
26740 (synopsis "More routines for operating on iterables, beyond itertools")
26741 (description "Python's built-in @code{itertools} module implements a
26742number of iterator building blocks inspired by constructs from APL, Haskell,
26743and SML. @code{more-itertools} includes additional building blocks for
26744working with iterables.")
26745 (license license:expat)))
26746
26747(define-public python-latexcodec
26748 (package
26749 (name "python-latexcodec")
26750 (version "3.0.1")
26751 (source
26752 (origin
26753 (method git-fetch)
26754 (uri (git-reference
26755 (url "https://github.com/mcmtroffaes/latexcodec/")
26756 (commit version)))
26757 (file-name (git-file-name name version))
26758 (sha256
26759 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
26760 (build-system pyproject-build-system)
26761 (native-inputs (list python-pytest python-setuptools))
26762 (home-page "https://readthedocs.org/projects/latexcodec/")
26763 (synopsis "Work with LaTeX code in Python")
26764 (description "Lexer and codec to work with LaTeX code in Python.")
26765 (license license:expat)))
26766
26767(define-public python-pybloom-live
26768 (package
26769 (name "python-pybloom-live")
26770 (version "4.0.0")
26771 (source (origin
26772 (method url-fetch)
26773 (uri (pypi-uri "pybloom_live" version))
26774 (sha256
26775 (base32
26776 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
26777 (build-system pyproject-build-system)
26778 (propagated-inputs (list python-bitarray python-xxhash))
26779 (native-inputs (list python-pytest python-setuptools python-wheel))
26780 (home-page "https://github.com/joseph-fox/python-bloomfilter")
26781 (synopsis "Bloom filter")
26782 (description "This package provides a scalable Bloom filter implemented in
26783Python.")
26784 (license license:expat)))
26785
26786;; XXX: Not maintained since 2020.
26787(define-public python-pybktree
26788 (package
26789 (name "python-pybktree")
26790 (version "1.1")
26791 (source
26792 (origin
26793 (method url-fetch)
26794 (uri (pypi-uri "pybktree" version))
26795 (sha256
26796 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
26797 (build-system pyproject-build-system)
26798 (arguments
26799 (list #:tests? #f)) ;no tests provided
26800 (native-inputs (list python-setuptools))
26801 (home-page "https://github.com/Jetsetter/pybktree")
26802 (synopsis "Pythonic BK-tree data structure")
26803 (description
26804 "This package provides a BK-tree data structure to allow fast querying of
26805close matches in Python.")
26806 (license license:expat)))
26807
26808(define-public python-pybtex
26809 (package
26810 (name "python-pybtex")
26811 (version "0.25.0")
26812 (source
26813 (origin
26814 (method git-fetch)
26815 (uri (git-reference
26816 (url "https://codeberg.org/pybtex/pybtex")
26817 (commit version)))
26818 (file-name (git-file-name name version))
26819 (sha256
26820 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
26821 (build-system pyproject-build-system)
26822 (native-inputs (list python-pytest python-setuptools))
26823 (propagated-inputs (list python-latexcodec python-pyyaml))
26824 (home-page "https://pybtex.org/")
26825 (synopsis "BibTeX-compatible bibliography processor")
26826 (description
26827 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
26828You can simply type pybtex instead of bibtex.")
26829 (license license:expat)))
26830
26831(define-public python-pybtex-apa-style
26832 (package
26833 (name "python-pybtex-apa-style")
26834 (version "1.3")
26835 (source
26836 (origin
26837 (method url-fetch)
26838 (uri (pypi-uri "pybtex-apa-style" version))
26839 (sha256
26840 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
26841 (build-system pyproject-build-system)
26842 (arguments
26843 (list
26844 #:test-backend #~'custom
26845 #:test-flags
26846 #~(list "-c" (string-append "import sys, pybtex.plugin;"
26847 " sys.exit('apa' not"
26848 " in pybtex.plugin.enumerate_plugin_names"
26849 "('pybtex.style.labels'))"))))
26850 (native-inputs (list python-pybtex python-setuptools))
26851 (home-page "https://github.com/naeka/pybtex-apa-style")
26852 (synopsis "APA style for pybtex")
26853 (description
26854 "This package provides support for the APA style within pybtex.")
26855 (license license:expat)))
26856
26857(define-public python-onetimepass
26858 (package
26859 (name "python-onetimepass")
26860 (version "1.0.1")
26861 (source
26862 (origin
26863 (method git-fetch)
26864 (uri (git-reference
26865 (url "https://github.com/tadeck/onetimepass/")
26866 (commit (string-append "v" version))))
26867 (file-name (git-file-name name version))
26868 (sha256
26869 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
26870 (build-system pyproject-build-system)
26871 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
26872 (native-inputs (list python-setuptools))
26873 (propagated-inputs (list python-six))
26874 (home-page "https://github.com/tadeck/onetimepass/")
26875 (synopsis "One-time password library")
26876 (description
26877 "Python one-time password library for HMAC-based (HOTP) and time-based
26878(TOTP) passwords.")
26879 (license license:expat)))
26880
26881(define-public python-online-judge-api-client
26882 (package
26883 (name "python-online-judge-api-client")
26884 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
26885 (revision . "0")))
26886 (version (git-version "10.10.1"
26887 (assoc-ref properties 'revision)
26888 (assoc-ref properties 'commit)))
26889 (source
26890 (origin
26891 (method git-fetch)
26892 (uri (git-reference
26893 (url "https://github.com/online-judge-tools/api-client")
26894 (commit (assoc-ref properties 'commit))))
26895 (file-name (git-file-name name version))
26896 (sha256
26897 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
26898 (patches
26899 (search-patches "python-online-judge-api-client-tests.patch"))
26900 ))
26901 (build-system pyproject-build-system)
26902 (arguments
26903 (list
26904 #:test-flags
26905 #~(list "--ignore-glob=tests/get_contest_*.py"
26906 "--ignore-glob=tests/get_problem_*.py")
26907 #:phases
26908 #~(modify-phases %standard-phases
26909 (add-before 'check 'configure-tests
26910 (lambda* (#:key inputs outputs #:allow-other-keys)
26911 (delete-file-recursively
26912 (string-append (site-packages inputs outputs)
26913 "/tests"))
26914 (call-with-output-file "pytest.ini"
26915 (lambda (port)
26916 (format port "\
26917[pytest]
26918python_files = tests/*.py"))))))))
26919 (native-inputs (list python-pytest python-setuptools))
26920 (propagated-inputs
26921 (list python-appdirs
26922 python-beautifulsoup4
26923 python-colorlog
26924 python-lxml
26925 python-requests
26926 python-toml
26927 python-jsonschema))
26928 (home-page "https://github.com/online-judge-tools/api-client")
26929 (synopsis "API client for various online judges")
26930 (description
26931 "This is an API client for various online judges, used as the backend
26932library of @code{oj} command. You can use the Python library
26933(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
26934command) which talks JSON compatible with jmerle/competitive-companion.")
26935 (license license:expat)))
26936
26937(define-public online-judge-tools
26938 (package
26939 (name "online-judge-tools")
26940 (version "11.5.1")
26941 ;; Source distributions are not uploaded to PyPI.
26942 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
26943 (source
26944 (origin
26945 (method git-fetch)
26946 (uri (git-reference
26947 (url "https://github.com/online-judge-tools/oj")
26948 (commit (string-append "v" version))))
26949 (file-name (git-file-name name version))
26950 (sha256
26951 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
26952 (patches (search-patches "online-judge-tools.patch"))))
26953 (build-system pyproject-build-system)
26954 (arguments
26955 (list
26956 #:test-flags
26957 ;; These tests require network connections
26958 #~(list "--ignore=tests/command_version.py")))
26959 (native-inputs (list python-pytest python-setuptools))
26960 (inputs (list time))
26961 (propagated-inputs (list python-online-judge-api-client python-colorama
26962 python-requests))
26963 (home-page "https://github.com/online-judge-tools/oj")
26964 (synopsis "Command to help solving problems on various online judges")
26965 (description
26966 "@command{oj} is a command line tool to help solving problems on
26967various online judges. This command automates downloading sample
26968cases, generating additional test cases, testing for your code, and
26969submitting it.")
26970 (license license:expat)))
26971
26972(define-public python-mpv-jsonipc
26973 (package
26974 (name "python-mpv-jsonipc")
26975 (version "1.2.0")
26976 (source
26977 (origin
26978 (method url-fetch)
26979 (uri (pypi-uri "python-mpv-jsonipc" version))
26980 (sha256
26981 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
26982 (build-system pyproject-build-system)
26983 (arguments (list #:tests? #f)) ;No test suite.
26984 (native-inputs (list python-setuptools python-wheel))
26985 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
26986 (synopsis "Python API to control MPV using JSON IPC")
26987 (description "Python MPV JSONIPC implements an interface similar to
26988python-mpv, but it uses the JSON IPC protocol instead of the C API.")
26989 (license license:asl2.0)))
26990
26991(define-public python-jellyfin-apiclient
26992 (package
26993 (name "python-jellyfin-apiclient")
26994 (version "1.11.0")
26995 (source
26996 (origin
26997 (method git-fetch)
26998 (uri
26999 (git-reference
27000 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27001 (commit (string-append "v" version))))
27002 (sha256
27003 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27004 (build-system pyproject-build-system)
27005 (native-inputs (list python-setuptools python-pytest python-wheel))
27006 (propagated-inputs (list python-certifi python-requests python-urllib3
27007 python-websocket-client))
27008 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27009 (synopsis "Python API client for Jellyfin")
27010 (description "The Jellyfin ApiClient Python package makes it possible
27011to use the Jellyfin API from Python. It was extracted from the Jellyfin
27012Kodi plugin.")
27013 (license license:gpl3+)))
27014
27015(define-public python-parso
27016 (package
27017 (name "python-parso")
27018 (version "0.8.4")
27019 (source
27020 (origin
27021 (method url-fetch)
27022 (uri (pypi-uri "parso" version))
27023 (sha256
27024 (base32 "0bdr38l6p7d9q8agxljdbzm4158grkp1sms5lfcr1f8g4ic7nfpb"))))
27025 (build-system pyproject-build-system)
27026 (native-inputs
27027 (list python-pytest
27028 python-setuptools
27029 python-wheel))
27030 (home-page "https://github.com/davidhalter/parso")
27031 (synopsis "Python Parser")
27032 (description "Parso is a Python parser that supports error recovery and
27033round-trip parsing for different Python versions (in multiple Python versions).
27034Parso is also able to list multiple syntax errors in your Python file.")
27035 (license license:expat)))
27036
27037(define-public python-async-generator
27038 (package
27039 (name "python-async-generator")
27040 (version "1.10")
27041 (source
27042 (origin
27043 (method url-fetch)
27044 (uri (pypi-uri "async_generator" version))
27045 (sha256
27046 (base32
27047 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27048 (build-system pyproject-build-system)
27049 (native-inputs
27050 (list python-pytest python-setuptools))
27051 (home-page "https://github.com/python-trio/async_generator")
27052 (synopsis "Async generators and context managers for Python 3.5+")
27053 (description "@code{async_generator} back-ports Python 3.6's native async
27054generators and Python 3.7's context managers into Python 3.5.")
27055 ;; Dual licensed.
27056 (license (list license:expat license:asl2.0))))
27057
27058(define-public python-async-timeout
27059 (package
27060 (name "python-async-timeout")
27061 (version "5.0.1")
27062 (source
27063 (origin
27064 (method url-fetch)
27065 (uri (pypi-uri "async_timeout" version))
27066 (sha256
27067 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27068 (build-system pyproject-build-system)
27069 (arguments
27070 (list
27071 #:phases
27072 #~(modify-phases %standard-phases
27073 (add-after 'unpack 'fix-pytest-config
27074 (lambda _
27075 ;; Drop test coverage requirements
27076 (substitute* "setup.cfg"
27077 ((".*--cov.*") "")))))))
27078 (native-inputs
27079 (list python-pytest
27080 python-pytest-asyncio
27081 python-setuptools
27082 python-wheel))
27083 (home-page "https://github.com/aio-libs/async-timeout")
27084 (synopsis "Timeout context manager for asyncio programs")
27085 (description
27086 "@code{async-timeout} provides a timeout timeout context manager
27087compatible with @code{asyncio}.")
27088 (license license:asl2.0)))
27089
27090(define-public python-async-timeout-4
27091 (package
27092 (inherit python-async-timeout)
27093 (name "python-async-timeout")
27094 (version "4.0.3")
27095 (source
27096 (origin
27097 (method url-fetch)
27098 (uri (pypi-uri "async-timeout" version))
27099 (sha256
27100 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27101
27102(define-public python-glob2
27103 (package
27104 (name "python-glob2")
27105 (version "0.7")
27106 (source
27107 (origin
27108 (method git-fetch)
27109 (uri (git-reference
27110 (url "https://github.com/miracle2k/python-glob2")
27111 (commit (string-append "v" version))))
27112 (file-name (git-file-name name version))
27113 (sha256
27114 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27115 (build-system pyproject-build-system)
27116 (arguments
27117 (list
27118 #:phases
27119 #~(modify-phases %standard-phases
27120 (add-after 'unpack 'patch-tests-for-pytest8
27121 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27122 (lambda _
27123 (substitute* "test.py"
27124 (("setup\\(") "setup_method(")
27125 (("teardown\\(") "teardown_method("))
27126 (rename-file "test.py" "glob2_test.py"))))))
27127 (native-inputs (list python-pytest python-setuptools))
27128 (home-page "https://github.com/miracle2k/python-glob2/")
27129 (synopsis "Extended Version of the python buildin glob module")
27130 (description "This is an extended version of the Python
27131@url{http://docs.python.org/library/glob.html, built-in glob module} which
27132adds:
27133
27134@itemize
27135@item The ability to capture the text matched by glob patterns, and return
27136those matches alongside the file names.
27137@item A recursive @code{**} globbing syntax, akin for example to the
27138@code{globstar} option of Bash.
27139@item The ability to replace the file system functions used, in order to glob
27140on virtual file systems.
27141@item Compatible with Python 2 and Python 3 (tested with 3.3).
27142@end itemize
27143
27144Glob2 currently based on the glob code from Python 3.3.1.")
27145 (license license:bsd-2)))
27146
27147(define-public python-gipc
27148 (package
27149 (name "python-gipc")
27150 (version "1.8.0")
27151 (source
27152 (origin
27153 (method git-fetch)
27154 (uri (git-reference
27155 (url "https://github.com/jgehrcke/gipc")
27156 (commit version)))
27157 (file-name (git-file-name name version))
27158 (sha256
27159 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27160 (build-system pyproject-build-system)
27161 (arguments
27162 (list
27163 #:phases
27164 #~(modify-phases %standard-phases
27165 (add-after 'unpack 'adjust-for-pytest-8
27166 (lambda _
27167 (substitute* "test/test_gipc.py"
27168 (("def setup") "def setup_method")
27169 (("def teardown") "def teardown_method")))))))
27170 (native-inputs
27171 (list python-pytest
27172 python-setuptools))
27173 (propagated-inputs
27174 (list python-gevent))
27175 (home-page "https://gehrcke.de/gipc/")
27176 (synopsis "Child process management in the context of gevent")
27177 (description
27178 "Usage of Python's multiprocessing package in a gevent-powered
27179application may raise problems. With @code{gipc}, process-based child
27180processes can safely be created anywhere within a gevent-powered
27181application.")
27182 (license license:expat)))
27183
27184(define-public python-beautifultable
27185 (package
27186 (name "python-beautifultable")
27187 (version "1.1.0")
27188 (source
27189 (origin
27190 (method git-fetch)
27191 (uri (git-reference
27192 (url "https://github.com/pri22296/beautifultable")
27193 (commit (string-append "v" version))))
27194 (file-name (git-file-name name version))
27195 (sha256
27196 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27197 (build-system pyproject-build-system)
27198 (arguments (list #:test-backend #~'unittest))
27199 (native-inputs (list python-pandas python-setuptools))
27200 (propagated-inputs (list python-wcwidth))
27201 (home-page "https://github.com/pri22296/beautifultable")
27202 (synopsis "Print ASCII tables for terminals")
27203 (description
27204 "@code{python-beautifultable} provides a class for easily printing
27205tabular data in a visually appealing ASCII format to a terminal.
27206
27207Features include, but are not limited to:
27208@itemize
27209@item Full customization of the look and feel of the table
27210@item Row and column accessors.
27211@item Full support for colors using ANSI sequences or any library.
27212@item Plenty of predefined styles and option to create custom ones.
27213@item Support for Unicode characters.
27214@item Supports streaming table when data is slow to retrieve.
27215@end itemize")
27216 (license license:expat)))
27217
27218(define-public python-globber
27219 (package
27220 (name "python-globber")
27221 (version "0.2.1")
27222 (source
27223 (origin
27224 (method git-fetch)
27225 (uri (git-reference
27226 (url "https://github.com/asharov/globber")
27227 (commit version)))
27228 (file-name (git-file-name name version))
27229 (sha256
27230 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
27231 (build-system pyproject-build-system)
27232 (native-inputs (list python-pytest python-setuptools))
27233 (home-page "https://github.com/asharov/globber")
27234 (synopsis "Library for string matching with glob patterns")
27235 (description
27236 "Globber is a Python library for matching file names against glob patterns.
27237In contrast to other glob-matching libraries, it matches arbitrary strings and
27238doesn't require the matched names to be existing files. In addition, it
27239supports the globstar @code{**} operator to match an arbitrary number of
27240path components.")
27241 (license license:asl2.0)))
27242
27243;; XXX: Not maintained since 2021.
27244(define-public python-git-hammer
27245 (package
27246 (name "python-git-hammer")
27247 (version "0.3.2")
27248 (source
27249 (origin
27250 (method git-fetch)
27251 (uri (git-reference
27252 (url "https://github.com/asharov/git-hammer")
27253 (commit version)))
27254 (file-name (git-file-name name version))
27255 (sha256
27256 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
27257 (build-system pyproject-build-system)
27258 (arguments
27259 (list
27260 #:phases
27261 #~(modify-phases %standard-phases
27262 (add-after 'unpack 'relax-requirements
27263 (lambda _
27264 (substitute* "setup.py"
27265 (("matplotlib <3.1") "matplotlib")))))))
27266 (native-inputs
27267 (list python-pytest
27268 python-setuptools))
27269 (propagated-inputs
27270 (list python-beautifultable
27271 python-dateutil
27272 python-gitpython
27273 python-globber
27274 python-matplotlib
27275 python-sqlalchemy
27276 python-sqlalchemy-utils))
27277 (home-page "https://github.com/asharov/git-hammer")
27278 (synopsis "Provide statistics for git repositories")
27279 (description
27280 "Git Hammer is a statistics tool for projects in git repositories. Its major
27281feature is tracking the number of lines authored by each person for every
27282commit, but it also includes some other useful statistics.")
27283 (license license:asl2.0)))
27284
27285(define-public python-gitignore-parser
27286 (package
27287 (name "python-gitignore-parser")
27288 (version "0.1.13")
27289 (source
27290 (origin
27291 (method git-fetch)
27292 (uri (git-reference
27293 (url "https://github.com/mherrmann/gitignore_parser")
27294 (commit (string-append "v" version))))
27295 (file-name (git-file-name name version))
27296 (sha256
27297 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
27298 (build-system pyproject-build-system)
27299 (arguments (list #:test-backend #~'unittest))
27300 (native-inputs (list python-setuptools))
27301 (home-page "https://github.com/mherrmann/gitignore_parser")
27302 (synopsis "Spec-compliant gitignore parser for Python")
27303 (description
27304 "This package provides a spec-compliant gitignore parser for Python.")
27305 (license license:expat)))
27306
27307(define-public python-fusepy
27308 (package
27309 (name "python-fusepy")
27310 (version "2.0.4")
27311 (source
27312 (origin
27313 (method git-fetch)
27314 (uri (git-reference
27315 (url "https://github.com/fusepy/fusepy")
27316 (commit (string-append "v" version))))
27317 (file-name (git-file-name name version))
27318 (sha256
27319 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
27320 (build-system pyproject-build-system)
27321 (arguments
27322 (list
27323 #:tests? #f ; No formalized tests.
27324 #:phases
27325 #~(modify-phases %standard-phases
27326 (add-before 'build 'set-library-file-name
27327 (lambda* (#:key inputs #:allow-other-keys)
27328 (substitute* "fuse.py"
27329 (("find_library\\('fuse'\\)")
27330 (format #f "~s"
27331 (search-input-file inputs "lib/libfuse.so")))))))))
27332 (native-inputs (list python-setuptools))
27333 (propagated-inputs (list fuse-2))
27334 (home-page "https://github.com/fusepy/fusepy")
27335 (synopsis "Simple ctypes bindings for FUSE")
27336 (description
27337 "Python module that provides a simple interface to FUSE and MacFUSE. The
27338binding is created using the standard @code{ctypes} library.")
27339 (license license:isc)))
27340
27341(define-public pybind11
27342 (package
27343 (name "pybind11")
27344 (version "2.13.6")
27345 (source (origin
27346 (method git-fetch)
27347 (uri (git-reference
27348 (url "https://github.com/pybind/pybind11")
27349 (commit (string-append "v" version))))
27350 (sha256
27351 (base32
27352 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
27353 (file-name (git-file-name name version))))
27354 (build-system cmake-build-system)
27355 (native-inputs
27356 `(("python" ,python-wrapper)
27357
27358 ;; The following dependencies are used for tests.
27359 ("python-pytest" ,python-pytest)
27360 ("catch" ,catch2-1)
27361 ("eigen" ,eigen)))
27362 (arguments
27363 (list
27364 #:configure-flags
27365 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27366 (assoc-ref %build-inputs "catch")
27367 "/include/catch"))
27368 #:modules '((guix build cmake-build-system)
27369 ((guix build gnu-build-system) #:prefix gnu:)
27370 (guix build utils))
27371 #:phases
27372 #~(modify-phases %standard-phases
27373 (replace 'check
27374 (lambda* (#:rest args)
27375 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27376 (add-after 'install 'install-python
27377 (lambda* (#:key outputs #:allow-other-keys)
27378 (let ((out (assoc-ref outputs "out")))
27379 (with-directory-excursion "../source"
27380 (setenv "PYBIND11_USE_CMAKE" "yes")
27381 (invoke "python" "setup.py" "install"
27382 "--single-version-externally-managed"
27383 "--root=/"
27384 (string-append "--prefix=" out)))))))))
27385 (home-page "https://github.com/pybind/pybind11/")
27386 (synopsis "Seamless operability between C++11 and Python")
27387 (description
27388 "@code{pybind11} is a lightweight header-only library that exposes C++
27389types in Python and vice versa, mainly to create Python bindings of existing
27390C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27391library: to minimize boilerplate code in traditional extension modules by
27392inferring type information using compile-time introspection.")
27393 (license license:bsd-3)))
27394
27395(define-public python-pooch
27396 (package
27397 (name "python-pooch")
27398 (version "1.8.1")
27399 (source
27400 (origin
27401 (method url-fetch)
27402 (uri (pypi-uri "pooch" version))
27403 (sha256
27404 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
27405 (build-system pyproject-build-system)
27406 (arguments
27407 (list
27408 #:test-flags
27409 '(list "-k"
27410 (string-append
27411 ;; We don't have the test archives
27412 "not test_decompress"
27413 " and not test_multiple_unpacking"
27414 " and not test_unpack_members_with_leading_dot"
27415 " and not test_unpacking"
27416 " and not test_unpacking_members_then_no_members"
27417 " and not test_unpacking_wrong_members_then_no_members"
27418 ;; These all require access to the internet
27419 " and not test_check_availability"
27420 " and not test_check_availability_invalid_downloader"
27421 " and not test_check_availability_on_ftp"
27422 " and not test_create_and_fetch"
27423 " and not test_downloader_arbitrary_progressbar"
27424 " and not test_fetch_with_downloader"
27425 " and not test_figshare_data_repository_versions"
27426 " and not test_load_registry_from_doi"
27427 " and not test_pooch_corrupted"
27428 " and not test_pooch_custom_url"
27429 " and not test_pooch_download"
27430 " and not test_pooch_download_retry"
27431 " and not test_pooch_download_retry_fails_eventually"
27432 " and not test_pooch_download_retry_off_by_default"
27433 " and not test_pooch_logging_level"
27434 " and not test_pooch_update"
27435 " and not test_retrieve"
27436 " and not test_retrieve_default_path"
27437 " and not test_retrieve_fname"
27438 " and not test_stream_download")
27439 "--ignore=pooch/tests/test_downloaders.py")))
27440 (native-inputs
27441 (list python-pytest
27442 python-setuptools-scm
27443 python-setuptools
27444 python-wheel))
27445 (propagated-inputs
27446 (list python-packaging python-platformdirs python-requests))
27447 (home-page "https://github.com/fatiando/pooch")
27448 (synopsis "Manage your Python library's sample data files")
27449 (description
27450 "Pooch manages your Python library's sample data files: it automatically
27451downloads and stores them in a local directory, with support for versioning
27452and corruption checks.")
27453 (license license:bsd-3)))
27454
27455(define-public python-fasteners
27456 (package
27457 (name "python-fasteners")
27458 (version "0.17.3")
27459 (source (origin
27460 ;; No tests in the pypi tarball
27461 (method git-fetch)
27462 (uri (git-reference
27463 (url "https://github.com/harlowja/fasteners")
27464 (commit version)))
27465 (file-name (git-file-name name version))
27466 (sha256
27467 (base32
27468 "0m0dxv8ljpkq99s3d1mib1zfb0ppx3h74h5yr8809zsrq2klfn0m"))))
27469 (build-system pyproject-build-system)
27470 (arguments
27471 `(#:phases (modify-phases %standard-phases
27472 (replace 'check
27473 (lambda* (#:key tests? #:allow-other-keys)
27474 (when tests?
27475 (invoke "pytest")))))))
27476 (native-inputs (list python-diskcache python-more-itertools
27477 python-setuptools python-pytest python-wheel))
27478 (home-page "https://github.com/harlowja/fasteners")
27479 (synopsis "Python package that provides useful locks")
27480 (description
27481 "This package provides a Python program that provides following locks:
27482
27483@itemize
27484@item Locking decorator
27485@item Reader-writer locks
27486@item Inter-process locks
27487@item Generic helpers
27488@end itemize\n")
27489 (license license:asl2.0)))
27490
27491(define-public python-requests-file
27492 (package
27493 (name "python-requests-file")
27494 (version "3.0.1")
27495 (source
27496 (origin
27497 (method git-fetch)
27498 (uri (git-reference
27499 (url "https://codeberg.org/dashea/requests-file")
27500 (commit version)))
27501 (file-name (git-file-name name version))
27502 (sha256
27503 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
27504 (build-system pyproject-build-system)
27505 (native-inputs (list python-pytest python-setuptools))
27506 (propagated-inputs (list python-requests))
27507 (home-page "https://codeberg.org/dashea/requests-file")
27508 (synopsis "File transport adapter for Requests")
27509 (description
27510 "Requests-File is a transport adapter for use with the Requests Python
27511library to allow local file system access via @code{file://} URLs.")
27512 (license license:asl2.0)))
27513
27514(define-public python-identify
27515 (package
27516 (name "python-identify")
27517 (version "2.6.14")
27518 (source
27519 (origin
27520 ;; There are no tests in the PyPI tarball.
27521 (method git-fetch)
27522 (uri (git-reference
27523 (url "https://github.com/chriskuehl/identify")
27524 (commit (string-append "v" version))))
27525 (file-name (git-file-name name version))
27526 (sha256
27527 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
27528 (build-system pyproject-build-system)
27529 (native-inputs
27530 (list python-pytest
27531 python-setuptools
27532 python-ukkonen))
27533 (home-page "https://github.com/chriskuehl/identify")
27534 (synopsis "File identification library for Python")
27535 (description
27536 "@code{identify} is a file identification library for Python. Given
27537a file (or some information about a file), return a set of standardized tags
27538identifying what the file is.")
27539 (license license:expat)))
27540
27541(define-public python-nodeenv
27542 (package
27543 (name "python-nodeenv")
27544 (version "1.8.0")
27545 (source
27546 (origin
27547 ;; There's no tarball in PyPI.
27548 (method git-fetch)
27549 (uri (git-reference
27550 (url "https://github.com/ekalinin/nodeenv")
27551 (commit version)))
27552 (file-name (git-file-name name version))
27553 (sha256
27554 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
27555 (build-system pyproject-build-system)
27556 (arguments
27557 (list #:test-flags
27558 #~(list "-k" (string-append
27559 "not test_smoke"
27560 " and not test_smoke_n_system_special_chars"))))
27561 (native-inputs
27562 (list python-coverage
27563 python-mock
27564 python-pytest
27565 python-setuptools
27566 python-wheel))
27567 (home-page "https://ekalinin.github.io/nodeenv/")
27568 (synopsis "Create isolated node.js environments")
27569 (description
27570 "Nodeenv (node.js virtual environment) is a tool to create isolated
27571node.js environments. It creates an environment that has its own installation
27572directories, that doesn't share libraries with other node.js virtual
27573environments.")
27574 (license license:bsd-3)))
27575
27576(define-public python-pynamecheap
27577 (package
27578 (name "python-pynamecheap")
27579 (version "0.0.3")
27580 (source
27581 (origin
27582 (method url-fetch)
27583 (uri (pypi-uri "PyNamecheap" version))
27584 (sha256
27585 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
27586 (build-system pyproject-build-system)
27587 (arguments (list #:tests? #f)) ; No tests.
27588 (native-inputs (list python-setuptools))
27589 (propagated-inputs (list python-requests))
27590 (home-page "https://github.com/Bemmu/PyNamecheap")
27591 (synopsis "Namecheap API client in Python")
27592 (description
27593 "PyNamecheap is a Namecheap API client in Python.")
27594 (license license:expat)))
27595
27596(define-public python-pynixutil
27597 (package
27598 (name "python-pynixutil")
27599 (version "0.5.0")
27600 (source
27601 (origin
27602 (method git-fetch)
27603 (uri (git-reference
27604 (url "https://github.com/nix-community/pynixutil")
27605 (commit version)))
27606 (file-name (git-file-name name version))
27607 (sha256
27608 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
27609 (build-system pyproject-build-system)
27610 (arguments
27611 (list
27612 #:test-flags
27613 ;; Tests require nix in the PATH.
27614 #~(list "--ignore=tests/test_drv.py")
27615 #:phases
27616 #~(modify-phases %standard-phases
27617 (add-after 'unpack 'use-poetry-core
27618 (lambda _
27619 ;; Patch to use the core poetry API.
27620 (substitute* "pyproject.toml"
27621 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
27622 (native-inputs
27623 (list python-poetry-core
27624 python-pytest))
27625 (home-page "https://github.com/nix-community/pynixutil")
27626 (synopsis "Utility functions for working with data from Nix in Python")
27627 (description
27628 "@code{pynixutil} provides functions for base32 encoding/decoding and
27629derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
27630@code{drvparse()}.")
27631 (license license:expat)))
27632
27633(define-public python-dns-lexicon
27634 (package
27635 (name "python-dns-lexicon")
27636 (version "3.21.1")
27637 (source
27638 (origin
27639 (method git-fetch)
27640 (uri (git-reference
27641 (url "https://github.com/dns-lexicon/dns-lexicon")
27642 (commit (string-append "v" version))))
27643 (file-name (git-file-name name version))
27644 (sha256
27645 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
27646 (build-system pyproject-build-system)
27647 (arguments
27648 (list
27649 ;; Integration tests require network access.
27650 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
27651 #:phases
27652 #~(modify-phases %standard-phases
27653 (add-before 'check 'configure-tests
27654 (lambda _
27655 (setenv "HOME" (getcwd)))))))
27656 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
27657 (propagated-inputs
27658 (list python-beautifulsoup4
27659 python-cryptography
27660 python-dnspython
27661 python-importlib-metadata
27662 python-pyotp
27663 python-pyyaml
27664 python-requests
27665 python-tldextract))
27666 (home-page "https://github.com/dns-lexicon/dns-lexicon")
27667 (synopsis "Manipulate DNS records on various DNS providers")
27668 (description
27669 "Lexicon provides a way to manipulate DNS records on multiple DNS
27670providers in a standardized way. It has a CLI but it can also be used as a
27671Python library. It was designed to be used in automation, specifically with
27672Let's Encrypt.")
27673 (license license:expat)))
27674
27675(define-public python-cfgv
27676 (package
27677 (name "python-cfgv")
27678 (version "3.4.0")
27679 (source
27680 (origin
27681 ;; There are no tests in the PyPI tarball.
27682 (method git-fetch)
27683 (uri (git-reference
27684 (url "https://github.com/asottile/cfgv")
27685 (commit (string-append "v" version))))
27686 (file-name (git-file-name name version))
27687 (sha256
27688 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
27689 (build-system pyproject-build-system)
27690 (native-inputs
27691 (list python-pytest python-setuptools python-wheel))
27692 (home-page "https://github.com/asottile/cfgv")
27693 (synopsis "Configuration validation library")
27694 (description
27695 "This library helps to validate configuration files and produce human
27696readable error messages.")
27697 (license license:expat)))
27698
27699(define-public python-commandlines
27700 (package
27701 (name "python-commandlines")
27702 (version "0.4.1")
27703 (source
27704 (origin
27705 (method git-fetch)
27706 (uri (git-reference
27707 (url "https://github.com/chrissimpkins/commandlines")
27708 (commit (string-append "v" version))))
27709 (file-name (git-file-name name version))
27710 (sha256
27711 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
27712 (build-system pyproject-build-system)
27713 (native-inputs (list python-pytest python-setuptools))
27714 (home-page "https://github.com/chrissimpkins/commandlines")
27715 (synopsis "Command line argument to object parsing library")
27716 (description
27717 "@code{Commandlines} is a Python library for command line application
27718development that supports command line argument parsing, command string
27719validation testing and application logic.")
27720 (license license:expat)))
27721
27722;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
27723;; python-numba. They have a very unflexible relationship.
27724(define-public python-numba
27725 (package
27726 (name "python-numba")
27727 (version "0.62.1")
27728 (source
27729 (origin
27730 (method url-fetch)
27731 (uri (pypi-uri "numba" version))
27732 (sha256
27733 (base32
27734 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
27735 (build-system pyproject-build-system)
27736 (arguments
27737 (list
27738 ;; tests: 10723 tests (skipped=708, expected failures=23)
27739 #:test-backend #~'custom
27740 #:test-flags
27741 ;; Check <buildscripts> directory for more build/tests examples.
27742 #~(list "-m" "numba.runtests"
27743 "--exclude-tags='long_running'"
27744 "--multiprocess" (number->string (min 8 (parallel-job-count)))
27745 "-b"
27746 "-v"
27747 "--"
27748 "numba.tests")
27749 #:phases
27750 #~(modify-phases %standard-phases
27751 (add-after 'unpack 'disable-failing-tests
27752 (lambda _
27753 ;; This expects to be able to run pip.
27754 (delete-file "numba/tests/test_sysinfo.py")
27755 ;; This fails nondeterministically, possibly depending on CPU.
27756 ;; https://github.com/numba/numba/issues/8282.
27757 (substitute* "numba/tests/test_function_type.py"
27758 (("def test_wrapper_address_protocol_libm")
27759 "def disabled_test_wrapper_address_protocol_libm"))
27760 (substitute* "numba/tests/test_caching.py"
27761 ;; RuntimeError: cannot cache function 'simple_usecase': no
27762 ;; locator available for file
27763 (("def test_non_creatable_pycache")
27764 "def __off_test_non_creatable_pycache")
27765 (("def test_non_writable_pycache")
27766 "def __off_test_non_writable_pycache")
27767 ;; AssertionError: None is not an instance of <class
27768 ;; 'numba.core.caching.UserWideCacheLocator'>
27769 (("def test_frozen")
27770 "def __off_test_frozen"))))
27771 (add-before 'build 'disable-proprietary-features
27772 (lambda _
27773 (setenv "NUMBA_DISABLE_HSA" "1")
27774 (setenv "NUMBA_DISABLE_CUDA" "1")))
27775 (add-before 'check 'pre-check
27776 (lambda _
27777 (setenv "HOME" "/tmp")
27778 ;; XXX: Something is wrong with the PYTHONPATH when running the
27779 ;; tests from the build directory, as it complains about not
27780 ;; being able to import certain modules.
27781 (delete-file-recursively "numba"))))))
27782 (native-inputs
27783 (list python-setuptools))
27784 (propagated-inputs
27785 (list python-llvmlite
27786 python-numpy))
27787 (home-page "https://numba.pydata.org")
27788 (synopsis "Compile Python code using LLVM")
27789 (description "Numba gives you the power to speed up your applications with
27790high performance functions written directly in Python. With a few
27791annotations, array-oriented and math-heavy Python code can be just-in-time
27792compiled to native machine instructions, similar in performance to C, C++ and
27793Fortran, without having to switch languages or Python interpreters.
27794
27795Numba works by generating optimized machine code using the LLVM compiler
27796infrastructure at import time, runtime, or statically (using the included pycc
27797tool).")
27798 (license license:bsd-3)))
27799
27800(define-public python-numcodecs
27801 (package
27802 (name "python-numcodecs")
27803 (version "0.13.1")
27804 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
27805 ;;(version "0.14.1")
27806 (source
27807 (origin
27808 (method url-fetch)
27809 (uri (pypi-uri "numcodecs" version))
27810 (sha256
27811 (base32
27812 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
27813 (modules '((guix build utils)))
27814 (snippet
27815 '(begin
27816 ;; Only add CFLAGS on architectures where they are supported
27817 (substitute* "setup.py"
27818 (("import sys")
27819 "import sys\nimport platform")
27820 (("os\\.name == 'posix'")
27821 (string-append "os.name + platform.machine() == 'posixx86_64' or"
27822 " os.name + platform.machine() == 'posixx86'")))
27823 (delete-file-recursively "c-blosc")))))
27824 (build-system pyproject-build-system)
27825 (arguments
27826 (list
27827 #:test-flags
27828 ;; zarr isn't available, because it dependes on this package.
27829 '(list "-k" "not test_zarr3_import")
27830 #:phases
27831 '(modify-phases %standard-phases
27832 (add-after 'unpack 'disable-avx2
27833 (lambda _
27834 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
27835 (add-after 'unpack 'unbundle
27836 (lambda _
27837 (substitute* "setup.py"
27838 (("sources=sources \\+ blosc_sources,")
27839 "sources=sources,")
27840 (("extra_compile_args=extra_compile_args")
27841 "extra_compile_args=list(base_compile_args)")
27842 (("'numcodecs.zstd',")
27843 "'numcodecs.zstd', libraries=['zstd'], ")
27844 (("'numcodecs.lz4',")
27845 "'numcodecs.lz4', libraries=['lz4'], ")
27846 (("'numcodecs.blosc',")
27847 "'numcodecs.blosc', libraries=['blosc'], "))))
27848 (add-before 'check 'build-extensions
27849 (lambda _
27850 ;; Cython extensions have to be built before running the tests.
27851 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
27852 (inputs
27853 (list c-blosc lz4 zlib
27854 `(,zstd "lib")))
27855 (propagated-inputs
27856 (list python-google-crc32c
27857 python-importlib-metadata
27858 python-msgpack
27859 python-numpy))
27860 (native-inputs
27861 (list python-cython
27862 python-py-cpuinfo
27863 python-pydata-sphinx-theme
27864 python-pytest
27865 python-pytest-cov
27866 python-setuptools
27867 python-setuptools-scm ;for correct version
27868 python-sphinx
27869 python-sphinx-issues
27870 python-wheel))
27871 (home-page "https://github.com/zarr-developers/numcodecs")
27872 (synopsis "Buffer compression and transformation codecs")
27873 (description
27874 "This Python package provides buffer compression and transformation
27875codecs for use in data storage and communication applications.")
27876 (license license:expat)))
27877
27878(define-public python-asciitree
27879 (package
27880 (name "python-asciitree")
27881 (version "0.3.3")
27882 (source
27883 (origin
27884 (method git-fetch)
27885 (uri (git-reference
27886 (url "https://github.com/mbr/asciitree")
27887 (commit version)))
27888 (file-name (git-file-name name version))
27889 (sha256
27890 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
27891 (build-system pyproject-build-system)
27892 (native-inputs (list python-pytest python-setuptools))
27893 (home-page "https://github.com/mbr/asciitree")
27894 (synopsis "Draws ASCII trees")
27895 (description "This package draws tree structures using characters.")
27896 (license license:expat)))
27897
27898(define-public python-dill
27899 (package
27900 (name "python-dill")
27901 (version "0.4.0")
27902 (source
27903 (origin
27904 (method url-fetch)
27905 (uri (pypi-uri "dill" version))
27906 (sha256
27907 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
27908 (build-system pyproject-build-system)
27909 (arguments
27910 (list
27911 #:phases #~(modify-phases %standard-phases
27912 (replace 'check
27913 (lambda* (#:key tests? #:allow-other-keys)
27914 (if tests?
27915 ;; Extracted from tox.ini
27916 (invoke "python" "dill/tests/__main__.py")
27917 (format #t "test suite not run~%")))))))
27918 (native-inputs
27919 (list python-setuptools python-wheel))
27920 (home-page "https://pypi.org/project/dill/")
27921 (synopsis "Serialize all of Python")
27922 (description "Dill extends Python's @code{pickle} module for serializing
27923and de-serializing Python objects to the majority of the built-in Python
27924types. Dill provides the user the same interface as the @code{pickle} module,
27925and also includes some additional features. In addition to pickling Python
27926objects, @code{dill} provides the ability to save the state of an interpreter
27927session in a single command. Hence, it would be feasible to save a
27928interpreter session, close the interpreter, ship the pickled file to another
27929computer, open a new interpreter, unpickle the session and thus continue from
27930the saved state of the original interpreter session.")
27931 (license license:bsd-3)))
27932
27933(define-public python-multiprocess
27934 (package
27935 (name "python-multiprocess")
27936 (version "0.70.18")
27937 (source
27938 (origin
27939 (method url-fetch)
27940 (uri (pypi-uri "multiprocess" version))
27941 (sha256
27942 (base32
27943 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
27944 (build-system pyproject-build-system)
27945 (arguments
27946 (list
27947 #:phases
27948 #~(modify-phases %standard-phases
27949 (add-after 'unpack 'disable-broken-tests
27950 (lambda* (#:key inputs #:allow-other-keys)
27951 ;; The "wait_result" and "shared_memory..." tests are broken as
27952 ;; there is no keyboard interrupt.
27953 ;;
27954 ;; The "preload_resources" test fails as it cannot find
27955 ;; mp_preload.py.
27956 (substitute*
27957 (string-append "py" (python-version
27958 (assoc-ref inputs "python"))
27959 "/multiprocess/tests/__init__.py")
27960 (("^(.*)def test_(\
27961wait_result|\
27962shared_memory_SharedMemoryServer_ignores_sigint|\
27963preload_resources\
27964)" line indent)
27965 (string-append indent
27966 "@unittest.skip(\"Disabled by Guix\")\n"
27967 line)))))
27968 (replace 'check
27969 (lambda* (#:key tests? #:allow-other-keys)
27970 (if tests?
27971 (invoke "python" "-m" "multiprocess.tests")
27972 (format #t "test suite not run~%")))))))
27973 (propagated-inputs
27974 (list python-dill))
27975 (native-inputs (list python-setuptools))
27976 (home-page "https://pypi.org/project/multiprocess/")
27977 (synopsis "Multiprocessing and multithreading in Python")
27978 (description
27979 "This package is a fork of the multiprocessing Python package, a package
27980which supports the spawning of processes using the API of the standard
27981library's @code{threading} module.")
27982 (license license:bsd-3)))
27983
27984(define-public python-multiprocessing-on-dill
27985 (package
27986 (name "python-multiprocessing-on-dill")
27987 (version "3.5.0a4")
27988 (source (origin
27989 (method url-fetch)
27990 (uri (pypi-uri "multiprocessing_on_dill" version))
27991 (sha256
27992 (base32
27993 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
27994 (build-system pyproject-build-system)
27995 (propagated-inputs (list python-dill))
27996 (native-inputs (list python-pytest python-setuptools python-wheel))
27997 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
27998 (synopsis "Multiprocessing using dill instead of pickle")
27999 (description
28000 "This package provides a friendly fork of multiprocessing which uses dill
28001instead of pickle.")
28002 (license license:psfl)))
28003
28004(define-public python-cytoolz
28005 (package
28006 (name "python-cytoolz")
28007 (version "1.0.1")
28008 (source
28009 (origin
28010 (method url-fetch)
28011 (uri (pypi-uri "cytoolz" version))
28012 (sha256
28013 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28014 (modules '((guix build utils)))
28015 (snippet
28016 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28017 (build-system pyproject-build-system)
28018 (arguments
28019 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28020 (native-inputs
28021 (list python-cython
28022 python-pytest
28023 python-setuptools
28024 python-wheel))
28025 (propagated-inputs
28026 (list python-toolz))
28027 (home-page "https://github.com/pytoolz/cytoolz")
28028 (synopsis "High performance functional utilities")
28029 (description
28030 "The cytoolz package implements the same API as provided by toolz. The
28031main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28032that is accessible to other projects developed in Cython.")
28033 (license license:bsd-3)))
28034
28035(define-public python-sortedcollections
28036 (package
28037 (name "python-sortedcollections")
28038 (version "2.1.0")
28039 (source
28040 (origin
28041 (method git-fetch)
28042 (uri (git-reference
28043 (url "https://github.com/grantjenks/python-sortedcollections")
28044 (commit (string-append "v" version))))
28045 (file-name (git-file-name name version))
28046 (sha256
28047 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
28048 (build-system pyproject-build-system)
28049 (native-inputs (list python-setuptools
28050 python-pytest
28051 python-pytest-cov
28052 python-wheel))
28053 (propagated-inputs (list python-sortedcontainers))
28054 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
28055 (synopsis "Python Sorted Collections")
28056 (description "Sorted Collections is a Python sorted collections library.")
28057 (license license:asl2.0)))
28058
28059(define-public python-sortedcontainers
28060 (package
28061 (name "python-sortedcontainers")
28062 (version "2.4.0")
28063 (source
28064 (origin
28065 (method git-fetch) ;no tests in PyPI archive
28066 (uri (git-reference
28067 (url "https://github.com/grantjenks/python-sortedcontainers")
28068 (commit (string-append "v" version))))
28069 (file-name (git-file-name name version))
28070 (sha256
28071 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
28072 (build-system pyproject-build-system)
28073 (arguments
28074 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
28075 (native-inputs
28076 (list python-pytest-bootstrap python-setuptools))
28077 (home-page "https://grantjenks.com/docs/sortedcontainers/")
28078 (synopsis "Sorted List, Sorted Dict, Sorted Set")
28079 (description
28080 "This package provides a sorted collections library, written in
28081pure-Python.")
28082 (license license:asl2.0)))
28083
28084(define-public python-cloudpickle
28085 (package
28086 (name "python-cloudpickle")
28087 (version "3.1.0")
28088 (source
28089 (origin
28090 ;; Archive on pypi does not include test infrastructure.
28091 (method git-fetch)
28092 (uri (git-reference
28093 (url "https://github.com/cloudpipe/cloudpickle")
28094 (commit (string-append "v" version))))
28095 (file-name (git-file-name name version))
28096 (sha256
28097 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28098 (build-system pyproject-build-system)
28099 (native-inputs
28100 (list python-flit-core
28101 python-psutil
28102 python-pytest))
28103 (home-page "https://github.com/cloudpipe/cloudpickle")
28104 (synopsis "Extended pickling support for Python objects")
28105 (description
28106 "Cloudpickle makes it possible to serialize Python constructs not
28107supported by the default pickle module from the Python standard library. It
28108is especially useful for cluster computing where Python expressions are
28109shipped over the network to execute on remote hosts, possibly close to the
28110data.")
28111 (license license:bsd-3)))
28112
28113(define-public python-locket
28114 (package
28115 (name "python-locket")
28116 (version "1.0.0")
28117 (source
28118 (origin
28119 (method git-fetch)
28120 (uri (git-reference
28121 (url "https://github.com/mwilliamson/locket.py")
28122 (commit version)))
28123 (file-name (git-file-name name version))
28124 (sha256
28125 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28126 (build-system pyproject-build-system)
28127 ;; XXX: Requires python-spur, which requires another version of
28128 ;; python-paramiko.
28129 (arguments (list #:tests? #f))
28130 (native-inputs (list python-setuptools))
28131 (home-page "https://github.com/mwilliamson/locket.py")
28132 (synopsis "File-based locks for Python")
28133 (description
28134 "Locket implements a lock that can be used by multiple processes provided
28135they use the same path.")
28136 (license license:bsd-2)))
28137
28138(define-public python-partd
28139 (package
28140 (name "python-partd")
28141 (version "1.4.2")
28142 (source
28143 (origin
28144 (method url-fetch)
28145 (uri (pypi-uri "partd" version))
28146 (sha256
28147 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
28148 (build-system pyproject-build-system)
28149 (native-inputs
28150 (list python-pytest
28151 python-setuptools
28152 python-versioneer))
28153 (propagated-inputs
28154 (list python-locket
28155 python-toolz
28156 ;; [complete]
28157 python-blosc
28158 python-numpy
28159 python-pandas
28160 python-pyzmq))
28161 (home-page "https://github.com/dask/partd/")
28162 (synopsis "Appendable key-value storage")
28163 (description
28164 "Partd stores key-value pairs. Values are raw bytes. We append on old
28165values. Partd excels at shuffling operations.")
28166 (license license:bsd-3)))
28167
28168(define-public python-fsspec
28169 (package
28170 (name "python-fsspec")
28171 (version "2025.9.0")
28172 (source
28173 (origin
28174 (method git-fetch)
28175 (uri (git-reference
28176 (url "https://github.com/fsspec/filesystem_spec")
28177 (commit version)))
28178 (file-name (git-file-name name version))
28179 (sha256
28180 (base32 "1f11jjp7xd4q9a5lmb00i5l9v36162gjr6h1hkfzvgq78xa735xp"))))
28181 (build-system pyproject-build-system)
28182 (arguments
28183 (list
28184 #:test-flags
28185 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
28186 "-k" (string-join
28187 ;; Test requirs nentwork access
28188 (list "not test_async_cat_file_ranges"
28189 "test_gist_public_all_files"
28190 "test_gist_public_missing_file"
28191 "test_gist_public_one_file"
28192 ;; Test hangs
28193 "test_processes")
28194 " and not "))
28195 #:phases
28196 #~(modify-phases %standard-phases
28197 (add-before 'build 'set-version
28198 (lambda _
28199 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
28200 (propagated-inputs
28201 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
28202 (native-inputs
28203 (list nss-certs-for-test
28204 python-hatch-vcs
28205 python-hatchling
28206 python-numpy
28207 python-pytest
28208 python-pytest-asyncio
28209 python-pytest-mock
28210 python-pytest-rerunfailures))
28211 (home-page "https://github.com/fsspec/filesystem_spec")
28212 (synopsis "File-system specification")
28213 (description "The purpose of this package is to produce a template or
28214specification for a file-system interface, that specific implementations
28215should follow, so that applications making use of them can rely on a common
28216behavior and not have to worry about the specific internal implementation
28217decisions with any given backend.")
28218 (license license:bsd-3)))
28219
28220(define-public python-ilinkedlist
28221 (package
28222 (name "python-ilinkedlist")
28223 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
28224 (revision . "0")))
28225 (version (git-version "0.4.0"
28226 (assoc-ref properties 'revision)
28227 (assoc-ref properties 'commit)))
28228 (home-page "https://github.com/luther9/ilinkedlist-py")
28229 (source
28230 (origin
28231 (method git-fetch)
28232 (uri (git-reference
28233 (url home-page)
28234 (commit (assoc-ref properties 'commit))))
28235 (file-name (git-file-name name version))
28236 (sha256
28237 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
28238 (build-system pyproject-build-system)
28239 (native-inputs (list python-pytest python-setuptools))
28240 (synopsis "Immutable linked list library")
28241 (description
28242 "This is a implementation of immutable linked lists for Python. It
28243contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
28244Since a linked list is treated as immutable, it is hashable, and its length
28245can be retrieved in constant time. Some of the terminology is inspired by
28246LISP. It is possible to create an improper list by creating a @code{Pair}
28247with a non-list @code{cdr}.")
28248 (license license:gpl3+)))
28249
28250(define-public python-readlike
28251 (package
28252 (name "python-readlike")
28253 (version "0.1.3")
28254 (source
28255 (origin
28256 (method git-fetch)
28257 (uri (git-reference
28258 (url "https://github.com/jangler/readlike")
28259 (commit version)))
28260 (file-name (git-file-name name version))
28261 (sha256
28262 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
28263 (build-system pyproject-build-system)
28264 (native-inputs (list python-pytest python-setuptools))
28265 (home-page "https://github.com/jangler/readlike")
28266 (synopsis "GNU Readline-like line editing module")
28267 (description
28268 "This Python module provides line editing functions similar to the default
28269Emacs-style ones of GNU Readline. Unlike the Python standard library's
28270@code{readline} package, this one allows access to those capabilities in settings
28271outside of a standard command-line interface. It is especially well-suited to
28272interfacing with Urwid, due to a shared syntax for describing key inputs.
28273
28274Currently, all stateless Readline commands are implemented. Yanking and history
28275are not supported.")
28276 (license license:expat)))
28277
28278(define-public python-reparser
28279 (package
28280 (name "python-reparser")
28281 (version "1.4.3")
28282 (source
28283 (origin
28284 (method git-fetch)
28285 (uri (git-reference
28286 (url "https://github.com/xmikos/reparser")
28287 (commit (string-append "v" version))))
28288 (file-name (git-file-name name version))
28289 (sha256
28290 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
28291 (build-system pyproject-build-system)
28292 (arguments (list #:tests? #f)) ; No tests.
28293 (native-inputs (list python-setuptools))
28294 (home-page "https://github.com/xmikos/reparser")
28295 (synopsis "Lexer/parser for inline markup based on regular expressions")
28296 (description
28297 "This Python library provides a simple lexer/parser for inline markup based
28298on regular expressions.")
28299 (license license:expat)))
28300
28301(define-public python-retrying
28302 (package
28303 (name "python-retrying")
28304 (version "1.4.1")
28305 (source
28306 (origin
28307 (method git-fetch)
28308 (uri (git-reference
28309 (url "https://github.com/groodt/retrying")
28310 (commit (string-append "v" version))))
28311 (file-name (git-file-name name version))
28312 (sha256
28313 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
28314 (build-system pyproject-build-system)
28315 (native-inputs (list python-pytest python-setuptools))
28316 (home-page "https://github.com/groodt/retrying")
28317 (synopsis "Library for adding retry behavior")
28318 (description "Retrying is a general-purpose retrying library to simplify
28319the task of adding retry behavior to just about anything.
28320
28321Features:
28322
28323@itemize
28324@item Generic Decorator API.
28325@item Specify stop condition (i.e. limit by number of attempts).
28326@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
28327@item Customize retrying on Exceptions.
28328@item Customize retrying on expected returned result.
28329@end itemize")
28330 (license license:asl2.0)))
28331
28332(define-public python-precis-i18n
28333 (package
28334 (name "python-precis-i18n")
28335 (version "1.1.1")
28336 (source
28337 (origin
28338 (method url-fetch)
28339 (uri (pypi-uri "precis_i18n" version))
28340 (sha256
28341 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
28342 (build-system pyproject-build-system)
28343 (native-inputs
28344 (list python-pytest
28345 python-setuptools
28346 python-wheel))
28347 (home-page "https://github.com/byllyfish/precis_i18n")
28348 (synopsis "Implementation of the PRECIS framework")
28349 (description
28350 "This module implements the PRECIS Framework as described in RFC 8264,
28351RFC 8265 and RFC 8266.")
28352 (license license:expat)))
28353
28354(define-public python-absl-py
28355 (package
28356 (name "python-absl-py")
28357 (version "2.3.1")
28358 (source
28359 (origin
28360 (method url-fetch)
28361 (uri (pypi-uri "absl_py" version))
28362 (sha256
28363 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
28364 (build-system pyproject-build-system)
28365 (arguments
28366 (list #:tests? #f)) ;tests require bazel
28367 (native-inputs
28368 (list python-hatchling))
28369 (home-page "https://github.com/abseil/abseil-py")
28370 (synopsis "Abseil Python common libraries")
28371 (description
28372 "This package provides the Abseil Python Common Libraries, a collection
28373of Python libraries for building Python applications.")
28374 (license license:asl2.0)))
28375
28376(define-public python-astor
28377 (package
28378 (name "python-astor")
28379 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
28380 (revision . "0")))
28381 (version (git-version "0.8.1"
28382 (assoc-ref properties 'revision)
28383 (assoc-ref properties 'commit)))
28384 (source
28385 (origin
28386 (method git-fetch)
28387 (uri (git-reference
28388 (url "https://github.com/berkerpeksag/astor")
28389 (commit (assoc-ref properties 'commit))))
28390 (file-name (git-file-name name version))
28391 (sha256
28392 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
28393 (build-system pyproject-build-system)
28394 (arguments
28395 (list
28396 ;; FIXME: Unclear why this test fails.
28397 #:test-flags #~(list "--deselect=\
28398tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
28399 (native-inputs (list python-pytest python-setuptools))
28400 (home-page "https://github.com/berkerpeksag/astor")
28401 (synopsis "Read and write Python ASTs")
28402 (description
28403 "Astor is designed to allow easy manipulation of Python source via the
28404Abstract Syntax Tree.")
28405 (license license:bsd-3)))
28406
28407(define-public python-astunparse
28408 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
28409 ;; updated.
28410 (package
28411 (name "python-astunparse")
28412 (version "1.6.3")
28413 (source
28414 (origin
28415 (method url-fetch)
28416 (uri (pypi-uri "astunparse" version))
28417 (sha256
28418 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
28419 (build-system pyproject-build-system)
28420 (arguments '(#:tests? #f)) ; there are none
28421 (native-inputs
28422 (list python-setuptools))
28423 (propagated-inputs
28424 (list python-six))
28425 (home-page "https://github.com/simonpercivall/astunparse")
28426 (synopsis "AST unparser for Python")
28427 (description "This package provides an AST unparser for Python. It is a
28428factored out version of @code{unparse} found in the Python source
28429distribution.")
28430 (license license:bsd-3)))
28431
28432(define-public python-gast
28433 (package
28434 (name "python-gast")
28435 (version "0.6.0")
28436 (source
28437 (origin
28438 (method url-fetch)
28439 (uri (pypi-uri "gast" version))
28440 (sha256
28441 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
28442 (build-system pyproject-build-system)
28443 (native-inputs
28444 (list python-pytest python-setuptools python-wheel))
28445 (home-page "https://github.com/serge-sans-paille/gast/")
28446 (synopsis "Generic Python AST that abstracts the underlying Python version")
28447 (description
28448 "GAST provides a compatibility layer between the AST of various Python
28449versions, as produced by @code{ast.parse} from the standard @code{ast}
28450module.")
28451 (license license:bsd-3)))
28452
28453;; XXX: Not maintained since 2022, leaf package.
28454(define-public python-attr
28455 (package
28456 (name "python-attr")
28457 (version "0.3.2")
28458 (source
28459 (origin
28460 (method url-fetch)
28461 (uri (pypi-uri "attr" version))
28462 (sha256
28463 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
28464 (build-system pyproject-build-system)
28465 (arguments
28466 (list #:test-backend #~'custom
28467 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
28468 (native-inputs
28469 (list python-setuptools))
28470 (home-page "https://github.com/denis-ryzhkov/attr")
28471 (synopsis "Decorator for attributes of target function or class")
28472 (description "Simple decorator to set attributes of target function or
28473class in a @acronym{DRY, Don't Repeat Yourself} way.")
28474 (license license:expat)))
28475
28476(define-public python-construct
28477 ;; Fixes not in a release yet.
28478 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
28479 (revision "1"))
28480 (package
28481 (name "python-construct")
28482 (version (git-version "2.10.70" revision commit))
28483 (source
28484 (origin
28485 (method git-fetch)
28486 (uri (git-reference
28487 (url "https://github.com/construct/construct")
28488 (commit commit)))
28489 (file-name (git-file-name name version))
28490 (sha256
28491 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
28492 (build-system pyproject-build-system)
28493 (arguments
28494 (list
28495 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
28496 (native-inputs
28497 (list python-pytest python-setuptools))
28498 (propagated-inputs
28499 (list python-arrow
28500 python-cloudpickle
28501 python-cryptography
28502 python-lz4
28503 python-numpy
28504 python-ruamel.yaml))
28505 (home-page "https://construct.readthedocs.io")
28506 (synopsis "Declarative and symmetrical parser and builder for binary data")
28507 (description
28508 "This package provides both simple, atomic constructs (such as
28509integers of various sizes), as well as composite ones which allow you
28510form hierarchical and sequential structures of increasing complexity.
28511It features bit and byte granularity, easy debugging and testing, an
28512easy-to-extend subclass system, and lots of primitive constructs to
28513make your work easier.")
28514 (license license:expat))))
28515
28516(define-public python-outcome
28517 (package
28518 (name "python-outcome")
28519 (version "1.3.0.post0")
28520 (source
28521 (origin
28522 (method url-fetch)
28523 (uri (pypi-uri "outcome" version))
28524 (sha256
28525 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
28526 (build-system pyproject-build-system)
28527 (native-inputs
28528 (list python-pytest
28529 python-pytest-asyncio
28530 python-setuptools))
28531 (propagated-inputs
28532 (list python-attrs))
28533 (home-page "https://github.com/python-trio/outcome")
28534 (synopsis "Capture the outcome of Python function calls")
28535 (description
28536 "Capture the outcome of Python function calls. Extracted from the Trio
28537project.")
28538 ;; Either license applies.
28539 (license (list license:expat license:asl2.0))))
28540
28541(define-public python-humanize
28542 (package
28543 (name "python-humanize")
28544 (version "4.14.0")
28545 (source
28546 (origin
28547 (method url-fetch)
28548 (uri (pypi-uri "humanize" version))
28549 (sha256
28550 (base32
28551 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
28552 (build-system pyproject-build-system)
28553 (native-inputs
28554 (list python-freezegun
28555 python-hatch-vcs
28556 python-hatchling
28557 python-pytest))
28558 (home-page "https://github.com/jmoiron/humanize")
28559 (synopsis "Print numerical information in a human-readable form")
28560 (description "This package provides a Python module that displays numbers
28561and dates in \"human readable\" forms. For example, it would display
28562\"12345591313\" as \"12.3 billion\".")
28563 (license license:expat)))
28564
28565(define-public python-annoy
28566 (package
28567 (name "python-annoy")
28568 (version "1.17.3")
28569 (source
28570 (origin
28571 (method git-fetch)
28572 (uri (git-reference
28573 (url "https://github.com/spotify/annoy")
28574 (commit (string-append "v" version))))
28575 (file-name (git-file-name name version))
28576 (sha256
28577 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
28578 (build-system pyproject-build-system)
28579 (arguments
28580 (list
28581 #:test-flags
28582 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
28583 ;; name resolution>
28584 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
28585 "--deselect=test/accuracy_test.py::test_nytimes_16"
28586 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
28587 (native-inputs
28588 (list python-h5py
28589 python-numpy
28590 python-pytest
28591 python-setuptools))
28592 (home-page "https://github.com/spotify/annoy/")
28593 (synopsis "Approximate nearest neighbors library")
28594 (description
28595 "Annoy is a C++ library with Python bindings to search for points in
28596space that are close to a given query point. It also creates large read-only
28597file-based data structures that are @code{mmap}ped into memory so that many
28598processes may share the same data.")
28599 (license license:asl2.0)))
28600
28601(define-public python-croniter
28602 (package
28603 (name "python-croniter")
28604 (version "5.0.1")
28605 (source
28606 (origin
28607 (method git-fetch)
28608 (uri (git-reference
28609 (url "https://github.com/kiorky/croniter")
28610 (commit version)))
28611 (file-name (git-file-name name version))
28612 (sha256
28613 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
28614 (build-system pyproject-build-system)
28615 (native-inputs (list python-pytest python-setuptools))
28616 (propagated-inputs (list python-dateutil python-pytz))
28617 (home-page "https://github.com/kiorky/croniter")
28618 (synopsis "Iterate datetime objects with cron-like syntax")
28619 (description
28620 "@code{croniter} provides iteration for datetime object with cron-like
28621format.")
28622 (license license:expat)))
28623
28624(define-public python-crontab
28625 (package
28626 (name "python-crontab")
28627 (version "3.2.0")
28628 (source
28629 (origin
28630 (method url-fetch)
28631 (uri (pypi-uri name version))
28632 (sha256
28633 (base32 "0sy3qlki43n6qmhzzzyya4wcs50mcp3mg1ddn9h39plsscfps1j0"))))
28634 (build-system pyproject-build-system)
28635 (arguments
28636 (list #:test-flags
28637 ;; This test is made for Windows.
28638 #~(list "-k" "not test_07_non_posix_shell")
28639 #:phases
28640 #~(modify-phases %standard-phases
28641 (add-after 'unpack 'defaults-to-mcron
28642 (lambda* (#:key inputs #:allow-other-keys)
28643 (substitute* "crontab.py"
28644 (("/usr/bin/crontab")
28645 (search-input-file inputs "bin/crontab"))))))))
28646 (inputs
28647 (list mcron python-dateutil))
28648 (native-inputs
28649 (list python-pytest python-setuptools python-wheel))
28650 (home-page "https://gitlab.com/doctormo/python-crontab/")
28651 (synopsis "Module for reading and writing crontab files")
28652 (description "This Python module can read, write crontab files, and
28653access the system cron automatically and simply using a direct API.")
28654 (license license:lgpl3+)))
28655
28656(define-public python-apscheduler
28657 (package
28658 (name "python-apscheduler")
28659 (version "3.11.1")
28660 (source (origin
28661 (method url-fetch)
28662 (uri (pypi-uri "apscheduler" version))
28663 (sha256
28664 (base32
28665 "08gjh0l7ba87yp23ilqigp3q004gnnw092p9gxsd310c83v7mdqd"))))
28666 (build-system pyproject-build-system)
28667 (arguments
28668 (list
28669 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
28670 #:test-flags
28671 ;; XXX: Some tests hang or fail with verity of errors:
28672 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
28673 #~(list #$@(map (lambda (test) (string-append "--deselect="
28674 "tests/test_executors.py::"
28675 test))
28676 (list "test_broken_pool"
28677 "test_max_instances[processpool-pytz]"
28678 "test_max_instances[processpool-zoneinfo]"
28679 "test_run_coroutine_job_tornado"
28680 "test_run_job_error[processpool-pytz]"
28681 "test_run_job_error[processpool-zoneinfo]"
28682 "test_submit_job[processpool-pytz-error]"
28683 "test_submit_job[processpool-pytz-executed]"
28684 "test_submit_job[processpool-pytz-missed]"
28685 "test_submit_job[processpool-zoneinfo-error]"
28686 "test_submit_job[processpool-zoneinfo-executed]"
28687 "test_submit_job[processpool-zoneinfo-missed]")))))
28688 (native-inputs
28689 (list python-anyio
28690 python-gevent
28691 python-pyside-6
28692 python-pytest
28693 python-pytest-asyncio-0.26
28694 python-pytz
28695 python-setuptools
28696 python-setuptools-scm
28697 python-sqlalchemy
28698 python-tornado
28699 python-twisted))
28700 (propagated-inputs
28701 (list python-tzlocal))
28702 (home-page "https://github.com/agronholm/apscheduler")
28703 (synopsis "Task scheduling library for Python")
28704 (description "Advanced Python Scheduler (APScheduler) is a Python library
28705that lets you schedule your Python code to be executed later, either just once
28706or periodically.
28707
28708You can add new jobs or remove old ones on the fly as you please. If you store
28709your jobs in a database, they will also survive scheduler restarts and maintain
28710their state. When the scheduler is restarted, it will then run all the jobs it
28711should have run while it was offline.")
28712 (license license:expat)))
28713
28714(define-public python-ifaddr
28715 (package
28716 (name "python-ifaddr")
28717 (version "0.2.0")
28718 (source
28719 (origin
28720 (method url-fetch)
28721 (uri (pypi-uri "ifaddr" version))
28722 (sha256
28723 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
28724 (snippet #~(delete-file "ifaddr/_win32.py"))))
28725 (build-system pyproject-build-system)
28726 (native-inputs
28727 (list python-pytest python-setuptools python-wheel))
28728 (home-page "https://github.com/pydron/ifaddr")
28729 (synopsis "Network interface and IP address enumeration library")
28730 (description
28731 "This package provides a network interface and IP address enumeration
28732library in Python.")
28733 (license license:expat)))
28734
28735(define-public python-berkeleydb
28736 (package
28737 (name "python-berkeleydb")
28738 (version "18.1.15")
28739 (source
28740 (origin
28741 (method url-fetch)
28742 (uri (pypi-uri "berkeleydb" version))
28743 (sha256
28744 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
28745 (build-system pyproject-build-system)
28746 (arguments
28747 (list
28748 #:test-backend #~'custom
28749 #:test-flags #~(list "test.py" "-v")
28750 #:phases
28751 #~(modify-phases %standard-phases
28752 (add-after 'unpack 'configure-locations
28753 (lambda* (#:key inputs #:allow-other-keys)
28754 (setenv "BERKELEYDB_DIR"
28755 (assoc-ref inputs "bdb"))
28756 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
28757 "1")))
28758 (add-after 'unpack 'remove-legacy
28759 (lambda _
28760 (substitute* "pyproject.toml"
28761 ((":__legacy__") "")))))))
28762 (native-inputs (list python-setuptools))
28763 (inputs (list bdb))
28764 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
28765 (synopsis "Python bindings for Oracle Berkeley DB")
28766 (description
28767 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
28768C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
28769Transaction objects, and each of these is exposed as a Python type in the
28770bsddb3.db module. The database objects can use various access methods: btree,
28771hash, recno, and queue. Complete support of Berkeley DB distributed
28772transactions. Complete support for Berkeley DB Replication Manager.
28773Complete support for Berkeley DB Base Replication. Support for RPC.")
28774 (license license:bsd-3)))
28775
28776;; Last version before rename to python-berkeleydb.
28777(define-public python-bsddb3
28778 (package
28779 (inherit python-berkeleydb)
28780 (name "python-bsddb3")
28781 (version "6.2.9")
28782 (source
28783 (origin
28784 (method url-fetch)
28785 (uri (pypi-uri "bsddb3" version))
28786 (sha256
28787 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
28788 (arguments
28789 (substitute-keyword-arguments (package-arguments python-berkeleydb)
28790 ((#:phases phases #~%standard-phases)
28791 #~(modify-phases #$phases
28792 (delete 'remove-legacy)))
28793 ((#:test-flags test-flags #~(list))
28794 #~(list "test3.py" "-v"))))))
28795
28796(define-public python-dbfread
28797 (package
28798 (name "python-dbfread")
28799 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
28800 (revision . "0")))
28801 (version (git-version "2.0.7"
28802 (assoc-ref properties 'revision)
28803 (assoc-ref properties 'commit)))
28804 (source
28805 (origin
28806 (method git-fetch)
28807 (uri (git-reference
28808 (url "https://github.com/olemb/dbfread")
28809 (commit (assoc-ref properties 'commit))))
28810 (file-name (git-file-name name version))
28811 (sha256
28812 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
28813 (build-system pyproject-build-system)
28814 (arguments
28815 (list
28816 #:phases
28817 #~(modify-phases %standard-phases
28818 (add-after 'unpack 'relax-setup.py
28819 (lambda _
28820 (substitute* "setup.py"
28821 (("python_requires.*")
28822 "")))))))
28823 (native-inputs (list python-pytest python-setuptools))
28824 (home-page "https://dbfread.readthedocs.io")
28825 (synopsis "Read DBF Files with Python")
28826 (description
28827 "This library reads DBF files and returns the data as native Python data
28828types for further processing. It is primarily intended for batch jobs and
28829one-off scripts.")
28830 (license license:expat)))
28831
28832(define-public python-cached-property
28833 (package
28834 (name "python-cached-property")
28835 (version "2.0.1")
28836 (source
28837 (origin
28838 (method url-fetch)
28839 (uri (pypi-uri "cached_property" version))
28840 (sha256
28841 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
28842 (build-system pyproject-build-system)
28843 (native-inputs
28844 (list python-freezegun
28845 python-pytest
28846 python-setuptools
28847 python-wheel))
28848 (home-page "https://github.com/pydanny/cached-property")
28849 (synopsis "Decorator for caching properties in classes")
28850 (description
28851 "This package provides a decorator which makes caching
28852time-or-computationally-expensive properties quick and easy and works in
28853Python 2 or 3.")
28854 (license license:bsd-3)))
28855
28856(define-public python-folium
28857 (package
28858 (name "python-folium")
28859 (version "0.19.4")
28860 (source
28861 (origin
28862 ;; PyPI has a ".whl" file but not a proper source release.
28863 ;; Thus, fetch code from Git.
28864 (method git-fetch)
28865 (uri (git-reference
28866 (url "https://github.com/python-visualization/folium")
28867 (commit (string-append "v" version))))
28868 (file-name (git-file-name name version))
28869 (sha256
28870 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
28871 (build-system pyproject-build-system)
28872 (arguments
28873 (list #:test-flags
28874 ;; This file requires Selenium.
28875 #~(list "--ignore" "tests/selenium/test_selenium.py"
28876 "-k" (string-append
28877 ;; The tests below also require Selenium.
28878 "not test__repr_png_is_bytes"
28879 " and not test_valid_png"
28880 " and not test_valid_png_size"
28881 " and not test_geojson"
28882 " and not test_heat_map_with_weights"
28883 ;; This performs an online request.
28884 " and not test_json_request"
28885 ;; Requires geodatasets package.
28886 " and not test_timedynamic_geo_json"
28887 ;; AssertionError.
28888 " and not test_minimap"))
28889 #:phases
28890 #~(modify-phases %standard-phases
28891 (add-before 'build 'pretend-version
28892 ;; The version string is usually derived via setuptools-scm,
28893 ;; but without the git metadata available, the version string
28894 ;; is set to '0.0.0'.
28895 (lambda _
28896 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
28897 #$(package-version this-package)))))))
28898 (propagated-inputs
28899 (list python-branca
28900 python-jinja2
28901 python-numpy
28902 python-requests
28903 python-xyzservices))
28904 (native-inputs
28905 (list python-geopandas
28906 python-nbconvert
28907 python-pandas
28908 python-pillow
28909 python-pytest
28910 python-selenium
28911 python-setuptools
28912 python-setuptools-scm
28913 python-wheel))
28914 (home-page "https://github.com/python-visualization/folium")
28915 (synopsis "Make beautiful maps with Leaflet.js & Python")
28916 (description "@code{folium} makes it easy to visualize data that’s been
28917manipulated in Python on an interactive leaflet map. It enables both the
28918binding of data to a map for @code{choropleth} visualizations as well as
28919passing rich vector/raster/HTML visualizations as markers on the map.
28920
28921The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
28922Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
28923supports Image, Video, GeoJSON and TopoJSON overlays.")
28924 (license license:expat)))
28925
28926(define-public python-mercantile
28927 (package
28928 (name "python-mercantile")
28929 (version "1.2.1")
28930 (source
28931 (origin
28932 (method git-fetch)
28933 (uri (git-reference
28934 (url "https://github.com/mapbox/mercantile")
28935 (commit version)))
28936 (file-name (git-file-name name version))
28937 (sha256
28938 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
28939 (build-system pyproject-build-system)
28940 (propagated-inputs (list python-click))
28941 (native-inputs (list python-check-manifest python-hypothesis python-pytest
28942 python-setuptools))
28943 (home-page "https://github.com/mapbox/mercantile")
28944 (synopsis "Web mercator XYZ tile utilities")
28945 (description
28946 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
28947@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
28948left corner and bounding longitudes and latitudes for XYZ tiles, a
28949@code{xy(lng, lat)} function that returns spherical mercator x and y
28950coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
28951containing a given point, and quadkey conversion functions
28952@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
28953translating between quadkey and tile coordinates.")
28954 (license license:bsd-3)))
28955
28956(define-public jube
28957 (package
28958 ;; This is a command-line tool, so no "python-" prefix.
28959 (name "jube")
28960 (version "2.6.1")
28961 (source
28962 (origin
28963 (method url-fetch)
28964 (uri (string-append
28965 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
28966 version))
28967 (sha256
28968 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
28969 (file-name (string-append "jube-" version ".tar.gz"))))
28970 (build-system pyproject-build-system)
28971 (arguments
28972 (list
28973 #:tests? #f)) ; No tests.
28974 (propagated-inputs (list python-pyyaml))
28975 (native-inputs (list python-setuptools))
28976 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
28977 (synopsis "Benchmarking environment")
28978 (description
28979 "JUBE helps perform and analyze benchmarks in a systematic way. For each
28980benchmarked application, benchmark data is stored in a format that allows JUBE
28981to deduct the desired information. This data can be parsed by automatic pre-
28982and post-processing scripts that draw information and store it more densely
28983for manual interpretation.")
28984 (license license:gpl3+)))
28985
28986(define-public python-pyroutelib3
28987 (package
28988 (name "python-pyroutelib3")
28989 (version "2.0.0")
28990 (source
28991 (origin
28992 (method git-fetch)
28993 (uri (git-reference
28994 (url "https://github.com/MKuranowski/pyroutelib3")
28995 (commit (string-append "v" version))))
28996 (file-name (git-file-name name version))
28997 (sha256
28998 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
28999 (build-system pyproject-build-system)
29000 (propagated-inputs (list python-dateutil python-protobuf-5))
29001 (native-inputs (list python-filelock python-flit-core python-pytest))
29002 (home-page "https://github.com/MKuranowski/pyroutelib3")
29003 (synopsis "Library for simple routing on OSM data")
29004 (description "Library for simple routing on OSM data")
29005 (license license:gpl3+)))
29006
29007(define-public python-bibtexparser
29008 (package
29009 (name "python-bibtexparser")
29010 (version "2.0.0b8")
29011 (source
29012 (origin
29013 (method git-fetch)
29014 (uri (git-reference
29015 (url "https://github.com/sciunto-org/python-bibtexparser")
29016 (commit (string-append "v" version))))
29017 (file-name (git-file-name name version))
29018 (sha256
29019 (base32 "065b6267ygphacfc9aawckv0yz9x3pzd4ivdbsr8cla3zs3lqzg7"))))
29020 (build-system pyproject-build-system)
29021 (propagated-inputs (list python-pyparsing))
29022 (native-inputs
29023 (list python-pylatexenc python-pytest python-setuptools))
29024 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29025 (synopsis "Python library to parse BibTeX files")
29026 (description "BibtexParser is a Python library to parse BibTeX files.")
29027 (license (list license:bsd-3 license:lgpl3))))
29028
29029(define-public python-bibtexparser-for-cobib
29030 (hidden-package
29031 (package
29032 (inherit python-bibtexparser)
29033 (name "python-bibtexparser")
29034 (version "1.4.0")
29035 (source
29036 (origin
29037 (method git-fetch)
29038 (uri (git-reference
29039 (url "https://github.com/sciunto-org/python-bibtexparser")
29040 (commit (string-append "v" version))))
29041 (file-name (git-file-name name version))
29042 (sha256
29043 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29044
29045(define-public python-distro
29046 (package
29047 (name "python-distro")
29048 (version "1.9.0")
29049 (source
29050 (origin
29051 (method url-fetch)
29052 (uri (pypi-uri "distro" version))
29053 (sha256
29054 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29055 (build-system pyproject-build-system)
29056 (arguments
29057 (list
29058 #:test-flags
29059 #~(list "-k" (string-join
29060 ;; We are not on Ubunto distro:
29061 ;; AssertionError: assert '' == 'ubuntu'.
29062 (list "not test_ubuntu14normal_lsb_release"
29063 "test_trailingblanks_lsb_release"
29064 "test_ubuntu14nomodules_lsb_release")
29065 " and not "))))
29066 (native-inputs
29067 (list python-pytest
29068 python-setuptools))
29069 (home-page "https://github.com/python-distro/distro")
29070 (synopsis "OS platform information API")
29071 (description
29072 "@code{distro} provides information about the OS distribution it runs on,
29073such as a reliable machine-readable ID, or version information.
29074
29075It is the recommended replacement for Python's original
29076`platform.linux_distribution` function (which will be removed in Python 3.8).
29077@code{distro} also provides a command-line interface to output the platform
29078information in various formats.")
29079 (license license:asl2.0)))
29080
29081(define-public python-cairosvg
29082 (package
29083 (name "python-cairosvg")
29084 (version "2.8.2")
29085 (source
29086 (origin
29087 (method url-fetch)
29088 (uri (pypi-uri "cairosvg" version))
29089 (sha256
29090 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29091 (build-system pyproject-build-system)
29092 (arguments
29093 (list #:test-flags #~(list "cairosvg/test_api.py")))
29094 (native-inputs
29095 (list python-pytest
29096 python-setuptools))
29097 (propagated-inputs
29098 (list python-cairocffi
29099 python-cssselect2
29100 python-defusedxml
29101 python-pillow
29102 python-tinycss2))
29103 (home-page "https://cairosvg.org/")
29104 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29105 (description "CairoSVG is a SVG converter based on Cairo. It can export
29106SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29107SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29108parsed, the result is drawn to a Cairo surface that can be exported to
29109qvarious formats: PDF, PostScript, PNG and even SVG.")
29110 (license license:lgpl3+)))
29111
29112(define-public python-pyphen
29113 (package
29114 (name "python-pyphen")
29115 (version "0.17.2")
29116 (source
29117 (origin
29118 (method git-fetch)
29119 (uri (git-reference
29120 (url "https://github.com/Kozea/Pyphen")
29121 (commit version)))
29122 (file-name (git-file-name name version))
29123 (sha256
29124 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29125 (build-system pyproject-build-system)
29126 (native-inputs (list python-flit-core python-pytest))
29127 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29128 ;; embedded set provided by upstream - like Debian does.
29129 (home-page "https://github.com/Kozea/Pyphen")
29130 (synopsis "Pure Python module to hyphenate text")
29131 (description "Pyphen is a pure Python module to hyphenate text using
29132existing Hunspell hyphenation dictionaries.")
29133 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
29134
29135(define-public python-intelhex
29136 (package
29137 (name "python-intelhex")
29138 (version "2.3.0")
29139 (source
29140 (origin
29141 (method git-fetch)
29142 (uri (git-reference
29143 (url "https://github.com/python-intelhex/intelhex")
29144 (commit version)))
29145 (file-name (git-file-name name version))
29146 (sha256
29147 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
29148 (build-system pyproject-build-system)
29149 (arguments (list #:test-backend #~'unittest))
29150 (native-inputs (list python-setuptools))
29151 (home-page "https://github.com/python-intelhex/intelhex")
29152 (synopsis "Python library for Intel HEX files manipulations")
29153 (description
29154 "The Intel HEX file format is widely used in microprocessors and
29155microcontrollers area (embedded systems etc.) as the de facto standard for
29156representation of code to be programmed into microelectronic devices. This
29157package provides an intelhex Python library to read, write, create from
29158scratch and manipulate data from Intel HEX file format. It also includes
29159several convenience Python scripts, including \"classic\" hex2bin and bin2hex
29160converters and more, those based on the library itself.")
29161 (license license:bsd-3)))
29162
29163(define-public python-interlap
29164 (package
29165 (name "python-interlap")
29166 (version "0.2.7")
29167 (source
29168 (origin
29169 (method git-fetch)
29170 (uri (git-reference
29171 (url "https://github.com/brentp/interlap")
29172 (commit (string-append "v" version))))
29173 (file-name (git-file-name name version))
29174 (sha256
29175 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
29176 (build-system pyproject-build-system)
29177 (arguments
29178 (list
29179 #:test-backend #~'custom
29180 #:test-flags #~(list "interlap.py")))
29181 (native-inputs (list python-setuptools))
29182 (home-page "https://brentp.github.io/interlap")
29183 (synopsis "Fast, simple interval overlap testing")
29184 (description
29185 "InterLap does fast interval overlap testing with a simple Python data
29186structure.")
29187 (license license:expat)))
29188
29189(define-public python-pykwalify
29190 (package
29191 (name "python-pykwalify")
29192 (version "1.8.0")
29193 (source
29194 (origin
29195 (method git-fetch)
29196 (uri (git-reference
29197 (url "https://github.com/grokzen/pykwalify")
29198 (commit version)))
29199 (file-name (git-file-name name version))
29200 (sha256
29201 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
29202 (build-system pyproject-build-system)
29203 (arguments
29204 (list
29205 #:test-flags
29206 ;; XXX: yaml safe_dump() has been removed.
29207 #~(list "--ignore=tests/test_unicode.py"
29208 "--deselect=tests/test_core.py::TestCore::test_core_files")))
29209 (native-inputs
29210 (list python-pytest python-setuptools python-testfixtures))
29211 (propagated-inputs
29212 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
29213 (home-page "https://github.com/grokzen/pykwalify")
29214 (synopsis "Python lib/cli for JSON/YAML schema validation")
29215 (description
29216 "This package provides a parser, schema validator, and data binding tool
29217for YAML and JSON.")
29218 (license license:expat)))
29219
29220(define-public python-pykakasi
29221 (package
29222 (name "python-pykakasi")
29223 (version "2.3.0")
29224 (source
29225 (origin
29226 (method url-fetch)
29227 (uri (pypi-uri "pykakasi" version))
29228 (sha256
29229 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
29230 (build-system pyproject-build-system)
29231 (arguments (list #:test-flags ''("-k" "not test_aozora")))
29232 (propagated-inputs (list python-deprecated python-importlib-resources
29233 python-jaconv))
29234 (native-inputs (list python-coverage
29235 python-py-cpuinfo
29236 python-pytest
29237 python-pytest-benchmark
29238 python-setuptools
29239 python-setuptools-scm
29240 python-wheel))
29241 (home-page "https://codeberg.org/miurahr/pykakasi")
29242 (synopsis "Kana kanji simple inversion library")
29243 (description
29244 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
29245Language Processing} library to transliterate hiragana, katakana and
29246kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
29247characters in NFC form.
29248
29249Its algorithms are based on the kakasi library, which is written in C.")
29250 (license license:gpl3+)))
29251
29252(define-public python-dbus-python
29253 (package
29254 (name "python-dbus-python")
29255 (version "1.3.2")
29256 (source
29257 (origin
29258 (method url-fetch)
29259 (uri (pypi-uri "dbus-python" version))
29260 (sha256
29261 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
29262 (build-system pyproject-build-system)
29263 (arguments
29264 (list
29265 #:tests? #f ;XXX: Tests require setup
29266 #:phases
29267 #~(modify-phases %standard-phases
29268 (add-after 'unpack 'patch-requirements
29269 (lambda _
29270 (substitute* (list "pyproject.toml" "setup.py")
29271 (("'(ninja|patchelf)',?") ""))
29272 (substitute* "setup.cfg"
29273 (("(ninja|patchelf)") "")))))))
29274 (native-inputs
29275 (list pkg-config
29276 meson
29277 ninja/pinned
29278 patchelf
29279 python-meson-python
29280 python-setuptools
29281 python-tappy))
29282 (inputs
29283 (list dbus glib))
29284 (propagated-inputs
29285 (list python-pygobject))
29286 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
29287 (synopsis "Python bindings for libdbus")
29288 (description
29289 "This package provides Python bindings to libdbus, the reference
29290implementation of the D-Bus protocol.")
29291 (license license:expat)))
29292
29293(define python-dbusmock-check-phase
29294 #~(lambda* (#:key tests? #:allow-other-keys)
29295 (when tests?
29296 (match (primitive-fork)
29297 (0 ;child process
29298 (execlp "pytest" "pytest" "-vv"))
29299 (pytest-pid
29300 (let loop ()
29301 ;; Reap child processes; otherwise, python-dbusmock
29302 ;; would waste time polling for the dbus processes
29303 ;; it spawns to be reaped, in vain.
29304 (match (waitpid WAIT_ANY)
29305 ((pid . status)
29306 (if (= pid pytest-pid)
29307 (unless (zero? status)
29308 (error "`pytest' exited with status"
29309 status))
29310 (loop))))))))))
29311
29312(define-public python-dbusmock
29313 (package
29314 (name "python-dbusmock")
29315 (version "0.37.2")
29316 (source
29317 (origin
29318 (method git-fetch)
29319 (uri (git-reference
29320 (url "https://github.com/martinpitt/python-dbusmock")
29321 (commit version)))
29322 (file-name (git-file-name name version))
29323 (sha256
29324 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29325 (build-system pyproject-build-system)
29326 (arguments
29327 (list
29328 #:modules `((guix build pyproject-build-system)
29329 (guix build utils)
29330 (ice-9 match))
29331 #:phases
29332 #~(modify-phases %standard-phases
29333 (add-after 'unpack 'patch-paths
29334 (lambda* (#:key inputs #:allow-other-keys)
29335 (substitute* "tests/test_api.py"
29336 (("/usr/bin/python3")
29337 (which "python3")))
29338 (substitute* "dbusmock/testcase.py"
29339 (("\"dbus-daemon\"")
29340 (object->string
29341 (search-input-file inputs "/bin/dbus-daemon"))))))
29342 (replace 'check #$python-dbusmock-check-phase))))
29343 (native-inputs (list python-pytest python-setuptools upower which))
29344 (inputs (list dbus))
29345 (propagated-inputs (list python-dbus-python python-pygobject))
29346 (home-page "https://github.com/martinpitt/python-dbusmock")
29347 (synopsis "Python library for mock D-Bus objects")
29348 (description
29349 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
29350This is useful for writing tests for software which talks to D-Bus services
29351such as upower, systemd, logind, gnome-session or others, and it is hard (or
29352impossible without root privileges) to set the state of the real services to
29353what you expect in your tests.")
29354 (license license:lgpl3+)))
29355
29356(define-public python-dbusmock-minimal
29357 (package
29358 (inherit python-dbusmock)
29359 (name "python-dbusmock-minimal")
29360 (version "0.30.0")
29361 (source
29362 (origin
29363 (method url-fetch)
29364 (uri (pypi-uri "python-dbusmock" version))
29365 (sha256
29366 (base32
29367 "1hanz6x76jq66ypdirga5h15zjs67kwysl6rmsf0i22dbdqrxdfv"))))
29368 (build-system python-build-system)
29369 (arguments
29370 (list
29371 #:tests? #f
29372 #:modules `((guix build python-build-system)
29373 (guix build utils)
29374 (ice-9 match))
29375 #:phases
29376 #~(modify-phases %standard-phases
29377 (add-after 'unpack 'patch-paths
29378 (lambda* (#:key inputs #:allow-other-keys)
29379 (substitute* "tests/test_api.py"
29380 (("/usr/bin/python3")
29381 (which "python3")))
29382 (substitute* "tests/test_code.py"
29383 (("/bin/bash")
29384 (which "bash")))
29385 (substitute* "dbusmock/testcase.py"
29386 (("'dbus-daemon'")
29387 (object->string
29388 (search-input-file inputs "/bin/dbus-daemon"))))))
29389 (replace 'check #$python-dbusmock-check-phase))))
29390 (native-inputs (list which))
29391 (inputs
29392 (list dbus))
29393 (propagated-inputs
29394 (list python-dbus-python python-pygobject))
29395 (properties '((hidden? . #t)))))
29396
29397(define-public python-jsonplus
29398 (package
29399 (name "python-jsonplus")
29400 (home-page "https://github.com/randomir/jsonplus")
29401 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
29402 (revision . "0")))
29403 (version (git-version "0.8.0"
29404 (assoc-ref properties 'revision)
29405 (assoc-ref properties 'commit)))
29406 (source
29407 (origin
29408 (method git-fetch)
29409 (uri (git-reference
29410 (url home-page)
29411 (commit (assoc-ref properties 'commit))))
29412 (file-name (git-file-name name version))
29413 (sha256
29414 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
29415 (build-system pyproject-build-system)
29416 (arguments
29417 (list
29418 ;; XXX: Tests require the additional package moneyed.
29419 #:tests? #f
29420 #:phases
29421 #~(modify-phases %standard-phases
29422 (add-after 'unpack 'chdir
29423 (lambda _
29424 (chdir "python"))))))
29425 (native-inputs (list python-setuptools))
29426 (propagated-inputs
29427 (list python-dateutil python-simplejson python-sortedcontainers))
29428 (synopsis "Serialize Python types to/from JSON")
29429 (description
29430 "This package provides functionality to serialize arbitrary data types
29431to and from JSON. Common data types are implemented and it is easy to
29432register custom encoders and decoders.")
29433 (license license:expat)))
29434
29435(define-public python-ioctl-opt
29436 (package
29437 (name "python-ioctl-opt")
29438 (version "1.3")
29439 (source
29440 (origin
29441 (method url-fetch)
29442 (uri (pypi-uri "ioctl-opt" version))
29443 (sha256
29444 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
29445 (build-system pyproject-build-system)
29446 (arguments
29447 (list #:tests? #f)) ;no tests
29448 (native-inputs (list python-setuptools))
29449 (home-page "http://github.com/vpelletier/python-ioctl-opt")
29450 (synopsis "Functions to compute fnctl.ioctl's opt argument")
29451 (description
29452 "This package provides functions to compute fnctl.ioctl's opt argument.")
29453 (license license:gpl2+)))
29454
29455(define-public python-anyio
29456 (package
29457 (name "python-anyio")
29458 (version "4.6.2")
29459 (source
29460 (origin
29461 (method url-fetch)
29462 (uri (pypi-uri "anyio" version))
29463 (sha256
29464 (base32
29465 "0ir3n40gdcm1kd7qyn4c46pgdyyp36h49a0pifyv6lh7vnrpnapp"))))
29466 (build-system pyproject-build-system)
29467 (arguments
29468 `(#:phases
29469 (modify-phases %standard-phases
29470 (replace 'check
29471 (lambda* (#:key tests? #:allow-other-keys)
29472 (when tests?
29473 (invoke
29474 "pytest" "-vv" "-p" "no:asyncio"
29475 "-m" "not network"
29476 "-k"
29477 (string-append
29478 "not test_is_block_device"
29479
29480 ,@(cond
29481 ((or (target-aarch64?)
29482 (target-riscv64?))
29483 '(" and not test_keyboardinterrupt_during_test"))
29484 (#t '()))
29485
29486 ;; These fail because of network (or specifically IPv6
29487 ;; network) access (see:
29488 ;; https://github.com/agronholm/anyio/issues/417).
29489 " and not test_accept"
29490 " and not test_accept_after_close"
29491 " and not test_close_during_receive"
29492 " and not test_close_from_other_task"
29493 " and not test_concurrent_receive"
29494 " and not test_concurrent_send"
29495 " and not test_connect_tcp_with_tls"
29496 " and not test_connect_tcp_with_tls_cert_check_fail"
29497 " and not test_connection_refused"
29498 " and not test_extra_attributes"
29499 " and not test_getaddrinfo"
29500 " and not test_getnameinfo"
29501 " and not test_happy_eyeballs"
29502 " and not test_iterate"
29503 " and not test_receive_after_close"
29504 " and not test_receive_timeout"
29505 " and not test_reuse_port"
29506 " and not test_run_process"
29507 " and not test_send_after_close"
29508 " and not test_send_after_eof"
29509 " and not test_send_after_peer_closed"
29510 " and not test_send_eof"
29511 " and not test_send_large_buffer"
29512 " and not test_send_receive"
29513 " and not test_socket_options"
29514 " and not test_unretrieved_future_exception_server_crash"))))))))
29515 (propagated-inputs
29516 (list python-idna
29517 python-sniffio))
29518 (native-inputs
29519 (list python-psutil
29520 python-pytest
29521 python-pytest-mock
29522 python-setuptools
29523 python-setuptools-scm
29524 python-trio
29525 python-trustme
29526 python-uvloop))
29527 (home-page "https://github.com/agronholm/anyio")
29528 (synopsis "Compatibility layer for multiple asynchronous event loops")
29529 (description
29530 "AnyIO is an asynchronous networking and concurrency library that works
29531on top of either asyncio or trio. It implements trio-like structured
29532concurrency on top of asyncio, and works in harmony with the native SC of trio
29533itself.")
29534 (license license:expat)))
29535
29536(define-public python-argh
29537 (package
29538 (name "python-argh")
29539 (version "0.31.3")
29540 (source
29541 (origin
29542 (method url-fetch)
29543 (uri (pypi-uri "argh" version))
29544 (sha256
29545 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
29546 (build-system pyproject-build-system)
29547 (native-inputs (list python-flit-core python-pytest))
29548 (home-page "https://github.com/neithere/argh/")
29549 (synopsis "Argparse wrapper with natural syntax")
29550 (description
29551 "Argh is a small library that provides several layers of abstraction
29552on top of @code{python-argparse}. The layers can be mixed. It is always
29553possible to declare a command with the highest possible (and least flexible)
29554layer and then tune the behaviour with any of the lower layers including the
29555native API of @code{python-argparse}.")
29556 (license license:lgpl3+)))
29557
29558(define-public python-pox
29559 (package
29560 (name "python-pox")
29561 (version "0.3.6")
29562 (source
29563 (origin
29564 (method url-fetch)
29565 (uri (pypi-uri "pox" version))
29566 (sha256
29567 (base32
29568 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
29569 (build-system pyproject-build-system)
29570 (arguments
29571 (list
29572 #:phases
29573 #~(modify-phases %standard-phases
29574 (replace 'check
29575 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29576 (when tests?
29577 (mkdir-p "/tmp/guix")
29578 (setenv "SHELL" "bash")
29579 (setenv "USERNAME" "guix")
29580 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
29581 (invoke "python" "./pox/tests/__main__.py")))))))
29582 (native-inputs
29583 (list python-setuptools
29584 which)) ;pox/tests/test_shutils.py
29585 (home-page "https://pypi.org/project/pox/")
29586 (synopsis "Python utilities for file system exploration and automated builds")
29587 (description
29588 "Pox provides a collection of utilities for navigating and manipulating
29589file systems. This module is designed to facilitate some of the low-level
29590operating system interactions that are useful when exploring a file system on a
29591remote host. Pox provides Python equivalents of several shell commands such
29592as @command{which} and @command{find}. These commands allow automated
29593discovery of what has been installed on an operating system, and where the
29594essential tools are located.")
29595 (license license:bsd-3)))
29596
29597(define-public python-flit
29598 (package
29599 (name "python-flit")
29600 (version "3.12.0") ;same as python-flit-core
29601 (source
29602 (origin
29603 (method url-fetch)
29604 (uri (pypi-uri "flit" version))
29605 (sha256
29606 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
29607 (build-system pyproject-build-system)
29608 (arguments
29609 (list
29610 #:test-flags
29611 ;; These tests fail when FLIT_NO_NETWORK is set
29612 '(list "-k" "not test_invalid_classifier \
29613and not test_install_requires \
29614and not test_install_requires_extra \
29615and not test_validate_classifiers_private")
29616 #:phases
29617 #~(modify-phases %standard-phases
29618 (add-before 'check 'pre-check
29619 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29620 (when tests?
29621 (setenv "HOME" "/tmp")
29622 (setenv "FLIT_NO_NETWORK" "1")))))))
29623 (propagated-inputs
29624 (list python-tomli-w
29625 python-flit-core
29626 python-docutils
29627 python-requests))
29628 (native-inputs
29629 (list python-responses
29630 python-pytest
29631 python-testpath))
29632 (home-page "https://flit.readthedocs.io/")
29633 (synopsis "Simple packaging tool for simple packages")
29634 (description "Flit is a simple way to put Python packages and modules on
29635PyPI. Flit packages a single importable module or package at a time, using
29636the import name as the name on PyPI. All subpackages and data files within a
29637package are included automatically.")
29638 (license license:bsd-3)))
29639
29640(define-public python-fastentrypoints
29641 (package
29642 (name "python-fastentrypoints")
29643 (home-page "https://github.com/ninjaaron/fast-entry_points")
29644 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
29645 (revision . "0")))
29646 (version (git-version "0.12"
29647 (assoc-ref properties 'revision)
29648 (assoc-ref properties 'commit)))
29649 (source
29650 (origin
29651 (method git-fetch)
29652 (uri (git-reference
29653 (url home-page)
29654 (commit (assoc-ref properties 'commit))))
29655 (file-name (git-file-name name version))
29656 (sha256
29657 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
29658 (build-system pyproject-build-system)
29659 (arguments
29660 (list
29661 ;; XXX: Testing is non-standard and hardly configurable.
29662 #:tests? #f
29663 #:test-backend #~'custom
29664 #:test-flags #~(list "test/runtest.py")))
29665 (native-inputs (list python-setuptools))
29666 (synopsis "Makes entry_points specified in setup.py load more quickly")
29667 (description
29668 "Using entry_points in your setup.py makes scripts that start really
29669slowly because it imports pkg_resources. This package allows such setup
29670scripts to load entry points more quickly.")
29671 (license license:bsd-3)))
29672
29673(define-public python-funcparserlib
29674 (package
29675 (name "python-funcparserlib")
29676 (version "1.0.1")
29677 (source
29678 (origin
29679 ;; Source tarball on PyPi lacks tests.
29680 (method git-fetch)
29681 (uri (git-reference
29682 (url "https://github.com/vlasovskikh/funcparserlib")
29683 (commit version)))
29684 (file-name (git-file-name name version))
29685 (sha256
29686 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
29687 (build-system pyproject-build-system)
29688 (arguments
29689 '(#:phases
29690 (modify-phases %standard-phases
29691 (replace 'check
29692 (lambda* (#:key tests? #:allow-other-keys)
29693 (when tests?
29694 (invoke "python" "-m" "unittest" "discover" "-v")))))))
29695 ;; ModuleNotFoundError: No module named 'poetry'
29696 (native-inputs (list python-poetry-core python-six))
29697 (home-page "https://github.com/vlasovskikh/funcparserlib")
29698 (synopsis
29699 "Recursive descent parsing library based on functional combinators")
29700 (description
29701 "This package is a recursive descent parsing library for Python based on
29702functional combinators. Parser combinators are just higher-order functions
29703that take parsers as their arguments and return them as result values.")
29704 (license license:expat)))
29705
29706(define-public python-cson
29707 (package
29708 (name "python-cson")
29709 (version "0.8")
29710 (source
29711 (origin
29712 (method git-fetch)
29713 (uri (git-reference
29714 (url "https://github.com/avakar/pycson")
29715 (commit version)))
29716 (file-name (git-file-name name version))
29717 (sha256
29718 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
29719 (build-system pyproject-build-system)
29720 (native-inputs (list python-pytest python-setuptools python-wheel))
29721 (propagated-inputs (list python-speg))
29722 (home-page "https://github.com/avakar/pycson")
29723 (synopsis "Parser for Coffeescript Object Notation (CSON)")
29724 (description
29725 "This package is a parser for Coffeescript Object Notation (CSON).")
29726 (license license:expat)))
29727
29728(define-public python-aionotify
29729 (package
29730 (name "python-aionotify")
29731 (version "0.3.1")
29732 (source
29733 (origin
29734 ;; Source tarball on PyPi lacks tests
29735 (method git-fetch)
29736 (uri (git-reference
29737 (url "https://github.com/rbarrois/aionotify")
29738 (commit version)))
29739 (file-name (git-file-name name version))
29740 (sha256
29741 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
29742 (build-system pyproject-build-system)
29743 (native-inputs
29744 (list python-pytest
29745 python-setuptools
29746 python-wheel))
29747 (home-page "https://github.com/rbarrois/aionotify")
29748 (synopsis "inotify library for Python")
29749 (description
29750 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
29751 (license license:bsd-3)))
29752
29753(define-public python-forbiddenfruit
29754 (package
29755 (name "python-forbiddenfruit")
29756 (version "0.1.4")
29757 (source
29758 (origin
29759 (method git-fetch)
29760 (uri (git-reference
29761 (url "https://github.com/clarete/forbiddenfruit")
29762 (commit version)))
29763 (file-name (git-file-name name version))
29764 (sha256
29765 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
29766 (build-system pyproject-build-system)
29767 (arguments
29768 (list
29769 #:phases
29770 #~(modify-phases %standard-phases
29771 (replace 'check
29772 (lambda* (#:key tests? #:allow-other-keys)
29773 (when tests?
29774 (invoke "make" "prepare" "SKIP_DEPS=1")
29775 (invoke "nosetests")))))))
29776 (native-inputs (list python-pynose python-setuptools))
29777 (home-page "https://github.com/clarete/forbiddenfruit")
29778 (synopsis "Patch python built-in objects")
29779 (description "This project allows Python code to extend built-in types.")
29780 (license (list license:gpl3+ license:expat))))
29781
29782(define-public python-k5test
29783 (package
29784 (name "python-k5test")
29785 (version "0.10.4")
29786 (source
29787 (origin
29788 (method url-fetch)
29789 (uri (pypi-uri "k5test" version))
29790 (sha256
29791 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
29792 (build-system pyproject-build-system)
29793 (arguments
29794 (list #:tests? #f)) ;no tests
29795 (native-inputs
29796 (list python-setuptools))
29797 (inputs
29798 (list mit-krb5))
29799 (home-page "https://github.com/pythongssapi/k5test")
29800 (synopsis "Library for setting up self-contained Kerberos 5 environments")
29801 (description
29802 "@code{k5test} is a library for setting up self-contained Kerberos 5
29803environments, and running Python unit tests inside those environments. It is
29804based on the file of the same name found alongside the MIT Kerberos 5 unit
29805tests.")
29806 (license license:isc)))
29807
29808(define-public python-gssapi
29809 (package
29810 (name "python-gssapi")
29811 (version "1.10.0")
29812 (source
29813 (origin
29814 (method url-fetch)
29815 (uri (pypi-uri "gssapi" version))
29816 (sha256
29817 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
29818 (build-system pyproject-build-system)
29819 (arguments
29820 (list #:test-flags #~(list "--pyargs" "gssapi")))
29821 (native-inputs
29822 (list python-cython
29823 python-k5test
29824 python-parameterized
29825 python-pytest
29826 python-setuptools))
29827 (inputs
29828 (list mit-krb5))
29829 (propagated-inputs
29830 (list python-decorator))
29831 (home-page "https://github.com/pythongssapi/python-gssapi")
29832 (synopsis "Python GSSAPI Wrapper")
29833 (description
29834 "Python-GSSAPI provides both low-level and high level wrappers around the
29835GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
29836also be usable with other GSSAPI mechanisms.")
29837 (license license:isc)))
29838
29839(define-public python-check-manifest
29840 (package
29841 (name "python-check-manifest")
29842 (version "0.49")
29843 (source
29844 (origin
29845 (method url-fetch)
29846 (uri (pypi-uri "check-manifest" version))
29847 (sha256
29848 (base32
29849 "05plc1835zz1w1k7wpf2n6jir71ds1w7nz3535lj5ks2am2419k4"))))
29850 (build-system pyproject-build-system)
29851 (arguments
29852 '(;; This test requires setting up a venv which does not work
29853 ;; properly in the build environment.
29854 #:test-flags '("-k" "not test_build_sdist_pep517_isolated")
29855 #:phases
29856 (modify-phases %standard-phases
29857 ;; Tests use git submodule commands over the file transport, which
29858 ;; has been disabled in git, see CVE-2022-39253. Enable these
29859 ;; commands to allow checks to succeed.
29860 (add-before 'check 'allow-git-submodule-add
29861 (lambda _
29862 (setenv "HOME" "/tmp")
29863 (invoke "git" "config" "--global"
29864 "protocol.file.allow" "always"))))))
29865 (native-inputs
29866 (list git-minimal/pinned python-pytest))
29867 (propagated-inputs
29868 (list python-pypa-build python-setuptools))
29869 (home-page "https://github.com/mgedmin/check-manifest")
29870 (synopsis "Check MANIFEST.in in a Python source package for completeness")
29871 (description "Python package can include a MANIFEST.in file to help with
29872sending package files to the Python Package Index. This package checks that
29873file to ensure it completely and accurately describes your project.")
29874 (license license:expat)))
29875
29876(define-public python-android-stringslib
29877 (package
29878 (name "python-android-stringslib")
29879 (version "0.1.2")
29880 (source
29881 (origin
29882 (method git-fetch)
29883 (uri (git-reference
29884 (url "https://framagit.org/tyreunom/python-android-strings-lib")
29885 (commit (string-append "v" version))))
29886 (file-name (git-file-name name version))
29887 (sha256
29888 (base32
29889 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
29890 (build-system pyproject-build-system)
29891 (arguments (list #:tests? #f)) ; No tests.
29892 (native-inputs (list python-setuptools))
29893 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
29894 (synopsis "Android strings.xml support")
29895 (description
29896 "Android Strings Lib provides support for android's strings.xml files.
29897These files are used to translate strings in android apps.")
29898 (license license:expat)))
29899
29900(define-public offlate
29901 (package
29902 (name "offlate")
29903 (version "0.6.1")
29904 (source
29905 (origin
29906 (method git-fetch)
29907 (uri (git-reference
29908 (url "https://framagit.org/tyreunom/offlate")
29909 (commit version)))
29910 (file-name (git-file-name name version))
29911 (sha256
29912 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
29913 (build-system pyproject-build-system)
29914 (arguments
29915 (list
29916 #:tests? #f ; No tests.
29917 #:phases
29918 #~(modify-phases %standard-phases
29919 (add-before 'build 'generate-fonts
29920 (lambda _
29921 (invoke "make" "fonts")))
29922 (add-before 'build 'generate-translations
29923 (lambda _
29924 (invoke "make" "update-langs"))))))
29925 (propagated-inputs
29926 (list python-android-stringslib
29927 python-dateutil
29928 python-gitlab
29929 python-lxml
29930 python-polib
29931 python-pycountry
29932 python-pyenchant
29933 python-pygit2
29934 python-pygithub
29935 python-pyqt
29936 python-requests
29937 python-ruamel.yaml
29938 python-translate-toolkit-for-offlate
29939 python-translation-finder
29940 python-watchdog))
29941 (native-inputs (list qttools-5 fontforge python-setuptools))
29942 (home-page "https://framagit.org/tyreunom/offlate")
29943 (synopsis "Offline translation interface for online translation tools")
29944 (description
29945 "Offlate offers a unified interface for different translation file
29946formats, as well as many different online translation platforms. You can use
29947it to get work from online platforms, specialized such as the Translation
29948Project, or not such a gitlab instance when your upstream doesn't use any
29949dedicated platform. The tool proposes a unified interface for any format and
29950an upload option to send your work back to the platform.")
29951 (license license:gpl3+)))
29952
29953(define-public python-pypng
29954 (package
29955 (name "python-pypng")
29956 (version "0.20220715.0")
29957 (source
29958 (origin
29959 (method url-fetch)
29960 (uri (pypi-uri "pypng" version))
29961 (sha256
29962 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
29963 (build-system pyproject-build-system)
29964 (arguments
29965 (list
29966 #:phases
29967 '(modify-phases %standard-phases
29968 (add-before 'check 'pre-check
29969 (lambda _
29970 (setenv "PYTHONPATH"
29971 (string-append (getcwd) "/code:"
29972 (getenv "GUIX_PYTHONPATH"))))))))
29973 (native-inputs (list python-pytest python-setuptools python-wheel))
29974 (home-page "https://github.com/drj11/pypng")
29975 (synopsis "Pure Python PNG image encoder/decoder")
29976 (description
29977 "The PyPNG module implements support for PNG images. It reads and writes
29978PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
29979pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
29980LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
29981images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
29982A number of optional chunks can be specified (when writing) and
29983understood (when reading): tRNS, bKGD, gAMA.
29984
29985PyPNG is not a high level toolkit for image processing (like PIL) and does not
29986aim at being a replacement or competitor. Its strength lies in fine-grained
29987extensive support of PNG features. It can also read and write Netpbm PAM
29988files, with a focus on its use as an intermediate format for implementing
29989custom PNG processing.")
29990 (license license:expat)))
29991
29992(define-public python-fuzzywuzzy
29993 (package
29994 (name "python-fuzzywuzzy")
29995 (version "0.18.0")
29996 (source
29997 (origin
29998 (method git-fetch)
29999 (uri (git-reference
30000 (url "https://github.com/seatgeek/fuzzywuzzy")
30001 (commit version)))
30002 (file-name (git-file-name name version))
30003 (sha256
30004 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30005 (build-system pyproject-build-system)
30006 (arguments
30007 (list
30008 #:test-flags
30009 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30010 (native-inputs
30011 (list python-hypothesis
30012 python-pycodestyle
30013 python-pytest
30014 python-setuptools))
30015 (propagated-inputs (list python-levenshtein))
30016 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30017 (synopsis "Fuzzy string matching in Python")
30018 (description
30019 "Approximate string matching using @emph{Levenshtein Distance} to
30020calculate the differences between sequences.")
30021 (license license:gpl2)))
30022
30023(define-public python-block-tracing
30024 (package
30025 (name "python-block-tracing")
30026 (version "1.0.1")
30027 (source
30028 (origin
30029 (method url-fetch)
30030 (uri (pypi-uri "block_tracing" version))
30031 (sha256
30032 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30033 (build-system pyproject-build-system)
30034 (arguments (list #:tests? #f)) ; No tests.
30035 (native-inputs (list python-setuptools))
30036 (home-page "https://github.com/rianhunter/block_tracing")
30037 (synopsis "Protect process memory")
30038 (description
30039 "@code{block_tracing} is a tiny Python library that can be used to
30040prevent debuggers and other applications from inspecting the memory within
30041your process.")
30042 (license license:expat)))
30043
30044(define-public python-json-e
30045 (package
30046 (name "python-json-e")
30047 (version "4.8.0")
30048 (source
30049 (origin
30050 (method git-fetch) ; no tests in PyPI release
30051 (uri (git-reference
30052 (url "https://github.com/json-e/json-e")
30053 (commit (string-append "v" version))))
30054 (file-name (git-file-name name version))
30055 (sha256
30056 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30057 (build-system pyproject-build-system)
30058 (arguments
30059 (list
30060 #:phases
30061 #~(modify-phases %standard-phases
30062 ;; Git repository provides implementations for JavaScript, Golang,
30063 ;; Python and Rust, pick "py".
30064 (add-before 'build 'chdir-to-py
30065 (lambda _
30066 (chdir "py"))))))
30067 (native-inputs
30068 (list python-freezegun
30069 python-pytest
30070 python-pyyaml
30071 python-setuptools
30072 python-wheel))
30073 (home-page "https://json-e.js.org")
30074 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30075 (description
30076 "This package provides a data-structure parameterization system written
30077for embedding context in JSON objects.")
30078 (license license:mpl2.0)))
30079
30080(define-public python-json-logger
30081 (package
30082 (name "python-json-logger")
30083 (version "2.0.7")
30084 (source
30085 (origin
30086 (method url-fetch)
30087 (uri (pypi-uri "python-json-logger" version))
30088 (sha256
30089 (base32
30090 "071f9d62ds1xdp88yzsfpf1pba2f78cp18193smcads2sc1frrr3"))))
30091 (build-system pyproject-build-system)
30092 (native-inputs (list python-pytest python-setuptools python-wheel))
30093 (home-page "https://github.com/madzak/python-json-logger")
30094 (synopsis "JSON log formatter in Python")
30095 (description "This library allows standard Python logging to output log data
30096as JSON objects. With JSON we can make our logs more readable by machines and
30097we can stop writing custom parsers for syslog-type records.")
30098 (license license:bsd-3)))
30099
30100(define-public python-daiquiri
30101 (package
30102 (name "python-daiquiri")
30103 (version "3.0.1")
30104 (source
30105 (origin
30106 (method git-fetch)
30107 (uri (git-reference
30108 (url "https://github.com/jd/daiquiri")
30109 (commit version)))
30110 (file-name (git-file-name name version))
30111 (sha256
30112 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30113 (build-system pyproject-build-system)
30114 (arguments
30115 (list
30116 #:phases
30117 #~(modify-phases %standard-phases
30118 (add-after 'unpack 'set-version
30119 (lambda _
30120 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30121 (propagated-inputs (list python-json-logger))
30122 (native-inputs (list python-mock python-pytest python-setuptools
30123 python-setuptools-scm))
30124 (home-page "https://github.com/jd/daiquiri")
30125 (synopsis "Library to configure Python logging easily")
30126 (description
30127 "The daiquiri library provides an easy way to configure logging in
30128Python. It also provides some custom formatters and handlers.")
30129 (license license:asl2.0)))
30130
30131(define-public python-pifpaf
30132 (package
30133 (name "python-pifpaf")
30134 (version "3.4.0")
30135 (source
30136 (origin
30137 (method git-fetch)
30138 (uri (git-reference
30139 (url "https://github.com/jd/pifpaf")
30140 (commit version)))
30141 (file-name (git-file-name name version))
30142 (sha256
30143 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30144 (build-system pyproject-build-system)
30145 (arguments
30146 (list
30147 #:phases
30148 #~(modify-phases %standard-phases
30149 (add-after 'install 'install-drivers
30150 (lambda* (#:key inputs outputs #:allow-other-keys)
30151 (let ((site (site-packages inputs outputs)))
30152 (copy-recursively "pifpaf/drivers"
30153 (string-append site "/pifpaf/drivers/"))))))))
30154 (propagated-inputs
30155 (list python-click
30156 python-daiquiri
30157 python-fixtures
30158 python-jinja2
30159 python-pbr
30160 python-psutil
30161 python-xattr))
30162 (native-inputs
30163 (list python-mock
30164 python-stestr
30165 python-packaging
30166 python-requests
30167 python-testrepository
30168 python-testtools
30169 python-setuptools))
30170 (home-page "https://github.com/jd/pifpaf")
30171 (synopsis "Tools and fixtures to manage daemons for testing in Python")
30172 (description
30173 "Pifpaf is a suite of fixtures and a command-line tool that starts and
30174stops daemons for a quick throw-away usage. This is typically useful when
30175needing these daemons to run integration testing. It originally evolved from
30176its precursor @code{overtest}.")
30177 (license license:asl2.0)))
30178
30179(define-public python-pytest-check-links
30180 (package
30181 (name "python-pytest-check-links")
30182 (version "0.10.1")
30183 (source
30184 (origin
30185 (method url-fetch)
30186 (uri (pypi-uri "pytest_check_links" version))
30187 (sha256
30188 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
30189 (build-system pyproject-build-system)
30190 (arguments
30191 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
30192 (native-inputs
30193 (list python-hatchling))
30194 (propagated-inputs
30195 (list python-docutils
30196 python-html5lib
30197 python-nbconvert
30198 python-nbformat
30199 python-requests))
30200 (home-page "https://github.com/jupyterlab/pytest-check-links")
30201 (synopsis "Check links in files")
30202 (description "This package provides a pytest plugin that checks URLs for
30203HTML-containing files.")
30204 (license license:bsd-3)))
30205
30206(define-public python-json5
30207 (package
30208 (name "python-json5")
30209 (version "0.9.25")
30210 (source
30211 (origin
30212 ;; sample.json5 is missing from PyPi source tarball
30213 (method git-fetch)
30214 (uri (git-reference
30215 (url "https://github.com/dpranke/pyjson5")
30216 (commit (string-append "v" version))))
30217 (file-name (git-file-name name version))
30218 (sha256
30219 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
30220 (build-system pyproject-build-system)
30221 (native-inputs (list python-pytest python-setuptools python-wheel))
30222 (home-page "https://github.com/dpranke/pyjson5")
30223 (synopsis "Python implementation of the JSON5 data format")
30224 (description
30225 "JSON5 extends the JSON data interchange format to make it slightly more
30226usable as a configuration language. This Python package implements parsing and
30227dumping of JSON5 data structures.")
30228 (license license:asl2.0)))
30229
30230(define-public python-farama-notifications
30231 (package
30232 (name "python-farama-notifications")
30233 (version "0.0.4")
30234 (source
30235 ;; The version on pypi does not include tests.
30236 (origin
30237 (method git-fetch)
30238 (uri (git-reference
30239 (url "https://github.com/Farama-Foundation/Farama-Notifications")
30240 (commit version)))
30241 (file-name (git-file-name name version))
30242 (sha256
30243 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
30244 (build-system pyproject-build-system)
30245 (arguments
30246 (list
30247 #:phases
30248 '(modify-phases %standard-phases
30249 (replace 'check
30250 (lambda* (#:key tests? #:allow-other-keys)
30251 (when tests?
30252 (invoke "python3" "tests/ci-test.py")))))))
30253 (native-inputs (list python-pytest python-setuptools python-wheel))
30254 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
30255 (synopsis "Notifications for all Farama Foundation maintained libraries")
30256 (description
30257 "This package allows for providing notifications for all Farama
30258Foundation maintained libraries.")
30259 (license license:expat)))
30260
30261(define-public python-frozendict
30262 (package
30263 (name "python-frozendict")
30264 (version "2.4.6")
30265 (source
30266 (origin
30267 (method url-fetch)
30268 (uri (pypi-uri "frozendict" version))
30269 (sha256
30270 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
30271 (build-system pyproject-build-system)
30272 (native-inputs
30273 (list python-pytest
30274 python-setuptools
30275 python-wheel))
30276 (home-page "https://github.com/Marco-Sulla/python-frozendict")
30277 (synopsis "Simple immutable mapping for Python")
30278 (description
30279 "@dfn{frozendict} is an immutable wrapper around dictionaries that
30280implements the complete mapping interface. It can be used as a drop-in
30281replacement for dictionaries where immutability is desired.")
30282 (license license:expat)))
30283
30284(define-public python-py-cpuinfo
30285 (package
30286 (name "python-py-cpuinfo")
30287 (version "9.0.0")
30288 (source
30289 (origin
30290 (method git-fetch)
30291 (uri (git-reference
30292 (url "https://github.com/workhorsy/py-cpuinfo")
30293 (commit (string-append "v" version))))
30294 (file-name (git-file-name name version))
30295 (sha256
30296 (base32
30297 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
30298 (build-system pyproject-build-system)
30299 (arguments
30300 (list #:test-backend #~'custom
30301 #:test-flags #~(list "test_suite.py")))
30302 (native-inputs
30303 (list python-setuptools))
30304 (home-page "https://github.com/workhorsy/py-cpuinfo")
30305 (synopsis "Get CPU info with Python")
30306 (description
30307 "This Python module returns the CPU info by using the best sources of
30308information for your operating system.")
30309 (license license:expat)))
30310
30311(define-public python-canonicaljson
30312 (package
30313 (name "python-canonicaljson")
30314 (version "2.0.0")
30315 (source
30316 (origin
30317 (method url-fetch)
30318 (uri (pypi-uri "canonicaljson" version))
30319 (sha256
30320 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
30321 (build-system pyproject-build-system)
30322 (arguments
30323 (list #:test-backend #~'unittest))
30324 (native-inputs
30325 (list python-setuptools))
30326 (home-page "https://github.com/matrix-org/python-canonicaljson")
30327 (synopsis "Canonical JSON")
30328 (description
30329 "Deterministically encode JSON.
30330
30331@itemize
30332@item Encodes objects and arrays as RFC 7159 JSON.
30333@item Sorts object keys so that you get the same result each time.
30334@item Has no insignificant whitespace to make the output as small as possible.
30335@item Escapes only the characters that must be escaped, U+0000 to
30336 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
30337@item Uses the shortest escape sequence for each escaped character.
30338@item Encodes the JSON as UTF-8.
30339@item Can encode frozendict immutable dictionaries.
30340@end itemize")
30341 (license license:asl2.0)))
30342
30343(define-public python-signedjson
30344 (package
30345 (name "python-signedjson")
30346 (version "1.1.4")
30347 (source
30348 (origin
30349 (method git-fetch)
30350 (uri (git-reference
30351 (url "https://github.com/matrix-org/python-signedjson")
30352 (commit (string-append "v" version))))
30353 (file-name (git-file-name name version))
30354 (sha256
30355 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
30356 (build-system pyproject-build-system)
30357 (arguments
30358 (list
30359 #:phases
30360 #~(modify-phases %standard-phases
30361 (add-after 'unpack 'set-version
30362 (lambda _
30363 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30364 (propagated-inputs
30365 (list python-canonicaljson
30366 python-importlib-metadata
30367 python-pynacl
30368 python-typing-extensions
30369 python-unpaddedbase64))
30370 (native-inputs
30371 (list python-pytest python-setuptools-scm python-setuptools))
30372 (home-page "https://github.com/matrix-org/python-signedjson")
30373 (synopsis "Sign JSON objects with ED25519 signatures")
30374 (description
30375 "Sign JSON objects with ED25519 signatures.
30376
30377@itemize
30378@item More than one entity can sign the same object.
30379@item Each entity can sign the object with more than one key making it easier to
30380rotate keys
30381@item ED25519 can be replaced with a different algorithm.
30382@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
30383key.
30384@end itemize")
30385 (license license:asl2.0)))
30386
30387(define-public python-daemonize
30388 (package
30389 (name "python-daemonize")
30390 (version "2.5.0")
30391 (source
30392 (origin
30393 (method git-fetch)
30394 (uri (git-reference
30395 (url "https://github.com/thesharp/daemonize")
30396 (commit (string-append "v" version))))
30397 (file-name (git-file-name name version))
30398 (sha256
30399 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
30400 (build-system pyproject-build-system)
30401 (arguments
30402 (list
30403 #:test-backend #~'custom
30404 #:test-flags #~(list "tests/test.py")
30405 #:phases
30406 #~(modify-phases %standard-phases
30407 (add-before 'check 'fix-tests
30408 (lambda _
30409 ;; XXX: nobody has group nogroup on Guix.
30410 (substitute* "tests/test.py"
30411 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
30412 (number->string (passwd:gid (getpw "nobody"))))))))))
30413 (native-inputs (list coreutils-minimal procps python-setuptools))
30414 (home-page "https://github.com/thesharp/daemonize")
30415 (synopsis "Library for writing system daemons in Python")
30416 (description
30417 "Daemonize is a library for writing system daemons in Python.")
30418 (license license:expat)))
30419
30420(define-public python-pymacaroons
30421 (package
30422 (name "python-pymacaroons")
30423 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
30424 (revision . "0")))
30425 (version (git-version "0.13.0"
30426 (assoc-ref properties 'revision)
30427 (assoc-ref properties 'commit)))
30428 (source
30429 (origin
30430 (method git-fetch)
30431 (uri (git-reference
30432 (url "https://github.com/ecordell/pymacaroons")
30433 (commit (assoc-ref properties 'commit))))
30434 (file-name (git-file-name name version))
30435 (sha256
30436 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
30437 (build-system pyproject-build-system)
30438 (arguments
30439 (list
30440 #:test-flags
30441 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
30442 ;; No module named 'hypothesis.specifiers'
30443 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
30444 (native-inputs
30445 (list python-hypothesis
30446 python-mock
30447 python-pytest
30448 python-setuptools))
30449 (propagated-inputs (list python-pynacl))
30450 (home-page "https://github.com/ecordell/pymacaroons")
30451 (synopsis "Python Macaroon Library")
30452 (description
30453 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
30454tokens, macaroons embed caveats that define specific authorization
30455requirements for the target service, the service that issued the root macaroon
30456and which is capable of verifying the integrity of macaroons it receives.
30457
30458Macaroons allow for delegation and attenuation of authorization. They are
30459simple and fast to verify, and decouple authorization policy from the
30460enforcement of that policy.")
30461 (license license:expat)))
30462
30463(define-public python-ldap3
30464 (package
30465 (name "python-ldap3")
30466 (version "2.9.1")
30467 (home-page "https://github.com/cannatag/ldap3")
30468 (source
30469 (origin
30470 (method git-fetch)
30471 (uri (git-reference (url home-page)
30472 (commit (string-append "v" version))))
30473 (file-name (git-file-name name version))
30474 (sha256
30475 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
30476 (build-system pyproject-build-system)
30477 (arguments
30478 (list
30479 #:tests? #f ;TODO: Tests need a real LDAP server to run
30480 #:test-backend #~'nose))
30481 (native-inputs
30482 (list python-pynose python-setuptools))
30483 (propagated-inputs
30484 (list python-gssapi python-pyasn1))
30485 (synopsis "Python LDAP client")
30486 (description
30487 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
30488library.")
30489 (license license:lgpl3+)))
30490
30491(define-public python-boltons
30492 (package
30493 (name "python-boltons")
30494 (version "25.0.0")
30495 (source
30496 (origin
30497 (method git-fetch)
30498 (uri (git-reference
30499 (url "https://github.com/mahmoud/boltons")
30500 (commit version)))
30501 (file-name (git-file-name name version))
30502 (sha256
30503 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
30504 (build-system pyproject-build-system)
30505 (native-inputs (list python-flit-core python-pytest python-setuptools))
30506 (home-page "https://github.com/mahmoud/boltons")
30507 (synopsis "Extensions to the Python standard library")
30508 (description
30509 "Boltons is a set of over 230 pure-Python utilities in the same spirit
30510as — and yet conspicuously missing from — the standard library, including:
30511
30512@itemize
30513@item Atomic file saving, bolted on with fileutils
30514@item A highly-optimized OrderedMultiDict, in dictutils
30515@item Two types of PriorityQueue, in queueutils
30516@item Chunked and windowed iteration, in iterutils
30517@item Recursive data structure iteration and merging, with iterutils.remap
30518@item Exponential backoff functionality, including jitter, through
30519iterutils.backoff
30520@item A full-featured TracebackInfo type, for representing stack traces, in
30521tbutils
30522@end itemize")
30523 (license license:bsd-3)))
30524
30525(define-public python-eliot
30526 (package
30527 (name "python-eliot")
30528 (version "1.17.5")
30529 (source
30530 (origin
30531 (method url-fetch)
30532 (uri (pypi-uri "eliot" version))
30533 (sha256
30534 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
30535 (build-system pyproject-build-system)
30536 (arguments
30537 (list
30538 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
30539 ;; Two tests fail with error: TypeError: Unsupported type.
30540 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
30541 #:phases
30542 #~(modify-phases %standard-phases
30543 (add-after 'unpack 'remove-journald-support
30544 (lambda _
30545 (for-each delete-file
30546 '("eliot/tests/test_journald.py"
30547 "eliot/journald.py")))))))
30548 (native-inputs
30549 (list python-pytest
30550 python-setuptools
30551 python-testtools))
30552 (propagated-inputs
30553 (list python-boltons
30554 python-orjson
30555 python-pyrsistent
30556 python-zope-interface))
30557 (home-page "https://github.com/itamarst/eliot/")
30558 (synopsis "Eliot: the logging system that tells you why it happened")
30559 (description
30560 "@dfn{eliot} is a Python logging system that outputs causal chains of
30561actions: actions can spawn other actions, and eventually they either succeed
30562or fail. The resulting logs tell you the story of what your software did: what
30563happened, and what caused it.")
30564 (license license:asl2.0)))
30565
30566(define-public python-pem
30567 (package
30568 (name "python-pem")
30569 (version "23.1.0")
30570 (source
30571 (origin
30572 (method git-fetch)
30573 (uri (git-reference
30574 (url "https://github.com/hynek/pem")
30575 (commit version)))
30576 (file-name (git-file-name name version))
30577 (sha256
30578 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
30579 (build-system pyproject-build-system)
30580 (arguments
30581 (list
30582 #:phases
30583 #~(modify-phases %standard-phases
30584 (add-after 'unpack 'set-version
30585 (lambda _
30586 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30587 (native-inputs
30588 (list nss-certs-for-test
30589 python-certifi
30590 python-hatch-fancy-pypi-readme
30591 python-hatch-vcs
30592 python-hatchling
30593 python-pretend
30594 python-pyopenssl
30595 python-pytest
30596 python-twisted))
30597 (home-page "https://pem.readthedocs.io/")
30598 (synopsis "Easy PEM file parsing in Python")
30599 (description
30600 "This package provides a Python module for parsing and splitting PEM files.")
30601 (license license:expat)))
30602
30603(define-public python-pysaml2
30604 (package
30605 (name "python-pysaml2")
30606 (version "7.5.4")
30607 (source
30608 (origin
30609 (method git-fetch)
30610 (uri (git-reference
30611 (url "https://github.com/IdentityPython/pysaml2")
30612 (commit (string-append "v" version))))
30613 (file-name (git-file-name name version))
30614 (sha256
30615 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
30616 (build-system pyproject-build-system)
30617 (arguments
30618 (list
30619 #:test-flags
30620 #~(list "-k"
30621 (string-join
30622 ;; XXX: encryption failures
30623 (list "not test_encrypted_response_6"
30624 "test_validate_cert_chains"
30625 "test_validate_with_root_cert"
30626 ;; XXX: xml parsing error
30627 "test_namespace_processing") " and not "))
30628 #:phases
30629 #~(modify-phases %standard-phases
30630 (add-after 'unpack 'relax-requirements
30631 (lambda _
30632 (substitute* "pyproject.toml"
30633 (("\"(pyopenssl|xmlschema).*\"" _ dep)
30634 (format #f "~s" dep))))))))
30635 (native-inputs (list python-poetry-core python-pytest))
30636 (propagated-inputs
30637 (list python-cryptography
30638 python-dateutil
30639 python-defusedxml
30640 python-pymongo
30641 python-pyopenssl
30642 python-responses
30643 python-requests
30644 python-xmlschema
30645 python-xmlsec))
30646 (home-page "https://idpy.org")
30647 (synopsis "Python implementation of SAML Version 2 Standard")
30648 (description
30649 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
30650It contains all necessary pieces for building a SAML2 service provider or
30651an identity provider. The distribution contains examples of both.
30652
30653This package was originally written to work in a WSGI environment, but
30654there are extensions that allow you to use it with other frameworks.")
30655 (license license:asl2.0)))
30656
30657(define-public python-click-plugins
30658 (package
30659 (name "python-click-plugins")
30660 (version "2.0")
30661 (source
30662 (origin
30663 (method git-fetch)
30664 (uri (git-reference
30665 (url "https://github.com/click-contrib/click-plugins")
30666 (commit version)))
30667 (file-name (git-file-name name version))
30668 (sha256
30669 (base32 "1fgfb4pv9chry7jwigc5ax66njk1w0kcj75q4kz0b8bb3nh52z2i"))))
30670 (build-system pyproject-build-system)
30671 (arguments
30672 (list
30673 #:test-backend #~'custom
30674 #:test-flags #~(list "tests/click_plugins_tests.py")
30675 #:phases
30676 #~(modify-phases %standard-phases
30677 (add-before 'build 'mkdir-tests
30678 (lambda _
30679 (mkdir "tests")
30680 (rename-file "click_plugins_tests.py"
30681 (string-append "tests/click_plugins_tests.py")))))))
30682 (native-inputs (list python-pytest python-setuptools))
30683 (propagated-inputs (list python-click))
30684 (synopsis "Extension for Click to register external CLI commands")
30685 (description
30686 "This package provides n extension module for Click to register external
30687CLI commands via setuptools entry-points.")
30688 (home-page "https://github.com/click-contrib/click-plugins")
30689 (license license:bsd-3)))
30690
30691;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
30692;; This PyPI package is no longer actively maintained, but the underlying
30693;; library can be vendored.
30694;;
30695;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
30696;; pyproject.toml) and can't be used as a common input.
30697(define-public python-click-plugins-1
30698 (package
30699 (inherit python-click-plugins)
30700 (name "python-click-plugins")
30701 (version "1.1.1.2")
30702 (source
30703 (origin
30704 (method git-fetch)
30705 (uri (git-reference
30706 (url "https://github.com/click-contrib/click-plugins")
30707 (commit version)))
30708 (file-name (git-file-name name version))
30709 (sha256
30710 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
30711 (arguments (list))))
30712
30713(define-public python-diceware
30714 (package
30715 (name "python-diceware")
30716 (version "1.0.1")
30717 (source
30718 (origin
30719 (method url-fetch)
30720 (uri (pypi-uri "diceware" version))
30721 (sha256
30722 (base32
30723 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
30724 (build-system pyproject-build-system)
30725 (native-inputs
30726 (list python-pytest python-setuptools python-wheel))
30727 (home-page "https://github.com/ulif/diceware/")
30728 (synopsis "Generates memorable passphrases")
30729 (description "This package generates passphrases by concatenating words
30730randomly picked from wordlists. It supports several sources of
30731randomness (including real life dice) and different wordlists (including
30732cryptographically signed ones).")
30733 (license license:gpl3+)))
30734
30735(define-public python-dictdiffer
30736 (package
30737 (name "python-dictdiffer")
30738 (version "0.9.0")
30739 (source
30740 (origin
30741 (method git-fetch)
30742 (uri (git-reference
30743 (url "https://github.com/inveniosoftware/dictdiffer")
30744 (commit (string-append "v" version))))
30745 (file-name (git-file-name name version))
30746 (sha256
30747 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
30748 (build-system pyproject-build-system)
30749 (arguments
30750 (list
30751 #:phases
30752 #~(modify-phases %standard-phases
30753 (add-after 'unpack 'set-version
30754 (lambda _
30755 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
30756 (add-after 'unpack 'relax-requirements
30757 (lambda _
30758 (delete-file "pytest.ini")
30759 (substitute* "setup.py"
30760 (("'pytest-runner.*',")
30761 "'pytest',")))))))
30762 (native-inputs
30763 (list python-pytest python-setuptools python-setuptools-scm))
30764 (home-page "https://github.com/inveniosoftware/dictdiffer")
30765 (synopsis "Diff and patch Python dictionary objects")
30766 (description
30767 "Dictdiffer is a Python module that helps you to diff and patch
30768dictionaries.")
30769 (license license:expat)))
30770
30771(define-public python-osc
30772 (package
30773 (name "python-osc")
30774 (version "1.9.3")
30775 (source
30776 (origin
30777 (method git-fetch)
30778 (uri (git-reference
30779 (url "https://github.com/attwad/python-osc")
30780 (commit (string-append "v" version))))
30781 (file-name (git-file-name name version))
30782 (sha256
30783 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
30784 (build-system pyproject-build-system)
30785 (native-inputs (list python-setuptools))
30786 (home-page "https://github.com/attwad/python-osc")
30787 (synopsis "Open Sound Control server and client implementations")
30788 (description
30789 "@code{python-osc} is a pure Python library with no external
30790dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
30791Open Sound Control 1.0} specification.")
30792 (license license:unlicense)))
30793
30794(define-public python-cmd2
30795 (package
30796 (name "python-cmd2")
30797 (version "2.5.11")
30798 (source
30799 (origin
30800 (method url-fetch)
30801 (uri (pypi-uri "cmd2" version))
30802 (sha256
30803 (base32
30804 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
30805 (build-system pyproject-build-system)
30806 (arguments
30807 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
30808and not test_transcript")))
30809 (propagated-inputs
30810 (list python-pyperclip python-wcwidth))
30811 (native-inputs
30812 (list python-pytest
30813 python-pytest-cov
30814 python-pytest-mock
30815 python-setuptools
30816 python-setuptools-scm
30817 python-wheel))
30818 (home-page "https://github.com/python-cmd2/cmd2")
30819 (synopsis "Tool for building interactive command line applications")
30820 (description
30821 "Cmd2 is a tool for building interactive command line applications in
30822Python. Its goal is to make it quick and easy for developers to build
30823feature-rich and user-friendly interactive command line applications. It
30824provides a simple API which is an extension of Python's built-in @code{cmd}
30825module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
30826make your life easier and eliminates much of the boilerplate code which would
30827be necessary when using @code{cmd}.")
30828 (license license:expat)))
30829
30830(define-public python-pytidylib
30831 (package
30832 (name "python-pytidylib")
30833 (version "0.3.2")
30834 (source
30835 (origin
30836 (method git-fetch)
30837 (uri (git-reference
30838 (url "https://github.com/countergram/pytidylib")
30839 (commit version)))
30840 (file-name (git-file-name name version))
30841 (sha256
30842 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
30843 (build-system pyproject-build-system)
30844 (arguments
30845 (list
30846 #:phases
30847 #~(modify-phases %standard-phases
30848 (add-after 'unpack 'fix-queue-import
30849 (lambda _
30850 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
30851 (substitute* "tests/threadsafety.py"
30852 (("from Queue import Queue")
30853 "from queue import Queue"))))
30854 (add-before 'build 'qualify-libtidy
30855 (lambda* (#:key inputs #:allow-other-keys)
30856 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
30857 (substitute* "tidylib/tidy.py"
30858 (("ctypes\\.util\\.find_library\\('tidy'\\)")
30859 (format #f "'~a'" libtidy)))))))))
30860 (native-inputs (list python-pytest python-setuptools))
30861 (inputs (list tidy-html))
30862 (home-page "https://github.com/countergram/pytidylib")
30863 (synopsis "Python wrapper for HTML Tidy library")
30864 (description
30865 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
30866allows you, from Python code, to “fix” invalid (X)HTML markup.")
30867 (license license:expat)))
30868
30869(define-public python-mujson
30870 (package
30871 (name "python-mujson")
30872 (version "1.4")
30873 (source
30874 (origin
30875 (method git-fetch)
30876 (uri (git-reference
30877 (url "https://github.com/mattgiles/mujson")
30878 (commit version)))
30879 (file-name (git-file-name name version))
30880 (sha256
30881 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
30882 (build-system pyproject-build-system)
30883 (arguments (list #:tests? #f)) ;No tests.
30884 (native-inputs (list python-setuptools))
30885 (home-page "https://github.com/mattgiles/mujson")
30886 (synopsis "Use the fastest JSON functions available at import time")
30887 (description
30888 "This module selects the fastest JSON functions available at import time
30889in Python.")
30890 (license license:expat)))
30891
30892(define-public python-bashlex
30893 (package
30894 (name "python-bashlex")
30895 (version "0.18")
30896 (source
30897 (origin
30898 (method git-fetch)
30899 (uri (git-reference
30900 (url "https://github.com/idank/bashlex")
30901 (commit version)))
30902 (file-name (git-file-name name version))
30903 (sha256
30904 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
30905 (build-system pyproject-build-system)
30906 (arguments
30907 (list
30908 #:phases
30909 #~(modify-phases %standard-phases
30910 (add-before 'build 'pregenerate-yacc-tables
30911 (lambda _
30912 ;; parser.py caches tables, which attempts to write to site lib
30913 ;; see https://github.com/idank/bashlex/issues/51
30914 (invoke "python" "-c" "import bashlex"))))))
30915 (native-inputs (list python-pytest python-setuptools))
30916 (home-page "https://github.com/idank/bashlex")
30917 (synopsis "Python parser for bash")
30918 (description
30919 "@code{bashlex} is a Python port of the parser used internally by GNU
30920bash.
30921
30922For the most part it's transliterated from C, the major differences are:
30923
30924@itemize
30925@item it does not execute anything
30926@item it is reentrant
30927@item it generates a complete AST
30928@end itemize
30929")
30930 (license license:gpl3+)))
30931
30932(define-public python-jinxed
30933 (package
30934 (name "python-jinxed")
30935 (version "1.3.0")
30936 (source
30937 (origin
30938 (method git-fetch)
30939 (uri (git-reference
30940 (url "https://github.com/Rockhopper-Technologies/jinxed")
30941 (commit version)))
30942 (file-name (git-file-name name version))
30943 (sha256
30944 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
30945 (build-system pyproject-build-system)
30946 (arguments
30947 (list
30948 #:tests? #f ;_curses.error: setupterm: could not find terminal
30949 #:phases
30950 #~(modify-phases %standard-phases
30951 (add-before 'check 'set-environment-variables
30952 (lambda* (#:key inputs #:allow-other-keys)
30953 (setenv "TERM" "LINUX")
30954 (setenv "TERMINFO"
30955 (search-input-directory inputs "share/terminfo")))))))
30956 (native-inputs (list ncurses python-setuptools))
30957 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
30958 (synopsis "Jinxed Terminal Library")
30959 (description
30960 "Jinxed is an implementation of a subset of the Python curses library.")
30961 (license license:mpl2.0)))
30962
30963(define-public python-blessed
30964 (package
30965 (name "python-blessed")
30966 (version "1.20.0")
30967 (source
30968 (origin
30969 (method url-fetch)
30970 (uri (pypi-uri "blessed" version))
30971 (sha256
30972 (base32
30973 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
30974 (snippet
30975 ;; Don't get hung up on Windows test failures.
30976 '(delete-file "blessed/win_terminal.py"))))
30977 (build-system pyproject-build-system)
30978 (arguments
30979 (list
30980 ;; Avoid python-pytest-coverage
30981 #:test-flags '(list "-c /dev/null")))
30982 (propagated-inputs (list python-six python-wcwidth))
30983 (native-inputs (list python-pytest python-setuptools python-wheel))
30984 (home-page "https://github.com/jquast/blessed")
30985 (synopsis "Wrapper around terminal capabilities")
30986 (description
30987 "Blessed is a thin, practical wrapper around terminal styling, screen
30988positioning, and keyboard input.")
30989 (license license:expat)))
30990
30991(define-public python-readme-renderer
30992 (package
30993 (name "python-readme-renderer")
30994 (version "44.0")
30995 (source
30996 (origin
30997 (method url-fetch)
30998 (uri (pypi-uri "readme_renderer" version))
30999 (sha256
31000 (base32
31001 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
31002 (build-system pyproject-build-system)
31003 (arguments
31004 (list
31005 #:test-flags
31006 '(list "-k"
31007 (string-append
31008 ;; These tests fail due to slight differences in the generated
31009 ;; vs expected HTML, e.g. because of difference in whitespace or
31010 ;; line breaks. (See also
31011 ;; https://github.com/pypa/readme_renderer/issues/234).
31012 "not test_md_fixtures[test_CommonMark_008.md]"
31013 " and not test_rst_fixtures[test_rst_008.rst]"
31014 " and not GFM"))))
31015 (propagated-inputs
31016 (list python-cmarkgfm
31017 python-docutils
31018 python-nh3
31019 python-pygments))
31020 (native-inputs
31021 (list python-pytest
31022 python-setuptools
31023 python-wheel))
31024 (home-page "https://github.com/pypa/readme_renderer")
31025 (synopsis "Render README files in Warehouse")
31026 (description
31027 "Readme Renderer is a library that will safely render arbitrary README
31028files into HTML. It is designed to be used in Warehouse to render the
31029@code{long_description} for packages. It can handle Markdown,
31030reStructuredText, and plain text.")
31031 (license license:asl2.0)))
31032
31033(define-public python-lazr-delegates
31034 (package
31035 (name "python-lazr-delegates")
31036 (version "2.1.1")
31037 (source
31038 (origin
31039 (method url-fetch)
31040 (uri (pypi-uri "lazr_delegates" version))
31041 (sha256
31042 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31043 (build-system pyproject-build-system)
31044 (arguments
31045 (list
31046 #:test-flags #~(list "-v" #$output)
31047 #:phases
31048 #~(modify-phases %standard-phases
31049 (add-after 'check 'check-cleanup
31050 (lambda* (#:key tests? #:allow-other-keys)
31051 (when tests?
31052 (for-each
31053 delete-file-recursively
31054 (find-files #$output
31055 (lambda (file stat)
31056 (or (member (basename file)
31057 '("tests" ".pytest_cache"))))
31058 #:directories? #t))))))))
31059 (native-inputs
31060 (list python-pytest python-setuptools python-wheel))
31061 (propagated-inputs
31062 (list python-zope-interface))
31063 (home-page "https://launchpad.net/lazr.delegates")
31064 (synopsis "Easily write objects that delegate behavior")
31065 (description
31066 "The @code{lazr.delegates} package makes it easy to write objects that
31067delegate behavior to another object. The new object adds some property or
31068behavior on to the other object, while still providing the underlying interface,
31069and delegating behavior.")
31070 (license license:lgpl3)))
31071
31072(define-public python-lazr-config
31073 (package
31074 (name "python-lazr-config")
31075 (version "3.1")
31076 (source
31077 (origin
31078 (method url-fetch)
31079 (uri (pypi-uri "lazr_config" version))
31080 (sha256
31081 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31082 (build-system pyproject-build-system)
31083 (arguments
31084 (list
31085 #:test-flags #~(list "-v" #$output)
31086 #:phases
31087 #~(modify-phases %standard-phases
31088 (add-after 'check 'check-cleanup
31089 (lambda* (#:key tests? #:allow-other-keys)
31090 (when tests?
31091 (for-each
31092 delete-file-recursively
31093 (find-files #$output
31094 (lambda (file stat)
31095 (or (member (basename file)
31096 '("tests" ".pytest_cache"))))
31097 #:directories? #t))))))))
31098 (native-inputs
31099 (list python-pytest python-setuptools python-wheel))
31100 (propagated-inputs
31101 (list python-lazr-delegates python-zope-interface))
31102 (home-page "https://launchpad.net/lazr.config")
31103 (synopsis "Create configuration schemas and process and validate configurations")
31104 (description
31105 "The LAZR config system is typically used to manage process configuration.
31106Process configuration is for saying how things change when we run systems on
31107different machines, or under different circumstances. This system uses ini-like
31108file format of section, keys, and values. The config file supports inheritance
31109to minimize duplication of information across files. The format supports schema
31110validation.")
31111 (license license:lgpl3)))
31112
31113;; XXX: Not maintained since 2021, there is no git available as seen in
31114;; <https://pypi.org/project/flufl.bounce>.
31115(define-public python-flufl-bounce
31116 (package
31117 (name "python-flufl-bounce")
31118 (version "4.0")
31119 (source
31120 (origin
31121 (method url-fetch)
31122 (uri (pypi-uri "flufl.bounce" version))
31123 (sha256
31124 (base32
31125 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
31126 (build-system pyproject-build-system)
31127 (arguments
31128 (list #:phases
31129 #~(modify-phases %standard-phases
31130 (replace 'check
31131 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31132 (when tests?
31133 (with-directory-excursion
31134 (string-append (site-packages inputs outputs) "/flufl")
31135 (invoke "python" "-m" "nose2" "-v"))))))))
31136 (propagated-inputs
31137 (list python-atpublic python-zope-interface))
31138 (native-inputs
31139 (list python-flufl-testing python-nose2 python-setuptools))
31140 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31141 (synopsis "Email bounce detectors")
31142 (description "The @code{flufl.bounce} library provides a set of heuristics
31143and an API for detecting the original bouncing email addresses from a bounce
31144message. Many formats found in the wild are supported, as are VERP and
31145RFC 3464.")
31146 (license (list license:asl2.0
31147 license:lgpl3)))) ; only for setup_headers.py
31148
31149(define-public python-flufl-i18n
31150 (package
31151 (name "python-flufl-i18n")
31152 (version "5.1.0")
31153 (source
31154 (origin
31155 (method url-fetch)
31156 (uri (pypi-uri "flufl_i18n" version))
31157 (sha256
31158 (base32
31159 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
31160 (build-system pyproject-build-system)
31161 (arguments
31162 (list #:test-flags
31163 #~(list "--no-cov" "--ignore-glob=docs/*")
31164 #:phases
31165 #~(modify-phases %standard-phases
31166 ;; This phase add a symlink of dist-info dir for packages
31167 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
31168 (add-after 'install 'add-custom-dist-info
31169 (lambda _
31170 (for-each
31171 (lambda (dir)
31172 (with-directory-excursion (dirname dir)
31173 (let ((base (basename dir)))
31174 (symlink base
31175 (string-join (string-split base #\_) ".")))))
31176 (find-files #$output
31177 (lambda (file stat)
31178 (string-suffix? ".dist-info" file))
31179 #:directories? #t)))))))
31180 (propagated-inputs
31181 (list python-atpublic))
31182 (native-inputs
31183 (list python-hatchling
31184 python-pytest
31185 python-pytest-cov
31186 python-sybil))
31187 (home-page "https://flufli18n.readthedocs.io")
31188 (synopsis "API for Python internationalization")
31189 (description
31190 "This package provides a high-level, convenient API for managing
31191internationalization/translation contexts in Python applications. There is a
31192simple API for single-context applications, such as command line scripts which
31193only need to translate into one language during the entire course of their
31194execution. There is a more flexible, but still convenient API for multi-context
31195applications, such as servers, which may need to switch language contexts for
31196different tasks.")
31197 (license license:asl2.0)))
31198
31199(define-public python-flufl-lock
31200 (package
31201 (name "python-flufl-lock")
31202 (version "8.1.0")
31203 (source
31204 (origin
31205 (method url-fetch)
31206 (uri (pypi-uri "flufl.lock" version))
31207 (sha256
31208 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
31209 (build-system pyproject-build-system)
31210 (arguments
31211 (list #:test-flags
31212 #~(list "--no-cov" "--ignore-glob=docs/*")
31213 #:phases
31214 #~(modify-phases %standard-phases
31215 ;; This phase add a symlink of dist-info dir for packages
31216 ;; expecting flufl.lock rather than flufl_lock (mailman).
31217 (add-after 'install 'add-custom-dist-info
31218 (lambda _
31219 (for-each
31220 (lambda (dir)
31221 (with-directory-excursion (dirname dir)
31222 (let ((base (basename dir)))
31223 (symlink base
31224 (string-join (string-split base #\_) ".")))))
31225 (find-files #$output
31226 (lambda (file stat)
31227 (string-suffix? ".dist-info" file))
31228 #:directories? #t)))))))
31229 (native-inputs
31230 (list python-hatchling
31231 python-pytest
31232 python-pytest-cov
31233 python-sybil))
31234 (propagated-inputs
31235 (list python-atpublic python-psutil))
31236 (home-page "https://flufllock.readthedocs.io")
31237 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
31238 (description
31239 "The @dfn{flufl.lock} package provides NFS-safe file locking with
31240timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
31241@code{open} system call but uses a lockfile. Lock objects support lock-breaking
31242and have a maximum lifetime built-in.")
31243 (license (list license:asl2.0
31244 license:lgpl3)))) ; only for setup_helpers.py
31245
31246(define-public python-flufl-testing
31247 (package
31248 (name "python-flufl-testing")
31249 (version "0.8")
31250 (source
31251 (origin
31252 (method git-fetch)
31253 (uri (git-reference
31254 (url "https://gitlab.com/warsaw/flufl.testing")
31255 (commit version)))
31256 (file-name (git-file-name name version))
31257 (sha256
31258 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
31259 (build-system pyproject-build-system)
31260 (arguments (list #:tests? #f)) ;no tests
31261 (native-inputs (list python-setuptools))
31262 (home-page "https://gitlab.com/warsaw/flufl.testing")
31263 (synopsis "Collection of test tool plugins")
31264 (description
31265 "This package contains a small collection of test tool plugins for
31266@code{nose2} and @code{flake8}.")
31267 (license license:asl2.0)))
31268
31269(define-public python-devtools
31270 (package
31271 (name "python-devtools")
31272 (version "0.12.2")
31273 (source
31274 (origin
31275 (method git-fetch)
31276 (uri (git-reference
31277 (url "https://github.com/samuelcolvin/python-devtools")
31278 (commit (string-append "v" version))))
31279 (file-name (git-file-name name version))
31280 (sha256
31281 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
31282 (build-system pyproject-build-system)
31283 (arguments
31284 (list
31285 #:test-flags
31286 ;; Disable some failing tests.
31287 ;;
31288 ;; test_print_subprocess seems to inherit wrong environment, fails with
31289 ;; E + ModuleNotFoundError: No module named 'executing'
31290 ;; Test runs fine from local clone.
31291 ;;
31292 ;; test_executing_failure fails with
31293 ;; E - [1, 2] (list) len=2
31294 ;; E + [x, y]: [1, 2] (list) len=2
31295 ;; unclear why, probably due to a dependency.
31296 '(list "-k" "not test_print_subprocess and not test_executing_failure"
31297 ;; test_insert_assert.py also seems to inherit a bad environment:
31298 ;; E fixture 'pytester_pretty' not found
31299 ;; Test runs fine from local clone.
31300 "--ignore=tests/test_insert_assert.py")))
31301 (native-inputs
31302 (list python-hatchling python-pytest python-pytest-mock))
31303 (propagated-inputs
31304 (list python-asttokens python-executing python-pygments))
31305 (home-page "https://github.com/samuelcolvin/python-devtools")
31306 (synopsis "Debug command and development tools")
31307 (description
31308 "This package provides a debug print command and other development tools.
31309It adds a simple and readable way to print stuff during development.")
31310 (license license:expat)))
31311
31312(define-public python-dateparser
31313 (package
31314 (name "python-dateparser")
31315 (version "1.2.2")
31316 (source
31317 (origin
31318 (method url-fetch)
31319 (uri (pypi-uri "dateparser" version))
31320 (sha256
31321 (base32
31322 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
31323 (build-system pyproject-build-system)
31324 (arguments
31325 (list
31326 #:test-flags
31327 #~(cons* "-k" "not test_relative_base_setting_2_en"
31328 (map
31329 (lambda (name)
31330 (string-append "--ignore=tests/" name ".py"))
31331 '("test_dateparser_data_integrity"
31332 "test_hijri"
31333 "test_jalali"
31334 "test_language_detect")))
31335 #:phases
31336 #~(modify-phases %standard-phases
31337 (add-before 'check 'set-check-environment
31338 (lambda* (#:key inputs #:allow-other-keys)
31339 (setenv "TZ" "UTC")
31340 (setenv "TZDIR"
31341 (search-input-directory inputs
31342 "share/zoneinfo")))))))
31343 (propagated-inputs
31344 (list python-dateutil
31345 python-pytz
31346 python-regex
31347 python-ruamel.yaml
31348 python-tzlocal))
31349 (native-inputs
31350 (list python-parameterized
31351 python-pytest
31352 python-setuptools
31353 tzdata-for-tests))
31354 (home-page "https://github.com/scrapinghub/dateparser")
31355 (synopsis
31356 "Date parsing library designed to parse dates from HTML pages")
31357 (description
31358 "@code{python-dateparser} provides modules to easily parse localized
31359dates in almost any string formats commonly found on web pages.")
31360 (license license:bsd-3)))
31361
31362(define-public python-dparse
31363 (package
31364 (name "python-dparse")
31365 (version "0.6.4")
31366 (source
31367 (origin
31368 (method url-fetch)
31369 (uri (pypi-uri "dparse" version))
31370 (sha256
31371 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
31372 (build-system pyproject-build-system)
31373 (native-inputs (list python-hatchling python-pytest))
31374 (propagated-inputs (list python-packaging python-toml))
31375 (home-page "https://github.com/pyupio/dparse")
31376 (synopsis "Parser for Python dependency files")
31377 (description "This package provides a parser for Python dependency files.")
31378 (license license:expat)))
31379
31380(define-public python-dpath
31381 (package
31382 (name "python-dpath")
31383 (version "2.2.0")
31384 (source
31385 (origin
31386 (method url-fetch)
31387 (uri (pypi-uri "dpath" version))
31388 (sha256
31389 (base32
31390 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
31391 (build-system pyproject-build-system)
31392 (native-inputs
31393 (list python-hypothesis python-nose2 python-setuptools python-wheel))
31394 (home-page "https://github.com/akesterson/dpath-python")
31395 (synopsis "File-system-like pathing and searching for dictionaries")
31396 (description
31397 "@code{python-dpath} is a library for accessing and searching
31398dictionaries via /slashed/paths ala xpath.
31399
31400Basically it lets you glob over a dictionary as if it were a file system. It
31401allows you to specify globs (ala the bash eglob syntax, through some advanced
31402fnmatch.fnmatch magic) to access dictionary elements, and provides some
31403facility for filtering those results.")
31404 (license license:expat)))
31405
31406(define-public python-safety
31407 (package
31408 (name "python-safety")
31409 (version "3.6.2")
31410 (source
31411 (origin
31412 (method url-fetch)
31413 (uri (pypi-uri "safety" version))
31414 (sha256
31415 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
31416 (build-system pyproject-build-system)
31417 (arguments
31418 (list
31419 #:test-flags
31420 #~(list "-k" (string-join
31421 ;; test_announcements fails with AssertionError.
31422 (list "not test_announcements_if_is_not_tty"
31423 ;; Tests below need a network connection.
31424 "test_check_live"
31425 "test_check_live_cached"
31426 "test_get_packages_licenses_without_api_key"
31427 ;; AttributeError: 'PackageInstalledPayload' object
31428 ;; has no attribute 'tool_path'
31429 "test_emit_diff_operations_with_multiple_operations"
31430 "test_emit_diff_operations_with_empty_locations"
31431 "test_emit_diff_operations_with_different_tools"
31432 "test_emit_diff_operations_creates_correct_payload_structure")
31433 " and not "))
31434 #:phases #~(modify-phases %standard-phases
31435 (add-after 'unpack 'disable-telemetry
31436 (lambda _
31437 (substitute* (find-files "." "\\.py$")
31438 (("telemetry: bool = True")
31439 "telemetry: bool = False")
31440 (("telemetry=True")
31441 "telemetry=False"))))
31442 (add-before 'check 'set-home ; some tests run mkdir
31443 (lambda _
31444 (setenv "HOME" "/tmp"))))))
31445 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
31446 (propagated-inputs (list python-authlib
31447 python-click
31448 python-dparse
31449 python-filelock
31450 python-httpx
31451 python-jinja2
31452 python-marshmallow
31453 python-nltk
31454 python-packaging
31455 python-psutil
31456 python-pydantic
31457 python-requests
31458 python-ruamel.yaml
31459 python-safety-schemas
31460 python-tenacity
31461 python-tomli
31462 python-tomlkit
31463 python-typer
31464 python-typing-extensions))
31465 (home-page "https://github.com/pyupio/safety")
31466 (synopsis "Check installed dependencies for known vulnerabilities")
31467 (description
31468 "Safety checks installed dependencies for known vulnerabilities.
31469By default it uses the open Python vulnerability database Safety DB.")
31470 (license license:expat)))
31471
31472(define-public python-pypandoc
31473 (package
31474 (name "python-pypandoc")
31475 (version "1.15")
31476 (source
31477 (origin
31478 (method git-fetch)
31479 (uri (git-reference
31480 (url "https://github.com/JessicaTegner/pypandoc")
31481 (commit (string-append "v" version))))
31482 (file-name (git-file-name name version))
31483 (sha256
31484 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
31485 (build-system pyproject-build-system)
31486 (arguments
31487 (list
31488 #:test-backend #~'unittest
31489 #:phases
31490 #~(modify-phases %standard-phases
31491 (add-before 'check 'disable-tests
31492 (lambda _
31493 (substitute* "tests.py"
31494 ;; Disable test requiring network access
31495 (("test_basic_conversion_from_http_url")
31496 "skip_test_basic_conversion_from_http_url")
31497 ;; Disable tests with missing files
31498 (("test_basic_conversion_from_file_pattern")
31499 "skip_test_basic_conversion_from_file_pattern")
31500 (("test_conversion_with_data_files")
31501 "skip_test_conversion_with_data_files")))))))
31502 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
31503 ;; the missing etoolbox.sty file is added
31504 (native-inputs
31505 (list (texlive-local-tree
31506 (list texlive-etoolbox
31507 texlive-lm
31508 texlive-regexpatch
31509 texlive-xcolor))
31510 python-pip
31511 python-poetry-core
31512 python-setuptools))
31513 (inputs (list pandoc python-pandocfilters))
31514 (propagated-inputs (list python-wheel))
31515 (home-page "https://github.com/JessicaTegner/pypandoc")
31516 (synopsis "Python wrapper for pandoc")
31517 (description
31518 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
31519 (license license:expat)))
31520
31521(define-public python-rnc2rng
31522 (package
31523 (name "python-rnc2rng")
31524 (version "2.7.0")
31525 (source
31526 (origin
31527 (method git-fetch)
31528 (uri (git-reference
31529 (url "https://github.com/djc/rnc2rng")
31530 (commit version)))
31531 (file-name (git-file-name name version))
31532 (sha256
31533 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
31534 (build-system pyproject-build-system)
31535 (arguments
31536 (list
31537 #:test-backend #~'custom
31538 #:test-flags #~(list "test.py")))
31539 (native-inputs (list python-setuptools))
31540 (propagated-inputs (list python-rply))
31541 (home-page "https://github.com/djc/rnc2rng")
31542 (synopsis "Convert RELAX NG Compact to regular syntax")
31543 (description
31544 "This package provides the @command{rnc2rng} command-line tool as well as
31545a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
31546equivalent schemata in the XML-based default RELAX NG syntax.")
31547 (license license:expat)))
31548
31549(define-public python-citeproc-py
31550 (package
31551 (name "python-citeproc-py")
31552 (version "0.9.0")
31553 (source
31554 (origin
31555 (method git-fetch)
31556 (uri (git-reference
31557 (url "https://github.com/brechtm/citeproc-py")
31558 (commit (string-append "v" version))
31559 (recursive? #t))) ; TODO Unbundle.
31560 (file-name (git-file-name name version))
31561 (sha256
31562 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
31563 (build-system pyproject-build-system)
31564 (arguments
31565 (list
31566 #:phases
31567 #~(modify-phases %standard-phases
31568 (add-after 'unpack 'set-version
31569 (lambda _
31570 (delete-file "citeproc/_version.py")
31571 (substitute* "citeproc/__init__.py"
31572 (("from \\. import version")
31573 "")
31574 (("__version__ =.*")
31575 (format #f "__version__ = ~s" #$version))))))))
31576 (native-inputs (list python-pytest python-setuptools))
31577 (propagated-inputs (list python-lxml python-rnc2rng))
31578 (home-page "https://github.com/brechtm/citeproc-py")
31579 (synopsis "Citations and bibliography formatter")
31580 (description
31581 "Citeproc-py is a CSL processor for Python. It aims to implement the
31582CSL 1.0.1 specification. citeproc-py can output styled citations and
31583bibliographies in a number of different output formats. Currently supported
31584are plain text, reStructuredText and HTML.")
31585 (license license:bsd-2)))
31586
31587(define-public python-inform
31588 (package
31589 (name "python-inform")
31590 (version "1.34")
31591 (source
31592 (origin
31593 (method git-fetch) ; no tests in PyPI release
31594 (uri (git-reference
31595 (url "https://github.com/kenkundert/inform")
31596 (commit (string-append "v" version))))
31597 (file-name (git-file-name name version))
31598 (sha256
31599 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
31600 (build-system pyproject-build-system)
31601 (arguments
31602 (list
31603 #:test-flags #~(list "-k" (string-append
31604 ;; Test below needs the num2words package
31605 "not test_plural_words"
31606 ;; These last two failed with AssertionError
31607 " and not test_inform"
31608 " and not test_manual"))))
31609 (native-inputs
31610 (list python-flit-core python-pytest))
31611 (propagated-inputs
31612 (list python-arrow))
31613 (home-page "https://inform.readthedocs.io")
31614 (synopsis "Print & logging utilities for communicating with user")
31615 (description
31616 "Inform is designed to display messages from programs that are typically run from
31617a console. It provides a collection of ‘print’ functions that allow you to simply and
31618cleanly print different types of messages.")
31619 (license license:gpl3+)))
31620
31621(define-public python-nestedtext
31622 (package
31623 (name "python-nestedtext")
31624 (version "3.7")
31625 (source
31626 (origin
31627 (method git-fetch) ; no tests in PyPI release
31628 (uri (git-reference
31629 (url "https://github.com/KenKundert/nestedtext")
31630 (commit (string-append "v" version))))
31631 (file-name (git-file-name name version))
31632 (sha256
31633 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
31634 (build-system pyproject-build-system)
31635 (arguments
31636 (list
31637 ;; XXX: Tests below need some not yet packaged Python libraries.
31638 #:test-flags #~(list "--ignore" "examples/"
31639 "--ignore" "tests/test_nestedtext.py"
31640 "-k" (string-append
31641 "not techniques.rst"
31642 " and not nestedtext.nestedtext.dumps"))))
31643 (native-inputs (list python-flit-core python-pytest))
31644 (propagated-inputs
31645 (list python-inform))
31646 (home-page "https://nestedtext.org")
31647 (synopsis "Human readable and writable data interchange format")
31648 (description
31649 "NestedText is a file format for holding data that is to be entered, edited, or
31650viewed by people. It allows data to be organized into a nested collection of
31651dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
31652without the complexity and risk of YAML and without the syntactic clutter of JSON.
31653NestedText is both simple and natural. Only a small number of concepts and rules must
31654be kept in mind when creating it. It is easily created, modified, or viewed with
31655a text editor and easily understood and used by both programmers and non-programmers.")
31656 (license license:expat))) ; MIT license
31657
31658(define-public python-nest-asyncio
31659 (package
31660 (name "python-nest-asyncio")
31661 (version "1.6.0")
31662 (source
31663 (origin
31664 (method url-fetch)
31665 (uri (pypi-uri "nest_asyncio" version))
31666 (sha256
31667 (base32
31668 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
31669 (build-system pyproject-build-system)
31670 (native-inputs
31671 (list python-pytest python-setuptools))
31672 (home-page "https://github.com/erdewit/nest_asyncio")
31673 (synopsis "Patch asyncio to allow nested event loops")
31674 (description
31675 "By design @code{asyncio} does not allow its event loop to be nested.
31676This presents a practical problem: when in an environment where the event loop
31677is already running it's impossible to run tasks and wait for the result. This
31678module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
31679@code{loop.run_until_complete}.")
31680 (license license:bsd-3)))
31681
31682(define-public python-simpervisor
31683 (package
31684 (name "python-simpervisor")
31685 (version "1.0.0")
31686 (source
31687 (origin
31688 ;; Tests not included in release.
31689 (method git-fetch)
31690 (uri (git-reference
31691 (url "https://github.com/yuvipanda/simpervisor")
31692 (commit (string-append "v" version))))
31693 (file-name (git-file-name name version))
31694 (sha256
31695 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
31696 (build-system pyproject-build-system)
31697 (arguments
31698 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
31699 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
31700 (native-inputs
31701 (list python-aiohttp
31702 python-hatchling
31703 python-psutil
31704 python-pytest
31705 python-pytest-asyncio))
31706 (home-page "https://github.com/yuvipanda/simpervisor")
31707 (synopsis "Simple async process supervisor")
31708 (description
31709 "This package provides a simple async process supervisor in Python.")
31710 (license license:bsd-3)))
31711
31712(define-public python-parallel
31713 (package
31714 (name "python-parallel")
31715 (version "1.6.4.4")
31716 (source
31717 (origin
31718 (method url-fetch)
31719 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
31720 version ".zip"))
31721 (sha256
31722 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
31723 (build-system pyproject-build-system)
31724 (arguments (list #:tests? #f)) ;No test suite.
31725 (native-inputs (list python-setuptools unzip))
31726 (propagated-inputs (list python-six))
31727 (home-page "https://www.parallelpython.com")
31728 (synopsis "Parallel and distributed programming for Python")
31729 (description
31730 "Parallel Python module (PP) provides an easy and efficient way to create
31731parallel-enabled applications for SMP computers and clusters. PP module
31732features cross-platform portability and dynamic load balancing. Thus
31733applications written with PP will parallelize efficiently even on
31734heterogeneous and multi-platform clusters (including clusters running other
31735applications with variable CPU loads).")
31736 (license license:bsd-3)))
31737
31738(define-public python-param
31739 (package
31740 (name "python-param")
31741 (version "2.1.0")
31742 (source
31743 (origin
31744 (method url-fetch)
31745 (uri (pypi-uri "param" version))
31746 (sha256
31747 (base32 "07z7az7xg8pzjrmaf928is7n6siw9v9nxfmf0a5vgqj7nl40pcx7"))))
31748 (build-system pyproject-build-system)
31749 (native-inputs
31750 (list python-cloudpickle
31751 python-hatchling
31752 python-hatch-vcs
31753 python-ipython
31754 python-jsonschema
31755 python-nbval
31756 python-nest-asyncio
31757 python-numpy
31758 python-odfpy
31759 python-openpyxl
31760 python-pandas
31761 python-pyarrow
31762 python-pytest
31763 python-pytest-asyncio
31764 python-pytest-xdist
31765 python-tables
31766 python-xlrd))
31767 (home-page "https://param.holoviz.org/")
31768 (synopsis
31769 "Make your Python code clearer and more reliable by declaring Parameters")
31770 (description
31771 "Param is a library for handling all the user-modifiable parameters,
31772arguments, and attributes that control your code. It provides automatic,
31773robust error-checking while dramatically reducing boilerplate code, letting
31774you focus on what you want your code to do rather than on checking for all the
31775possible ways users could supply inappropriate values to a function or
31776class.")
31777 (license license:bsd-3)))
31778
31779(define-public python-djitellopy
31780 (package
31781 (name "python-djitellopy")
31782 (version "2.5.0")
31783 (source
31784 (origin
31785 (method url-fetch)
31786 (uri (pypi-uri "djitellopy" version))
31787 (sha256
31788 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
31789 (build-system pyproject-build-system)
31790 (arguments
31791 (list
31792 #:tests? #f ;no test suite
31793 #:phases
31794 #~(modify-phases %standard-phases
31795 ;; OpenCV does not ship metadata files for its Python library, which
31796 ;; makes it invisible to the sanity_check script (see:
31797 ;; https://github.com/opencv/opencv/issues/24810).
31798 (delete 'sanity-check))))
31799 (propagated-inputs
31800 (list opencv ;for opencv-python
31801 python-av
31802 python-numpy
31803 python-pillow))
31804 (native-inputs (list python-setuptools python-wheel))
31805 (home-page "https://github.com/damiafuentes/DJITelloPy")
31806 (synopsis
31807 "DJI Tello drone video streaming, swarms and state packets library")
31808 (description
31809 "DJI Tello drone Python interface using the official Tello SDK and Tello
31810EDU SDK. This library has the following features:
31811@itemize
31812@item Implementation of all tello commands
31813@item Retrieve a video stream easily
31814@item Receive and parse state packets
31815@item Control a swarm of drones.
31816@end itemize")
31817 (license license:expat)))
31818
31819(define-public python-djvulibre
31820 ;; The original git repository of python-djvulibre is hosted at
31821 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
31822 ;; has been archived by its owner in 2022. The most active fork is
31823 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
31824 ;; version packaged here (its "python3" branch, the default).
31825 ;;
31826 ;; However, the python-djvulibre PyPI project still refers to the old
31827 ;; repository. The new repository is published as djvulibre-python on PyPI;
31828 ;; that is, with the name in reversed order.The original package name is
31829 ;; used in Guix because it best adheres to the Guix naming scheme.
31830 (package
31831 (name "python-djvulibre")
31832 (version "0.9.3")
31833 (source
31834 (origin
31835 (method git-fetch)
31836 (uri (git-reference
31837 (url "https://github.com/FriedrichFroebel/python-djvulibre")
31838 (commit version)))
31839 (file-name (git-file-name name version))
31840 (sha256
31841 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
31842 (build-system pyproject-build-system)
31843 (arguments
31844 (list
31845 #:phases
31846 #~(modify-phases %standard-phases
31847 (replace 'check
31848 (lambda* (#:key tests? #:allow-other-keys)
31849 (when tests?
31850 ;; The tests get confused by the djvu directory.
31851 (delete-file-recursively "djvu")
31852 ;; Tests can't find tools.py otherwise.
31853 (with-directory-excursion "tests"
31854 (invoke "python" "-m" "pytest"))))))))
31855 (native-inputs
31856 (list ghostscript
31857 pkg-config
31858 python-cython
31859 python-pytest
31860 python-setuptools))
31861 (inputs
31862 (list djvulibre))
31863 (synopsis "Python bindings for DjVuLibre")
31864 (description "This is a set of Python bindings for the DjVuLibre library.")
31865 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
31866 (license license:gpl2)))
31867
31868(define-public python-gamera
31869 (package
31870 (name "python-gamera")
31871 (version "4.1.0")
31872 (source
31873 (origin
31874 (method git-fetch)
31875 (uri (git-reference
31876 (url "https://github.com/hsnr-gamera/gamera-4")
31877 (commit (string-append "v" version))))
31878 (file-name (git-file-name name version))
31879 (sha256
31880 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
31881 (build-system pyproject-build-system)
31882 (arguments
31883 (list
31884 #:phases
31885 #~(modify-phases %standard-phases
31886 (add-after 'unpack 'fix-build
31887 (lambda _
31888 ;; The script to make daily build artifacts fails to compile,
31889 ;; but users don't need that, so ignore it.
31890 (delete-file "misc/daily_build.py")
31891 ;; Prepare tests
31892 (mkdir-p "tmp")
31893 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
31894 (native-inputs (list python-docutils python-pytest python-setuptools))
31895 (inputs (list libpng libtiff zlib))
31896 (synopsis "Framework for building document analysis applications")
31897 (description
31898 "Gamera is a toolkit for building document image recognition systems.")
31899 (home-page "https://gamera.informatik.hsnr.de/")
31900 (license license:gpl2+)))
31901
31902(define-public python-aiofiles
31903 (package
31904 (name "python-aiofiles")
31905 (version "24.1.0")
31906 (source
31907 (origin
31908 (method url-fetch)
31909 (uri (pypi-uri "aiofiles" version))
31910 (sha256
31911 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
31912 (build-system pyproject-build-system)
31913 (native-inputs
31914 (list python-hatch-vcs
31915 python-hatchling
31916 python-pytest
31917 python-pytest-asyncio))
31918 (home-page "https://github.com/Tinche/aiofiles")
31919 (synopsis "File support for @code{asyncio}")
31920 (description
31921 "@code{python-aiofiles} is a library for handling local disk files in
31922asyncio applications.")
31923 (license license:asl2.0)))
31924
31925(define-public python-pyre-extensions
31926 (package
31927 (name "python-pyre-extensions")
31928 (version "0.0.32")
31929 (source
31930 (origin
31931 (method url-fetch)
31932 (uri (pypi-uri "pyre_extensions" version))
31933 (sha256
31934 (base32
31935 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
31936 (build-system pyproject-build-system)
31937 (native-inputs (list python-pytest python-setuptools python-wheel))
31938 (propagated-inputs
31939 (list python-typing-extensions python-typing-inspect))
31940 (home-page "https://pyre-check.org")
31941 (synopsis
31942 "Type system extensions for use with @code{python-pyre}")
31943 (description
31944 "@code{python-pyre-extensions} defines extensions to the standard
31945@code{typing} module that are supported by the Pyre typechecker.")
31946 (license license:expat)))
31947
31948(define-public python-pywatchman
31949 (package
31950 (name "python-pywatchman")
31951 (version "3.0.0")
31952 (source
31953 (origin
31954 (method url-fetch)
31955 (uri (pypi-uri "pywatchman" version))
31956 (sha256
31957 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
31958 (build-system pyproject-build-system)
31959 (arguments
31960 (list
31961 #:test-backend #~'custom
31962 #:test-flags #~(list "tests/tests.py")))
31963 (native-inputs (list python-setuptools))
31964 (home-page "https://facebook.github.io/watchman/")
31965 (synopsis "Watchman client for python")
31966 (description
31967 "@code{python-pywatchman} is a library to connect and query Watchman to
31968discover file changes.")
31969 (license license:bsd-3)))
31970
31971(define-public python-roundrobin
31972 (package
31973 (name "python-roundrobin")
31974 (version "0.0.4")
31975 (source
31976 (origin
31977 (method git-fetch)
31978 (uri (git-reference
31979 (url "https://github.com/linnik/roundrobin")
31980 (commit version)))
31981 (file-name (git-file-name name version))
31982 (sha256
31983 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
31984 (build-system pyproject-build-system)
31985 (arguments
31986 (list #:test-backend #~'unittest))
31987 (native-inputs (list python-setuptools))
31988 (home-page "https://github.com/linnik/roundrobin")
31989 (synopsis "Collection of roundrobin utilities")
31990 (description
31991 "This package provides a collection of utilities for round-robin
31992distribution in Python.")
31993 (license license:expat)))
31994
31995(define-public python-helpdev
31996 (package
31997 (name "python-helpdev")
31998 (version "0.7.1")
31999 (source
32000 (origin
32001 (method git-fetch)
32002 (uri (git-reference
32003 (url "https://gitlab.com/dpizetta/helpdev")
32004 (commit (string-append "v" version))))
32005 (file-name (git-file-name name version))
32006 (sha256
32007 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32008 (build-system pyproject-build-system)
32009 (native-inputs (list python-pip python-pytest python-setuptools))
32010 (home-page "https://gitlab.com/dpizetta/helpdev")
32011 (synopsis "Extract information about the Python environment easily")
32012 (description
32013 "Helpdev is a library to easily extract information about the Python
32014environment.")
32015 (license license:expat)))
32016
32017(define-public python-logutils
32018 (package
32019 (name "python-logutils")
32020 (version "0.3.5")
32021 (source
32022 (origin
32023 (method url-fetch)
32024 (uri (pypi-uri "logutils" version))
32025 (sha256
32026 (base32
32027 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
32028 (build-system pyproject-build-system)
32029 (arguments
32030 (list
32031 #:test-flags
32032 ;; XXX: Unclear why this test fails.
32033 #~(list "--deselect=tests/test_adapter.py::AdapterTest::test_hashandlers"
32034 "--ignore=tests/test_redis.py")))
32035 (native-inputs (list python-pytest python-setuptools))
32036 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
32037 (synopsis "Logging utilities")
32038 (description "This package provides a set of handlers for the Python
32039standard library logging package. Some of these handlers are out-of-scope
32040for the standard library, and so they are packaged here. Others are updated
32041versions which have appeared in recent Python releases, but are usable with
32042older versions of Python and so are packaged here.")
32043 (license license:bsd-3)))
32044
32045(define-public python-loguru
32046 (package
32047 (name "python-loguru")
32048 (version "0.7.2")
32049 (source
32050 (origin
32051 (method url-fetch)
32052 (uri (pypi-uri "loguru" version))
32053 (sha256
32054 (base32 "1b2ipp8di3y10gd7kiin9fyazv5rijbfwh3383yk8psi48ssawg6"))))
32055 (build-system pyproject-build-system)
32056 (arguments
32057 (list
32058 #:test-flags
32059 #~(list"--numprocesses" (number->string (parallel-job-count))
32060 ;; All of these fail with: error: Cannot find implementation or
32061 ;; library stub for module named "loguru"
32062 "--ignore=tests/typesafety/test_logger.yml")))
32063 (native-inputs
32064 (list python-freezegun
32065 python-pytest
32066 python-pytest-mypy-plugins
32067 python-pytest-xdist
32068 python-setuptools
32069 python-wheel))
32070 (propagated-inputs
32071 (list python-colorama))
32072 (home-page "https://github.com/Delgan/loguru")
32073 (synopsis "Python logging made (stupidly) simple")
32074 (description "Python logging made (stupidly) simple")
32075 (license license:expat)))
32076
32077(define-public python-helper
32078 (package
32079 (name "python-helper")
32080 (version "2.5.0")
32081 (source
32082 (origin
32083 (method git-fetch)
32084 (uri (git-reference
32085 (url "https://github.com/gmr/helper")
32086 (commit version)))
32087 (file-name (git-file-name name version))
32088 (sha256
32089 (base32 "0zypjv8rncvrsgl200v7d3bn08gs48dwqvgamfqv71h07cj6zngp"))))
32090 (build-system pyproject-build-system)
32091 (arguments (list #:test-backend #~'unittest))
32092 (native-inputs (list python-mock python-setuptools))
32093 (propagated-inputs (list python-logutils python-pyyaml))
32094 (home-page "https://github.com/gmr/helper")
32095 (synopsis "Library for writing configurable applications and daemons")
32096 (description
32097 "This package provides procedures for quickly writing configurable
32098applications and daemons.")
32099 (license license:bsd-3)))
32100
32101(define-public python-qtsass
32102 (package
32103 (name "python-qtsass")
32104 (version "0.4.0")
32105 (source
32106 (origin
32107 ;; There are no tests in the PyPI tarball.
32108 (method git-fetch)
32109 (uri (git-reference
32110 (url "https://github.com/spyder-ide/qtsass/")
32111 (commit (string-append "v" version))))
32112 (file-name (git-file-name name version))
32113 (sha256
32114 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32115 (build-system pyproject-build-system)
32116 (native-inputs
32117 (list python-flaky python-pytest python-setuptools python-wheel))
32118 (propagated-inputs
32119 (list python-libsass))
32120 (home-page "https://github.com/spyder-ide/qtsass")
32121 (synopsis "Compile SCSS files to valid Qt stylesheets")
32122 (description
32123 "Besides being used in web development, CSS is also the way to stylize
32124Qt-based desktop applications. However, Qt's CSS has a few variations that
32125prevent the direct use of SASS compiler.
32126
32127The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32128handling those variations.")
32129 (license license:expat)))
32130
32131(define-public python-qdarkstyle
32132 (package
32133 (name "python-qdarkstyle")
32134 (version "3.2.3")
32135 (source
32136 (origin
32137 (method url-fetch)
32138 (uri (pypi-uri "QDarkStyle" version))
32139 (sha256
32140 (base32
32141 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32142 (build-system pyproject-build-system)
32143 (native-inputs (list python-pytest
32144 python-qtsass
32145 python-setuptools
32146 python-watchdog
32147 python-wheel))
32148 (propagated-inputs
32149 (list python-qtpy python-pyqt-6))
32150 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32151 (synopsis
32152 "Complete dark stylesheet for Python and Qt applications")
32153 (description "QDarkStyle is the most complete dark stylesheet for Python and
32154Qt applications.")
32155 (license license:expat)))
32156
32157(define-public python-pystray
32158 (package
32159 (name "python-pystray")
32160 (version "0.19.5")
32161 (source
32162 (origin
32163 (method git-fetch)
32164 (uri (git-reference
32165 (url "https://github.com/moses-palmer/pystray")
32166 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32167 (file-name (git-file-name name version))
32168 (sha256
32169 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32170 (build-system pyproject-build-system)
32171 (arguments
32172 (list
32173 ;; The test suite requires user interaction, there are no automated
32174 ;; tests.
32175 #:tests? #false
32176 #:phases #~(modify-phases %standard-phases
32177 (add-before 'sanity-check 'use-dummy-backend
32178 (lambda _
32179 ;; Without setting this, pystray tries to connect to
32180 ;; X11 on import.
32181 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32182 (native-inputs (list python-sphinx python-setuptools))
32183 (propagated-inputs (list python-pillow python-six python-xlib))
32184 (home-page "https://github.com/moses-palmer/pystray")
32185 (synopsis "Create a system tray icon")
32186 (description "This library allows you to create a system tray icon.
32187It makes it possible to specify an icon, a title and a callback for when
32188the icon is activated. The icon and title can be changed after the icon
32189has been created, and the visibility of the icon can be toggled.")
32190 (license license:lgpl3+)))
32191
32192(define-public python-bitstring
32193 (package
32194 (name "python-bitstring")
32195 (version "4.3.1")
32196 (source
32197 (origin
32198 (method url-fetch)
32199 (uri (pypi-uri "bitstring" version))
32200 (sha256
32201 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32202 (build-system pyproject-build-system)
32203 (arguments
32204 (list
32205 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32206 "--ignore=tests/test_fp8.py"
32207 "--ignore=tests/test_mxfp.py")))
32208 (native-inputs
32209 (list python-gfloat python-pytest python-setuptools python-wheel))
32210 (propagated-inputs
32211 (list python-bitarray))
32212 (home-page "https://github.com/scott-griffiths/bitstring")
32213 (synopsis
32214 "Simple construction, analysis and modification of binary data")
32215 (description
32216 "Bitstring is a library for simple construction, analysis and modification
32217 of binary data.")
32218 (license license:expat)))
32219
32220(define-public python-confuse
32221 (package
32222 (name "python-confuse")
32223 (version "2.0.1")
32224 (source
32225 (origin
32226 (method url-fetch)
32227 (uri (pypi-uri "confuse" version))
32228 (sha256
32229 (base32
32230 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
32231 (build-system pyproject-build-system)
32232 (native-inputs (list python-flit-core python-pytest))
32233 (propagated-inputs (list python-pyyaml))
32234 (home-page "https://github.com/beetbox/confuse")
32235 (synopsis "Painless YAML configuration")
32236 (description "Confuse is a configuration library for Python that uses
32237YAML. It takes care of defaults, overrides, type checking, command-line
32238integration, human-readable errors, and standard OS-specific locations.")
32239 (license license:expat)))
32240
32241(define-public python-referencing
32242 (package
32243 (name "python-referencing")
32244 (version "0.35.1")
32245 (source
32246 (origin
32247 (method url-fetch)
32248 (uri (pypi-uri "referencing" version))
32249 (sha256
32250 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
32251 (build-system pyproject-build-system)
32252 (arguments
32253 (list
32254 #:test-flags
32255 '(list "--pyargs" "referencing/tests")
32256 #:phases
32257 '(modify-phases %standard-phases
32258 (add-after 'unpack 'patch-pyproject
32259 (lambda _
32260 ;; The build system does not like this.
32261 (substitute* "pyproject.toml"
32262 ((" \"Topic :: File Formats.*") "")))))))
32263 (propagated-inputs (list python-attrs python-rpds-py))
32264 (native-inputs
32265 (list python-hatchling
32266 python-hatch-vcs
32267 python-jsonschema
32268 python-pytest
32269 python-pytest-subtests))
32270 (home-page "https://github.com/python-jsonschema/referencing")
32271 (synopsis "JSON Referencing + Python")
32272 (description "This package provides an implementation-agnostic
32273implementation of JSON reference resolution.")
32274 (license license:expat)))
32275
32276(define-public python-referencing-bootstrap
32277 (package
32278 (inherit python-referencing)
32279 (name "python-referencing-bootstrap")
32280 (arguments
32281 (list
32282 #:tests? #false
32283 #:phases
32284 '(modify-phases %standard-phases
32285 (add-after 'unpack 'patch-pyproject
32286 (lambda _
32287 ;; The build system does not like this.
32288 (substitute* "pyproject.toml"
32289 ((" \"Topic :: File Formats.*") "")))))))
32290 (native-inputs (list python-hatchling python-hatch-vcs))))
32291
32292(define-public python-reflink
32293 (package
32294 (name "python-reflink")
32295 (version "0.2.2")
32296 (source
32297 (origin
32298 (method git-fetch)
32299 (uri (git-reference
32300 (url "https://gitlab.com/rubdos/pyreflink")
32301 (commit version)))
32302 (file-name (git-file-name name version))
32303 (sha256
32304 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
32305 (build-system pyproject-build-system)
32306 (arguments
32307 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
32308 (propagated-inputs (list python-cffi))
32309 (native-inputs (list python-pytest python-setuptools))
32310 (home-page "https://gitlab.com/rubdos/pyreflink")
32311 (synopsis "Python wrapper around reflink system call")
32312 (description
32313 "Python reflink wraps around platform specific @code{reflink}
32314implementations.")
32315 (license license:expat)))
32316
32317(define-public python-retry
32318 (package
32319 (name "python-retry")
32320 (version "0.9.2")
32321 (source
32322 (origin
32323 (method git-fetch)
32324 (uri (git-reference
32325 (url "https://github.com/invl/retry")
32326 (commit version)))
32327 (file-name (git-file-name name version))
32328 (sha256
32329 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
32330 (build-system pyproject-build-system)
32331 (arguments
32332 (list
32333 #:phases
32334 #~(modify-phases %standard-phases
32335 (add-before 'build 'set-version
32336 (lambda _
32337 (setenv "PBR_VERSION" #$version))))))
32338 (native-inputs (list python-pbr python-pytest))
32339 (propagated-inputs (list python-decorator python-py))
32340 (home-page "https://github.com/invl/retry")
32341 (synopsis "Retry decorator")
32342 (description
32343 "@code{retry} is an easy to use retry decorator for Python. It can be
32344used to retry a function a given number of times.")
32345 (license license:asl2.0)))
32346
32347(define-public python-crayons
32348 (package
32349 (name "python-crayons")
32350 (version "0.4.0")
32351 (source
32352 (origin
32353 (method git-fetch)
32354 (uri (git-reference
32355 (url "https://github.com/MasterOdin/crayons")
32356 (commit (string-append "v" version))))
32357 (file-name (git-file-name name version))
32358 (sha256
32359 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
32360 (build-system pyproject-build-system)
32361 (arguments
32362 (list
32363 #:test-backend #~'custom
32364 #:test-flags #~(list "test_crayons.py")))
32365 (native-inputs (list python-setuptools))
32366 (propagated-inputs (list python-colorama))
32367 (home-page "https://github.com/MasterOdin/crayons")
32368 (synopsis "TextUI colors for Python")
32369 (description
32370 "This package gives you colored strings for the terminal. Crayons
32371automatically wraps a given string in the foreground color and restores the
32372original state after the string is printed.")
32373 (license license:expat)))
32374
32375(define-public python-sane
32376 (package
32377 (name "python-sane")
32378 (version "2.9.2")
32379 (source
32380 (origin
32381 (method git-fetch)
32382 (uri (git-reference
32383 (url "https://github.com/python-pillow/Sane")
32384 (commit (string-append "v" version))))
32385 (file-name (git-file-name name version))
32386 (sha256
32387 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
32388 (build-system pyproject-build-system)
32389 (arguments (list #:tests? #f)) ; No tests.
32390 (native-inputs (list python-setuptools))
32391 (inputs (list sane))
32392 (home-page "https://github.com/python-pillow/Sane")
32393 (synopsis "Python interface to the SANE scanner")
32394 (description
32395 "This package provides Python interface to the SANE scanner and frame
32396grabber interface.")
32397 (license (license:non-copyleft
32398 ;; Yet another variant of the X/MIT license.
32399 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
32400
32401(define-public python-scikit-build
32402 (package
32403 (name "python-scikit-build")
32404 (version "0.18.1")
32405 (source
32406 (origin
32407 (method url-fetch)
32408 (uri (pypi-uri "scikit_build" version))
32409 (sha256
32410 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
32411 (patches
32412 (search-patches "python-scikit-build-setuptools-compat.patch"))))
32413 (build-system pyproject-build-system)
32414 (arguments
32415 (list
32416 #:phases
32417 #~(modify-phases %standard-phases
32418 (add-after 'unpack 'patch-cmake-executable
32419 (lambda* (#:key inputs #:allow-other-keys)
32420 (substitute* "skbuild/constants.py"
32421 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
32422 (format #f "~a ~s~%" head
32423 (search-input-file inputs "bin/cmake"))))))
32424 (add-before 'check 'pre-check
32425 (lambda _
32426 ;; Some tests try to access the network before being skipped.
32427 ;; Skip them by default.
32428 (substitute* "tests/test_setup.py"
32429 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
32430 "pytest.mark.isolated()\n"))))
32431 (replace 'check
32432 (lambda* (#:key tests? #:allow-other-keys)
32433 (when tests?
32434 ;; These tests attempt to pull dependencies from the Internet.
32435 (delete-file "tests/test_distribution.py")
32436 (delete-file "tests/test_pep518.py")
32437 ;; The tests marked as "isolate" are tests that require access
32438 ;; to the network.
32439 (invoke "pytest" "-vv" "-m" "not isolated"
32440 "-n" (number->string (parallel-job-count))
32441 "-k" (string-append
32442 ;; These tests attempt to write to read-only
32443 ;; Python install directory.
32444 "not test_install_command "
32445 "and not test_test_command "
32446 "and not test_hello_develop "
32447 ;; These sdist-related tests fail for unknown
32448 ;; reasons (see:
32449 ;; https://github.com/scikit-build/scikit-build/issues/689).
32450 "and not test_hello_sdist_with_base "
32451 "and not test_manifest_in_sdist "
32452 "and not test_hello_sdist "
32453 "and not test_sdist_with_symlinks "
32454 ;; These are not parallel safe and fail
32455 ;; nondeterministically (see:
32456 ;; https://github.com/scikit-build/scikit-build/issues/711).
32457 "and not test_generator_cleanup "
32458 "and not test_generator_selection "
32459 ;; … and there's more of them
32460 "and not test_cxx_compiler "
32461 "and not test_fortran_compiler ")))))
32462 (add-after 'install 'install-cmake
32463 (lambda* (#:key outputs #:allow-other-keys)
32464 (let ((lib (string-append (assoc-ref outputs "out")
32465 "/lib/cmake/modules")))
32466 (mkdir-p lib)
32467 (with-directory-excursion "skbuild/resources/cmake"
32468 (for-each (lambda (file) (install-file file lib))
32469 (find-files "." "\\.cmake")))))))))
32470 (native-inputs
32471 (list cmake-minimal
32472 gfortran
32473 git-minimal/pinned ;for tests
32474 ninja/pinned
32475 python-cython
32476 python-hatch-fancy-pypi-readme
32477 python-hatch-vcs
32478 python-hatchling
32479 python-pytest
32480 python-pytest-mock
32481 python-pytest-xdist
32482 python-requests
32483 python-virtualenv))
32484 (propagated-inputs
32485 (list python-distro
32486 python-packaging
32487 python-wheel))
32488 (home-page "https://github.com/scikit-build/scikit-build")
32489 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
32490 (description "Scikit-build is an improved build system generator for
32491CPython C/C++/Fortran/Cython extensions. It has support for additional
32492compilers, build systems, cross compilation, and locating dependencies and
32493determining their build requirements. The scikit-build package is
32494fundamentally just glue between the @code{setuptools} Python module and
32495CMake.")
32496 (license license:expat)))
32497
32498(define-public python-screenkey
32499 (package
32500 (name "python-screenkey")
32501 (version "1.5")
32502 (source
32503 (origin
32504 (method git-fetch)
32505 (uri (git-reference
32506 (url "https://gitlab.com/screenkey/screenkey")
32507 (commit (string-append "v" version))))
32508 (file-name (git-file-name name version))
32509 (sha256
32510 (base32 "0j719kld4dr85d9lxn0d0b6156mcy09jm7arssfp2n3j6hmjssci"))))
32511 (build-system pyproject-build-system)
32512 (arguments
32513 (list
32514 #:tests? #f ; No tests.
32515 #:phases
32516 #~(modify-phases %standard-phases
32517 (add-after 'unpack 'fix-dlopen-paths
32518 (lambda* (#:key inputs #:allow-other-keys)
32519 (substitute* "Screenkey/xlib.py"
32520 (("(libXtst.so.6|libX11.so.6)" lib)
32521 (search-input-file inputs (string-append "/lib/" lib))))))
32522 (add-after 'install 'wrap-screenkey
32523 (lambda _
32524 (wrap-program (string-append #$output "/bin/screenkey")
32525 `("GUIX_PYTHONPATH" ":" prefix
32526 (,(getenv "GUIX_PYTHONPATH")))
32527 `("GI_TYPELIB_PATH" ":" prefix
32528 (,(getenv "GI_TYPELIB_PATH")))))))))
32529 (inputs (list bash-minimal
32530 gtk+
32531 libx11
32532 libxtst
32533 python-babel
32534 python-dbus-python
32535 python-pycairo
32536 python-pygobject
32537 slop))
32538 (native-inputs (list python-setuptools))
32539 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
32540 (synopsis "Screencast tool to display pressed keys")
32541 (description
32542 "Screenkey is a screencast tool to display your keys inspired by
32543Screenflick.")
32544 (license license:gpl3+)))
32545
32546(define-public python-jinja2-cli
32547 (package
32548 (name "python-jinja2-cli")
32549 (version "0.8.2")
32550 (source
32551 (origin
32552 (method git-fetch)
32553 (uri (git-reference
32554 (url "https://github.com/mattrobenolt/jinja2-cli")
32555 (commit version)))
32556 (file-name (git-file-name name version))
32557 (sha256
32558 (base32
32559 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
32560 (build-system pyproject-build-system)
32561 (propagated-inputs
32562 (list python-jinja2))
32563 (native-inputs
32564 (list python-flake8
32565 python-jinja2
32566 python-pytest
32567 python-setuptools
32568 python-wheel))
32569 (home-page "https://github.com/mattrobenolt/jinja2-cli")
32570 (synopsis "Command-line interface to Jinja2")
32571 (description
32572 "This package provides a command-line interface (CLI) to the Jinja2
32573template engine.")
32574 (license license:bsd-3)))
32575
32576(define-public python-readability
32577 (package
32578 (name "python-readability")
32579 (version "0.3.1")
32580 (source
32581 (origin
32582 (method git-fetch)
32583 (uri (git-reference
32584 (url "https://github.com/andreasvc/readability/")
32585 (commit (string-append "v" version))))
32586 (file-name (git-file-name name version))
32587 (sha256
32588 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
32589 (build-system pyproject-build-system)
32590 (arguments (list #:tests? #f)) ; No tests.
32591 (native-inputs (list python-setuptools))
32592 (home-page "https://github.com/andreasvc/readability/")
32593 (synopsis "Measure text readability using surface characteristics")
32594 (description
32595 "This package provides a Python library that is an implementation of
32596traditional readability measures based on simple surface characteristics.
32597These measures are basically linear regressions based on the number of words,
32598syllables, and sentences.")
32599 (license license:asl2.0)))
32600
32601(define-public python-readability-lxml
32602 ;; No releases since 2020, see:
32603 ;; <https://github.com/buriy/python-readability/issues/196>.
32604 (package
32605 (name "python-readability-lxml")
32606 (version "0.8.4.1")
32607 (source
32608 (origin
32609 (method git-fetch)
32610 (uri (git-reference
32611 (url "http://github.com/buriy/python-readability")
32612 (commit version)))
32613 (file-name (git-file-name name version))
32614 (sha256
32615 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
32616 (build-system pyproject-build-system)
32617 (native-inputs
32618 (list python-poetry-core
32619 python-pytest))
32620 (propagated-inputs
32621 (list python-chardet
32622 python-cssselect
32623 python-lxml
32624 python-lxml-html-clean)) ;XXX: it sould be part of python-lxml lib
32625 (home-page "http://github.com/buriy/python-readability")
32626 (synopsis "HTML to text parser")
32627 (description
32628 "This package provides classes and function that strip gratuitous markup
32629from web pages to make them easier to read.")
32630 (license license:asl2.0)))
32631
32632(define-public python-listparser
32633 (package
32634 (name "python-listparser")
32635 (version "0.20")
32636 (source
32637 (origin
32638 (method git-fetch)
32639 (uri (git-reference
32640 (url "https://github.com/kurtmckee/listparser")
32641 (commit (string-append "v" version))))
32642 (file-name (git-file-name name version))
32643 (sha256
32644 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
32645 (build-system pyproject-build-system)
32646 (native-inputs (list python-pytest python-poetry-core))
32647 (home-page "https://github.com/kurtmckee/listparser")
32648 (synopsis "Parse subscription lists in Python")
32649 (description
32650 "This package provides a Python library that can parse OPML, FOAF, and
32651iGoogle subscription lists.")
32652 (license license:expat)))
32653
32654(define-public python-smartypants
32655 (package
32656 (name "python-smartypants")
32657 (version "2.0.2")
32658 (source
32659 (origin
32660 (method url-fetch)
32661 (uri (pypi-uri "smartypants" version))
32662 (sha256
32663 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
32664 (build-system pyproject-build-system)
32665 (native-inputs
32666 (list python-docutils python-pygments python-setuptools))
32667 (home-page "https://github.com/justinmayer/smartypants.py")
32668 (synopsis "Translate punctuation characters into smart quotes")
32669 (description
32670 "@command{smartpants} can perform the following transformations:
32671@enumerate
32672@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
32673@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
32674entities
32675@item Dashes (-- and ---) into en- and em-dash entities
32676@item Three consecutive dots (... or . . .) into an ellipsis entity
32677@end enumerate")
32678 (license license:bsd-3)))
32679
32680(define-public python-ld
32681 (package
32682 (name "python-ld")
32683 (version "1.9.0")
32684 (source
32685 (origin
32686 (method git-fetch)
32687 (uri (git-reference
32688 (url "https://github.com/nir0s/ld")
32689 (commit (string-append "v" version))))
32690 (file-name (git-file-name name version))
32691 (sha256
32692 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
32693 (build-system pyproject-build-system)
32694 (arguments
32695 (list
32696 ;; XXX: These tests expect ubuntu distro.
32697 #:test-flags
32698 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
32699 "test_ubuntu14nomodules_lsb_release"
32700 "test_trailingblanks_lsb_release")
32701 " and not "))))
32702 (native-inputs (list python-pytest python-setuptools))
32703 (home-page "https://github.com/nir0s/ld")
32704 (synopsis "OS platform information API")
32705 (description
32706 "The ld package provides information about the GNU/Linux distribution it
32707runs on, such as a reliable machine-readable ID, or version information.")
32708 (license license:asl2.0)))
32709
32710(define-public python-quicktions
32711 (package
32712 (name "python-quicktions")
32713 (version "1.22")
32714 (source
32715 (origin
32716 (method git-fetch)
32717 (uri (git-reference
32718 (url "https://github.com/scoder/quicktions")
32719 (commit version)))
32720 (file-name (git-file-name name version))
32721 (sha256
32722 (base32
32723 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
32724 (build-system pyproject-build-system)
32725 (native-inputs
32726 (list python-cython python-pytest python-setuptools))
32727 (home-page "https://github.com/scoder/quicktions")
32728 (synopsis "Fast fractions data type for rational numbers")
32729 (description
32730 "This package provides fast fractions data type for rational numbers. It
32731is the cythonized version of @code{fractions.Fraction}.")
32732 (license license:psfl)))
32733
32734(define-public python-pathvalidate
32735 (package
32736 (name "python-pathvalidate")
32737 (version "2.4.1")
32738 (source
32739 (origin
32740 (method git-fetch)
32741 (uri (git-reference
32742 (url "https://github.com/thombashi/pathvalidate")
32743 (commit (string-append "v" version))))
32744 (file-name (git-file-name name version))
32745 (sha256
32746 (base32 "17s9vqmws4sfji4bw6qd4rn7ahzkpj6yp2ia5p6vd8kva8n05h37"))))
32747 (build-system pyproject-build-system)
32748 (native-inputs (list python-allpairspy python-click python-faker
32749 python-pytest python-setuptools))
32750 (home-page "https://github.com/thombashi/pathvalidate")
32751 (synopsis "Sanitize strings representing paths")
32752 (description
32753 "@code{pathvalidate} is a Python library to sanitize/validate strings
32754representing paths or filenames.")
32755 (license license:expat)))
32756
32757(define-public python-escapism
32758 (package
32759 (name "python-escapism")
32760 (version "1.0.1")
32761 (source
32762 (origin
32763 (method git-fetch)
32764 (uri (git-reference
32765 (url "https://github.com/jupyterhub/escapism")
32766 (commit version)))
32767 (file-name (git-file-name name version))
32768 (sha256
32769 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
32770 (build-system pyproject-build-system)
32771 (native-inputs (list python-pytest python-setuptools))
32772 (home-page "https://github.com/jupyterhub/escapism")
32773 (synopsis "Simple, generic library for escaping strings")
32774 (description
32775 "This Python library provides a programming interface to, given a set of
32776safe characters and an escape character, escape safe strings and unescape the
32777result.")
32778 (license license:expat)))
32779
32780(define-public python-recommonmark
32781 (package
32782 (name "python-recommonmark")
32783 (version "0.7.1")
32784 (source
32785 (origin
32786 (method url-fetch)
32787 (uri (pypi-uri "recommonmark" version))
32788 (sha256
32789 (base32
32790 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
32791 (build-system pyproject-build-system)
32792 (arguments
32793 (list
32794 ;; XXX: Some of those fail for no good reason.
32795 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
32796 (native-inputs (list python-pytest python-setuptools python-wheel))
32797 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
32798 (home-page "https://github.com/readthedocs/recommonmark")
32799 (synopsis "Docutils-compatibility bridge to CommonMark")
32800 (description
32801 "This package provides a docutils-compatibility bridge to CommonMark that
32802lets you write CommonMark inside of Docutils & Sphinx projects.")
32803 (license license:expat)))
32804
32805(define-public python-redo
32806 (package
32807 (name "python-redo")
32808 (version "3.0.0")
32809 (source
32810 (origin
32811 (method git-fetch)
32812 (uri (git-reference
32813 (url "https://github.com/mozilla-releng/redo")
32814 (commit version)))
32815 (file-name (git-file-name name version))
32816 (sha256
32817 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
32818 (build-system pyproject-build-system)
32819 (native-inputs
32820 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
32821 (home-page "https://github.com/mozilla-releng/redo")
32822 (synopsis "Utilities to retry Python callables")
32823 (description "Redo provides various means to add seamless ability to
32824retry to any Python callable.")
32825 (license license:mpl2.0)))
32826
32827(define-public python-opcodes
32828 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
32829 ;; version number, which is what we use here.
32830 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
32831 (package
32832 (name "python-opcodes")
32833 (version "0.3.14") ;from 'opcodes/__init__.py'
32834 (home-page "https://github.com/Maratyszcza/Opcodes")
32835 (source
32836 (origin
32837 (method git-fetch)
32838 (uri (git-reference (url home-page) (commit commit)))
32839 (file-name (git-file-name name version))
32840 (sha256
32841 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
32842 (build-system pyproject-build-system)
32843 (native-inputs (list python-pytest python-setuptools))
32844 (synopsis "Database of processor instructions and opcodes")
32845 (description
32846 "This project documents instruction sets in a format convenient for
32847tools development. An instruction set is represented by three files:
32848
32849@itemize
32850@item an XML file that describes instructions;
32851@item an XSD file that describes the structure of the XML file;
32852@item a Python module that reads the XML file and represents it as a set of
32853Python objects;
32854@end itemize
32855
32856It currently provides descriptions for most user-mode x86, x86_64, and k1om
32857instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
32858and BMI2).")
32859 (license license:bsd-2))))
32860
32861(define-public python-cart
32862 (package
32863 (name "python-cart")
32864 (version "1.2.3")
32865 (source
32866 (origin
32867 (method git-fetch)
32868 (uri (git-reference
32869 (url "https://github.com/CybercentreCanada/cart")
32870 (commit (string-append "v" version))))
32871 (file-name (git-file-name name version))
32872 (sha256
32873 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
32874 (build-system pyproject-build-system)
32875 (arguments
32876 (list
32877 #:test-backend #~'unittest))
32878 (native-inputs
32879 (list python-setuptools))
32880 (propagated-inputs
32881 (list python-pycryptodome))
32882 (home-page "https://github.com/CybercentreCanada/cart")
32883 (synopsis "Library for interacting with the CaRT file format")
32884 (description
32885 "This Python library implements the CaRT file format which is commonly
32886used to store and transmit information about computer malware and associated
32887metadata.")
32888 (license license:bsd-2)))
32889
32890(define-public python-ailment
32891 (package
32892 (name "python-ailment")
32893 ;; Must be the same version as python-angr.
32894 (version "9.2.112")
32895 (source
32896 (origin
32897 (method url-fetch)
32898 (uri (pypi-uri "ailment" version))
32899 (sha256
32900 (base32 "1rv8rwvdm7fc9mf8z5hqb54dsj0n7jlnwghd12ll0b2jmh2ix8mn"))))
32901 (build-system pyproject-build-system)
32902 (arguments
32903 `(#:phases (modify-phases %standard-phases
32904 (replace 'check
32905 ;; Many tests are skipped due to cyclic dependencies.
32906 (lambda* (#:key tests? #:allow-other-keys)
32907 (when tests?
32908 (with-directory-excursion "tests"
32909 (invoke "python" "-m" "unittest"))))))))
32910 (native-inputs (list python-setuptools python-wheel))
32911 (home-page "https://github.com/angr/ailment")
32912 (synopsis "The angr intermediate language")
32913 (description
32914 "This Python module implements an @acronym{IL, Intermediate Language},
32915also known as @acronym{IR, Intermediate Representation}, used by the angr
32916binary analysis platform.")
32917 (license license:bsd-2)))
32918
32919(define-public python-cle
32920 (package
32921 (name "python-cle")
32922 ;; Must be the same version as python-angr.
32923 (version "9.2.112")
32924 (source
32925 (origin
32926 (method url-fetch)
32927 (uri (pypi-uri "cle" version))
32928 (sha256
32929 (base32 "11jbvg12wqxz74iy83ax0q8k156xrw6iqv75dix5cpqgacds3gdj"))))
32930 (build-system pyproject-build-system)
32931 (arguments
32932 (list
32933 #:tests? #f))
32934 (propagated-inputs (list python-pefile python-pyelftools python-pyvex
32935 python-sortedcontainers python-cart))
32936 (native-inputs (list python-cffi python-setuptools python-wheel))
32937 (home-page "https://github.com/angr/cle")
32938 (synopsis "Python loader for binaries and their associated libraries")
32939 (description
32940 "CLE loads binaries and their associated libraries, resolves
32941imports and provides an abstraction of process memory the same way as if
32942it was loader by the operating system's loader.")
32943 (license license:bsd-2)))
32944
32945(define-public python-pyvex
32946 (package
32947 (name "python-pyvex")
32948 ;; Must be the same version as python-angr.
32949 (version "9.2.112")
32950 (source
32951 (origin
32952 (method url-fetch)
32953 (uri (pypi-uri "pyvex" version))
32954 (sha256
32955 (base32 "0z1jiflp7h07mfc26am3v7v5z2n6mw9hkfylbs86qgpm93qcf6i3"))))
32956 (build-system pyproject-build-system)
32957 (arguments
32958 (list
32959 #:phases #~(modify-phases %standard-phases
32960 (replace 'check
32961 (lambda* (#:key tests? #:allow-other-keys)
32962 (when tests?
32963 (with-directory-excursion "tests"
32964 (invoke "python" "-m" "unittest")))))
32965
32966 (add-before 'build 'set-cc
32967 (lambda _
32968 (setenv "CC" #$(cc-for-target))
32969 (setenv "CC_NATIVE" "gcc"))))))
32970 (propagated-inputs (list python-archinfo python-bitstring python-cffi))
32971 (native-inputs (list python-setuptools python-wheel))
32972 (home-page "https://github.com/angr/pyvex")
32973 (synopsis "Python interface to libVEX and VEX IR")
32974 (description
32975 "This package provides a Python interface the libVEX and VEX IR.
32976VEX is the intermediate representation (also known as intermediate
32977language) used by the Valgrind analysis tool. As such, VEX is designed
32978to enable all kinds of binary analysis tasks.")
32979 (license license:bsd-2)))
32980
32981(define-public python-claripy
32982 (package
32983 (name "python-claripy")
32984 ;; Must be the same version as python-angr.
32985 (version "9.2.112")
32986 (source
32987 (origin
32988 ;; Fetching from Git as pypi release doesn't include all test files.
32989 (method git-fetch)
32990 (uri (git-reference
32991 (url "https://github.com/angr/claripy")
32992 (commit (string-append "v" version))))
32993 (file-name (git-file-name name version))
32994 (sha256
32995 (base32 "0c6q6imxjwhxn87d9yz8zvyrszk94r25w8x0g1lr6mrpa9bx7wai"))
32996 (modules '((guix build utils)))
32997 (snippet '(begin
32998 (substitute* "setup.cfg"
32999 ;; Relax the z3 version constraint.
33000 ;; See https://github.com/angr/claripy/commit/d1fe2df
33001 (("z3-solver==4.13.0.0")
33002 ""))))))
33003 (build-system pyproject-build-system)
33004 (arguments
33005 `(#:phases (modify-phases %standard-phases
33006 (replace 'check
33007 (lambda* (#:key tests? #:allow-other-keys)
33008 (when tests?
33009 (with-directory-excursion "tests"
33010 (invoke "python" "-m" "unittest"))))))))
33011 (propagated-inputs (list python-cachetools python-decorator python-pysmt
33012 z3))
33013 (native-inputs (list python-setuptools python-wheel))
33014 (home-page "https://github.com/angr/claripy")
33015 (synopsis "Abstraction layer for constraint solvers")
33016 (description
33017 "This Python module provides an abstraction layer for interacting
33018with constraint solvers. Specifically, it is intended to be used with
33019SMT solvers and is built on top of the Z3 solver.")
33020 (license license:bsd-2)))
33021
33022(define-public python-pysmt
33023 (package
33024 (name "python-pysmt")
33025 (version "0.9.6")
33026 (source
33027 (origin
33028 ;; Fetching from Git as pypi release doesn't include all test files.
33029 (method git-fetch)
33030 (uri (git-reference
33031 (url "https://github.com/pysmt/pysmt")
33032 (commit (string-append "v" version))))
33033 (file-name (git-file-name name version))
33034 (sha256
33035 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33036 (build-system pyproject-build-system)
33037 (arguments
33038 `(#:phases (modify-phases %standard-phases
33039 (add-before 'check 'set-pysmt-solver
33040 (lambda _
33041 (setenv "PYSMT_SOLVER" "z3"))))))
33042 (native-inputs (list python-pytest python-setuptools python-wheel))
33043 (propagated-inputs (list z3))
33044 (home-page "https://github.com/pysmt/pysmt")
33045 (synopsis
33046 "Solver-agnostic library for SMT formula manipulation and solving")
33047 (description
33048 "This Python module provides a solver-agnostic abstraction for
33049working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33050it allows manipulation and solving such formulas.")
33051 (license license:asl2.0)))
33052
33053(define-public python-rpyc
33054 (package
33055 (name "python-rpyc")
33056 (version "5.3.1")
33057 (source
33058 (origin
33059 ;; Fetching from Git as pypi release doesn't include all test files.
33060 (method git-fetch)
33061 (uri (git-reference
33062 (url "https://github.com/tomerfiliba-org/rpyc")
33063 (commit version)))
33064 (file-name (git-file-name name version))
33065 (sha256
33066 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33067 (snippet '(begin
33068 ;; Disable deploy tests, these rely on OpenSSH and require
33069 ;; configuring the SSH client manually to accept the host key.
33070 (delete-file "tests/test_deploy.py")
33071 ;; Disable tests requiring network access. These tests
33072 ;; presently fail with the error "Network is unreachable".
33073 (delete-file "tests/test_registry.py")))))
33074 (build-system pyproject-build-system)
33075 (arguments
33076 `(#:phases (modify-phases %standard-phases
33077 (replace 'check
33078 (lambda* (#:key tests? #:allow-other-keys)
33079 (when tests?
33080 (with-directory-excursion "tests"
33081 (invoke "python" "-m" "unittest"))))))))
33082 (propagated-inputs (list python-hatchling python-plumbum))
33083 (home-page "https://github.com/tomerfiliba-org/rpyc")
33084 (synopsis
33085 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33086 (description
33087 "This Python module enables remote procedure calls, clustering, and
33088distributed-computing. For this purpose, it makes use of object-proxying, a technique
33089that employs python's dynamic nature, to overcome the physical boundaries between
33090processes and computers, so that remote objects can be manipulated as if they
33091were local.")
33092 (license license:expat)))
33093
33094(define-public python-nampa
33095 (package
33096 (name "python-nampa")
33097 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33098 ;; has 0.1.1 as version. Latest commit is from 2024.
33099 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33100 (revision . "0")))
33101 (version (git-version "1.0.0"
33102 (assoc-ref properties 'revision)
33103 (assoc-ref properties 'commit)))
33104 (source
33105 (origin
33106 (method git-fetch)
33107 (uri (git-reference
33108 (url "https://github.com/thebabush/nampa")
33109 (commit (assoc-ref properties 'commit))))
33110 (file-name (git-file-name name version))
33111 (sha256
33112 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33113 (build-system pyproject-build-system)
33114 (arguments
33115 (list
33116 #:test-flags
33117 #~(list "-k test_random_values")
33118 #:phases
33119 #~(modify-phases %standard-phases
33120 (add-after 'unpack 'patch-tests
33121 (lambda _
33122 ;; Unclear why this top-level __init__.py is here. It seems to
33123 ;; setup a plugin for binaryninja, which Guix does not package.
33124 (delete-file "__init__.py")
33125 ;; Yields tests, which is not allowed anymore.
33126 (substitute* "tests/test_crc.py"
33127 (("yield") "#yield")))))))
33128 (propagated-inputs (list python-future))
33129 (native-inputs (list python-pytest python-setuptools))
33130 (home-page "https://github.com/thebabush/nampa")
33131 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33132 (description
33133 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33134and Recognition Technology}. This technology is useful for identifying
33135common library subroutines in disassembled binaries.")
33136 (license license:lgpl3)))
33137
33138(define-public python-mulpyplexer
33139 (package
33140 (name "python-mulpyplexer")
33141 (version "0.09")
33142 (source
33143 (origin
33144 (method url-fetch)
33145 (uri (pypi-uri "mulpyplexer" version))
33146 (sha256
33147 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33148 (build-system pyproject-build-system)
33149 (arguments
33150 (list
33151 #:phases
33152 '(modify-phases %standard-phases
33153 (replace 'check
33154 (lambda* (#:key tests? #:allow-other-keys)
33155 (when tests?
33156 (invoke "python" "mulpyplexer.py")))))))
33157 (native-inputs (list python-setuptools python-wheel))
33158 (home-page "https://github.com/zardus/mulpyplexer/")
33159 (synopsis "Multiplexes interactions with lists of Python objects")
33160 (description "This module provides utilities for multiplexing
33161interactions with lists of Python objects.")
33162 (license license:bsd-2)))
33163
33164(define-public python-itanium-demangler
33165 (package
33166 (name "python-itanium-demangler")
33167 (version "1.1")
33168 (source
33169 (origin
33170 (method git-fetch)
33171 (uri (git-reference
33172 ;; PyPI only provides wheels and no source code.
33173 (url "https://github.com/whitequark/python-itanium_demangler")
33174 (commit (string-append "v" version))))
33175 (file-name (git-file-name name version))
33176 (sha256
33177 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
33178 (build-system pyproject-build-system)
33179 (arguments
33180 (list
33181 #:phases
33182 #~(modify-phases %standard-phases
33183 (replace 'check
33184 (lambda* (#:key tests? #:allow-other-keys)
33185 (when tests?
33186 (with-directory-excursion "tests"
33187 (invoke "python" "-m" "unittest"))))))))
33188 (native-inputs (list python-setuptools python-wheel))
33189 (home-page "https://github.com/whitequark/python-itanium_demangler/")
33190 (synopsis "Pure Python Itanium C++ ABI demangler")
33191 (description
33192"This Python module provides an implementation of the Itanium C++ ABI symbol
33193mangling language. The demangler generates an abstract syntax tree from
33194mangled symbols, which can be used for directly extracting type information.")
33195 (license license:bsd-0)))
33196
33197(define-public python-angr
33198 (package
33199 (name "python-angr")
33200 (version "9.2.112")
33201 (source
33202 (origin
33203 ;; Fetching from Git as pypi release doesn't include all test files.
33204 (method git-fetch)
33205 (patches (search-patches "python-angr-check-exec-deps.patch"))
33206 (uri (git-reference
33207 (url "https://github.com/angr/angr")
33208 (commit (string-append "v" version))))
33209 (file-name (git-file-name name version))
33210 (sha256
33211 (base32 "1179926xbfh2930laz33p90vj532jk7g2qylzzpw1185yhlf9cis"))))
33212 (build-system pyproject-build-system)
33213 (arguments
33214 (list
33215 #:test-flags
33216 #~(list "-x"
33217 "--dist" "load"
33218 "-n" (number->string (parallel-job-count))
33219 "-k"
33220 ;; test_mips32_missing_offset_in_instructions fails
33221 ;; with capstone 5 and passes with capstone 4. Might
33222 ;; be a capstone regressions, needs investigation.
33223 ;;
33224 ;; test_concrete_memset is a non-deterministic benchmark.
33225 ;; test_similarity_fauxware is flaky.
33226 (string-append
33227 "not test_mips32_missing_offset_in_instructions"
33228 " and not test_concrete_memset"
33229 " and not test_similarity_fauxware"))
33230 #:phases #~(modify-phases %standard-phases
33231 (add-after 'unpack 'patch-tests
33232 (lambda* (#:key inputs #:allow-other-keys)
33233 (let ((coreutils (assoc-ref inputs "coreutils")))
33234 ;; The constraint exists because of a capstone bug for which
33235 ;; we backport a patch, hence we can relax the constraint.
33236 ;;
33237 ;; See https://github.com/angr/angr/issues/4656
33238 (substitute* "setup.cfg"
33239 (("capstone==5.0.0.post1")
33240 "capstone"))
33241 ;; Relax constraint on python-rich, the constraint is too strict,
33242 ;; angr work well with our packaged version of python-rich.
33243 (substitute* "setup.cfg"
33244 (("rich>=13.1.0")
33245 "rich"))
33246 (substitute* "tests/common.py"
33247 (("\\[\"cc\"\\]")
33248 "[\"gcc\"]")))))
33249 (add-before 'check 'check-setup
33250 (lambda _
33251 (copy-recursively
33252 #$(this-package-native-input "binaries")
33253 "../binaries")))
33254 (add-before 'build 'set-cc
33255 (lambda _
33256 (setenv "CC" "gcc"))))))
33257 (propagated-inputs (list python-ailment
33258 python-archinfo
33259 python-cachetools
33260 python-cffi
33261 python-claripy
33262 python-cle
33263 python-colorama
33264 python-cppheaderparser
33265 python-dpkt
33266 python-gitpython
33267 python-mulpyplexer
33268 python-nampa
33269 python-networkx
33270 python-protobuf
33271 python-psutil
33272 python-itanium-demangler
33273 python-pycparser
33274 python-pyvex
33275 python-pyformlang
33276 python-rich
33277 python-rpyc
33278 python-sortedcontainers
33279 python-sqlalchemy
33280 python-sympy
33281 python-unique-log-filter
33282 unicorn-2.0))
33283 (native-inputs `(("python-pytest" ,python-pytest)
33284 ("python-pytest-xdist" ,python-pytest-xdist)
33285 ("python-setuptools" ,python-setuptools)
33286 ("python-wheel" ,python-wheel)
33287 ("binaries"
33288 ;; This repository ships several binaries used only for testing
33289 ;; purpose. The binaries are not executed and not part of the
33290 ;; angr distribution, they are only used to test angr's binary
33291 ;; analysis capabilities. In the context of the GNU FSDG, these
33292 ;; files should be considered non-functional data.
33293 ,(origin
33294 (method git-fetch)
33295 (uri (git-reference (url
33296 "https://github.com/angr/binaries")
33297 (commit (string-append "v"
33298 version))))
33299 (file-name (git-file-name "angr-binaries" version))
33300 (sha256 (base32
33301 "0bxzf6alkczv9r0151ksvcwyksnw8077acz1wd8drbxw0zl0qnmr"))))))
33302 (home-page "https://github.com/angr/angr")
33303 (synopsis "Multi-architecture binary analysis toolkit")
33304 (description
33305 "This package provides a versatile binary analysis platform with the
33306ability to perform dynamic symbolic execution as well as various
33307static analyses directly on binaries. As such, it can be used for all
33308kinds of reverse engineering, vulnerability discovery, exploit
33309generation, and software testing purposes.")
33310 (license license:bsd-2)))
33311
33312(define-public python-peachpy
33313 ;; There is no tag in this repo.
33314 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
33315 (version "0.2.0") ;from 'peachpy/__init__.py'
33316 (revision "3"))
33317 (package
33318 (name "python-peachpy")
33319 (version (git-version version revision commit))
33320 (home-page "https://github.com/Maratyszcza/PeachPy")
33321 (source (origin
33322 (method git-fetch)
33323 (uri (git-reference (url home-page) (commit commit)))
33324 (file-name (git-file-name name version))
33325 (sha256
33326 (base32
33327 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
33328 (patches (search-patches "python-peachpy-determinism.patch"))))
33329 (build-system pyproject-build-system)
33330 (arguments
33331 ;; The issue is known and the test will probably never be fixed.
33332 ;; https://github.com/Maratyszcza/PeachPy/issues/131
33333 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
33334 (native-inputs
33335 (list python-pytest python-setuptools python-wheel))
33336 (propagated-inputs
33337 (list python-six python-opcodes))
33338 (synopsis "Efficient assembly code generation in Python")
33339 (description
33340 "PeachPy is a Python framework for writing high-performance assembly kernels.
33341PeachPy aims to simplify writing optimized assembly kernels while preserving
33342all optimization opportunities of traditional assembly.
33343
33344PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
33345for the Go language tool chain; it adapts to different calling conventions and
33346application binary interfaces (ABIs); it takes care of register allocation; it
33347supports x86_64 instructions up to AVX-512 and SHA.")
33348 (supported-systems '("x86_64-linux"))
33349 (license license:bsd-2))))
33350
33351(define-public python-sgmllib3k
33352 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
33353 (revision "1"))
33354 (package
33355 (name "python-sgmllib3k")
33356 (version
33357 (git-version "1.0.0" revision commit))
33358 (source
33359 (origin
33360 (method git-fetch)
33361 (uri (git-reference
33362 (url "https://github.com/hsoft/sgmllib")
33363 (commit commit)))
33364 (file-name (git-file-name name version))
33365 (sha256
33366 (base32
33367 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
33368 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
33369 (build-system pyproject-build-system)
33370 (native-inputs (list python-pytest python-setuptools))
33371 (home-page "https://github.com/hsoft/sgmllib")
33372 (synopsis "Python 3 port of sgmllib")
33373 (description "This package provides an unmaintained port of sgmllib to
33374Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
33375Generalized Mark-up Language}.")
33376 (license license:bsd-3))))
33377
33378(define-public python-cwcwidth
33379 (package
33380 (name "python-cwcwidth")
33381 (version "0.1.10")
33382 (source
33383 (origin
33384 (method url-fetch)
33385 (uri (pypi-uri "cwcwidth" version))
33386 (sha256
33387 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
33388 (build-system pyproject-build-system)
33389 (arguments
33390 (list
33391 #:phases
33392 #~(modify-phases %standard-phases
33393 (add-before 'check 'remove-local-cwcwidth
33394 (lambda _
33395 ;; This would otherwise interfere with finding the installed
33396 ;; cwcwidth when running tests.
33397 (delete-file-recursively "cwcwidth"))))))
33398 (native-inputs
33399 (list python-cython
33400 python-pytest
33401 python-setuptools
33402 python-setuptools-scm))
33403 (home-page "https://github.com/sebastinas/cwcwidth")
33404 (synopsis "Python bindings for wc(s)width")
33405 (description
33406 "This package provides bindings for wcwidth and wcswidth functions
33407defined in POSIX.1-2001 and POSIX.1-2008.")
33408 (license license:expat)))
33409
33410(define-public python-pyan3
33411 (package
33412 (name "python-pyan3")
33413 (version "1.2.0")
33414 (source
33415 (origin
33416 ;; Source tarball on PyPI lacks tests.
33417 (method git-fetch)
33418 (uri (git-reference
33419 (url "https://github.com/Technologicat/pyan")
33420 (commit (string-append "v" version))))
33421 (file-name (git-file-name name version))
33422 (sha256
33423 (base32
33424 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
33425 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
33426 "python-pyan3-fix-absolute-path-bug.patch"))))
33427 (build-system pyproject-build-system)
33428 (native-inputs
33429 (list python-pytest python-pytest-cov python-setuptools python-wheel))
33430 (propagated-inputs
33431 (list python-jinja2))
33432 (home-page "https://github.com/Technologicat/pyan")
33433 (synopsis "Offline call graph generator for Python 3")
33434 (description "Pyan takes one or more Python source files, performs
33435a (rather superficial) static analysis, and constructs a directed graph of the
33436objects in the combined source, and how they define or use each other. The
33437graph can be output for rendering by GraphViz or yEd.")
33438 (license license:gpl2)))
33439
33440(define-public python-multipledispatch
33441 (package
33442 (name "python-multipledispatch")
33443 (version "1.0.0")
33444 (source
33445 (origin
33446 (method git-fetch) ;no tests in PyPI archive
33447 (uri (git-reference
33448 (url "https://github.com/mrocklin/multipledispatch")
33449 (commit version)))
33450 (file-name (git-file-name name version))
33451 (sha256
33452 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
33453 (build-system pyproject-build-system)
33454 (native-inputs
33455 (list python-pytest
33456 python-pytest-benchmark
33457 python-setuptools))
33458 (home-page "https://github.com/mrocklin/multipledispatch/")
33459 (synopsis "Multiple dispatch for Python based on pattern matching")
33460 (description
33461 "This library provides an efficient mechanism for overloading function
33462implementations based on the types of the arguments.")
33463 (license license:bsd-3)))
33464
33465(define-public python-multimethod
33466 (package
33467 (name "python-multimethod")
33468 (version "1.10")
33469 (source
33470 (origin
33471 ;; No tests in the PyPI tarball.
33472 (method git-fetch)
33473 (uri (git-reference
33474 (url "https://github.com/coady/multimethod")
33475 (commit (string-append "v" version))))
33476 (file-name (git-file-name name version))
33477 (sha256
33478 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
33479 (build-system pyproject-build-system)
33480 (native-inputs (list python-pytest python-setuptools python-wheel))
33481 (home-page "https://github.com/coady/multimethod")
33482 (synopsis "Python support for multiple argument dispatching")
33483 (description
33484 "This package provides a decorator for adding multiple argument
33485dispatching to functions. The decorator creates a multimethod object as
33486needed and registers the function with its annotations.")
33487 (license license:asl2.0)))
33488
33489(define-public python-logical-unification
33490 (package
33491 (name "python-logical-unification")
33492 (version "0.4.6")
33493 (source
33494 (origin
33495 (method git-fetch)
33496 (uri (git-reference
33497 (url "https://github.com/pythological/unification")
33498 (commit (string-append "v" version))))
33499 (file-name (git-file-name name version))
33500 (sha256
33501 (base32 "1pciaw3vd7awcnszkqda7l17y3gdzb8ca2cr4p5j0x3b8r28izx8"))))
33502 (build-system pyproject-build-system)
33503 (arguments
33504 (list
33505 #:phases
33506 #~(modify-phases %standard-phases
33507 (add-after 'unpack 'versioneer
33508 (lambda _
33509 (invoke "versioneer" "install")
33510 (substitute* "setup.py"
33511 (("version=versioneer.get_version\\(),")
33512 (format #f "version=~s," #$version))))))))
33513 (native-inputs
33514 (list python-pytest
33515 python-pytest-benchmark
33516 python-setuptools
33517 python-versioneer
33518 python-wheel))
33519 (propagated-inputs
33520 (list python-multipledispatch
33521 python-toolz))
33522 (home-page "https://github.com/pythological/unification/")
33523 (synopsis "Logical unification in Python for solving symbolic expressions")
33524 (description "This library provides algorithms and data types for solving
33525symbolic expressions in pure Python using the technique of logical unification.")
33526 (license license:bsd-3)))
33527
33528(define-public python-looseversion
33529 (package
33530 (name "python-looseversion")
33531 (version "1.3.0")
33532 (source
33533 (origin
33534 (method url-fetch)
33535 (uri (pypi-uri "looseversion" version))
33536 (sha256
33537 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
33538 (build-system pyproject-build-system)
33539 (arguments
33540 (list
33541 ;; No tests provided.
33542 #:tests? #f))
33543 (native-inputs
33544 (list python-hatchling))
33545 (home-page "https://github.com/effigies/looseversion")
33546 (synopsis "Version numbering for anarchists and software realists")
33547 (description
33548 "This package provides a drop-in replacement for the original
33549@code{LooseVersion}. It implements an identical interface and comparison
33550logic to @code{LooseVersion}. The only major change is that a
33551@code{looseversion.LooseVersion} is comparable to a
33552@code{distutils.version.LooseVersion}, which means tools should not need to
33553worry whether all dependencies that use LooseVersion have migrated.")
33554 (license license:psfl)))
33555
33556(define-public python-cons
33557 (package
33558 (name "python-cons")
33559 (version "0.4.7")
33560 (source
33561 (origin
33562 (method git-fetch) ;no tests in PyPI archive
33563 (uri (git-reference
33564 (url "https://github.com/pythological/python-cons")
33565 (commit (string-append "v" version))))
33566 (file-name (git-file-name name version))
33567 (sha256
33568 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
33569 (build-system pyproject-build-system)
33570 (arguments
33571 (list
33572 #:phases
33573 #~(modify-phases %standard-phases
33574 (add-before 'build 'set-version
33575 (lambda _
33576 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
33577 (native-inputs
33578 (list python-pytest
33579 python-setuptools
33580 python-setuptools-scm
33581 python-wheel))
33582 (propagated-inputs
33583 (list python-logical-unification))
33584 (home-page "https://github.com/pythological/python-cons")
33585 (synopsis "Cons cell data structures and related algorithms for Python")
33586 (description
33587 "This library implements algorithms and data structures for Lisp-style
33588cons cells in Python.")
33589 (license license:lgpl3+)))
33590
33591(define-public python-etuples
33592 (package
33593 (name "python-etuples")
33594 (version "0.3.10")
33595 (source
33596 (origin
33597 (method url-fetch)
33598 (uri (pypi-uri "etuples" version))
33599 (sha256
33600 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
33601 (build-system pyproject-build-system)
33602 (arguments
33603 (list
33604 #:test-flags
33605 ;; assert False == {~_1: <built-in function add>}
33606 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
33607 (native-inputs
33608 (list python-pytest
33609 python-setuptools
33610 python-setuptools-scm))
33611 (propagated-inputs
33612 (list python-cons
33613 python-multipledispatch))
33614 (home-page "https://github.com/pythological/etuples")
33615 (synopsis "S-expressions in Python")
33616 (description
33617 "This library implements eval'able S-expression in Python using tuple-like objects.")
33618 (license license:asl2.0)))
33619
33620(define-public python-minikanren
33621 (package
33622 (name "python-minikanren")
33623 (version "1.0.5")
33624 (source
33625 (origin
33626 (method git-fetch)
33627 (uri (git-reference
33628 (url "https://github.com/pythological/kanren")
33629 (commit (string-append "v" version))))
33630 (file-name (git-file-name name version))
33631 (sha256
33632 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
33633 (build-system pyproject-build-system)
33634 (arguments
33635 (list
33636 ;; 60 passed, 3 skipped, 23 deselected
33637 #:test-flags
33638 #~(list "-k" (string-join
33639 ;; XXX: 16 tests fail with assertion not equal, check why.
33640 (list "not test_basics"
33641 "test_eq_assoc"
33642 "test_eq_assoccomm"
33643 "test_eq_comm"
33644 "test_map_anyo"
33645 "test_map_anyo_misc"
33646 "test_map_anyo_reverse"
33647 "test_reduceo"
33648 "test_walko"
33649 "test_walko_reverse")
33650 " and not "))))
33651 (native-inputs
33652 (list python-pytest
33653 python-setuptools))
33654 (propagated-inputs
33655 (list python-cons
33656 python-etuples
33657 python-logical-unification
33658 python-multipledispatch
33659 python-toolz
33660 python-typing-extensions))
33661 (home-page "https://github.com/pythological/kanren")
33662 (synopsis "Relational logic programming in pure Python")
33663 (description
33664 "The minikanren library provides an algorithmic core for computer algebra
33665systems in Python.")
33666 (license license:bsd-3)))
33667
33668(define-public python-dotenv
33669 (package
33670 (name "python-dotenv")
33671 (version "1.1.1")
33672 (source
33673 (origin
33674 (method url-fetch)
33675 (uri (pypi-uri "python_dotenv" version))
33676 (sha256
33677 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
33678 (build-system pyproject-build-system)
33679 (native-inputs
33680 (list python-pytest
33681 python-setuptools
33682 python-sh))
33683 (propagated-inputs
33684 (list python-click))
33685 (home-page "https://saurabh-kumar.com/python-dotenv/")
33686 (synopsis "Setup environment variables according to .env files")
33687 (description
33688 "This package provides the @code{python-dotenv} Python module to read
33689key-value pairs from a @code{.env} file and set them as environment variables.")
33690 (license license:bsd-3)))
33691
33692;; Old version just for docker-compose; remove once that is updated.
33693(define-public python-dotenv-0.13.0
33694 (package (inherit python-dotenv)
33695 (name "python-dotenv")
33696 (version "0.13.0")
33697 (source
33698 (origin
33699 (method url-fetch)
33700 (uri (pypi-uri "python-dotenv" version))
33701 (sha256
33702 (base32
33703 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
33704 (arguments
33705 `(#:phases
33706 (modify-phases %standard-phases
33707 (replace 'check
33708 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
33709 (when tests?
33710 (add-installed-pythonpath inputs outputs)
33711 (setenv "PATH" (string-append (getenv "PATH") ":"
33712 (assoc-ref outputs "out") "/bin"))
33713 ;; Skip the ipython tests.
33714 (delete-file "tests/test_ipython.py")
33715 (invoke "python" "-m" "pytest")))))))
33716 (native-inputs
33717 (modify-inputs (package-native-inputs python-dotenv)
33718 (append python-mock)
33719 (replace "python-sh" python-sh-1)))))
33720
33721(define-public python-braintree
33722 (package
33723 (name "python-braintree")
33724 (version "4.40.0")
33725 (source
33726 (origin
33727 (method url-fetch)
33728 (uri (pypi-uri "braintree" version))
33729 (sha256
33730 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
33731 (build-system pyproject-build-system)
33732 (arguments (list #:tests? #f)) ; No tests.
33733 (native-inputs (list python-setuptools))
33734 (propagated-inputs (list python-requests))
33735 (home-page
33736 "https://developers.braintreepayments.com/python/sdk/server/overview")
33737 (synopsis "Braintree Python Library")
33738 (description
33739 "The Braintree Python SDK provides integration access to the Braintree
33740Gateway. Braintree is a US-based payments service provider.")
33741 (license license:expat)))
33742
33743(define-public python-markuppy
33744 (package
33745 (name "python-markuppy")
33746 (version "1.18")
33747 (source
33748 (origin
33749 (method git-fetch)
33750 (uri (git-reference
33751 (url "https://github.com/tylerbakke/MarkupPy")
33752 (commit (string-append "v" version))))
33753 (file-name (git-file-name name version))
33754 (sha256
33755 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
33756 (build-system pyproject-build-system)
33757 (native-inputs (list python-pytest python-setuptools))
33758 (home-page "https://github.com/tylerbakke/MarkupPy")
33759 (synopsis "Pythonic HTML/XML generator")
33760 (description
33761 "This Python module attempts to make it easier to generate HTML/XML from
33762a Python program in an customizable and pythonic way.")
33763 (license license:expat)))
33764
33765(define-public python-csb43
33766 (package
33767 (name "python-csb43")
33768 (version "1.0.0")
33769 (source
33770 (origin
33771 (method git-fetch)
33772 (uri (git-reference
33773 (url "https://bitbucket.org/wmj/csb43")
33774 (commit version)))
33775 (file-name (git-file-name name version))
33776 (sha256
33777 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
33778 (build-system pyproject-build-system)
33779 (arguments
33780 (list
33781 ;; tests: 15102 passed, 36 skipped, 5489 warnings
33782 #:phases
33783 #~(modify-phases %standard-phases
33784 (add-after 'unpack 'set-version
33785 (lambda _
33786 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
33787 (native-inputs
33788 (list python-lxml
33789 python-pytest
33790 python-setuptools
33791 python-setuptools-scm))
33792 (propagated-inputs
33793 (list python-deprecated
33794 python-pycountry
33795 python-pyyaml
33796 python-tablib))
33797 (home-page "https://bitbucket.org/wmj/csb43")
33798 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3379943 (CSB43)")
33800 (description
33801 "This package provides tools to convert files in the format used by
33802multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
33803Spanish Banking Association [AEB43]) to other formats.
33804
33805Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
33806spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
33807 (license license:lgpl3)))
33808
33809(define-public python-csb43-0.10
33810 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
33811 ;; homebank, i18n, ofx, and utils.
33812 (package
33813 (inherit python-csb43)
33814 (name "python-csb43")
33815 (version "0.10.1")
33816 (source
33817 (origin
33818 (method git-fetch)
33819 (uri (git-reference
33820 (url "https://bitbucket.org/wmj/csb43")
33821 (commit version)))
33822 (file-name (git-file-name name version))
33823 (sha256
33824 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))
33825 (arguments
33826 (list
33827 ;; tests: 15493 passed, 37 skipped, 7447 warnings
33828 #:phases
33829 #~(modify-phases %standard-phases
33830 (add-after 'unpack 'set-version
33831 (lambda _
33832 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))))
33833
33834(define-public python-febelfin-coda
33835 (package
33836 (name "python-febelfin-coda")
33837 (version "0.3.0")
33838 (source
33839 (origin
33840 (method hg-fetch)
33841 (uri (hg-reference
33842 (url "https://foss.heptapod.net/tryton/coda")
33843 (changeset version)))
33844 (file-name (string-append name "-" version "-checkout"))
33845 (sha256
33846 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
33847 (build-system pyproject-build-system)
33848 (arguments
33849 (list
33850 #:test-backend #~'unittest
33851 #:phases
33852 #~(modify-phases %standard-phases
33853 (add-after 'install 'remove-installed-tests
33854 (lambda* (#:key inputs outputs #:allow-other-keys)
33855 (with-directory-excursion (site-packages inputs outputs)
33856 (for-each delete-file
33857 (list "coda/test.py"
33858 "coda/test_readme.py"))))))))
33859 (native-inputs (list python-setuptools))
33860 (home-page "https://coda.b2ck.com/")
33861 (synopsis "Module to parse Belgian CODA files")
33862 (description
33863 "This package provides a module to parse Coded statement of account
33864(CODA) files as defined be the Belgian Febelfin bank standard.")
33865 (license license:bsd-3)))
33866
33867(define-public python-ofxparse
33868 (package
33869 (name "python-ofxparse")
33870 (version "0.21")
33871 (source
33872 (origin
33873 (method url-fetch)
33874 (uri (pypi-uri "ofxparse" version))
33875 (sha256
33876 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
33877 (build-system pyproject-build-system)
33878 (native-inputs (list python-pynose python-setuptools))
33879 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
33880 (home-page "http://sites.google.com/site/ofxparse")
33881 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
33882format")
33883 (description "@code{ofxparse} is a parser for Open Financial
33884Exchange (.ofx) format files. OFX files are available from almost any online
33885banking site, so they work well if you want to pull together your finances
33886from multiple sources. Online trading accounts also often provide account
33887statements in OFX files.")
33888 (license license:expat)))
33889
33890(define-public python-rfc3339-validator
33891 (package
33892 (name "python-rfc3339-validator")
33893 (version "0.1.4")
33894 (source
33895 (origin
33896 (method url-fetch)
33897 (uri (pypi-uri "rfc3339_validator" version))
33898 (sha256
33899 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
33900 (build-system pyproject-build-system)
33901 (native-inputs
33902 (list python-pytest
33903 python-setuptools
33904 python-strict-rfc3339))
33905 (propagated-inputs
33906 (list python-six))
33907 (home-page "https://github.com/naimetti/rfc3339-validator")
33908 (synopsis "Python RFC3339 validator")
33909 (description "This package provides a pure Python RFC3339 validator.")
33910 (license license:expat)))
33911
33912(define-public python-platformdirs
33913 (package
33914 (name "python-platformdirs")
33915 (version "4.3.6")
33916 (source
33917 (origin
33918 (method url-fetch)
33919 (uri (pypi-uri "platformdirs" version))
33920 (sha256
33921 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
33922 (build-system pyproject-build-system)
33923 (native-inputs
33924 (list python-appdirs
33925 python-hatchling
33926 python-hatch-vcs
33927 python-pytest
33928 python-pytest-mock))
33929 (home-page "https://github.com/platformdirs/platformdirs")
33930 (synopsis "Determine the appropriate platform-specific directories")
33931 (description "When writing applications, finding the right location to
33932store user data and configuration varies per platform. Even for
33933single-platform apps, there may by plenty of nuances in figuring out the right
33934location. This small Python module determines the appropriate
33935platform-specific directories, e.g. the ``user data dir''.")
33936 (license license:expat)))
33937
33938(define-public python-json2html
33939 (package
33940 (name "python-json2html")
33941 (version "1.3.0")
33942 (source
33943 (origin
33944 (method git-fetch)
33945 (uri (git-reference
33946 (url "https://github.com/softvar/json2html")
33947 (commit (string-append "v" version))))
33948 (file-name (git-file-name name version))
33949 (sha256
33950 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
33951 (build-system pyproject-build-system)
33952 (arguments
33953 (list
33954 #:test-backend #~'custom
33955 #:test-flags #~(list "test/run_tests.py")))
33956 (native-inputs (list python-setuptools))
33957 (home-page "https://github.com/softvar/json2html")
33958 (synopsis "Convert JSON to HTML table")
33959 (description
33960 "@code{python-json2html} is a python module to convert JSON into a human
33961readable HTML table representation.")
33962 (license license:expat)))
33963
33964(define-public python-face
33965 (package
33966 (name "python-face")
33967 (version "24.0.0")
33968 (source
33969 (origin
33970 (method git-fetch)
33971 (uri (git-reference
33972 (url "https://github.com/mahmoud/face")
33973 (commit (string-append "v" version))))
33974 (file-name (git-file-name name version))
33975 (sha256
33976 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
33977 (build-system pyproject-build-system)
33978 (native-inputs (list python-pytest python-setuptools))
33979 (propagated-inputs (list python-boltons))
33980 (home-page "https://github.com/mahmoud/face")
33981 (synopsis "CLI parsing and dispatching microframework")
33982 (description "@code{python-face} is a Pythonic microframework for building
33983command-line applications.
33984
33985@itemize
33986@item First-class subcommand support
33987@item Powerful middleware architecture
33988@item Separate parser layer
33989@item Built-in flagfile support
33990@item Handy testing utilities
33991@item Themeable help display
33992@end itemize")
33993 (license license:bsd-3)))
33994
33995(define-public python-glom
33996 (package
33997 (name "python-glom")
33998 (version "24.11.0")
33999 (source
34000 (origin
34001 (method git-fetch)
34002 (uri (git-reference
34003 (url "https://github.com/mahmoud/glom")
34004 (commit (string-append "v" version))))
34005 (file-name (git-file-name name version))
34006 (sha256
34007 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34008 (build-system pyproject-build-system)
34009 (native-inputs
34010 (list python-pytest
34011 python-pyyaml
34012 python-setuptools))
34013 (propagated-inputs
34014 (list python-attrs
34015 python-boltons
34016 python-face))
34017 (home-page "https://github.com/mahmoud/glom")
34018 (synopsis "Declaratively restructure data")
34019 (description "Real applications have real data, and real data
34020nests---objects inside of objects inside of lists of objects. glom is a new
34021and powerful way to handle real-world data, featuring:
34022
34023@itemize
34024@item Path-based access to nested data structures
34025@item Readable, meaningful error messages
34026@item Declarative data transformation, using lightweight, Pythonic specifications
34027@item Built-in data exploration and debugging features
34028@end itemize")
34029 (license license:bsd-3)))
34030
34031(define-public python-box
34032 (package
34033 (name "python-box")
34034 (version "7.3.2")
34035 (source
34036 (origin
34037 (method git-fetch)
34038 (uri
34039 (git-reference
34040 (url "https://github.com/cdgriffith/Box")
34041 (commit version)))
34042 (file-name (git-file-name name version))
34043 (sha256
34044 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34045 (build-system pyproject-build-system)
34046 (arguments
34047 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34048 (native-inputs
34049 (list python-pytest
34050 python-setuptools))
34051 (propagated-inputs
34052 (list python-msgpack
34053 python-ruamel.yaml
34054 python-tomli-w))
34055 (home-page "https://github.com/cdgriffith/Box")
34056 (synopsis "Advanced Python dictionaries with dot notation access")
34057 (description
34058 "This package provides the @code{python-box} Python module.
34059It implements advanced Python dictionaries with dot notation access.")
34060 (license license:expat)))
34061
34062(define-public python-fields
34063 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34064 (revision "0"))
34065 (package
34066 (name "python-fields")
34067 (version (git-version "5.0.0" revision commit))
34068 (source
34069 (origin
34070 (method git-fetch)
34071 (uri (git-reference
34072 (url "https://github.com/ionelmc/python-fields")
34073 (commit commit)))
34074 (file-name (git-file-name name version))
34075 (sha256
34076 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34077 (build-system pyproject-build-system)
34078 (arguments
34079 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34080 (native-inputs (list python-pytest
34081 python-pytest-benchmark
34082 python-setuptools
34083 python-wheel))
34084 (home-page "https://python-fields.readthedocs.io/")
34085 (synopsis "Python container class boilerplate killer")
34086 (description "Avoid repetetive boilerplate code in Python classes.")
34087 (license license:bsd-3))))
34088
34089(define-public python-aspectlib
34090 (package
34091 (name "python-aspectlib")
34092 (version "1.5.2")
34093 (source
34094 (origin
34095 (method git-fetch)
34096 (uri (git-reference
34097 (url "https://github.com/ionelmc/python-aspectlib")
34098 (commit (string-append "v" version))))
34099 (file-name (git-file-name name version))
34100 (sha256
34101 (base32 "1mfhflg33684gkp6ckkywshn4xa3vqaia521kcagaxgr3xm6c9pv"))))
34102 (build-system pyproject-build-system)
34103 (arguments
34104 (list
34105 #:test-flags
34106 #~(list ;; XXX: Require more dependencies.
34107 "--ignore=tests/test_integrations.py"
34108 "--ignore=tests/test_integrations_py3.py"
34109 ;; XXX: Unimportant warning errors.
34110 "-k" (string-append "not test_story_empty_play_proxy_class"
34111 " and not test_story_half_play_proxy_class"))))
34112 (native-inputs (list python-pytest python-setuptools python-tornado python-wheel))
34113 (propagated-inputs (list python-fields))
34114 (home-page "https://github.com/ionelmc/python-aspectlib")
34115 (synopsis "Python monkey-patching and decorators")
34116 (description
34117 "This package provides an aspect-oriented programming, monkey-patch
34118and decorators library. It is useful when changing behavior in existing
34119code is desired. It includes tools for debugging and testing:
34120simple mock/record and a complete capture/replay framework.")
34121 (license license:bsd-2)))
34122
34123(define-public python-ijson
34124 (package
34125 (name "python-ijson")
34126 (version "3.1.4")
34127 (source
34128 (origin
34129 (method url-fetch)
34130 (uri (pypi-uri "ijson" version))
34131 (sha256
34132 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
34133 (inputs
34134 ;; yajl is optional, but compiling with it makes faster
34135 ;; backends available to ijson:
34136 (list yajl))
34137 (native-inputs
34138 (list python-pytest
34139 python-setuptools
34140 python-wheel))
34141 (build-system pyproject-build-system)
34142 (home-page "https://github.com/ICRAR/ijson")
34143 (synopsis "Iterative JSON parser with Python iterator interfaces")
34144 (description
34145 "Ijson is an iterative JSON parser with standard Python iterator
34146interfaces.")
34147 (license license:bsd-3)))
34148
34149(define-public python-ordered-set
34150 (package
34151 (name "python-ordered-set")
34152 (version "4.1.0")
34153 (source
34154 (origin
34155 (method url-fetch)
34156 (uri (pypi-uri "ordered-set" version))
34157 (sha256
34158 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
34159 (build-system pyproject-build-system)
34160 (native-inputs (list python-cython python-flit-core python-pytest))
34161 (home-page "https://github.com/simonpercivall/orderedset")
34162 (synopsis "Ordered Set implementation in Cython")
34163 (description "This library provides an @code{OrderedSet} data type that
34164works like a regular set, but remembers insertion order. It supports the full
34165Python @code{set} interface.")
34166 (license license:asl2.0)))
34167
34168(define-public python-orgparse
34169 (package
34170 (name "python-orgparse")
34171 (version "0.4.20251020")
34172 (source
34173 (origin
34174 (method git-fetch)
34175 (uri (git-reference
34176 (url "https://github.com/karlicoss/orgparse")
34177 (commit (string-append "v" version))))
34178 (file-name (git-file-name name version))
34179 (sha256
34180 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
34181 (build-system pyproject-build-system)
34182 (arguments
34183 (list
34184 #:test-flags
34185 #~(list "--ignore-glob=doc/*"
34186 ;; XXX: Unclear why those tests fail.
34187 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
34188 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
34189 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
34190 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")
34191 #:phases
34192 #~(modify-phases %standard-phases
34193 (add-after 'unpack 'set-version
34194 (lambda _
34195 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
34196 #$version))))))
34197 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
34198 (home-page "https://github.com/karlicoss/orgparse")
34199 (synopsis "Emacs Org mode parser in Python")
34200 (description
34201 "This package is a Python module for reading Emacs Org mode files.")
34202 (license license:bsd-3)))
34203
34204(define-public dynaconf
34205 (package
34206 (name "dynaconf")
34207 (version "3.2.11")
34208 (source
34209 (origin
34210 (method git-fetch)
34211 (uri
34212 (git-reference
34213 (url "https://github.com/dynaconf/dynaconf")
34214 (commit version)))
34215 (file-name (git-file-name name version))
34216 (sha256
34217 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
34218 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
34219 (modules '((guix build utils)))
34220 ;; Remove vendored dependencies
34221 (snippet
34222 #~(let ((unvendor '("click" "ruamel" "toml")))
34223 (with-directory-excursion "dynaconf/vendor"
34224 (for-each delete-file-recursively unvendor))
34225 (substitute* (find-files "." "\\.py$")
34226 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
34227 _ target rest)
34228 (string-append "import " target rest))
34229 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
34230 target))))))
34231 (build-system pyproject-build-system)
34232 (arguments
34233 (list
34234 #:test-flags
34235 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
34236 "-k" #$(let ((click-tests '("test_negative_get"
34237 "test_not_found_key_exit_error[get]"
34238 "test_inspect_invalid_format")))
34239 ;; Disable integration tests
34240 (string-append "not integration and not "
34241 ;; These tests fail because we use
34242 ;; Click 8.* instead of Click 7
34243 (string-join click-tests " and not ")))
34244 "tests")
34245 #:phases
34246 #~(modify-phases %standard-phases
34247 (add-after 'unpack 'patch-for-click-8
34248 (lambda _
34249 (substitute* "dynaconf/cli.py"
34250 (("click.get_os_args\\()") ;deprecated from Click 8.1+
34251 "sys.argv[1:]")))))))
34252 (propagated-inputs
34253 (list python-click python-configobj python-ruamel.yaml-0.16
34254 python-toml python-tomli))
34255 (native-inputs
34256 (list python-django python-flask python-pytest python-pytest-cov
34257 python-pytest-mock python-setuptools))
34258 (home-page "https://www.dynaconf.com/")
34259 (synopsis "The dynamic configurator for your Python project")
34260 (description
34261 "This package provides @code{dynaconf} the dynamic configurator manager for
34262your Python project. It provides features such as:
34263
34264@itemize
34265@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
34266@item Settings management (default values, validation, parsing, templating);
34267@item Protection of sensitive information (passwords/tokens);
34268@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
34269loaders;
34270@item Full support for environment variables to override existing settings
34271(dotenv support included);
34272@item Optional layered system for multiple environments @code{[default,
34273development, testing, production]};
34274@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
34275@item Built-in extensions for Django and Flask web frameworks;
34276@item CLI for common operations such as @code{init, list, write, validate, export}.
34277@end itemize")
34278 (license license:expat)))
34279
34280(define-public python-pudb
34281 ;; TODO: Rename to pudb as it's a final program.
34282 (package
34283 (name "python-pudb")
34284 (version "2025.1.3")
34285 (source
34286 (origin
34287 (method url-fetch)
34288 (uri (pypi-uri "pudb" version))
34289 (sha256
34290 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
34291 (build-system pyproject-build-system)
34292 (arguments
34293 (list
34294 #:phases
34295 #~(modify-phases %standard-phases
34296 (add-before 'check 'pre-check
34297 (lambda _
34298 (setenv "HOME" "/tmp"))))))
34299 (native-inputs
34300 (list python-hatchling
34301 python-pytest
34302 python-pytest-mock
34303 python-numpy))
34304 (propagated-inputs
34305 (list python-jedi
34306 python-packaging
34307 python-pygments
34308 python-typing-extensions
34309 python-urwid
34310 python-urwid-readline))
34311 (home-page "https://documen.tician.de/pudb/")
34312 (synopsis "Console-based Python debugger")
34313 (description
34314 "@command{pudb} is a full-screen, console-based Python debugger providing
34315all the niceties of modern GUI-based debuggers in a more lightweight and
34316keyboard-friendly package.")
34317 (license license:expat)))
34318
34319(define-deprecated-package pudb
34320 python-pudb)
34321
34322(define-public python-iwlib
34323 (package
34324 (name "python-iwlib")
34325 (version "1.7.0")
34326 (source
34327 (origin
34328 (method git-fetch)
34329 (uri (git-reference
34330 (url "https://github.com/nhoad/python-iwlib")
34331 (commit version)))
34332 (file-name (git-file-name name version))
34333 (sha256
34334 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
34335 (build-system pyproject-build-system)
34336 (arguments
34337 (list
34338 #:phases
34339 #~(modify-phases %standard-phases
34340 (add-before 'check 'cleanup
34341 (lambda _
34342 (delete-file-recursively "iwlib"))))))
34343 (native-inputs (list python-pytest python-setuptools))
34344 (inputs (list wireless-tools))
34345 (propagated-inputs (list python-cffi))
34346 (home-page "https://github.com/nhoad/python-iwlib")
34347 (synopsis "Python module to interface with iwlib")
34348 (description
34349 "This package provides a Python interface to iw wireless tools.")
34350 (license license:gpl2)))
34351
34352(define-public python-pdoc3
34353 (package
34354 (name "python-pdoc3")
34355 (version "0.11.6")
34356 (source
34357 (origin
34358 (method url-fetch)
34359 (uri (pypi-uri "pdoc3" version))
34360 (sha256
34361 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
34362 (build-system pyproject-build-system)
34363 (arguments
34364 (list #:test-backend #~'unittest
34365 #:test-flags #~(list "-v" "pdoc.test")))
34366 (native-inputs
34367 (list python-setuptools-git
34368 python-setuptools
34369 python-setuptools-scm))
34370 (propagated-inputs
34371 (list python-mako
34372 python-markdown))
34373 (home-page "https://pdoc3.github.io/pdoc/")
34374 (synopsis "Auto-generate API documentation for Python projects")
34375 (description
34376 "This package auto-generates API documentation from Python projects
34377already existing modules and objects docstrings.")
34378 (license license:agpl3+)))
34379
34380(define-public python-piexif
34381 (package
34382 (name "python-piexif")
34383 (version "1.1.3")
34384 (source
34385 (origin
34386 (method git-fetch)
34387 (uri (git-reference
34388 (url "https://github.com/hMatoba/Piexif")
34389 (commit version)))
34390 (file-name (git-file-name name version))
34391 (sha256
34392 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
34393 (patches
34394 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
34395 (build-system pyproject-build-system)
34396 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
34397 (home-page "https://github.com/hMatoba/Piexif")
34398 (synopsis "Simplify exif manipulations with Python")
34399 (description
34400 "Piexif simplifies interacting with EXIF data in Python. It includes the
34401tools necessary for extracting, creating, manipulating, converting and writing
34402EXIF data to JPEG, WebP and TIFF files.")
34403 (license license:expat)))
34404
34405(define-public python-pyrss2gen
34406 (package
34407 (name "python-pyrss2gen")
34408 (version "1.1")
34409 (source
34410 (origin
34411 (method url-fetch)
34412 (uri (pypi-uri "PyRSS2Gen" version))
34413 (sha256
34414 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
34415 (build-system pyproject-build-system)
34416 (arguments (list #:tests? #f)) ; No tests.
34417 (native-inputs (list python-setuptools))
34418 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
34419 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
34420 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
34421PyRSS2Gen builds the feed up by using a XML generator.")
34422 (license license:bsd-3)))
34423
34424(define-public python-doit
34425 (package
34426 (name "python-doit")
34427 (version "0.36.0")
34428 (source
34429 (origin
34430 (method url-fetch)
34431 (uri (pypi-uri "doit" version))
34432 (sha256
34433 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
34434 (build-system pyproject-build-system)
34435 ;; This is not a serious test failure. It's probably due to the load path
34436 ;; at test time.
34437 (arguments (list #:test-flags '(list "-k" "not test_execute")))
34438 (propagated-inputs
34439 (list python-cloudpickle python-importlib-metadata))
34440 (native-inputs (list python-pytest python-setuptools python-wheel))
34441 (home-page "https://pydoit.org")
34442 (synopsis "Automation tool to execute any kind of task in a build-tools
34443fashion")
34444 (description "doit is an automation tool that brings the power of
34445build-tools to execute any kind of task.
34446
34447A task describes some computation to be done (actions), and contains some
34448extra meta-data. The actions can be external programs or Python functions. A
34449single task may define more than one action. doit uses the task’s meta-data
34450to:
34451
34452@itemize
34453@item cache task results
34454@item correct execution order
34455@item parallel execution
34456@item powerful dependency system
34457@end itemize")
34458 (license license:expat)))
34459
34460(define-public python-phpserialize
34461 (package
34462 (name "python-phpserialize")
34463 (version "1.3")
34464 (source
34465 (origin
34466 (method git-fetch)
34467 (uri (git-reference
34468 (url "https://github.com/mitsuhiko/phpserialize")
34469 (commit version)))
34470 (file-name (git-file-name name version))
34471 (sha256
34472 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
34473 (build-system pyproject-build-system)
34474 (arguments
34475 (list
34476 #:test-backend #~'unittest
34477 ;; XXX: Unclear why this test fails.
34478 #:test-flags #~(list "-k" "not test_dumps_dict")))
34479 (native-inputs (list python-setuptools))
34480 (home-page "https://github.com/mitsuhiko/phpserialize")
34481 (synopsis "Python port of the serialize and unserialize functions of PHP")
34482 (description
34483 "This package provides a port of the @code{serialize} and
34484@code{unserialize} functions of PHP for Python.")
34485 (license license:bsd-3)))
34486
34487(define-public python-pydevtool
34488 (package
34489 (name "python-pydevtool")
34490 (version "0.3.0")
34491 (source
34492 (origin
34493 (method url-fetch)
34494 (uri (pypi-uri "pydevtool" version))
34495 (sha256
34496 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
34497 (build-system pyproject-build-system)
34498 (arguments (list #:tests? #false)) ;no tests
34499 (propagated-inputs (list python-doit python-rich-click))
34500 (native-inputs (list python-setuptools python-wheel))
34501 (home-page "https://github.com/pydoit/pydevtool")
34502 (synopsis "CLI dev tools powered by pydoit")
34503 (description "This package provides command line tools, powered by pydoit.
34504It offers integration with @code{click} and @code{rich} for custom CLI and
34505these linters: @code{pycodestlye}, @code{pyflakes}")
34506 (license license:expat)))
34507
34508(define-public nikola
34509 (package
34510 (name "nikola")
34511 (version "8.3.3")
34512 (source
34513 (origin
34514 (method url-fetch)
34515 (uri (pypi-uri "nikola" version))
34516 (sha256
34517 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
34518 (build-system pyproject-build-system)
34519 (arguments
34520 (list
34521 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
34522 #:test-flags
34523 #~(list "--durations=10"
34524 "--ignore=tests/integration/test_dev_server.py"
34525 "-k" (string-join
34526 ;; Some time difference in example tests.
34527 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
34528 "test_serves_root_dir[https://example.org:1234/blog]"
34529 "test_serves_root_dir[https://example.org:3456/blog/]"
34530 "test_serves_root_dir[https://example.org]"
34531 ;; AssertionError: Calls not found.
34532 "test_write_content_does_not_detroy_text"
34533 ;; AssertionError: assert 'January 10, 2006,
34534 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
34535 ;; 12:34:56\u202fPM EST'
34536 "test_format_date_timezone")
34537 " and not "))
34538 #:phases
34539 #~(modify-phases %standard-phases
34540 (add-after 'unpack 'fix-pytest-config
34541 (lambda _
34542 ;; Drop test coverage requirements.
34543 (substitute* "pyproject.toml"
34544 (("addopts.*") "")))))))
34545 (native-inputs
34546 (list nss-certs-for-test
34547 python-feedparser
34548 python-freezegun
34549 python-pytest
34550 python-setuptools))
34551 (inputs
34552 (list python-babel
34553 python-blinker
34554 python-dateutil
34555 python-docutils
34556 python-doit
34557 python-jinja2 ;; for themes
34558 python-lxml
34559 python-mako
34560 python-markdown
34561 python-natsort
34562 python-notebook ;; for ipynb
34563 python-phpserialize ;; for wordpress import
34564 python-piexif
34565 python-pillow
34566 python-pygments
34567 python-pyrss2gen
34568 python-requests
34569 python-ruamel.yaml ;; for YAML metadata
34570 python-toml
34571 python-unidecode
34572 python-yapsy))
34573 (home-page "https://getnikola.com/")
34574 (synopsis "Modular, fast and simple static website and blog generator")
34575 (description "Nikola generates static websites and blogs. Out of the box,
34576it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
34577and has plugins for many other formats.")
34578 (license license:expat)))
34579
34580(define-public nbss-upload
34581 (package
34582 (name "nbss-upload")
34583 (version "0.1")
34584 (source
34585 (origin
34586 (method git-fetch)
34587 (uri (git-reference
34588 (url "https://github.com/notebook-sharing-space/nbss-upload")
34589 (commit (string-append "v" version))))
34590 (file-name (git-file-name name version))
34591 (sha256
34592 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
34593 (build-system pyproject-build-system)
34594 (arguments (list #:tests? #f)) ;no tests
34595 (native-inputs (list python-setuptools))
34596 (propagated-inputs (list python-requests))
34597 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
34598 (synopsis "Upload notebooks to a notebooksharing.space instance")
34599 (description
34600 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
34601notebooksharing.space instance.")
34602 (license license:bsd-3)))
34603
34604(define-public python-reedsolo
34605 (package
34606 (name "python-reedsolo")
34607 (version "1.7.0")
34608 (source
34609 (origin
34610 (method git-fetch)
34611 (uri (git-reference
34612 (url "https://github.com/tomerfiliba/reedsolomon")
34613 (commit (string-append "v" version))))
34614 (file-name (git-file-name name version))
34615 (sha256
34616 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
34617 (build-system pyproject-build-system)
34618 (native-inputs (list python-pytest python-setuptools))
34619 (home-page "https://github.com/tomerfiliba/reedsolomon")
34620 (synopsis "Pure-Python Reed Solomon encoder/decoder")
34621 (description
34622 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
34623the tutorial at Wikiversity. This is a burst-type implementation, so that it
34624supports any Galois field higher than 2^3, but not binary streams.")
34625 (license license:public-domain)))
34626
34627(define-public python-esprima
34628 (package
34629 (name "python-esprima")
34630 (version "4.0.1")
34631 (source
34632 (origin
34633 (method git-fetch)
34634 (uri (git-reference
34635 (url "https://github.com/Kronuz/esprima-python")
34636 (commit (string-append "v" version))))
34637 (file-name (git-file-name name version))
34638 (sha256
34639 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
34640 (build-system pyproject-build-system)
34641 (arguments
34642 (list
34643 ;; XXX: pytest fails to collect tests, and a few tests are failing
34644 ;; using unittest backend. In particular, offsets with math characters
34645 ;; and uncompiled regexps.
34646 #:tests? #f
34647 #:test-backend #~'unittest
34648 #:test-flags
34649 #~(list "-k"
34650 (string-join (list
34651 ;; XXX: Character offsets with maths.
34652 "not test_math_alef"
34653 "test_math_dal_part"
34654 "test_math_kaf_lam"
34655 "test_math_zain_start"
34656 ;; XXX: Uncompiled regexps.
34657 "test_yield_arg_regexp1"
34658 "test_yield_arg_regexp2"
34659 "test_migrated_0005_source"
34660 "test_u_flag_valid_range"
34661 "test_migrated_0049"
34662 "test_migrated_0050_source")
34663 " and not "))))
34664 (native-inputs (list python-setuptools))
34665 (home-page "https://github.com/Kronuz/esprima-python")
34666 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
34667 (description
34668 "This package provides ECMAScript parsing infrastructure for
34669multipurpose analysis in Python.")
34670 (license license:bsd-3)))
34671
34672(define-public python-psycopg2-binary
34673 (package
34674 (name "python-psycopg2-binary")
34675 (version "2.9.10")
34676 (source
34677 (origin
34678 (method url-fetch)
34679 (uri (pypi-uri "psycopg2-binary" version))
34680 (sha256
34681 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
34682 (build-system pyproject-build-system)
34683 (arguments
34684 ;; Tests are disable because they need a live instance of PostgreSQL.
34685 '(#:tests? #f))
34686 (native-inputs (list python-setuptools python-wheel))
34687 (inputs (list postgresql))
34688 (home-page "https://psycopg.org/")
34689 (synopsis "PostgreSQL database adapter for Python")
34690 (description
34691 "Psycopg is a PostgreSQL database adapter for the Python programming
34692language. Its main features are the complete implementation of the Python DB
34693API 2.0 specification and the thread safety (several threads can share the
34694same connection). It was designed for heavily multi-threaded applications
34695that create and destroy lots of cursors and make a large number of concurrent
34696@code{INSERT}s or @code{UPDATE}s.
34697
34698Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
34699being both efficient and secure. It features client-side and
34700server-side cursors, asynchronous communication and notifications,
34701@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
34702out-of-the-box and adapted to matching PostgreSQL data types;
34703adaptation can be extended and customized thanks to a flexible objects
34704adaptation system.
34705
34706Psycopg 2 is both Unicode and Python 3 friendly.")
34707 (license license:lgpl3+)))
34708
34709(define-public python-pyfuse3
34710 (package
34711 (name "python-pyfuse3")
34712 (version "3.4.1")
34713 (source
34714 (origin
34715 (method url-fetch)
34716 (uri (pypi-uri "pyfuse3" version))
34717 (sha256
34718 (base32 "02cjnkhn6rf19bcp5g6spq59fhdg8izhwv2jgxgbvkabjigrqbv0"))))
34719 (build-system pyproject-build-system)
34720 (arguments
34721 (list
34722 #:test-flags
34723 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
34724 #~(list "--deselect=test/test_api.py::test_listdir")))
34725 (native-inputs
34726 (list pkg-config
34727 python-cython
34728 python-pytest
34729 python-setuptools
34730 python-setuptools-scm))
34731 (inputs
34732 (list fuse))
34733 (propagated-inputs
34734 (list python-trio))
34735 (home-page "https://github.com/libfuse/pyfuse3")
34736 (synopsis "Python bindings to FUSE 3")
34737 (description "This package provides Python 3 bindings for libfuse 3 with
34738async I/O support.")
34739 (license license:gpl2+)))
34740
34741(define-public python-ansicolors
34742 ;; XXX: Not maintained fork since 2017, consider to remove when there is no
34743 ;; any users.
34744 (package
34745 (name "python-ansicolors")
34746 (version "1.1.8")
34747 (source
34748 (origin
34749 (method url-fetch)
34750 (uri (pypi-uri "ansicolors" version ".zip"))
34751 (sha256
34752 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
34753 (build-system pyproject-build-system)
34754 (native-inputs
34755 (list python-pytest python-setuptools unzip))
34756 (home-page "https://github.com/jonathaneunice/colors/")
34757 (synopsis "ANSI colors for Python")
34758 (description
34759 "This package adds ANSI colors and decorations to your strings.")
34760 (license license:isc)))
34761
34762(define-public python-multipart
34763 (package
34764 (name "python-multipart")
34765 (version "0.0.20")
34766 (source (origin
34767 (method url-fetch)
34768 (uri (pypi-uri "python_multipart" version))
34769 (sha256
34770 (base32
34771 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
34772 (build-system pyproject-build-system)
34773 (native-inputs
34774 (list python-hatchling
34775 python-pytest
34776 python-pytest-cov
34777 python-pyyaml))
34778 (home-page "https://github.com/andrew-d/python-multipart")
34779 (synopsis "Streaming multipart parser for Python")
34780 (description
34781 "This package provides a streaming multipart parser for Python.")
34782 (license license:asl2.0)))
34783
34784(define-public python-aiopg
34785 (package
34786 (name "python-aiopg")
34787 (version "1.4.0")
34788 (source (origin
34789 (method url-fetch)
34790 (uri (pypi-uri "aiopg" version))
34791 (sha256
34792 (base32
34793 "0wcxcfazjsknr7hv46374rzh7502k8g1hvbi2r0rakbbz2z56qhi"))))
34794 (build-system pyproject-build-system)
34795 (arguments
34796 (list #:tests? #f)) ;they need Docker
34797 (native-inputs
34798 (list python-setuptools
34799 python-sqlalchemy))
34800 (propagated-inputs
34801 (list python-async-timeout-4
34802 python-psycopg2-binary))
34803 (home-page "https://aiopg.readthedocs.io")
34804 (synopsis "Postgres integration with asyncio")
34805 (description
34806 "aiopg is a library for accessing a PostgreSQL database from the
34807asyncio (PEP-3156/tulip) framework. It wraps asynchronous
34808features of the Psycopg database driver.")
34809 (license license:bsd-3)))
34810
34811(define-public python-shtab
34812 (package
34813 (name "python-shtab")
34814 (version "1.7.1")
34815 (source
34816 (origin
34817 (method url-fetch)
34818 (uri (pypi-uri "shtab" version))
34819 (sha256
34820 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
34821 (build-system pyproject-build-system)
34822 (native-inputs
34823 (list bash
34824 python-pytest
34825 python-pytest-cov
34826 python-pytest-timeout
34827 python-setuptools
34828 python-setuptools-scm
34829 python-wheel))
34830 (home-page "https://github.com/iterative/shtab")
34831 (synopsis "Automagic shell tab completion for Python CLI applications")
34832 (description
34833 "This package automatically generates shell tab completion scripts for
34834Python CLI apps.")
34835 (license license:asl2.0)))
34836
34837(define-public python-pyperf
34838 (package
34839 (name "python-pyperf")
34840 (version "2.3.1")
34841 (source
34842 (origin
34843 (method url-fetch)
34844 (uri (pypi-uri "pyperf" version))
34845 (sha256
34846 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
34847 (build-system pyproject-build-system)
34848 (arguments
34849 (list
34850 #:test-flags
34851 #~(list "--ignore=pyperf/tests/test_examples.py")))
34852 (native-inputs (list python-psutil python-pytest python-setuptools
34853 python-wheel))
34854 (home-page "https://github.com/psf/pyperf")
34855 (synopsis "Toolkit for running Python benchmarks")
34856 (description
34857 "The Python @code{pyperf} module is a toolkit for writing, running and
34858analyzing benchmarks. It features a simple API that can:
34859
34860@itemize
34861@item automatically calibrate a benchmark for a time budget;
34862@item spawn multiple worker processes;
34863@item compute the mean and standard deviation;
34864@item detect if a benchmark result seems unstable;
34865@item store benchmark results in JSON format;
34866@item support multiple units: seconds, bytes and integer.
34867@end itemize")
34868 (license license:expat)))
34869
34870(define-public python-pydispatcher
34871 (package
34872 (name "python-pydispatcher")
34873 (version "2.0.7")
34874 (source
34875 (origin
34876 (method url-fetch)
34877 (uri (pypi-uri "PyDispatcher" version))
34878 (sha256
34879 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
34880 (build-system pyproject-build-system)
34881 (native-inputs (list python-pytest python-setuptools))
34882 (home-page "https://pydispatcher.sourceforge.net")
34883 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
34884 (description
34885 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
34886@code{dispatcher.py} module. It provides the Python programmer with a robust
34887mechanism for event routing within various application contexts.
34888
34889Included in the package are the robustapply and saferef modules, which
34890provide the ability to selectively apply arguments to callable objects
34891and to reference instance methods using weak-references.")
34892 (license license:bsd-3)))
34893
34894(define-public python-pyee
34895 (package
34896 (name "python-pyee")
34897 (version "13.0.0")
34898 (source
34899 (origin
34900 (method git-fetch)
34901 (uri (git-reference
34902 (url "https://github.com/jfhbrook/pyee")
34903 (commit (string-append "v" version))))
34904 (file-name (git-file-name name version))
34905 (sha256
34906 (base32 "10xfkf5yvkfyf9ccm0k88gjhqv00hcsal33p937a1lijmxqbx398"))))
34907 (build-system pyproject-build-system)
34908 (propagated-inputs (list python-typing-extensions))
34909 (native-inputs
34910 (list python-mock
34911 python-pytest
34912 python-pytest-asyncio-0.26
34913 python-pytest-trio
34914 python-setuptools
34915 python-trio
34916 python-twisted))
34917 (home-page "https://github.com/jfhbrook/pyee")
34918 (synopsis "Emit events with Python")
34919 (description
34920 "This package provides a port of node.js's EventEmitter to
34921python. Additionally, it includes a number of subclasses useful for
34922implementing async and threaded programming in python, such as async/await.")
34923 (license license:expat)))
34924
34925(define-public python-pypubsub
34926 (package
34927 (name "python-pypubsub")
34928 (version "4.0.3")
34929 (source
34930 (origin
34931 (method git-fetch)
34932 (uri (git-reference
34933 (url "https://github.com/schollii/pypubsub")
34934 (commit (string-append "v" version))))
34935 (file-name (git-file-name name version))
34936 (sha256
34937 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
34938 (build-system pyproject-build-system)
34939 (arguments
34940 (list
34941 #:phases
34942 #~(modify-phases %standard-phases
34943 (replace 'check
34944 (lambda* (#:key tests? #:allow-other-keys)
34945 (when tests?
34946 (with-directory-excursion "tests/suite"
34947 (invoke "py.test"))))))))
34948 (native-inputs
34949 (list python-pytest
34950 python-setuptools
34951 python-wheel))
34952 (home-page "https://github.com/schollii/pypubsub")
34953 (synopsis "Python publish-subcribe library")
34954 (description
34955 "This library provides a publish-subscribe API to facilitate event-based
34956or message-based architecture in a single-process application. It is centered
34957on the notion of a topic - senders publish messages of a given topic, and
34958listeners subscribe to messages of a given topic, all inside the same
34959process.")
34960 (license license:bsd-2)))
34961
34962(define-public python-queuelib
34963 (package
34964 (name "python-queuelib")
34965 (version "1.8.0")
34966 (source
34967 (origin
34968 (method git-fetch)
34969 (uri (git-reference
34970 (url "https://github.com/scrapy/queuelib")
34971 (commit (string-append "v" version))))
34972 (file-name (git-file-name name version))
34973 (sha256
34974 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
34975 (build-system pyproject-build-system)
34976 (native-inputs (list python-hatchling python-pytest))
34977 (home-page "https://github.com/scrapy/queuelib")
34978 (synopsis "Collection of queues for Python")
34979 (description
34980 "Queuelib is a Python library that implements object collections which
34981are stored in memory or persisted to disk, provide a simple API, and run fast.
34982
34983Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
34984by priority and queues that are emptied in a round-robin fashion.")
34985 (license license:bsd-3)))
34986
34987(define-public python-posix-ipc
34988 (package
34989 (name "python-posix-ipc")
34990 (version "1.3.2")
34991 (source
34992 (origin
34993 (method git-fetch)
34994 (uri (git-reference
34995 (url "https://github.com/osvenskan/posix_ipc")
34996 (commit (string-append "rel" version))))
34997 (file-name (git-file-name name version))
34998 (sha256
34999 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35000 (build-system pyproject-build-system)
35001 (arguments
35002 (list
35003 #:test-flags
35004 ;; XXX: Collection fails due to stdin configuration.
35005 #~(list "--ignore=tests/test_memory.py")
35006 #:phases
35007 #~(modify-phases %standard-phases
35008 (add-after 'unpack 'set-cc-path
35009 (lambda _
35010 (setenv "CC" #$(cc-for-target)))))))
35011 (native-inputs (list python-pytest python-setuptools))
35012 (home-page "https://semanchuk.com/philip/posix_ipc/")
35013 (synopsis "POSIX IPC primitives for Python")
35014 (description
35015 "This package provides POSIX IPC primitives - semaphores, shared memory and
35016message queues for Python.")
35017 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35018
35019(define-public python-itemadapter
35020 (package
35021 (name "python-itemadapter")
35022 (version "0.12.0")
35023 (source
35024 (origin
35025 (method git-fetch)
35026 (uri (git-reference
35027 (url "https://github.com/scrapy/itemadapter")
35028 (commit (string-append "v" version))))
35029 (file-name (git-file-name name version))
35030 (sha256
35031 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35032 (build-system pyproject-build-system)
35033 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35034 (native-inputs (list python-hatchling))
35035 (home-page "https://github.com/scrapy/itemadapter")
35036 (synopsis "Common interface for data container classes")
35037 (description
35038 "The ItemAdapter class is a wrapper for data container objects, providing
35039a common interface to handle objects of different types in an uniform manner,
35040regardless of their underlying implementation.
35041
35042Currently supported types are:
35043@itemize
35044@item scrapy.item.Item
35045@item dict
35046@item dataclass-based classes
35047@item attrs-based classes
35048@item pydantic-based classes
35049@end itemize
35050
35051Additionally, interaction with arbitrary types is supported by
35052implementing a pre-defined interface.")
35053 (license license:bsd-3)))
35054
35055(define-public python-itemloaders
35056 (package
35057 (name "python-itemloaders")
35058 (version "1.3.2")
35059 (source
35060 (origin
35061 (method url-fetch)
35062 (uri (pypi-uri "itemloaders" version))
35063 (sha256
35064 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35065 (build-system pyproject-build-system)
35066 (native-inputs
35067 (list python-packaging
35068 python-pytest
35069 python-setuptools
35070 python-wheel))
35071 (propagated-inputs
35072 (list python-itemadapter python-jmespath python-parsel))
35073 (home-page "https://github.com/scrapy/itemloaders")
35074 (synopsis "Base library for scrapy's ItemLoader")
35075 (description "Itemloaders is a library that helps you collect data
35076from HTML and XML sources. It comes in handy to extract data from web
35077pages, as it supports data extraction using CSS and XPath Selectors.
35078
35079It’s specially useful when you need to standardize the data from many
35080sources. For example, it allows you to have all your casting and
35081parsing rules in a single place.")
35082 (license license:bsd-3)))
35083
35084(define-public python-iterable-io
35085 (package
35086 (name "python-iterable-io")
35087 (version "1.0.0")
35088 (source
35089 (origin
35090 (method url-fetch)
35091 (uri (pypi-uri "iterable-io" version))
35092 (sha256
35093 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
35094 (build-system pyproject-build-system)
35095 (native-inputs (list python-setuptools python-pytest))
35096 (home-page "https://github.com/pR0Ps/iterable-io")
35097 (synopsis "Adapt generators and other iterables to a file-like interface")
35098 (description
35099 "@code{iterable-io} is a small Python library that provides an adapter so
35100that it's possible to read from
35101@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
35102in the same way as
35103@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
35104objects.")
35105 (license license:lgpl3)))
35106
35107(define-public python-iteround
35108 (package
35109 (name "python-iteround")
35110 (version "1.0.4")
35111 ;; PyPI only has wheels.
35112 (source (origin
35113 (method git-fetch)
35114 (uri (git-reference
35115 (url "https://github.com/cgdeboer/iteround")
35116 (commit (string-append "v" version))))
35117 (file-name (git-file-name name version))
35118 (sha256
35119 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
35120 (build-system pyproject-build-system)
35121 (native-inputs
35122 (list python-pytest python-setuptools python-wheel))
35123 (home-page "https://github.com/cgdeboer/iteround")
35124 (synopsis "Sum-safe rounding for Iterables")
35125 (description "Iteround is a standard library sum-safe rounding library for
35126Python iterables (lists, tuples, dicts).")
35127 (license license:expat)))
35128
35129(define-public python-hypy-utils
35130 (package
35131 (name "python-hypy-utils")
35132 (version "1.0.29")
35133 (source
35134 (origin
35135 (method url-fetch)
35136 (uri (pypi-uri "hypy_utils" version))
35137 (sha256
35138 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
35139 (build-system pyproject-build-system)
35140 (arguments (list #:tests? #f)) ; No tests upstream.
35141 (native-inputs (list python-setuptools))
35142 (home-page "https://github.com/hykilpikonna/HyPyUtils")
35143 (synopsis "Python utility functions for HyDEV")
35144 (description "This module provides Python utility functions for modifying
35145and setting the color of terminal output, via HyDEV.")
35146 (license license:expat)))
35147
35148(define-public python-mike
35149 (package
35150 (name "python-mike")
35151 (version "2.1.3")
35152 (source
35153 (origin
35154 (method git-fetch) ; no tests data in PyPi package
35155 (uri (git-reference
35156 (url "https://github.com/jimporter/mike")
35157 (commit (string-append "v" version))))
35158 (file-name (git-file-name name version))
35159 (sha256
35160 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
35161 (build-system pyproject-build-system)
35162 (arguments
35163 (list
35164 #:test-flags
35165 ;; Most of integration tests hang or fail.
35166 #~(list "--ignore=test/integration/"
35167 ;; AttributeError: 'NoneType' object has no attribute 'group'
35168 "--ignore=test/unit/test_commands.py"
35169 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
35170 (native-inputs
35171 (list git-minimal/pinned
35172 python-pytest
35173 python-setuptools
35174 python-shtab
35175 python-wheel))
35176 (propagated-inputs
35177 (list python-importlib-metadata
35178 python-importlib-resources
35179 python-jinja2
35180 python-mkdocs
35181 python-pyparsing
35182 python-pyyaml
35183 python-pyyaml-env-tag
35184 python-verspec))
35185 (home-page "https://github.com/jimporter/mike")
35186 (synopsis "Manage multiple versions of MkDocs-powered documentation")
35187 (description
35188 "This package provides a Python utility to easily deploy multiple
35189versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
35190to Github via gh-pages.")
35191 (license license:bsd-3)))
35192
35193(define-public python-arpeggio
35194 (package
35195 (name "python-arpeggio")
35196 (version "2.0.2")
35197 (source
35198 (origin
35199 (method url-fetch)
35200 (uri (pypi-uri "Arpeggio" version))
35201 (sha256
35202 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
35203 (build-system pyproject-build-system)
35204 (native-inputs
35205 (list python-pytest
35206 python-setuptools
35207 python-wheel))
35208 (home-page "https://github.com/textX/Arpeggio")
35209 (synopsis "Packrat parser interpreter for Python")
35210 (description
35211 "This Python library provides a recursive descent parser with
35212backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
35213based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
35214for DSL development but it can be used for all sorts of general purpose
35215parsing.")
35216 (license license:expat)))
35217
35218(define-public python-flatten-json
35219 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
35220 ;; the commit assosiated with 0.1.14 version.
35221 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
35222 (revision "0"))
35223 (package
35224 (name "python-flatten-json")
35225 (version (git-version "0.1.14" revision commit))
35226 (source
35227 (origin
35228 (method git-fetch) ; no tests in PyPI release
35229 (uri (git-reference
35230 (url "https://github.com/amirziai/flatten")
35231 (commit commit)))
35232 (file-name (git-file-name name version))
35233 (sha256
35234 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
35235 (build-system pyproject-build-system)
35236 (native-inputs
35237 (list python-pytest
35238 python-setuptools
35239 python-wheel))
35240 (propagated-inputs
35241 (list python-six))
35242 (home-page "https://github.com/amirziai/flatten")
35243 (synopsis "Flatten JSON objects")
35244 (description
35245 "The @code{flatten_json} Python library flattens the hierarchy in your
35246object, which can be useful if you want to force your objects into a table.")
35247 (license license:expat))))
35248
35249(define-public python-deepdiff
35250 (package
35251 (name "python-deepdiff")
35252 (version "8.6.1")
35253 (source (origin
35254 (method url-fetch)
35255 (uri (pypi-uri "deepdiff" version))
35256 (sha256
35257 (base32
35258 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
35259 (build-system pyproject-build-system)
35260 (arguments
35261 ;; tests: 1028 passed, 10 skipped, 1 deselected
35262 ;; Ignore Polars test (not packaged).
35263 (list #:test-flags #~(list "-k" "not test_polars")))
35264 (propagated-inputs (list python-click ; for CLI
35265 python-pyyaml ; for CLI
35266 python-orderly-set
35267 python-orjson)) ; for optimization
35268 (native-inputs
35269 (list python-flit-core
35270 python-jsonpickle
35271 python-numpy
35272 python-pandas
35273 python-pydantic
35274 python-pytest
35275 python-pytest-benchmark
35276 python-pytz
35277 python-uuid6
35278 python-tomli-w))
35279 (home-page "https://github.com/seperman/deepdiff")
35280 (synopsis "Deep difference and search of any Python object/data")
35281 (description
35282 "This package provides tools for computing deep differences and searching
35283of any Python object/data. Recreate objects by adding adding deltas to each
35284other.")
35285 (license license:expat)))
35286
35287(define-public python-deepmerge
35288 (package
35289 (name "python-deepmerge")
35290 (version "1.0.1")
35291 (source
35292 (origin
35293 (method url-fetch)
35294 (uri (pypi-uri "deepmerge" version))
35295 (sha256
35296 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
35297 (build-system pyproject-build-system)
35298 (arguments
35299 (list
35300 #:phases
35301 #~(modify-phases %standard-phases
35302 (add-before 'build 'set-version
35303 (lambda _
35304 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
35305 (native-inputs
35306 (list python-setuptools-scm
35307 python-pytest
35308 python-setuptools
35309 python-wheel))
35310 (home-page "https://deepmerge.readthedocs.io/en/latest/")
35311 (synopsis "Merge nested data structures")
35312 (description
35313 "The @code{deep-merge} Python library provides a toolset to deeply merge
35314nested data structures in Python like lists and dictionaries.")
35315 (license license:expat)))
35316
35317(define-public python-durationpy
35318 (package
35319 (name "python-durationpy")
35320 (version "0.10")
35321 (source
35322 (origin
35323 (method git-fetch)
35324 (uri (git-reference
35325 (url "https://github.com/icholy/durationpy")
35326 (commit version)))
35327 (file-name (git-file-name name version))
35328 (sha256
35329 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
35330 (build-system pyproject-build-system)
35331 (arguments
35332 (list #:test-backend #~'custom
35333 #:test-flags #~(list "test.py")))
35334 (native-inputs (list python-setuptools))
35335 (home-page "https://github.com/icholy/durationpy")
35336 (synopsis "Python <-> Golang time duration formats converter")
35337 (description
35338 "This package implements a functionality to convert between
35339Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
35340 (license license:expat)))
35341
35342(define-public python-murmurhash3
35343 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
35344 (revision "0"))
35345 (package
35346 (name "python-murmurhash3")
35347 (version (git-version "2.3.5" revision commit))
35348 (source
35349 (origin
35350 (method git-fetch)
35351 (uri (git-reference
35352 (url "https://github.com/veegee/mmh3")
35353 (commit commit)))
35354 (file-name (git-file-name name version))
35355 (sha256
35356 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
35357 (build-system pyproject-build-system)
35358 (arguments
35359 (list
35360 #:phases
35361 #~(modify-phases %standard-phases
35362 (add-after 'unpack 'fix-package
35363 (lambda _
35364 (substitute* "mmh3module.cpp"
35365 (("#include <stdio\\.h>")
35366 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
35367 (native-inputs
35368 (list python-cython python-pytest python-setuptools python-wheel))
35369 (home-page "https://github.com/veegee/mmh3")
35370 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
35371 (description
35372 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
35373of fast and robust hash functions. This library is a Python extension module
35374written in C.")
35375 (license license:public-domain))))
35376
35377(define-public python-scooby
35378 (package
35379 (name "python-scooby")
35380 (version "0.11.0")
35381 (source
35382 (origin
35383 (method git-fetch)
35384 (uri (git-reference
35385 (url "https://github.com/banesullivan/scooby")
35386 (commit (string-append "v" version))))
35387 (file-name (git-file-name name version))
35388 (sha256
35389 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
35390 (build-system pyproject-build-system)
35391 (arguments
35392 (list
35393 ;; tests: 19 passed, 5 deselected, 1 warning
35394 #:test-flags
35395 ;; AssertionError: assert 'Module not found' == '0.1.0'
35396 #~(list "--deselect=tests/test_scooby.py::test_get_version"
35397 ;; ModuleNotFoundError: No module named 'no_version'
35398 "--deselect=tests/test_scooby.py::test_tracking"
35399 ;; Failed: DID NOT RAISE <class 'OSError'>
35400 "--deselect=tests/test_scooby.py::test_import_os_error"
35401 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
35402 "--deselect=tests/test_scooby.py::test_import_time"
35403 ;; Errored
35404 "--deselect=tests/test_scooby.py::test_cli")
35405 #:phases
35406 #~(modify-phases %standard-phases
35407 (add-after 'unpack 'set-version
35408 (lambda _
35409 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
35410 (native-inputs
35411 (list python-beautifulsoup4
35412 python-numpy
35413 python-pytest
35414 python-pyvips
35415 python-scipy
35416 python-setuptools
35417 python-setuptools-scm))
35418 (propagated-inputs
35419 (list python-psutil))
35420 (home-page "https://github.com/banesullivan/scooby")
35421 (synopsis "Report hardware information and Python package versions")
35422 (description
35423 "The Scooby package reports the following information about the currently
35424running system:
35425
35426@itemize
35427@item operating system name;
35428@item hardware information including machine type (e.g., @samp{i386},
35429@samp{x86_64}, etc.), CPU count and total RAM;
35430@item Python environment (e.g., Python, IPython, etc.);
35431@item file system name;
35432@item Python version;
35433@item versions of specified Python packages.
35434@end itemize
35435
35436It can generate reports as HTML tables or plain text lists.
35437
35438Scooby has no required dependencies, and only few optional dependencies.")
35439 (license license:expat)))
35440
35441(define-public python-cymem
35442 (package
35443 (name "python-cymem")
35444 (version "2.0.6")
35445 (source
35446 (origin
35447 (method git-fetch)
35448 (uri (git-reference
35449 (url "https://github.com/explosion/cymem")
35450 (commit (string-append "v" version))))
35451 (file-name (git-file-name name version))
35452 (sha256
35453 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
35454 (build-system pyproject-build-system)
35455 (native-inputs (list python-cython python-pytest python-setuptools))
35456 (inputs (list python))
35457 (home-page "https://github.com/explosion/cymem")
35458 (synopsis "Cython memory pool for RAII-style memory management")
35459 (description
35460 "Cymem provides two small memory-management helpers for Cython. They make it
35461easy to tie memory to a Python object's life-cycle, so that the memory is freed
35462when the object is garbage collected.")
35463 (license license:expat)))
35464
35465(define-public python-preshed
35466 (package
35467 (name "python-preshed")
35468 (version "3.0.6")
35469 (source
35470 (origin
35471 (method git-fetch)
35472 (uri (git-reference
35473 (url "https://github.com/explosion/preshed")
35474 (commit (string-append "v" version))))
35475 (file-name (git-file-name name version))
35476 (sha256
35477 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
35478 (build-system pyproject-build-system)
35479 (arguments
35480 (list
35481 #:phases
35482 #~(modify-phases %standard-phases
35483 (add-after 'unpack 'patch-msvccompiler
35484 (lambda _
35485 (substitute* "setup.py"
35486 (("from distutils import ccompiler, msvccompiler")
35487 "from distutils import ccompiler")
35488 (("and msvccompiler.*")
35489 ""))))
35490 (replace 'check
35491 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
35492 (with-directory-excursion (site-packages inputs outputs)
35493 (for-each delete-file (find-files "." "\\.pyx$"))
35494 (apply (assoc-ref %standard-phases 'check) args)
35495 (delete-file-recursively "preshed/tests")))))))
35496 (native-inputs
35497 (list python-cython python-cymem python-pytest python-setuptools))
35498 (inputs (list python python-cymem python-murmurhash))
35499 (home-page "https://github.com/explosion/preshed")
35500 (synopsis "Cython hash tables that assume keys are pre-hashed")
35501 (description
35502 "Simple but high performance Cython hash table mapping pre-randomized keys
35503to void* values.")
35504 (license license:expat)))
35505
35506(define-public python-catalogue
35507 (package
35508 (name "python-catalogue")
35509 (version "2.0.7")
35510 (source
35511 (origin
35512 (method git-fetch)
35513 (uri (git-reference
35514 (url "https://github.com/explosion/catalogue")
35515 (commit (string-append "v" version))))
35516 (file-name (git-file-name name version))
35517 (sha256
35518 (base32 "0f7dqd8swycnspwfka79whr0v630v52hdmkmd1x7l920h33pg467"))))
35519 (build-system pyproject-build-system)
35520 (native-inputs (list python-pytest python-setuptools python-wheel))
35521 (home-page "https://github.com/explosion/catalogue")
35522 (synopsis "Lightweight function registries for your library")
35523 (description
35524 "This package is a tiny, zero-dependencies library that makes it easy to
35525add function (or object) registries to your code. Function registries are
35526helpful when you have objects that need to be both easily serializable and
35527fully customizable. Instead of passing a function into your object, you pass
35528in an identifier name, which the object can use to lookup the function from
35529the registry. This makes the object easy to serialize, because the name is a
35530simple string. If you instead saved the function, you'd have to use Pickle
35531for serialization, which has many drawbacks.")
35532 (license license:expat)))
35533
35534(define-public python-gatt
35535 (package
35536 (name "python-gatt")
35537 (version "0.2.7")
35538 (source (origin
35539 (method url-fetch)
35540 (uri (pypi-uri "gatt" version))
35541 (sha256
35542 (base32
35543 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
35544 (build-system pyproject-build-system)
35545 (arguments (list #:tests? #f)) ; No tests upstream.
35546 (propagated-inputs (list python-dbus python-pygobject))
35547 (native-inputs (list python-setuptools))
35548 (home-page "https://github.com/getsenic/gatt-python")
35549 (synopsis "Bluetooth GATT SDK for Python")
35550 (description
35551 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
35552Software Development Kit} for Python helps you implement and communicate with
35553any Bluetooth Low Energy device that has a GATT profile. It supports:
35554
35555@itemize @bullet
35556@item Discovering nearby Bluetooth Low Energy devices
35557@item Connecting and disconnecting devices
35558@item Implementing your custom GATT profile
35559@item Accessing all GATT services
35560@item Accessing all GATT characteristics
35561@item Reading characteristic values
35562@item Writing characteristic values
35563@item Subscribing for characteristic value change notifications
35564@end itemize
35565
35566Currently, Linux is the only platform supported by this library.")
35567 (license license:expat)))
35568
35569(define-public python-dbus-fast
35570 (package
35571 (name "python-dbus-fast")
35572 (version "2.44.3")
35573 (source
35574 (origin
35575 (method git-fetch) ;No tests in PyPI package.
35576 (uri (git-reference
35577 (url "https://github.com/Bluetooth-Devices/dbus-fast")
35578 (commit (string-append "v" version))))
35579 (file-name (git-file-name name version))
35580 (sha256
35581 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
35582 (build-system pyproject-build-system)
35583 (arguments
35584 (list
35585 #:test-flags
35586 '(list
35587 ;; These tests need pytest_codspeed.
35588 "--ignore-glob=tests/benchmarks/test_*marshall.py"
35589 ;; These tests all fail with:
35590 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
35591 ;; set and could not get DISPLAY environment variable to get bus address
35592 "-m" "not asyncio")))
35593 (native-inputs (list python-cython
35594 python-poetry-core
35595 python-setuptools
35596 python-pytest
35597 python-pytest-cov
35598 python-pytest-asyncio
35599 python-covdefaults))
35600 (home-page "https://github.com/bluetooth-devices/dbus-fast")
35601 (synopsis "Faster version of dbus-next")
35602 (description "This package provides a faster version of dbus-next.")
35603 (license license:expat)))
35604
35605(define-public python-bleak
35606 (package
35607 (name "python-bleak")
35608 (version "0.22.3")
35609 (source
35610 (origin
35611 (method url-fetch)
35612 (uri (pypi-uri "bleak" version))
35613 (sha256
35614 (base32 "0p04kk84vjmfv2pl1lichaaq8rc9xdm9sgd5g9r5gr2pjv0w6j9i"))))
35615 (build-system pyproject-build-system)
35616 (arguments
35617 `(#:tests? #f)) ; no tests
35618 (propagated-inputs (list python-async-timeout
35619 python-dbus-fast
35620 python-typing-extensions))
35621 (native-inputs (list python-poetry-core))
35622 (home-page "https://github.com/hbldh/bleak")
35623 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
35624 (description "This package provides a Bluetooth Low Energy platform-agnostic
35625client library.")
35626 (license license:expat)))
35627
35628(define-public python-ndeflib
35629 (package
35630 (name "python-ndeflib")
35631 (version "0.3.3")
35632 (source
35633 (origin
35634 (method url-fetch)
35635 (uri (pypi-uri "ndeflib" version))
35636 (sha256
35637 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
35638 (build-system pyproject-build-system)
35639 (arguments
35640 (list
35641 ;; tests: 1571 passed, 37 deselected, 1 warning
35642 ;;
35643 ;; Two test fail with assertion not equal:
35644 ;;
35645 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
35646 ;; bytes] - AssertionError
35647 ;;
35648 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
35649 ;; 1 bytes] - AssertionError
35650 #:test-flags #~(list "-k" "not test_decode_error")))
35651 (native-inputs (list python-pytest python-setuptools))
35652 (home-page "https://ndeflib.readthedocs.io/")
35653 (synopsis "NFC Data Exchange Format decoder and encoder.")
35654 (description "This package provides a NFC (Near-Field Communication)
35655Data Exchange Format decoder and encoder.")
35656 (license license:isc)))
35657
35658(define-public python-nfcpy
35659 (package
35660 (name "python-nfcpy")
35661 (version "1.0.4")
35662 (source
35663 (origin
35664 (method url-fetch)
35665 (uri (pypi-uri "nfcpy" version))
35666 (sha256
35667 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
35668 (build-system pyproject-build-system)
35669 (arguments
35670 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
35671 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
35672 python-pyserial))
35673 (native-inputs (list python-setuptools python-wheel))
35674 (home-page "https://github.com/nfcpy/nfcpy")
35675 (synopsis "Python module for Near-Field Communication.")
35676 (description "This package provides a Python module for Near-Field
35677Communication.")
35678 (license license:eupl1.1)))
35679
35680(define-public python-clrprint
35681 (package
35682 (name "python-clrprint")
35683 (version "2.0.1")
35684 (source (origin
35685 (method url-fetch)
35686 (uri (pypi-uri "clrprint" version))
35687 (sha256
35688 (base32
35689 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
35690 (build-system pyproject-build-system)
35691 (arguments '(#:tests? #f)) ;there are no tests
35692 (native-inputs
35693 (list python-setuptools))
35694 (propagated-inputs (list python-colorama python-termcolor))
35695 (home-page "https://github.com/AbhijithAJ/clrprint")
35696 (synopsis "Print colorful output in the terminal")
35697 (description "@code{clrprint} is developed to print colorful output in the
35698terminal. It has red, blue, green, yellow, purple and black/white (default)
35699colors.")
35700 (license license:expat)))
35701
35702(define-public python-mido
35703 (package
35704 (name "python-mido")
35705 (version "1.3.2")
35706 (source (origin
35707 (method url-fetch)
35708 (uri (pypi-uri "mido" version))
35709 (sha256
35710 (base32
35711 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
35712 (build-system pyproject-build-system)
35713 (arguments
35714 (list #:phases
35715 #~(modify-phases %standard-phases
35716 ;; This package requires python-packaging~=23.1 which is not yet
35717 ;; updated to. As per pyproject.toml, it is required to provide
35718 ;; a nice version_info opbject.
35719 ;; TODO: After updating python-packaging, fix this.
35720 (delete 'sanity-check))))
35721 (propagated-inputs (list python-importlib-metadata python-packaging))
35722 (native-inputs (list python-pytest python-setuptools python-wheel))
35723 (home-page "https://mido.readthedocs.io/en/stable/")
35724 (synopsis "MIDI Objects for Python")
35725 (description "This library is for working with MIDI 1.0 ports, messages and
35726files.")
35727 (license license:expat)))
35728
35729(define-public python-musical-scales
35730 (package
35731 (name "python-musical-scales")
35732 (version "1.0.1")
35733 (source (origin
35734 (method url-fetch)
35735 (uri (pypi-uri "musical-scales" version))
35736 (sha256
35737 (base32
35738 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
35739 (build-system pyproject-build-system)
35740 (arguments (list #:tests? #f)) ;no tests
35741 (native-inputs (list python-setuptools))
35742 (home-page "https://github.com/hmillerbakewell/musical-scales")
35743 (synopsis "Retrieve a scale based on a given mode and starting note")
35744 (description
35745 "Retrieve a scale based on a given mode and starting note.
35746Information about these scales can be
35747@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
35748Wikipedia}.")
35749 (license license:expat)))
35750
35751(define-public python-langcodes
35752 (package
35753 (name "python-langcodes")
35754 (version "3.5.0")
35755 (source (origin
35756 (method url-fetch)
35757 (uri (pypi-uri "langcodes" version))
35758 (sha256
35759 (base32
35760 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
35761 (build-system pyproject-build-system)
35762 (native-inputs
35763 (list python-pytest
35764 python-setuptools
35765 python-setuptools-scm))
35766 (propagated-inputs
35767 ;; [optional:data]
35768 (list python-language-data))
35769 (home-page "https://github.com/rspeer/langcodes")
35770 (synopsis "Python library for working with language codes")
35771 (description
35772 "This package provides a Python library for working with and comparing
35773language codes.
35774
35775@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3577647}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3577747 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
35778with it, and it also implements recommendations from the
35779@url{http://cldr.unicode.org/, Unicode CLDR}.
35780
35781@code{python-langcodes} can also refer to a database of language properties
35782and names, built from Unicode CLDR and the IANA subtag registry, if you
35783install @code{python-language-data}.")
35784 (license license:expat)))
35785
35786(define-public python-anyascii
35787 (package
35788 (name "python-anyascii")
35789 (version "0.3.3")
35790 (source (origin
35791 (method url-fetch)
35792 (uri (pypi-uri "anyascii" version))
35793 (sha256
35794 (base32
35795 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
35796 (build-system pyproject-build-system)
35797 (native-inputs (list python-pytest python-flit-core))
35798 (home-page "https://anyascii.com")
35799 (synopsis "Unicode to ASCII transliteration")
35800 (description "@code{anyascii} converts Unicode characters to their best
35801ASCII representation.")
35802 (license license:isc)))
35803
35804(define-public python-geomet
35805 (package
35806 (name "python-geomet")
35807 (version "1.1.0")
35808 (source
35809 (origin
35810 (method git-fetch)
35811 (uri (git-reference
35812 (url "https://github.com/geomet/geomet")
35813 (commit version)))
35814 (file-name (git-file-name name version))
35815 (sha256
35816 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
35817 (build-system pyproject-build-system)
35818 (native-inputs (list python-pytest python-setuptools))
35819 (propagated-inputs (list python-click python-six))
35820 (home-page "https://github.com/geomet/geomet")
35821 (synopsis
35822 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
35823 (description
35824 "This package provides utilities and functions for converting
35825GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
35826versa. Extended WKB/WKT are also supported.")
35827 (license license:asl2.0)))
35828
35829(define-public python-cogapp
35830 (package
35831 (name "python-cogapp")
35832 (version "3.3.0")
35833 (source (origin
35834 (method url-fetch)
35835 (uri (pypi-uri "cogapp" version))
35836 (sha256
35837 (base32
35838 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
35839 (build-system pyproject-build-system)
35840 (native-inputs (list python-pytest python-setuptools python-wheel))
35841 (home-page "https://nedbatchelder.com/code/cog")
35842 (synopsis "Content generation tool that leverages Python")
35843 (description "Cog is a file generation tool. It allows using pieces of
35844Python code as generators in your source files to generate arbitrary text.")
35845 (license license:expat)))
35846
35847(define-public python-bsdiff4
35848 (package
35849 (name "python-bsdiff4")
35850 (version "1.2.6")
35851 (source
35852 (origin
35853 (method git-fetch)
35854 (uri (git-reference
35855 (url "https://github.com/ilanschnell/bsdiff4")
35856 (commit version)))
35857 (file-name (git-file-name name version))
35858 (sha256
35859 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
35860 (build-system pyproject-build-system)
35861 (arguments
35862 (list
35863 #:test-flags #~(list "--pyargs" "bsdiff4")))
35864 (native-inputs
35865 (list python-pytest
35866 python-setuptools
35867 python-wheel))
35868 (home-page "https://github.com/ilanschnell/bsdiff4")
35869 (synopsis "Binary diff and patch using the BSDIFF4 format")
35870 (description
35871 "This package provides a Python library for the @code{bsdiff} binary diff
35872utility. It also provides two command-line tools, @code{bsdiff4} and
35873@code{bspatch4}.")
35874 (license license:bsd-2)))
35875
35876(define-public python-mpv
35877 (package
35878 (name "python-mpv")
35879 (version "1.0.8")
35880 (source
35881 (origin
35882 (method git-fetch)
35883 (uri (git-reference
35884 (url "https://github.com/jaseg/python-mpv")
35885 (commit (string-append "v" version))))
35886 (file-name (git-file-name name version))
35887 (sha256
35888 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
35889 (build-system pyproject-build-system)
35890 (arguments
35891 (list #:phases
35892 #~(modify-phases %standard-phases
35893 (add-before 'build 'patch-reference-to-mpv
35894 (lambda* (#:key inputs #:allow-other-keys)
35895 ;; Without an absolute path it is not able find and load libmpv.
35896 (substitute* "mpv.py"
35897 (("sofile = .*")
35898 (format #f "sofile = '~a/lib/libmpv.so'~%"
35899 #$(this-package-input "mpv"))))))
35900 (add-before 'check 'prepare-for-tests
35901 (lambda _
35902 ;; Fontconfig throws errors when it has no cache dir to use.
35903 (setenv "XDG_CACHE_HOME" (getcwd))
35904 ;; Some tests fail without a writable and readable HOME.
35905 (setenv "HOME" (getcwd))
35906 (setenv "PY_MPV_SKIP_TESTS"
35907 "test_wait_for_property_event_overflow"))))))
35908 (native-inputs
35909 (list python-pytest
35910 python-pyvirtualdisplay
35911 python-setuptools
35912 xorg-server-for-tests))
35913 (inputs (list mpv))
35914 (propagated-inputs (list python-pillow)) ;for raw screenshots
35915 (home-page "https://github.com/jaseg/python-mpv")
35916 (synopsis "Python interface to the mpv media player")
35917 (description
35918 "python-mpv is a ctypes-based python interface to the mpv media player.
35919It gives you more or less full control of all features of the player, just
35920as the lua interface does.")
35921 ;; From the project's README:
35922 ;; python-mpv inherits the underlying libmpv's license, which can be either
35923 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
35924 ;; copyright page.
35925 (license license:gpl2+)))
35926
35927(define-public python-biblib
35928 (let ((upstream-version "0.1.0")
35929 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
35930 (revision "1"))
35931 (package
35932 (name "python-biblib")
35933 (version (git-version upstream-version revision commit))
35934 (source
35935 (origin
35936 (method git-fetch)
35937 (uri (git-reference
35938 (url "https://github.com/aclements/biblib")
35939 (commit commit)))
35940 (sha256
35941 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
35942 (file-name (git-file-name name version))))
35943 (build-system pyproject-build-system)
35944 (arguments (list #:tests? #f)) ; No tests upstream.
35945 (native-inputs (list python-setuptools))
35946 (home-page "https://github.com/aclements/biblib")
35947 (synopsis "BibTeX parsing and transformation library")
35948 (description
35949 "Biblib provides a simple, standalone Python 3 package for parsing
35950BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
35951entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
35952source code for BibTeX and hence (barring bugs in translation) should be fully
35953compatible with BibTeX's own parser.")
35954 ;; N.B. It seems the parser was translated from WEB by hand: this
35955 ;; package does not contain any generated files.
35956 (license license:expat))))
35957
35958(define-public python-cyclic
35959 (package
35960 (name "python-cyclic")
35961 (version "1.0.0")
35962 (source
35963 (origin
35964 (method git-fetch)
35965 (uri (git-reference
35966 (url "https://github.com/neurobin/cyclic")
35967 ;; Release is not tagged on github, see
35968 ;; https://github.com/neurobin/cyclic/issues/2
35969 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
35970 (file-name (git-file-name name version))
35971 (sha256
35972 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
35973 (build-system pyproject-build-system)
35974 (arguments (list #:test-backend #~'unittest))
35975 (native-inputs (list python-setuptools))
35976 (home-page "https://github.com/neurobin/cyclic")
35977 (synopsis "Handle cyclic relations")
35978 (description "This package handles cyclic relations compared by value.")
35979 (license license:bsd-3)))
35980
35981(define-public python-rcslice
35982 (package
35983 (name "python-rcslice")
35984 (version "1.1.0")
35985 (source
35986 (origin
35987 (method git-fetch)
35988 (uri (git-reference
35989 (url "https://github.com/neurobin/rcslice")
35990 ;; Releases are not tagged on github, see
35991 ;; https://github.com/neurobin/rcslice/issues/2
35992 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
35993 (file-name (git-file-name name version))
35994 (sha256
35995 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
35996 (build-system pyproject-build-system)
35997 (arguments (list #:test-backend #~'unittest))
35998 (native-inputs (list python-setuptools))
35999 (home-page "https://github.com/neurobin/rcslice")
36000 (synopsis "Slice a list of sliceables")
36001 (description
36002 "This package provides Python module to slice a list of sliceables (1
36003indexed, both start and end index are inclusive). Helps to slice file content
36004line by line or column by column or a combination of both.")
36005 (license license:bsd-3)))
36006
36007(define-public python-rpds-py
36008 (package
36009 (name "python-rpds-py")
36010 (version "0.10.6")
36011 (source (origin
36012 (method url-fetch)
36013 (uri (pypi-uri "rpds_py" version))
36014 (sha256
36015 (base32
36016 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
36017 (build-system cargo-build-system)
36018 (arguments
36019 (list
36020 #:imported-modules `(,@%cargo-build-system-modules
36021 ,@%pyproject-build-system-modules)
36022 #:modules '((guix build cargo-build-system)
36023 ((guix build pyproject-build-system) #:prefix py:)
36024 (guix build utils))
36025 #:phases
36026 (with-extensions (list (pyproject-guile-json))
36027 #~(modify-phases %standard-phases
36028 (add-after 'build 'build-python-module
36029 (assoc-ref py:%standard-phases 'build))
36030 (add-after 'build-python-module 'install-python-module
36031 (assoc-ref py:%standard-phases 'install))))
36032 #:install-source? #false))
36033 (inputs
36034 (cons maturin (cargo-inputs 'python-rpds-py)))
36035 (native-inputs
36036 (list python-wrapper))
36037 (home-page "https://github.com/crate-py/rpds")
36038 (synopsis "Bindings to Rust rpds for persistent data structures")
36039 (description "This package provides Python bindings to the Rust rpds crate
36040for persistent data structures. It was written initially to support replacing
36041@code{python-pyrsistent}.")
36042 (license license:expat)))
36043
36044(define-public python-nanoid
36045 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36046 (revision "0"))
36047 (package
36048 (name "python-nanoid")
36049 (version "2.0.0")
36050 (source
36051 (origin
36052 (method git-fetch)
36053 (uri
36054 (git-reference
36055 (url "https://github.com/puyuan/py-nanoid")
36056 (commit commit)))
36057 (file-name (git-file-name name commit))
36058 (sha256
36059 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36060 (build-system pyproject-build-system)
36061 (native-inputs (list python-pytest python-setuptools))
36062 (home-page "https://github.com/puyuan/py-nanoid")
36063 (synopsis "Unique string ID generator")
36064 (description
36065 "This package provides a tiny, secure, URL-friendly, unique string ID
36066generator for Python.")
36067 (license license:expat))))
36068
36069(define-public python-misskey
36070 (package
36071 (name "python-misskey")
36072 (version "4.1.0")
36073 (source (origin
36074 (method git-fetch)
36075 (uri (git-reference
36076 (url "https://github.com/YuzuRyo61/Misskey.py")
36077 (commit (string-append "v" version))))
36078 (file-name (git-file-name name version))
36079 (sha256
36080 (base32
36081 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
36082 (build-system pyproject-build-system)
36083 (arguments (list #:tests? #f)) ;needs network
36084 (native-inputs (list python-setuptools))
36085 (propagated-inputs (list python-requests))
36086 (home-page "https://misskeypy.readthedocs.io")
36087 (synopsis "Python bindings for Misskey's API")
36088 (description
36089 "This package provides access to Misskey's API. Misskey is a SNS
36090platform using the ActivityPub protocol.")
36091 (license license:expat)))
36092
36093(define-public python-lief
36094 (package
36095 (name "python-lief")
36096 (version "0.17.2")
36097 (source (origin
36098 (method git-fetch)
36099 (uri (git-reference
36100 (url "https://github.com/lief-project/LIEF")
36101 (commit version)))
36102 (file-name (git-file-name name version))
36103 (sha256
36104 (base32
36105 "0djl879vw0a21h4ww8waqa3mgs835rhqbsda85274n4s6z5vi905"))))
36106 (build-system pyproject-build-system)
36107 (native-inputs (list cmake-minimal
36108 ninja
36109 python-scikit-build-core
36110 python-pydantic))
36111 (arguments
36112 (list
36113 #:tests? #f ;needs network
36114 #:phases #~(modify-phases %standard-phases
36115 (add-before 'build 'change-directory
36116 (lambda _
36117 (chdir "api/python"))))))
36118 (home-page "https://github.com/lief-project/LIEF")
36119 (synopsis "Library to instrument executable formats")
36120 (description
36121 "@code{python-lief} is a cross platform library which can parse, modify
36122and abstract ELF, PE and MachO formats.")
36123 (license license:asl2.0)))
36124
36125(define-public python-eris
36126 (package
36127 (name "python-eris")
36128 (version "1.0.0")
36129 (source
36130 (origin
36131 (method url-fetch)
36132 (uri (pypi-uri "eris" version))
36133 (sha256
36134 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
36135 (build-system pyproject-build-system)
36136 (arguments
36137 ;; No tests in PyPI, tests miss data files in Git:
36138 ;; - tests/test-vectors/test_encode
36139 ;; - tests/test-vectors/test_decode
36140 (list #:tests? #f))
36141 (native-inputs
36142 (list python-setuptools
36143 python-wheel))
36144 (propagated-inputs
36145 (list python-aiocoap
36146 python-pycryptodome))
36147 (home-page "https://codeberg.org/eris/python-eris")
36148 (synopsis "Python implementation of ERIS")
36149 (description
36150 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
36151Storage}.")
36152 (license license:lgpl3+)))
36153
36154(define-public python-pymonad
36155 (package
36156 (name "python-pymonad")
36157 (version "2.4.0")
36158 (source
36159 (origin
36160 (method git-fetch)
36161 (uri (git-reference
36162 (url "https://github.com/jasondelaat/pymonad")
36163 (commit (string-append "v" version))))
36164 (file-name (git-file-name name version))
36165 (sha256
36166 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
36167 (build-system pyproject-build-system)
36168 (arguments
36169 (list
36170 #:phases
36171 #~(modify-phases %standard-phases
36172 (replace 'check
36173 (lambda* (#:key tests? #:allow-other-keys)
36174 (when tests?
36175 (invoke "./run_tests.sh")))))))
36176 (native-inputs (list python-setuptools))
36177 (home-page "https://github.com/jasondelaat/pymonad")
36178 (synopsis "Monadic style functional programming for Python")
36179 (description "@code{python-pymonad} implements data structures typically
36180available in purely functional or functional first programming languages such
36181as Haskell and F#. Included are
36182
36183@itemize
36184@item Monad and Monoid data types with several common monads such as Maybe and
36185State
36186@item Useful tools such as the @code{@@curry} decorator for defining curried
36187functions
36188@item Type annotations to help ensure correct usage
36189@end itemize")
36190 (license license:bsd-3)))
36191
36192(define-public python-markdown-strings
36193 (package
36194 (name "python-markdown-strings")
36195 (version "3.3.0")
36196 (source
36197 (origin
36198 (method git-fetch)
36199 (uri (git-reference
36200 (url "https://github.com/awesmubarak/markdown_strings.git")
36201 (commit (string-append "v" version))))
36202 (file-name (git-file-name name version))
36203 (sha256
36204 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
36205 (build-system pyproject-build-system)
36206 (arguments
36207 (list
36208 #:test-backend #~'custom
36209 #:test-flags #~(list "test.py")))
36210 (native-inputs (list python-setuptools))
36211 (propagated-inputs (list python-lxml python-six))
36212 (home-page "https://github.com/awesmubarak/markdown_strings")
36213 (synopsis "Python library to create markdown-formatted text")
36214 (description "This package allows the programmatic creation of
36215markdown-compliant strings.")
36216 (license license:expat)))
36217
36218(define-public python-icecream
36219 (package
36220 (name "python-icecream")
36221 (version "2.1.3")
36222 (source
36223 (origin
36224 (method url-fetch)
36225 (uri (pypi-uri "icecream" version))
36226 (sha256
36227 (base32 "1pj9kf7lwm799wppvngg3sndi0qf13iq33yhl59n3hsf6z1sg90a"))))
36228 (build-system pyproject-build-system)
36229 (arguments
36230 (list
36231 #:test-flags
36232 '(list "-k"
36233 ;; These tests are failing due to a bug:
36234 ;; https://github.com/gruns/icecream/issues/144
36235 (string-append "not testEnableDisable"
36236 " and not testSingledispatchArgumentToString"))))
36237 (native-inputs
36238 (list python-hypothesis
36239 python-pytest
36240 python-setuptools
36241 python-wheel))
36242 (propagated-inputs
36243 (list python-asttokens
36244 python-colorama
36245 python-executing
36246 python-pygments))
36247 (home-page "https://github.com/gruns/icecream")
36248 (synopsis
36249 "Single function call to debug variables, expressions, and program execution")
36250 (description
36251 "This tool lets you debug variables, expressions, and program execution
36252with one function call. IceCream makes print debugging a little sweeter.")
36253 (license license:expat)))
36254
36255(define-public python-icegrams
36256 (package
36257 (name "python-icegrams")
36258 (version "1.1.3")
36259 (source
36260 (origin
36261 (method git-fetch)
36262 (uri (git-reference
36263 ;; no tests in the PyPI archive
36264 (url "https://github.com/mideind/Icegrams")
36265 ;; multiple commits were tagged with 1.1.3
36266 ;; 1.1.3-final is what is noted on the Releases page
36267 (commit (string-append version "-final"))))
36268 (file-name (git-file-name name version))
36269 (sha256
36270 (base32 "19mgkdpzn8r2bxxyw1yx7ijwnp4bl52g85iv90jfqbm4gh4j7rqh"))))
36271 (build-system pyproject-build-system)
36272 (arguments
36273 (list
36274 #:test-flags
36275 #~(list
36276 ;; two tests fail because of a hardcoded file path in the package's source code
36277 ;; this should be fixed upstream instead of with a substitution here
36278 "-k"
36279 (string-append "not test_trigrams" " and not test_word_ids")
36280 "test/test_ngrams.py")))
36281 (propagated-inputs (list python-cffi))
36282 (native-inputs (list python-pytest python-setuptools
36283 python-setuptools-scm python-wheel))
36284 (home-page "https://github.com/mideind/Icegrams")
36285 (synopsis "Trigram statistics for Icelandic")
36286 (description
36287 "Icegrams is a Python package that encapsulates a large trigram
36288library for Icelandic. You can use Icegrams to obtain probabilities (relative
36289frequencies) of over a million different unigrams (single words or tokens), or of
36290bigrams (pairs of two words or tokens), or of trigrams. Icegrams is useful for
36291instance in spelling correction, predictive typing, to help disabled people
36292write text fast, and for various text generation, statistics, and modeling tasks.")
36293 (license license:expat)))
36294
36295(define-public python-speg
36296 (package
36297 (name "python-speg")
36298 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
36299 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
36300 (revision . "0")))
36301 (version (git-version "0.3"
36302 (assoc-ref properties 'revision)
36303 (assoc-ref properties 'commit)))
36304 (source
36305 (origin
36306 (method git-fetch)
36307 (uri (git-reference
36308 (url "https://github.com/avakar/speg")
36309 (commit (assoc-ref properties 'commit))))
36310 (file-name (git-file-name name version))
36311 (sha256
36312 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
36313 (build-system pyproject-build-system)
36314 (native-inputs
36315 (list python-pytest
36316 python-setuptools))
36317 (propagated-inputs
36318 (list python-six))
36319 (home-page "https://github.com/avakar/speg")
36320 (synopsis "PEG-based parser interpreter with memoization")
36321 (description "This package is a PEG-based parser and interpreter with
36322memoization.")
36323 (license license:expat)))
36324
36325(define-public python-spinners
36326 (package
36327 (name "python-spinners")
36328 (version "0.0.24")
36329 (source
36330 (origin
36331 (method url-fetch)
36332 (uri (pypi-uri "spinners" version))
36333 (sha256
36334 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
36335 (build-system pyproject-build-system)
36336 (arguments
36337 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
36338 (native-inputs
36339 (list python-setuptools))
36340 (home-page "https://github.com/manrajgrover/py-spinners")
36341 (synopsis "Python library with graphical spinners for the terminal")
36342 (description
36343 "Spinners is a Python library that contains graphical spinners that can
36344be displayed terminal.")
36345 (license license:expat)))
36346
36347(define-public python-sqlglot
36348 (package
36349 (name "python-sqlglot")
36350 (version "26.33.0")
36351 (source
36352 (origin
36353 (method url-fetch)
36354 (uri (pypi-uri "sqlglot" version))
36355 (sha256
36356 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
36357 (build-system pyproject-build-system)
36358 (arguments
36359 (list
36360 #:test-backend #~'unittest
36361 #:phases
36362 #~(modify-phases %standard-phases
36363 (add-before 'check 'pre-check
36364 (lambda _
36365 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
36366 (native-inputs
36367 (list python-duckdb
36368 python-pytz
36369 python-pandas
36370 python-setuptools
36371 python-setuptools-scm
36372 python-tzdata))
36373 (home-page "https://sqlglot.com/")
36374 (synopsis "Python SQL Parser and Transpiler")
36375 (description
36376 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
36377engine. It can be used to format SQL or translate between 31 different
36378dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
36379BigQuery. It aims to read a wide variety of SQL inputs and output
36380syntactically and semantically correct SQL in the targeted dialects.")
36381 (license license:expat)))
36382
36383(define-public python-sqlglotrs
36384 (package
36385 (inherit python-sqlglot)
36386 (name "python-sqlglotrs")
36387 (version "0.6.1")
36388 (source
36389 (origin
36390 (method url-fetch)
36391 (uri (pypi-uri "sqlglotrs" version))
36392 (sha256
36393 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
36394 (build-system cargo-build-system)
36395 (arguments
36396 (list
36397 #:install-source? #false
36398 #:tests? #f ;no tests
36399 #:imported-modules `(,@%cargo-build-system-modules
36400 ,@%pyproject-build-system-modules)
36401 #:modules '((guix build cargo-build-system)
36402 ((guix build pyproject-build-system) #:prefix py:)
36403 (guix build utils))
36404 #:phases
36405 #~(modify-phases %standard-phases
36406 (add-after 'build 'build-python-module
36407 (assoc-ref py:%standard-phases 'build))
36408 (add-after 'build-python-module 'install-python-module
36409 (assoc-ref py:%standard-phases 'install))
36410 (add-after 'install-python-module 'add-install-to-pythonpath
36411 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
36412 (native-inputs
36413 (list maturin
36414 python-wrapper))
36415 (inputs
36416 (cargo-inputs 'python-sqlglotrs))))
36417
36418(define-public python-sqltrie
36419 (package
36420 (name "python-sqltrie")
36421 (version "0.11.2")
36422 (home-page "https://github.com/iterative/sqltrie/")
36423 (source
36424 (origin
36425 (method url-fetch)
36426 (uri (pypi-uri "sqltrie" version))
36427 (sha256
36428 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
36429 (build-system pyproject-build-system)
36430 (arguments
36431 (list
36432 #:test-flags
36433 #~(list "--ignore=tests/benchmarks/"
36434 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
36435 ;; yet in Guix.
36436 "--ignore=src/sqltrie/__pyinstaller")))
36437 (native-inputs
36438 (list python-pytest
36439 python-pytest-mock
36440 python-pytest-sugar
36441 python-setuptools
36442 python-setuptools-scm))
36443 (propagated-inputs
36444 (list python-attrs
36445 python-orjson
36446 python-pygtrie))
36447 (synopsis "SQL-based prefix tree for Python")
36448 (description
36449 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
36450python-diskcache.")
36451 (license license:asl2.0)))
36452
36453(define-public python-sre-yield
36454 (package
36455 (name "python-sre-yield")
36456 (version "1.2")
36457 (source
36458 (origin
36459 (method url-fetch)
36460 (uri (pypi-uri "sre_yield" version))
36461 (sha256
36462 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
36463 (build-system pyproject-build-system)
36464 (arguments
36465 (list #:test-backend #~'unittest))
36466 (native-inputs
36467 (list python-setuptools))
36468 (home-page "https://github.com/google/sre_yield")
36469 (synopsis "Expands a regular expression to its possible matches")
36470 (description
36471 "The goal of sre_yield is to efficiently generate all values that can
36472match a given regular expression, or count possible matches efficiently. It
36473uses the parsed regular expression, so you get a much more accurate result
36474than trying to just split strings.")
36475 (license license:asl2.0)))
36476
36477(define-public python-srsly
36478 (package
36479 (name "python-srsly")
36480 (version "2.5.1")
36481 (source
36482 (origin
36483 (method url-fetch)
36484 (uri (pypi-uri "srsly" version))
36485 (sha256
36486 (base32 "0zn74zyb928v898j6l86a83qgdvza78ksjg0v8ixla9yrzv4n6xb"))))
36487 (build-system pyproject-build-system)
36488 (arguments
36489 (list
36490 #:test-flags
36491 #~(list "--pyargs" "srsly"
36492 ;; 3 tests fail in
36493 ;; tests/cloudpickle/cloudpickle_test.py::CloudPickleTest
36494 "-k" (string-append "not test_import"
36495 " and not test_logger"
36496 " and not test_multiprocess"))))
36497 (native-inputs
36498 (list python-cython
36499 python-mock
36500 python-numpy
36501 python-psutil
36502 python-pytest
36503 python-pytest-timeout
36504 python-setuptools))
36505 (propagated-inputs
36506 (list python-catalogue))
36507 (home-page "https://github.com/explosion/srsly")
36508 (synopsis "Serialization utilities for Python")
36509 (description "This package bundles some of the best Python serialization
36510libraries into one standalone package, with a high-level API that makes it
36511easy to write code that's correct across platforms and Pythons.")
36512 (license license:expat)))
36513
36514(define-public python-srt
36515 (package
36516 (name "python-srt")
36517 (version "3.5.3")
36518 (source
36519 (origin
36520 (method url-fetch)
36521 (uri (pypi-uri "srt" version))
36522 (sha256
36523 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
36524 (build-system pyproject-build-system)
36525 (native-inputs
36526 (list python-pytest
36527 python-setuptools
36528 python-wheel))
36529 (home-page "https://github.com/cdown/srt")
36530 (synopsis "SRT parsing library")
36531 (description
36532 "This package provides a Python library for parsing, modifying, and
36533composing subtitles in the SRT file format.")
36534 (license license:expat)))
36535
36536(define-public python-sshpubkeys
36537 (package
36538 (name "python-sshpubkeys")
36539 (version "3.2.0")
36540 (source
36541 (origin
36542 (method git-fetch)
36543 (uri (git-reference
36544 (url "https://github.com/ojarva/python-sshpubkeys")
36545 (commit (string-append "v" version))))
36546 (file-name (git-file-name name version))
36547 (sha256
36548 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
36549 (build-system pyproject-build-system)
36550 (arguments
36551 (list #:tests? #f)) ; XXX: All tests fail
36552 (native-inputs
36553 (list python-setuptools
36554 python-wheel))
36555 (propagated-inputs
36556 (list python-cryptography
36557 python-ecdsa))
36558 (home-page "https://github.com/ojarva/python-sshpubkeys")
36559 (synopsis "OpenSSH public key parser")
36560 (description
36561 "This package provides a library for parsing and validating OpenSSH
36562public key files.")
36563 (license license:bsd-3)))
36564
36565(define-public python-sshtunnel
36566 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
36567 (revision "0"))
36568 (package
36569 (name "python-sshtunnel")
36570 (version (git-version "0.4.0" revision commit))
36571 (source
36572 (origin
36573 (method git-fetch)
36574 (uri (git-reference
36575 (url "https://github.com/pahaz/sshtunnel")
36576 (commit commit)))
36577 (file-name (git-file-name name version))
36578 (sha256
36579 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
36580 (patches (search-patches "python-sshtunnel-pep518.patch"))))
36581 (build-system pyproject-build-system)
36582 (arguments
36583 (list
36584 #:phases
36585 #~(modify-phases %standard-phases
36586 (add-after 'unpack 'remove-deprecated-dsskey
36587 (lambda _
36588 (substitute* "sshtunnel.py"
36589 (("'dsa': paramiko\\.DSSKey,")
36590 "")
36591 (("paramiko\\.DSSKey, ")
36592 "")))))))
36593 (propagated-inputs (list python-paramiko))
36594 (native-inputs
36595 (list openssh python-mock python-pytest python-setuptools))
36596 (home-page "https://github.com/pahaz/sshtunnel")
36597 (synopsis "Python SSH tunnels library")
36598 (description
36599 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
36600in the background, using Python.")
36601 (license license:expat))))
36602
36603(define-public python-stack-data
36604 (package
36605 (name "python-stack-data")
36606 (version "0.6.3")
36607 (source
36608 (origin
36609 (method url-fetch)
36610 (uri (pypi-uri "stack_data" version))
36611 (sha256
36612 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
36613 (build-system pyproject-build-system)
36614 (arguments
36615 (list
36616 #:test-flags
36617 #~(list "-k" (string-join
36618 ;; XXX: Tests fail with HTML diff.
36619 (list "not test_executing_style_defs"
36620 "test_pygments_example"
36621 "test_example")
36622 " and not "))
36623 #:phases
36624 #~(modify-phases %standard-phases
36625 (add-after 'unpack 'set-home-env
36626 (lambda _
36627 (setenv "HOME" "/tmp"))))))
36628 (native-inputs
36629 (list python-cython
36630 python-littleutils
36631 python-pygments
36632 python-pytest
36633 python-setuptools
36634 python-setuptools-scm
36635 python-typeguard
36636 python-wheel))
36637 (propagated-inputs
36638 (list python-asttokens
36639 python-executing
36640 python-pure-eval))
36641 (home-page "https://github.com/alexmojaki/stack_data")
36642 (synopsis "Python stack frame and traceback manipulation library")
36643 (description
36644 "The @code{stack_data} Python library extracts data from stack frames and
36645tracebacks. Is can be used to display more useful tracebacks
36646than the default.")
36647 (license license:expat)))
36648
36649(define-public python-stdio-mgr
36650 (package
36651 (name "python-stdio-mgr")
36652 (version "1.0.1")
36653 (source
36654 (origin
36655 (method git-fetch)
36656 (uri (git-reference
36657 (url "https://github.com/bskinn/stdio-mgr")
36658 (commit (string-append "v" version))))
36659 (file-name (git-file-name name version))
36660 (sha256
36661 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
36662 (build-system pyproject-build-system)
36663 (arguments
36664 (list
36665 ;; Do not run doctests requiring sphinx.
36666 #:test-flags #~(list "--ignore=README.rst")))
36667 (native-inputs
36668 (list python-pytest
36669 python-setuptools
36670 python-wheel))
36671 (propagated-inputs
36672 (list python-attrs))
36673 (home-page "https://github.com/bskinn/stdio-mgr")
36674 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
36675 (description
36676 "This package contains a context manager for mocking/wrapping
36677stdin/stdout/stderr.")
36678 (license license:expat)))
36679
36680;; TODO: This package is not necessary in Guix. It should be replaced by a
36681;; trivial python package providing the same functionality.
36682(define-public python-stdlib-list
36683 (package
36684 (name "python-stdlib-list")
36685 (version "0.11.1")
36686 (source
36687 (origin
36688 (method git-fetch)
36689 (uri (git-reference
36690 (url "https://github.com/jackmaney/python-stdlib-list")
36691 (commit (string-append "v" version))))
36692 (file-name (git-file-name name version))
36693 (sha256
36694 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
36695 (build-system pyproject-build-system)
36696 (native-inputs
36697 (list python-flit-core
36698 python-pytest
36699 python-sphinx))
36700 (home-page "https://github.com/jackmaney/python-stdlib-list")
36701 (synopsis "Python Standard Libraries")
36702 (description
36703 "This package contains a list of Python Standard Libraries.")
36704 (license license:expat)))
36705
36706(define-public python-stem
36707 (package
36708 (name "python-stem")
36709 (version "1.8.2")
36710 (source
36711 (origin
36712 (method url-fetch)
36713 (uri (pypi-uri "stem" version))
36714 (sha256
36715 (base32
36716 "10mm9qw4xv7d18086ivy38iaz04z72018186q03j5y69skzikyw3"))))
36717 (build-system pyproject-build-system)
36718 (arguments
36719 (list
36720 #:phases #~(modify-phases %standard-phases
36721 (replace 'check
36722 (lambda _
36723 (invoke "./run_tests.py" "--unit"))))))
36724 (native-inputs
36725 (list python-setuptools
36726 python-wheel))
36727 (home-page "https://stem.torproject.org/")
36728 (synopsis
36729 "Python controller library that allows applications to interact with Tor")
36730 (description
36731 "Stem is a Python controller library for Tor. With it you can use Tor's
36732 control protocol to script against the Tor process and read descriptor data
36733 relays publish about themselves.")
36734 (license license:lgpl3)))
36735
36736(define-public python-stltools
36737 (package
36738 (name "python-stltools")
36739 (version "2022.01.20")
36740 (source
36741 (origin
36742 (method git-fetch)
36743 (uri (git-reference
36744 (url "https://github.com/rsmith-nl/stltools")
36745 (commit version)))
36746 (file-name (git-file-name name version))
36747 (sha256
36748 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
36749 (build-system pyproject-build-system)
36750 (arguments
36751 (list
36752 #:phases
36753 #~(modify-phases %standard-phases
36754 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
36755 (delete 'build)
36756 (replace 'install
36757 (lambda* (#:key inputs outputs #:allow-other-keys)
36758 (let ((moddir (string-append (site-packages inputs outputs)
36759 "/stltools"))
36760 (bindir (string-append #$output "/bin")))
36761 (copy-recursively "stltools" moddir)
36762 (mkdir-p bindir)
36763 (for-each
36764 (lambda (script)
36765 (let ((source (string-append script ".py"))
36766 (target (string-append bindir "/" script)))
36767 (copy-file source target)
36768 (chmod target #o555)))
36769 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
36770 (native-inputs
36771 (list python-pytest
36772 python-setuptools))
36773 (propagated-inputs
36774 (list python-pycairo))
36775 (home-page "https://github.com/rsmith-nl/stltools")
36776 (synopsis "Python modules and scripts for handling STL files")
36777 (description
36778 "This package consists of Python modules and scripts for manipulating
36779stereolithography (STL) files. It can convert STL files into POV-ray meshes,
36780PDF and PostScript. The Python modules allow for reading and writing STL
36781files. It supports both the text and binary forms of STL.")
36782 (license license:expat)))
36783
36784(define-public python-stone
36785 (package
36786 (name "python-stone")
36787 (version "3.3.9")
36788 (source
36789 (origin
36790 (method git-fetch)
36791 (uri (git-reference
36792 (url "https://github.com/dropbox/stone")
36793 (commit (string-append "v" version))))
36794 (file-name (git-file-name name version))
36795 (sha256
36796 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
36797 (build-system pyproject-build-system)
36798 (native-inputs
36799 (list python-pytest
36800 python-setuptools))
36801 (propagated-inputs
36802 (list python-jinja2
36803 python-packaging
36804 python-ply
36805 python-six)) ;hard requirement, still
36806 (home-page "https://github.com/dropbox/stone")
36807 (synopsis "Official Api Spec Language for Dropbox")
36808 (description
36809 "Stone is an interface description language (IDL) for APIs.")
36810 (license license:expat)))
36811
36812(define-public python-stopit
36813 (package
36814 (name "python-stopit")
36815 (version "1.1.2")
36816 (source
36817 (origin
36818 (method git-fetch)
36819 (uri (git-reference
36820 (url "https://github.com/glenfant/stopit")
36821 (commit version)))
36822 (file-name (git-file-name name version))
36823 (sha256
36824 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
36825 (build-system pyproject-build-system)
36826 (arguments
36827 (list #:test-backend #~'custom
36828 #:test-flags #~(list "tests.py")))
36829 (native-inputs (list python-setuptools))
36830 (home-page "https://pypi.python.org/pypi/stopit")
36831 (synopsis "Timeout control decorator and context managers")
36832 (description
36833 "Raise asynchronous exceptions in other threads, control the timeout of
36834blocks or callables with two context managers and two decorators.")
36835 (license license:expat)))
36836
36837(define-public python-straight-plugin
36838 (package
36839 (name "python-straight-plugin")
36840 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
36841 (revision . "0")))
36842 (version (git-version "1.4.1"
36843 (assoc-ref properties 'revision)
36844 (assoc-ref properties 'commit)))
36845 (source
36846 (origin
36847 (method git-fetch)
36848 (uri (git-reference
36849 (url "https://github.com/ironfroggy/straight.plugin")
36850 (commit (assoc-ref properties 'commit))))
36851 (file-name (git-file-name name version))
36852 (sha256
36853 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
36854 (build-system pyproject-build-system)
36855 (arguments
36856 (list
36857 #:test-backend #~'custom
36858 #:test-flags #~(list "tests.py")))
36859 (native-inputs (list python-mock python-setuptools))
36860 (home-page "https://github.com/ironfroggy/straight.plugin")
36861 (synopsis "Simple namespaced plugin facility")
36862 (description
36863 "Straight Plugin provides a type of plugin you can create from almost any
36864existing Python modules, and an easy way for outside developers to add
36865functionality and customization to your projects with their own plugins.")
36866 (license license:expat)))
36867
36868(define-public python-streamtracer
36869 (package
36870 (name "python-streamtracer")
36871 (version "2.4.0")
36872 (source
36873 (origin
36874 (method url-fetch)
36875 (uri (pypi-uri "streamtracer" version))
36876 (sha256
36877 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
36878 (build-system cargo-build-system)
36879 (arguments
36880 (list
36881 #:imported-modules `(,@%cargo-build-system-modules
36882 ,@%pyproject-build-system-modules)
36883 #:modules '((guix build cargo-build-system)
36884 ((guix build pyproject-build-system) #:prefix py:)
36885 (guix build utils))
36886 #:phases
36887 (with-extensions (list (pyproject-guile-json))
36888 #~(modify-phases %standard-phases
36889 (add-after 'build 'build-python-module
36890 (assoc-ref py:%standard-phases 'build))
36891 (add-after 'build-python-module 'install-python-module
36892 (assoc-ref py:%standard-phases 'install))
36893 (add-after 'install-python-module 'add-install-to-pythonpath
36894 (assoc-ref py:%standard-phases 'add-install-to-pythonpath))
36895 (add-after 'check 'check-python-module
36896 (lambda* (#:key tests? #:allow-other-keys)
36897 (when tests?
36898 (with-directory-excursion #$output
36899 (invoke "pytest" "-vv")))))))
36900 #:install-source? #false))
36901 (native-inputs
36902 (list maturin
36903 python-pytest
36904 python-pytest-doctestplus
36905 python-wrapper))
36906 (propagated-inputs
36907 (list python-numpy
36908 python-packaging))
36909 (inputs (cargo-inputs 'python-streamtracer))
36910 (home-page "https://github.com/sunpy/streamtracer")
36911 (synopsis "Rapid streamline tracing in Python")
36912 (description
36913 "streamtracer is a Python package for rapid streamline tracing on
36914regularly spaced grids. The actual streamline tracing is done at a low level
36915in Rust, with a nice Python API provided on top.")
36916 (license license:gpl3+)))
36917
36918(define-public python-strenum
36919 (package
36920 (name "python-strenum")
36921 (version "0.4.15")
36922 (source
36923 (origin
36924 (method git-fetch)
36925 (uri (git-reference
36926 (url "https://github.com/irgeek/StrEnum")
36927 (commit (string-append "v" version))))
36928 (file-name (git-file-name name version))
36929 (sha256
36930 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))))
36931 (build-system pyproject-build-system)
36932 (arguments
36933 (list
36934 #:test-flags
36935 #~(list "--ignore=doc/")
36936 #:phases
36937 #~(modify-phases %standard-phases
36938 (add-after 'unpack 'fix-version
36939 ;; Versioneer is useless when there is no git metadata.
36940 (lambda _
36941 (substitute* "setup.py"
36942 (("version=versioneer.get_version\\(),")
36943 (format #f "version=~s," #$version)))))
36944 (add-after 'unpack 'fix-pytest-config
36945 (lambda _
36946 (substitute* "pytest.ini"
36947 (("addopts =.*") "")))))))
36948 (native-inputs
36949 (list python-pytest
36950 python-setuptools))
36951 (home-page "https://github.com/irgeek/StrEnum")
36952 (synopsis "Enum that inherits from str")
36953 (description "StrEnum is a Python @code{enum.Enum} that inherits from
36954@code{str} to complement @code{enum.IntEnum} in the standard library.")
36955 (license license:expat)))
36956
36957(define-public python-structlog
36958 (package
36959 (name "python-structlog")
36960 (version "25.5.0")
36961 (source
36962 (origin
36963 (method url-fetch)
36964 (uri (pypi-uri "structlog" version))
36965 (sha256
36966 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
36967 (build-system pyproject-build-system)
36968 (native-inputs
36969 (list python-hatch-fancy-pypi-readme
36970 python-hatch-vcs
36971 python-hatchling
36972 python-pytest
36973 python-pytest-asyncio
36974 python-time-machine))
36975 (home-page "https://www.structlog.org/")
36976 (synopsis "Structured Logging for Python")
36977 (description "@code{structlog} changes logging in Python by adding structure
36978to your log entries.")
36979 (license (list license:asl2.0 license:expat))))
36980
36981(define-public python-style
36982 (package
36983 (name "python-style")
36984 (version "1.1.6")
36985 (source
36986 (origin
36987 (method url-fetch)
36988 (uri (pypi-uri "style" version))
36989 (sha256
36990 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
36991 (build-system pyproject-build-system)
36992 (arguments
36993 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
36994 (native-inputs
36995 (list python-setuptools))
36996 (home-page "https://github.com/lmittmann/style")
36997 (synopsis "Terminal string styling")
36998 (description
36999"@code{python-style} is a simple terminal string styling package. Its API is
37000a port of the chalk package for javascript.")
37001 (license license:expat)))
37002
37003(define-public python-svgelements
37004 (package
37005 (name "python-svgelements")
37006 (version "1.9.6")
37007 (source
37008 (origin
37009 (method url-fetch)
37010 (uri (pypi-uri "svgelements" version))
37011 (sha256
37012 (base32 "1xrp7yxg65dqdrmghriljf9hh2smq2zhzr2hzmqifgfd0ijas0kw"))))
37013 (build-system pyproject-build-system)
37014 (native-inputs
37015 (list python-anyio
37016 python-pytest
37017 python-numpy
37018 python-pillow
37019 python-scipy
37020 python-setuptools
37021 python-wheel))
37022 (home-page "https://github.com/meerk40t/svgelements")
37023 (synopsis "SVG parsing for elements, paths, and other SVG objects")
37024 (description
37025 "This module does high fidelity SVG parsing and geometric rendering.
37026The goal is to successfully and correctly process SVG for use with any scripts
37027that may need or want to use SVG files as geometric data.")
37028 (license license:expat)))
37029
37030(define-public python-svgutils
37031 (package
37032 (name "python-svgutils")
37033 (version "0.3.4")
37034 (source
37035 (origin
37036 (method url-fetch)
37037 (uri (pypi-uri "svgutils" version))
37038 (sha256
37039 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
37040 (build-system pyproject-build-system)
37041 (arguments
37042 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
37043 (native-inputs
37044 (list python-setuptools))
37045 (propagated-inputs
37046 (list python-lxml))
37047 (home-page "https://svgutils.readthedocs.io")
37048 (synopsis "Python SVG editor")
37049 (description "This is an utility package that helps with editing and
37050concatenating SVG files. It is especially directed at scientists preparing
37051final figures for submission to journals. So far it supports arbitrary
37052placement and scaling of SVG figures and adding markers, such as labels.")
37053 (license license:expat)))
37054
37055(define-public python-swagger-spec-validator
37056 (package
37057 (name "python-swagger-spec-validator")
37058 (version "3.0.4")
37059 (source
37060 (origin
37061 (method git-fetch)
37062 (uri (git-reference
37063 (url "https://github.com/Yelp/swagger_spec_validator")
37064 (commit (string-append "v" version))))
37065 (file-name (git-file-name name version))
37066 (sha256
37067 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
37068 (build-system pyproject-build-system)
37069 (native-inputs
37070 (list python-pytest
37071 python-setuptools))
37072 (propagated-inputs
37073 (list python-importlib-resources
37074 python-jsonschema
37075 python-pyyaml
37076 python-typing-extensions))
37077 (home-page "https://github.com/Yelp/swagger_spec_validator")
37078 (synopsis "Validation of Swagger specifications")
37079 (description
37080 "@code{swagger_spec_validator} provides a library for validating Swagger
37081API specifications.")
37082 (license license:asl2.0)))
37083
37084(define-public python-syllables
37085 (package
37086 (name "python-syllables")
37087 (version "1.0.3")
37088 (source
37089 (origin
37090 (method git-fetch)
37091 (uri (git-reference
37092 (url "https://github.com/prosegrinder/python-syllables")
37093 (commit (string-append "v" version))))
37094 (file-name (git-file-name name version))
37095 (sha256
37096 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
37097 (build-system pyproject-build-system)
37098 (native-inputs
37099 (list python-cmudict
37100 python-pytest
37101 python-setuptools))
37102 (home-page "https://github.com/prosegrinder/python-syllables")
37103 (synopsis "Package for estimating the number of syllables in a word")
37104 (description
37105 "This package provides a Python package for estimating the number of
37106syllables in a word.")
37107 (license license:gpl3)))
37108
37109(define-public python-sympy
37110 (package
37111 (name "python-sympy")
37112 (version "1.13.3")
37113 (source
37114 (origin
37115 (method url-fetch)
37116 (uri (pypi-uri "sympy" version))
37117 (sha256
37118 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
37119 (build-system pyproject-build-system)
37120 (arguments
37121 '(#:phases
37122 (modify-phases %standard-phases
37123 (replace 'check
37124 (lambda* (#:key tests? #:allow-other-keys)
37125 (if tests?
37126 (invoke "python3" "-c"
37127 "import sympy; sympy.test(\"/core\")")))))))
37128 (propagated-inputs (list python-mpmath))
37129 (native-inputs
37130 (list python-hypothesis
37131 python-pytest
37132 python-setuptools
37133 python-wheel))
37134 (home-page "https://www.sympy.org/")
37135 (synopsis "Python library for symbolic mathematics")
37136 (description
37137 "SymPy is a Python library for symbolic mathematics. It aims to become a
37138full-featured computer algebra system (CAS) while keeping the code as simple
37139as possible in order to be comprehensible and easily extensible.")
37140 (license license:bsd-3)))
37141
37142(define-public python-tables
37143 (package
37144 (name "python-tables")
37145 ;; XXX: Compatability fix for numexpr 2.13.0, see:
37146 ;; <https://github.com/PyTables/PyTables/pull/1256>.
37147 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
37148 (revision . "0")))
37149 (version (git-version "3.10.2"
37150 (assoc-ref properties 'revision)
37151 (assoc-ref properties 'commit)))
37152 (source
37153 (origin
37154 (method git-fetch)
37155 (uri (git-reference
37156 (url "https://github.com/PyTables/PyTables")
37157 (commit (assoc-ref properties 'commit))))
37158 (file-name (git-file-name name version))
37159 (sha256
37160 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
37161 (snippet '(begin
37162 (use-modules (guix build utils))
37163 (delete-file-recursively "hdf5-blosc")
37164 (delete-file-recursively "c-blosc")))))
37165 (build-system pyproject-build-system)
37166 (arguments
37167 (list
37168 #:phases
37169 #~(modify-phases %standard-phases
37170 (add-after 'unpack 'disable-tuning
37171 (lambda _
37172 (substitute* "setup.py"
37173 (("cpu_flags = .*")
37174 "cpu_flags = ['sse2']\n"))))
37175 (add-after 'unpack 'fix-reference-to-blosc2
37176 (lambda* (#:key inputs #:allow-other-keys)
37177 (substitute* "tables/__init__.py"
37178 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
37179 m indent)
37180 (string-append indent
37181 "\""
37182 (search-input-file inputs "/lib/libblosc2.so")
37183 "\",\n" m)))))
37184 (add-before 'build 'pre-build
37185 (lambda _
37186 (substitute* "setup.py"
37187 (("hdf5-blosc/src")
37188 (format #f "~a/src"
37189 #$(package-source (this-package-input "hdf5-blosc")))))
37190 (invoke "make" "distclean") ;Regenerate C code with Cython
37191 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
37192 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
37193 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
37194 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
37195 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
37196 (add-before 'check 'pre-check
37197 (lambda _
37198 (setenv "HOME" "/tmp")))
37199 (replace 'check
37200 (lambda* (#:key tests? #:allow-other-keys)
37201 (when tests?
37202 (with-directory-excursion "/tmp"
37203 ;; Performing only a light (yet comprehensive) subset of the
37204 ;; test suite. If you want a more complete test, try
37205 ;; passing the --heavy flag to this script (or set the
37206 ;; 'heavy' parameter in case you are using tables.test()
37207 ;; call). The whole suite will take more than 4 hours to
37208 ;; complete on a relatively modern CPU and around 512 MB of
37209 ;; main memory.
37210 (invoke "python" "-m" "tables.tests.test_all"))))))))
37211 (native-inputs
37212 (list pkg-config
37213 python-cython
37214 python-pytest
37215 python-setuptools
37216 python-sphinx))
37217 (inputs
37218 (list bzip2
37219 c-blosc
37220 c-blosc2
37221 hdf5
37222 hdf5-blosc
37223 lzo))
37224 (propagated-inputs
37225 (list python-blosc2
37226 python-numexpr
37227 python-numpy
37228 python-packaging
37229 python-py-cpuinfo
37230 python-typing-extensions))
37231 (home-page "https://www.pytables.org/")
37232 (synopsis "Hierarchical datasets for Python")
37233 (description "PyTables is a package for managing hierarchical datasets and
37234designed to efficiently cope with extremely large amounts of data.")
37235 (license license:bsd-3)))
37236
37237(define-public python-tablib
37238 (package
37239 (name "python-tablib")
37240 (version "3.9.0")
37241 (source
37242 (origin
37243 (method url-fetch)
37244 (uri (pypi-uri "tablib" version))
37245 (sha256
37246 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
37247 (build-system pyproject-build-system)
37248 (native-inputs
37249 (list python-pytest
37250 python-pytest-cov
37251 python-setuptools
37252 python-setuptools-scm))
37253 (inputs ;; [cli]
37254 (list python-tabulate))
37255 (propagated-inputs
37256 (list python-markuppy
37257 python-odfpy
37258 python-openpyxl
37259 python-pyyaml
37260 python-xlrd
37261 python-xlwt))
37262 (home-page "https://tablib.readthedocs.io")
37263 (synopsis "Format agnostic tabular data library")
37264 (description
37265 "@code{tablib} is a format-agnostic tabular dataset library,
37266written in Python. Supported output formats are Excel (Sets + Books),
37267JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
37268TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
37269
37270@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
37271quite huge, this Guix package doesn't depend on pandas. In case, just also
37272install @code{python-pandas}.")
37273 (license license:expat)))
37274
37275(define-public python-tabulate
37276 (package
37277 (name "python-tabulate")
37278 (version "0.9.0")
37279 (source
37280 (origin
37281 (method url-fetch)
37282 (uri (pypi-uri "tabulate" version))
37283 (sha256
37284 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
37285 (build-system pyproject-build-system)
37286 (native-inputs
37287 (list python-pytest
37288 python-setuptools-scm
37289 python-setuptools))
37290 (propagated-inputs
37291 (list python-wcwidth))
37292 (home-page "https://github.com/astanin/python-tabulate")
37293 (synopsis "Pretty-print tabular data")
37294 (description
37295 "Tabulate is a library and command-line utility to pretty-print tabular
37296data in Python.")
37297 (license license:expat)))
37298
37299(define-public python-takethetime
37300 (package
37301 (name "python-takethetime")
37302 (version "0.3.1")
37303 (source
37304 (origin
37305 (method url-fetch)
37306 (uri (pypi-uri "TakeTheTime" version))
37307 (sha256
37308 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
37309 (build-system pyproject-build-system)
37310 (arguments
37311 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
37312 (native-inputs
37313 (list python-setuptools
37314 python-wheel))
37315 (home-page "https://github.com/ErikBjare/TakeTheTime")
37316 (synopsis "Timing chunks of code")
37317 (description
37318 "This package implements a functionality for time taking using context
37319managers.")
37320 (license license:expat)))
37321
37322(define-public python-taskgroup
37323 (package
37324 (name "python-taskgroup")
37325 (version "0.0.0a4")
37326 (source
37327 (origin
37328 (method url-fetch)
37329 (uri (pypi-uri "taskgroup" version))
37330 (sha256
37331 (base32 "170m7b59nxrhzs0nz6brj9brz4rzvw6k587ja0cnc9qy48nr027b"))))
37332 (build-system pyproject-build-system)
37333 (arguments
37334 (list #:tests? #f)) ; no tests in PyPI and Git checkout
37335 (native-inputs
37336 (list python-flit-core))
37337 (home-page "https://github.com/graingert/taskgroup")
37338 (synopsis "Backport of asyncio.TaskGroup, asyncio.Runner and asyncio.timeout")
37339 (description
37340 "This package provides a backport of @code{asyncio.TaskGroup},
37341@code{asyncio.Runner} and @code{asyncio.timeout}.")
37342 (license license:expat)))
37343
37344(define-public python-tasklogger
37345 (package
37346 (name "python-tasklogger")
37347 (version "1.2.0")
37348 (source
37349 (origin
37350 (method url-fetch)
37351 (uri (pypi-uri "tasklogger" version))
37352 (sha256
37353 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
37354 (build-system pyproject-build-system)
37355 (native-inputs
37356 (list python-pytest
37357 python-numpy
37358 python-setuptools))
37359 (propagated-inputs
37360 (list python-deprecated))
37361 (home-page "https://github.com/scottgigante/tasklogger")
37362 (synopsis "Extension to the core Python logging library")
37363 (description "This package provides an extension to the core Python
37364logging library for logging the beginning and completion of tasks and
37365subtasks.")
37366 (license license:gpl2)))
37367
37368(define-public python-tatsu
37369 (package
37370 (name "python-tatsu")
37371 (version "5.13.2")
37372 (source
37373 (origin
37374 (method git-fetch)
37375 (uri (git-reference
37376 (url "https://github.com/neogeny/TatSu")
37377 (commit (string-append "v" version))))
37378 (file-name (git-file-name name version))
37379 (sha256
37380 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
37381 (build-system pyproject-build-system)
37382 (native-inputs
37383 (list python-pytest
37384 python-setuptools))
37385 (home-page "https://tatsu.readthedocs.io/en/stable/")
37386 (synopsis "PEG/Packrat Parser generator for Python")
37387 (description
37388 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
37389Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
37390or Packrat parser in Python.")
37391 (license license:bsd-2)))
37392
37393(define-public python-tblib
37394 (package
37395 (name "python-tblib")
37396 (version "3.1.0")
37397 (source
37398 (origin
37399 (method url-fetch)
37400 (uri (pypi-uri "tblib" version))
37401 (sha256
37402 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
37403 (build-system pyproject-build-system)
37404 (arguments
37405 (list
37406 ;; Don't run benchmark tests.
37407 #:test-flags #~(list "--ignore=tests/test_perf.py")
37408 #:phases
37409 #~(modify-phases %standard-phases
37410 (add-after 'unpack 'fix-pytest-config
37411 (lambda _
37412 (substitute* "pytest.ini"
37413 (("--benchmark-disable") "")))))))
37414 (native-inputs
37415 (list python-pytest
37416 python-setuptools))
37417 (home-page "https://github.com/ionelmc/python-tblib")
37418 (synopsis "Traceback serialization library")
37419 (description
37420 "Traceback serialization allows you to:
37421
37422@enumerate
37423@item Pickle tracebacks and raise exceptions with pickled tracebacks in
37424different processes. This allows better error handling when running code over
37425multiple processes (imagine multiprocessing, billiard, futures, celery etc).
37426
37427@item Parse traceback strings and raise with the parsed tracebacks.
37428@end enumerate\n")
37429 (license license:bsd-3)))
37430
37431(define-public python-telethon
37432 (package
37433 (name "python-telethon")
37434 (version "1.41.1")
37435 (source
37436 (origin
37437 (method git-fetch)
37438 (uri (git-reference
37439 (url "https://github.com/LonamiWebs/Telethon")
37440 (commit (string-append "v" version))))
37441 (file-name (git-file-name name version))
37442 (sha256
37443 (base32 "0rbzqbxsihqm2w1zrvaaafvzwyqqyjx49wfffxrnsr9m32giwzsp"))))
37444 (build-system pyproject-build-system)
37445 (native-inputs
37446 (list python-pytest
37447 python-pytest-asyncio-0.26
37448 python-pytest-trio
37449 python-setuptools))
37450 (propagated-inputs
37451 (list python-rsa python-pyaes))
37452 (home-page "https://docs.telethon.dev")
37453 (synopsis "Full-featured Telegram client library for Python 3")
37454 (description "This library is designed to make it easy to write Python
37455programs that can interact with Telegram.")
37456 (license license:expat)))
37457
37458(define-public python-tempdir
37459 (package
37460 (name "python-tempdir")
37461 (version "0.7.1")
37462 (source
37463 (origin
37464 (method url-fetch)
37465 (uri (pypi-uri "tempdir" version))
37466 (sha256
37467 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
37468 (build-system pyproject-build-system)
37469 (arguments (list #:tests? #f)) ; No tests.
37470 (native-inputs (list python-setuptools))
37471 (home-page "https://pypi.org/project/tempdir/")
37472 (synopsis "Python library for managing temporary directories")
37473 (description
37474 "This library manages temporary directories that are automatically
37475deleted with all their contents when they are no longer needed. It is
37476particularly convenient for use in tests.")
37477 (license license:expat)))
37478
37479(define-public python-tempora
37480 (package
37481 (name "python-tempora")
37482 (version "5.8.1")
37483 (source
37484 (origin
37485 (method url-fetch)
37486 (uri (pypi-uri "tempora" version))
37487 (sha256
37488 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
37489 (build-system pyproject-build-system)
37490 (arguments
37491 (list
37492 ;; Do not test the myproject.toml build as it tries to pull dependencies
37493 ;; from the Internet.
37494 #:test-flags #~(list "-k" "not project"
37495 "tests")))
37496 (native-inputs
37497 (list python-freezegun
37498 python-pytest
37499 python-setuptools
37500 python-setuptools-scm
37501 python-tzdata))
37502 (propagated-inputs (list python-dateutil python-jaraco-functools))
37503 (home-page "https://github.com/jaraco/tempora")
37504 (synopsis "Python date and time objects and routines")
37505 (description
37506 "The @code{tempora} Python library contains miscellaneous date and time
37507related utilities and constants, routines for measuring, profiling, and
37508getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
37509well as an event scheduler.")
37510 (license license:expat)))
37511
37512(define-public python-tenacity
37513 (package
37514 (name "python-tenacity")
37515 (version "9.0.0")
37516 (source
37517 (origin
37518 (method url-fetch)
37519 (uri (pypi-uri "tenacity" version))
37520 (sha256
37521 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
37522 (build-system pyproject-build-system)
37523 (native-inputs
37524 (list python-pytest
37525 python-setuptools
37526 python-setuptools-scm
37527 python-tornado-6
37528 python-typeguard
37529 python-wheel))
37530 (home-page "https://github.com/jd/tenacity")
37531 (synopsis "Retrying library for python")
37532 (description
37533 "Tenacity is a general-purpose python library to simplify the task of
37534adding retry behavior to just about anything.")
37535 (license license:asl2.0)))
37536
37537(define-public python-term-background
37538 (package
37539 (name "python-term-background")
37540 (version "1.0.2")
37541 (source
37542 (origin
37543 (method url-fetch)
37544 (uri (pypi-uri "term_background" version))
37545 (sha256
37546 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
37547 (arguments
37548 (list
37549 #:phases
37550 '(modify-phases %standard-phases
37551 (add-after 'unpack 'fix-build
37552 (lambda _ (delete-file "setup.py"))))))
37553 (build-system pyproject-build-system)
37554 (native-inputs
37555 (list python-pytest
37556 python-setuptools
37557 python-setuptools-scm
37558 python-wrapper
37559 python-wheel))
37560 (home-page "http://github.com/rocky/shell-term-background")
37561 (synopsis "Determine if shell has a light or dark background")
37562 (description "This package determines if shell has a light or dark
37563background.")
37564 (license license:gpl2+)))
37565
37566(define-public python-term-image
37567 (package
37568 (name "python-term-image")
37569 (version "0.7.2")
37570 (source
37571 (origin
37572 ;; We need the full repo to run the tests.
37573 (method git-fetch)
37574 (uri (git-reference
37575 (url "https://github.com/AnonymouX47/term-image")
37576 (commit (string-append "v" version))))
37577 (file-name (git-file-name name version))
37578 (sha256
37579 (base32 "1lsd5m0k5m99arkca2rzrrlln10c8ax6xfawqwjnspcbf8l3h3dq"))))
37580 (build-system pyproject-build-system)
37581 (arguments
37582 (list #:test-flags
37583 #~(list "tests"
37584 ;; These tests require network access.
37585 "-k" (string-append "not test_from_url"
37586 " and not test_source"
37587 " and not test_close"))
37588 #:phases
37589 #~(modify-phases %standard-phases
37590 (add-after 'unpack 'adjust-dependencies
37591 (lambda _
37592 (substitute* "setup.py"
37593 (("pillow>=9.1,<11") "pillow>=9.1,<12")))))))
37594 (propagated-inputs (list python-pillow python-requests))
37595 (native-inputs
37596 (list python-pytest
37597 python-setuptools
37598 python-urwid))
37599 (home-page "https://github.com/AnonymouX47/term-image")
37600 (synopsis "Display images in the terminal")
37601 (description "term-image is a library and program to display images on
37602compatible terminals.
37603
37604Features:
37605@enumerate
37606@item Multiple image formats (basically all formats supported by
37607@code{PIL.Image.open()})
37608@item Multiple image source types: PIL image instance, local file, URL
37609@item Multiple image render styles (with automatic support detection)
37610@item Support for multiple terminal graphics protocols, including Kitty
37611@item Transparency support (with multiple options)
37612@item Animated image support (including transparent ones)
37613@item Integration into various TUI / terminal-based output libraries
37614@item Terminal size awareness
37615@item Automatic and manual image sizing
37616@item Horizontal and vertical alignment
37617@item Automatic and manual font ratio adjustment (to preserve image aspect
37618ratio)
37619@end enumerate")
37620 (license license:expat)))
37621
37622(define-public python-termcolor
37623 (package
37624 (name "python-termcolor")
37625 (version "2.5.0")
37626 (source
37627 (origin
37628 (method url-fetch)
37629 (uri (pypi-uri "termcolor" version))
37630 (sha256
37631 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
37632 (build-system pyproject-build-system)
37633 (native-inputs
37634 (list python-hatch-vcs
37635 python-hatchling
37636 python-pytest
37637 python-pytest-cov))
37638 (home-page "https://pypi.org/project/termcolor/")
37639 (synopsis "ANSII Color formatting for terminal output")
37640 (description
37641 "This package provides ANSII Color formatting for output in terminals.")
37642 (license license:expat)))
37643
37644(define-public python-termcolor-1
37645 (package
37646 (inherit python-termcolor)
37647 (version "1.1.0")
37648 (source
37649 (origin
37650 (method url-fetch)
37651 (uri (pypi-uri "termcolor" version))
37652 (sha256
37653 (base32
37654 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
37655 ;; There are no tests
37656 (arguments (list #:tests? #false))
37657 (native-inputs
37658 (list python-setuptools
37659 python-wheel))))
37660
37661(define-public python-termcolor-next
37662 (package
37663 (inherit python-termcolor)
37664 (version "3.1.0")
37665 (source
37666 (origin
37667 (method url-fetch)
37668 (uri (pypi-uri "termcolor" version))
37669 (sha256
37670 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))))
37671
37672(define-public python-terminaltables
37673 (package
37674 (name "python-terminaltables")
37675 (version "3.1.0")
37676 (source
37677 (origin
37678 (method git-fetch)
37679 (uri (git-reference
37680 (url "https://github.com/Robpol86/terminaltables")
37681 (commit (string-append "v" version))))
37682 (file-name (git-file-name name version))
37683 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
37684 (build-system pyproject-build-system)
37685 ;; XXX: A lot of test fail with flaky behavior.
37686 (arguments (list #:tests? #f))
37687 (native-inputs
37688 (list python-colorclass
37689 python-colorama
37690 python-pytest
37691 python-setuptools
37692 python-termcolor))
37693 (home-page "https://github.com/Robpol86/terminaltables")
37694 (synopsis
37695 "Generate simple tables in terminals from a nested list of strings")
37696 (description
37697 "This package makes it easy to draw tables in terminal/console
37698applications from a list of lists of strings. It supports multi-line rows.")
37699 (license license:expat)))
37700
37701(define-public python-termstyle
37702 (package
37703 (name "python-termstyle")
37704 (version "0.1.11")
37705 (source
37706 (origin
37707 (method url-fetch)
37708 (uri (pypi-uri "termstyle" version))
37709 (sha256
37710 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
37711 (build-system pyproject-build-system)
37712 (arguments
37713 (list #:test-backend #~'custom
37714 #:test-flags #~(list "test3.py")))
37715 (native-inputs
37716 (list python-setuptools))
37717 (home-page "https://github.com/gfxmonk/termstyle")
37718 (synopsis "Console text coloring for Python")
37719 (description "This package provides console text coloring for Python.")
37720 (license license:bsd-3)))
37721
37722(define-public python-text-unidecode
37723 (package
37724 (name "python-text-unidecode")
37725 (version "1.3")
37726 (source
37727 (origin
37728 (method url-fetch)
37729 (uri (pypi-uri "text-unidecode" version))
37730 (sha256
37731 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
37732 (build-system pyproject-build-system)
37733 (native-inputs
37734 (list python-pytest
37735 python-setuptools))
37736 (home-page "https://github.com/kmike/text-unidecode/")
37737 (synopsis "Decode Unicode data")
37738 (description
37739 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
37740Perl library. It can create ASCII representations of Unicode data. In general
37741users should prefer the @code{python-unidecode} package which offers better
37742memory usage and transliteration quality.")
37743 ;; The user can choose either license.
37744 (license (list license:clarified-artistic license:gpl2+))))
37745
37746(define-public python-textdistance
37747 (package
37748 (name "python-textdistance")
37749 (version "4.6.3")
37750 (source
37751 (origin
37752 (method git-fetch)
37753 (uri (git-reference
37754 (url "https://github.com/life4/textdistance")
37755 (commit version)))
37756 (file-name (git-file-name name version))
37757 (sha256
37758 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
37759 (build-system pyproject-build-system)
37760 ;; tests: 430 passed, 1446 warnings
37761 (native-inputs
37762 (list python-numpy
37763 python-pytest
37764 python-setuptools))
37765 (propagated-inputs
37766 (list python-jellyfish
37767 python-distance
37768 python-levenshtein
37769 python-pylev
37770 python-pyxdameraulevenshtein
37771 python-rapidfuzz))
37772 (home-page "https://github.com/life4/textdistance")
37773 (synopsis "Compute distance between the two texts")
37774 (description "@code{textdistance} is a pure Python library for comparing
37775distance between two or more sequences by many algorithms.")
37776 (license license:expat)))
37777
37778(define-public python-textparser
37779 (package
37780 (name "python-textparser")
37781 (version "0.24.0")
37782 (source
37783 (origin
37784 (method url-fetch)
37785 (uri (pypi-uri "textparser" version))
37786 (sha256
37787 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
37788 (build-system pyproject-build-system)
37789 (arguments
37790 (list #:test-backend #~'unittest))
37791 (native-inputs (list python-setuptools))
37792 (home-page "https://github.com/eerimoq/textparser")
37793 (synopsis "Fast text parser for Python")
37794 (description "This library provides a text parser written in the Python
37795language. It aims to be fast.")
37796 (license license:expat)))
37797
37798(define-public python-texttable
37799 (package
37800 (name "python-texttable")
37801 (version "1.6.4")
37802 (source
37803 (origin
37804 (method git-fetch)
37805 (uri (git-reference
37806 (url "https://github.com/foutaise/texttable/")
37807 (commit (string-append "v" version))))
37808 (file-name (git-file-name name version))
37809 (sha256
37810 (base32 "1lcn76wx6fsj8d79gs985irkqz5qbwq1v9ji9jxsra6dbb643v5j"))))
37811 (build-system pyproject-build-system)
37812 (arguments (list #:test-flags #~(list "tests.py")))
37813 (native-inputs (list python-pytest python-setuptools))
37814 (home-page "https://github.com/foutaise/texttable/")
37815 (synopsis "Create simple ASCII tables in Python")
37816 (description
37817 "This package provides a Python module for creating simple ASCII
37818tables.")
37819 (license license:expat)))
37820
37821(define-public python-textual
37822 (package
37823 (name "python-textual")
37824 (version "3.5.0")
37825 (source
37826 (origin
37827 (method git-fetch)
37828 (uri (git-reference
37829 (url "https://github.com/Textualize/textual")
37830 (commit (string-append "v" version))))
37831 (file-name (git-file-name name version))
37832 (sha256
37833 (base32 "1sldkhy8phk9c7pln70dyb6aya7qpxb5niym9s91z144dv6ykgws"))))
37834 (build-system pyproject-build-system)
37835 (arguments
37836 (list #:test-flags
37837 ;; Snapshot tests require python-pytest-textual-snapshot which
37838 ;; in turn depends on python-textual.
37839 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
37840 "-k" (string-append
37841 ;; Broken for unknown reason.
37842 "not test_textual_env_var"
37843 ;; Tests that require python-treesitter-languages.
37844 " and not test_widget_construct"
37845 " and not test_setting_builtin_language_via_constructor"
37846 " and not test_setting_builtin_language_via_attribute"
37847 " and not test_setting_language_to_none"
37848 " and not test_setting_unknown_language"
37849 " and not test_register_language"
37850 " and not test_update_highlight_query"
37851 " and not test_default_theme"
37852 " and not test_setting_builtin_themes"
37853 " and not test_setting_unknown_theme_raises_exception"
37854 " and not test_registering_and_setting_theme"))))
37855 (propagated-inputs
37856 (list python-markdown-it-py
37857 python-platformdirs
37858 python-rich
37859 python-tree-sitter
37860 ;; python-tree-sitter-languages ; optional, not packed yet
37861 python-typing-extensions))
37862 (native-inputs
37863 (list python-poetry-core
37864 python-pytest
37865 python-pytest-asyncio
37866 python-pytest-xdist))
37867 (home-page "https://github.com/Textualize/textual")
37868 (synopsis "Build text user interfaces in Python")
37869 (description "Textual is a @acronym{TUI, Text User Interface} framework
37870for Python inspired by modern web development.")
37871 (license license:expat)))
37872
37873(define-public python-tftpy
37874 (package
37875 (name "python-tftpy")
37876 (version "0.8.6")
37877 (source
37878 (origin
37879 (method git-fetch)
37880 (uri (git-reference
37881 (url "https://github.com/msoulier/tftpy")
37882 (commit version)))
37883 (file-name (git-file-name name version))
37884 (sha256
37885 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
37886 (build-system pyproject-build-system)
37887 (arguments
37888 (list
37889 #:test-backend #~'unittest
37890 #:test-flags #~(list "tests/test.py")
37891 #:phases
37892 #~(modify-phases %standard-phases
37893 (add-before 'check 'configure-tests
37894 (lambda* (#:key tests? #:allow-other-keys)
37895 (when tests?
37896 ;; The default DEBUG logging level is way too verbose.
37897 (substitute* "tests/test.py"
37898 (("logging\\.DEBUG")
37899 "logging.INFO"))))))))
37900 (native-inputs (list python-setuptools))
37901 (home-page "https://tftpy.sourceforge.net/")
37902 (synopsis "Python trivial file transfer protocol (TFTP) library")
37903 (description
37904 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
37905be used to act both as a TFTP client or TFTP server.")
37906 (license license:expat)))
37907
37908(define-public python-three-merge
37909 (package
37910 (name "python-three-merge")
37911 (version "0.1.1")
37912 (source
37913 (origin
37914 ;; There are no tests in the PyPI tarball.
37915 (method git-fetch)
37916 (uri (git-reference
37917 (url "https://github.com/spyder-ide/three-merge")
37918 (commit (string-append "v" version))))
37919 (file-name (git-file-name name version))
37920 (sha256
37921 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
37922 (build-system pyproject-build-system)
37923 (propagated-inputs
37924 (list python-diff-match-patch))
37925 (native-inputs
37926 (list python-pytest python-setuptools python-wheel))
37927 (home-page "https://github.com/spyder-ide/three-merge")
37928 (synopsis "Library for merging two strings with respect to a base one")
37929 (description
37930 "This package provides a Python library to perform a 3-way merge between
37931strings, based on @code{diff-match-patch}. This library performs merges at a
37932character level, as opposed to most VCS systems, which opt for a line-based
37933approach.")
37934 (license license:expat)))
37935
37936(define-public python-throttler
37937 (package
37938 (name "python-throttler")
37939 (version "1.2.2")
37940 (source
37941 (origin
37942 (method git-fetch)
37943 (uri (git-reference
37944 (url "https://github.com/uburuntu/throttler")
37945 (commit (string-append "v" version))))
37946 (sha256
37947 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
37948 (build-system pyproject-build-system)
37949 (native-inputs
37950 (list python-aiohttp
37951 python-codecov
37952 python-flake8
37953 python-pytest
37954 python-pytest-asyncio
37955 python-pytest-cov
37956 python-setuptools
37957 python-wheel))
37958 (home-page "https://github.com/uburuntu/throttler")
37959 (synopsis "Throttling with asyncio support")
37960 (description
37961 "This is a Python package for easy throttling with asyncio support.")
37962 (license license:expat)))
37963
37964(define-public python-tifffile
37965 (package
37966 (name "python-tifffile")
37967 (version "2025.10.4")
37968 (source
37969 (origin
37970 (method url-fetch)
37971 (uri (pypi-uri "tifffile" version))
37972 (sha256
37973 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
37974 (build-system pyproject-build-system)
37975 ;; Tests require lfdfiles, which depends on tifffile
37976 (arguments (list #:tests? #f))
37977 (propagated-inputs
37978 (list python-numpy))
37979 (native-inputs
37980 (list python-setuptools))
37981 (home-page "https://www.lfd.uci.edu/~gohlke/")
37982 (synopsis "Read and write TIFF(r) files")
37983 (description
37984 "This package lets you read image and metadata from many bio-scientific
37985formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
37986MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
37987to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
37988 (license license:bsd-3)))
37989
37990(define-public python-tiktoken
37991 (package
37992 (name "python-tiktoken")
37993 (version "0.9.0")
37994 (source
37995 (origin
37996 (method url-fetch)
37997 (uri (pypi-uri "tiktoken" version))
37998 (sha256
37999 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
38000 (build-system cargo-build-system)
38001 (arguments
38002 (list
38003 #:install-source? #false
38004 #:imported-modules
38005 (append %pyproject-build-system-modules
38006 %cargo-build-system-modules)
38007 #:modules
38008 '((guix build cargo-build-system)
38009 ((guix build pyproject-build-system) #:prefix py:)
38010 (guix build utils))
38011 #:phases
38012 (with-extensions (list (pyproject-guile-json))
38013 #~(modify-phases %standard-phases
38014 (replace 'build
38015 (assoc-ref py:%standard-phases 'build))
38016 (add-after 'install 'wrap
38017 (lambda _
38018 ;; Collection of python- and pyproject-build-system phases
38019 ;; between 'install and 'check.
38020 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
38021 (assoc-ref py:%standard-phases 'add-install-to-path)
38022 (assoc-ref py:%standard-phases 'wrap)
38023 (assoc-ref py:%standard-phases 'create-entrypoints)
38024 (assoc-ref py:%standard-phases 'compile-bytecode)))
38025 (replace 'install
38026 (assoc-ref py:%standard-phases 'install))))))
38027 (propagated-inputs (list python-regex python-requests))
38028 (inputs (cargo-inputs 'python-tiktoken))
38029 (native-inputs
38030 (list python-setuptools
38031 python-setuptools-rust
38032 python-wheel
38033 python-wrapper))
38034 (home-page "https://github.com/openai/tiktoken/")
38035 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
38036 (description
38037 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
38038@code{OpenAI's} models.")
38039 (license license:expat)))
38040
38041(define-public python-timeout-decorator
38042 ;; TODO: Remove when python-requests-caches releses a fresh version dropping
38043 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
38044 (package
38045 (name "python-timeout-decorator")
38046 (version "0.5.0")
38047 (source
38048 (origin
38049 (method url-fetch)
38050 (uri (pypi-uri "timeout-decorator" version))
38051 (sha256
38052 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
38053 (build-system pyproject-build-system)
38054 (arguments (list #:tests? #f))
38055 (native-inputs (list python-setuptools python-wheel))
38056 (home-page "https://github.com/pnpnpn/timeout-decorator")
38057 (synopsis "Timeout decorator")
38058 (description "This package provides a decorator that raises an error
38059when an operation takes longer than expected.")
38060 (license license:expat)))
38061
38062(define-public python-titlecase
38063 (package
38064 (name "python-titlecase")
38065 (version "2.4.1")
38066 (source
38067 (origin
38068 (method url-fetch)
38069 (uri (pypi-uri "titlecase" version))
38070 (sha256
38071 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
38072 (build-system pyproject-build-system)
38073 (arguments
38074 (list
38075 #:test-backend #~'unittest))
38076 (native-inputs
38077 (list python-setuptools))
38078 (home-page "https://github.com/ppannuto/python-titlecase")
38079 (synopsis "Capitalize strings similar to book titles")
38080 (description
38081 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
38082It capitalizes (predominantly English) strings in a way that is similar to
38083book titles, using the New York Times Manual of Style to leave certain words
38084lowercase.")
38085 (license license:expat)))
38086
38087(define-public python-tlsh
38088 (package
38089 (name "python-tlsh")
38090 (version "4.11.2")
38091 (home-page "https://github.com/trendmicro/tlsh")
38092 (source
38093 (origin
38094 (method git-fetch)
38095 (uri (git-reference (url home-page) (commit version)))
38096 (file-name (git-file-name name version))
38097 (sha256
38098 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
38099 (build-system pyproject-build-system)
38100 (arguments
38101 (list
38102 #:phases
38103 #~(modify-phases %standard-phases
38104 (add-before 'build 'configure
38105 (lambda _
38106 (invoke "cmake" "."))) ;to generate tlsh_version.h
38107 (add-after 'configure 'chdir
38108 (lambda _
38109 (chdir "py_ext")))
38110 (replace 'check
38111 (lambda* (#:key tests? #:allow-other-keys)
38112 (when tests?
38113 (with-directory-excursion "../Testing"
38114 (invoke "./python_test.sh"))))))))
38115 (native-inputs (list cmake-minimal python-setuptools))
38116 (synopsis "Fuzzy matching library for Python")
38117 (description
38118 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
38119Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
38120value which can be used for similarity comparisons. Similar objects have
38121similar hash values, which allows for the detection of similar objects by
38122comparing their hash values. The byte stream should have a sufficient amount
38123of complexity; for example, a byte stream of identical bytes will not generate
38124a hash value.")
38125 (license license:asl2.0)))
38126
38127(define-public python-tokenize-rt
38128 (package
38129 (name "python-tokenize-rt")
38130 (version "6.2.0")
38131 (source
38132 (origin
38133 (method git-fetch)
38134 (uri (git-reference
38135 (url "https://github.com/asottile/tokenize-rt")
38136 (commit (string-append "v" version))))
38137 (file-name (git-file-name name version))
38138 (sha256
38139 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
38140 (build-system pyproject-build-system)
38141 (native-inputs (list python-pytest python-setuptools))
38142 (home-page "https://github.com/asottile/tokenize-rt")
38143 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
38144 (description
38145 "This Python library is a wrapper around @code{tokenize} from the Python
38146standard library. It provides two additional tokens @code{ESCAPED_NL} and
38147@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
38148and @code{tokens_to_src} to roundtrip.")
38149 (license license:expat)))
38150
38151(define-public python-tomlkit
38152 (package
38153 (name "python-tomlkit")
38154 (version "0.13.3")
38155 (source
38156 (origin
38157 (method url-fetch)
38158 (uri (pypi-uri "tomlkit" version))
38159 (sha256
38160 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
38161 (build-system pyproject-build-system)
38162 (native-inputs
38163 (list python-poetry-core
38164 python-pytest
38165 python-pyyaml))
38166 (home-page "https://github.com/sdispater/tomlkit")
38167 (synopsis "Style-preserving TOML library")
38168 (description
38169 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
38170preserves all comments, indentations, whitespace and internal element ordering,
38171and makes them accessible and editable via an intuitive API. It can also
38172create new TOML documents from scratch using the provided helpers. Part of the
38173implementation has been adapted, improved, and fixed from Molten.")
38174 (license license:expat)))
38175
38176(define-public python-toolrack
38177 (package
38178 (name "python-toolrack")
38179 (version "4.0.3")
38180 (source
38181 (origin
38182 (method git-fetch)
38183 (uri (git-reference
38184 (url "https://github.com/albertodonato/toolrack")
38185 (commit (string-append "v" version))))
38186 (file-name (git-file-name name version))
38187 (sha256
38188 (base32
38189 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
38190 (build-system pyproject-build-system)
38191 (arguments
38192 (list
38193 #:phases
38194 #~(modify-phases %standard-phases
38195 (add-after 'unpack 'patch-/bin/sh
38196 (lambda _
38197 (substitute* "tests/aio/process_test.py"
38198 (("/bin/sh")
38199 (which "sh"))))))))
38200 (native-inputs
38201 (list python-pytest
38202 python-pytest-asyncio
38203 python-pytest-mock
38204 python-setuptools))
38205 (home-page "https://github.com/albertodonato/toolrack")
38206 (synopsis "Collection of Python utility functions and classes")
38207 (description "This package provides a collection of miscellaneous utility
38208functions and classes.")
38209 (license license:lgpl3+)))
38210
38211(define-public python-toolshed
38212 (package
38213 (name "python-toolshed")
38214 (version "0.4.6")
38215 (source
38216 (origin
38217 (method url-fetch)
38218 (uri (pypi-uri "toolshed" version))
38219 (sha256
38220 (base32 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
38221 (build-system pyproject-build-system)
38222 (arguments
38223 (list #:tests? #f)) ;tests are not included in PyPI archive
38224 (native-inputs
38225 (list python-setuptools))
38226 (home-page "https://github.com/brentp/toolshed/")
38227 (synopsis "Collection of modules and functions for working with data")
38228 (description "This is a collection of well-tested, simple modules and
38229functions that aim to reduce boilerplate when working with data.")
38230 (license license:bsd-2)))
38231
38232(define-public python-toolz
38233 (package
38234 (name "python-toolz")
38235 (version "1.0.0")
38236 (source
38237 (origin
38238 (method url-fetch)
38239 (uri (pypi-uri "toolz" version))
38240 (sha256
38241 (base32 "00ks0jhl1jwm9576c5sh10pnla8ni21yvg4kcxasr627l3cy71ic"))))
38242 (build-system pyproject-build-system)
38243 (native-inputs
38244 (list python-pytest
38245 python-setuptools
38246 python-wheel))
38247 (home-page "https://github.com/pytoolz/toolz/")
38248 (synopsis "List processing tools and functional utilities")
38249 (description
38250 "This package provides a set of utility functions for iterators,
38251functions, and dictionaries.")
38252 (license license:bsd-3)))
38253
38254(define-public python-toposort
38255 (package
38256 (name "python-toposort")
38257 (version "1.10")
38258 (source
38259 (origin
38260 (method url-fetch)
38261 (uri (pypi-uri "toposort" version))
38262 (sha256
38263 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
38264 (build-system pyproject-build-system)
38265 (arguments
38266 (list #:test-backend #~'custom
38267 #:test-flags #~(list "-m" "test.test_toposort")))
38268 (native-inputs (list python-setuptools))
38269 (home-page "https://gitlab.com/ericvsmith/toposort")
38270 (synopsis "Topological sort algorithm")
38271 (description
38272 "This package provides an implementation of a topological sort
38273algorithm.")
38274 (license license:asl2.0)))
38275
38276(define-public python-towncrier
38277 (package
38278 (name "python-towncrier")
38279 (version "25.8.0")
38280 (source
38281 (origin
38282 (method url-fetch)
38283 (uri (pypi-uri "towncrier" version))
38284 (sha256
38285 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
38286 (build-system pyproject-build-system)
38287 (native-inputs
38288 (list git-minimal/pinned ;tests create git repositories
38289 python-hatchling
38290 python-pytest
38291 python-twisted))
38292 (propagated-inputs
38293 (list python-click
38294 python-jinja2))
38295 (home-page "https://towncrier.readthedocs.io/en/stable/")
38296 (synopsis "Manage release notes")
38297 (description
38298 "@code{towncrier} is a utility to produce useful, summarized news files
38299 (also known as changelogs) for a project.")
38300 (license license:expat)))
38301
38302(define-public python-tqdm
38303 (package
38304 (name "python-tqdm")
38305 (version "4.67.1")
38306 (source
38307 (origin
38308 (method url-fetch)
38309 (uri (pypi-uri "tqdm" version))
38310 (sha256
38311 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
38312 (build-system pyproject-build-system)
38313 (arguments
38314 (list #:test-flags
38315 '(list "-o" "asyncio_mode=auto"
38316 "-k" "not perf and not test_rlock_creation")))
38317 (native-inputs
38318 (list python-pytest
38319 python-pytest-asyncio
38320 python-pytest-timeout
38321 python-setuptools
38322 python-setuptools-scm
38323 python-toml
38324 python-wheel))
38325 (home-page "https://github.com/tqdm/tqdm")
38326 (synopsis "Fast, extensible progress meter")
38327 (description
38328 "Make loops show a progress bar on the console by just wrapping any
38329iterable with @code{|tqdm(iterable)|}. Offers many options to define
38330design and layout.")
38331 (license (list license:mpl2.0 license:expat))))
38332
38333(define-public python-traitlets
38334 (package
38335 (name "python-traitlets")
38336 (version "5.14.1")
38337 (source
38338 (origin
38339 (method url-fetch)
38340 (uri (pypi-uri "traitlets" version))
38341 (sha256
38342 (base32 "0zjj8ha4z5lbhhmvcl3q8wp5qmwqq0lwxma3d8qvh10s6xdi11c5"))))
38343 (build-system pyproject-build-system)
38344 (arguments
38345 (list
38346 #:test-flags
38347 '(list "-k" "not mypy_list_typing and not mypy_dict_typing")))
38348 (native-inputs
38349 (list python-argcomplete
38350 python-hatchling
38351 python-mypy
38352 python-pytest
38353 python-pytest-mock
38354 python-pytest-mypy-testing))
38355 (home-page "https://ipython.org")
38356 (synopsis "Configuration system for Python applications")
38357 (description
38358 "Traitlets is a framework that lets Python classes have attributes with
38359type checking, dynamically calculated default values, and ‘on change’
38360callbacks. The package also includes a mechanism to use traitlets for
38361configuration, loading values from files or from command line arguments. This
38362is a distinct layer on top of traitlets, so you can use traitlets in your code
38363without using the configuration machinery.")
38364 (license license:bsd-3)))
38365
38366(define-public python-translate-toolkit
38367 (package
38368 (name "python-translate-toolkit")
38369 (version "3.15.6")
38370 (source
38371 (origin
38372 (method url-fetch)
38373 (uri (pypi-uri "translate_toolkit" version))
38374 (sha256
38375 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
38376 (build-system pyproject-build-system)
38377 (arguments
38378 (list
38379 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
38380 #:test-flags
38381 ;; TODO: Some of the optional inputs are not packaged yet.
38382 #~(list #$@(map (lambda (file) (string-append "--ignore="
38383 "tests/translate/"
38384 file))
38385 (list "convert/test_ini2po.py"
38386 "convert/test_php2po.py"
38387 "convert/test_po2ini.py"
38388 "convert/test_po2php.py"
38389 "storage/test_cpo.py"
38390 "storage/test_fluent.py"
38391 "storage/test_ini.py"
38392 "storage/test_php.py"
38393 "storage/test_po.py"
38394 "storage/test_pypo.py"
38395 "storage/test_subtitles.py"))
38396 #$@(map (lambda (test) (string-append "--deselect="
38397 "tests/translate/storage/"
38398 test))
38399 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
38400 ;; 0xff in position 0: invalid start byte
38401 (list "test_csvl10n.py::TestCSV::test_encoding_save"
38402 ;; FileNotFoundError: [Errno 2] No such file or
38403 ;; directory: 'msgfmt'
38404 "test_mo.py::TestMOFile::test_output"
38405 ;; assert 0 == -16200
38406 "test_poheader.py::test_timezones"))
38407 #$@(map (lambda (test) (string-append "--deselect="
38408 "tests/translate/tools/"
38409 test))
38410 ;; XXX: Some issues with XML parsing.
38411 (list "test_junitmsgfmt.py::test_output"
38412 "test_pocount.py::test_output"
38413 "test_pocount.py::test_cases"))
38414 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
38415 (native-inputs
38416 (list python-pytest
38417 python-setuptools
38418 python-setuptools-scm))
38419 (propagated-inputs
38420 (list python-cwcwidth
38421 python-cheroot
38422 ;; python-aeidon
38423 ;; python-fluent
38424 python-iniparse
38425 python-lxml
38426 python-mistletoe
38427 python-phply
38428 python-pyparsing
38429 python-ruamel.yaml
38430 python-vobject))
38431 (home-page "https://toolkit.translatehouse.org")
38432 (synopsis "Tools and API for translation and localization engineering")
38433 (description
38434 "Tools and API for translation and localization engineering. It contains
38435several utilities, as well as an API for building localization tools.")
38436 (license license:gpl2+)))
38437
38438;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
38439(define-public python-translate-toolkit-for-offlate
38440 (hidden-package
38441 (package
38442 (inherit python-translate-toolkit)
38443 (version "3.6.2")
38444 (source
38445 (origin
38446 (method url-fetch)
38447 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
38448 (sha256
38449 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
38450 (arguments
38451 (list #:tests? #f)))))
38452
38453(define-public python-translitcodec
38454 (package
38455 (name "python-translitcodec")
38456 (version "0.7.0")
38457 (source
38458 (origin
38459 (method git-fetch)
38460 (uri (git-reference
38461 (url "https://github.com/claudep/translitcodec")
38462 (commit (string-append "version-" version))))
38463 (file-name (git-file-name name version))
38464 (sha256
38465 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
38466 (build-system pyproject-build-system)
38467 (native-inputs (list python-pytest python-setuptools))
38468 (home-page "https://github.com/claudep/translitcodec")
38469 (synopsis "Unicode to 8-bit charset transliteration codec")
38470 (description
38471 "This package contains codecs for transliterating ISO 10646 texts into
38472best-effort representations using smaller coded character sets (ASCII,
38473ISO 8859, etc.).")
38474 (license license:expat)))
38475
38476(define-public python-treelib
38477 (package
38478 (name "python-treelib")
38479 (version "1.8.0")
38480 (source
38481 (origin
38482 (method git-fetch)
38483 (uri (git-reference
38484 (url "https://github.com/caesar0301/treelib")
38485 (commit (string-append "v" version))))
38486 (file-name (git-file-name name version))
38487 (sha256
38488 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
38489 (patches
38490 (search-patches "python-treelib-remove-python2-compat.patch"))))
38491 (build-system pyproject-build-system)
38492 (native-inputs (list python-poetry-core python-pytest))
38493 (home-page "https://github.com/caesar0301/treelib")
38494 (synopsis "Implementation of a tree structure in Python")
38495 (description
38496 "This package provides a Python implementation of a tree structure.")
38497 (license license:asl2.0)))
38498
38499(define-public python-trio
38500 (package
38501 (name "python-trio")
38502 (version "0.28.0")
38503 (source
38504 (origin
38505 (method url-fetch)
38506 (uri (pypi-uri "trio" version))
38507 (sha256
38508 (base32 "019wqwlbj185skknbjd7paxqqx6vl5gpqk2fwmc5d2lyzsb7hm2f"))))
38509 (build-system pyproject-build-system)
38510 (arguments
38511 (list
38512 #:test-flags
38513 `(list "-k"
38514 (string-append
38515 ;; This tests times out.
38516 "not test_ki_protection_works"
38517 " and not test_KI_interrupts"
38518 ;; This fails with: signal only works in main thread of the main interpreter
38519 " and not test_catch_signals_race_condition_on_exit"
38520 ;; Assertion errors.
38521 " and not test_named_thread_os"
38522 " and not test_has_pthread_setname_np"
38523 " and not test_guest_mode_ki"
38524 " and not test_run_in_trio_thread_ki"
38525 " and not test_simple_cancel_scope_usage_doesnt_create\
38526_cyclic_garbage"
38527 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
38528 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
38529 " and not test_locals_destroyed_promptly_on_cancel"
38530 " and not test_ipython_exc_handler"
38531 " and not test_for_leaking_fds"
38532 ;; Signals don’t work in the build sandbox.
38533 " and not test_open_signal_receiver"
38534 ;; These try to raise KeyboardInterrupt which does not work
38535 ;; in the build environment.
38536 " and not test_ki_self"
38537 " and not test_ki_wakes_us_up"
38538 ;; Failure in name resolution.
38539 " and not test_getnameinfo"
38540 " and not test_SocketType_resolve"
38541 ;; OSError: protocol not found.
38542 " and not test_getprotobyname"
38543 ;; EOFError: Ran out of input.
38544 " and not test_static_tool_sees_all_symbols")
38545 ,@(if (package? (this-package-native-input "python-trustme"))
38546 '()
38547 `("--ignore=src/trio/_tests/test_dtls.py"
38548 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
38549 "--ignore=src/trio/_tests/test_ssl.py"))
38550 ;; It rerquires black and ruff to generate a final report.
38551 "--ignore=src/trio/_tests/tools/test_gen_exports.py"
38552 "src/trio/_tests")
38553 #:phases
38554 '(modify-phases %standard-phases
38555 (add-after 'unpack 'ignore-deprecations
38556 (lambda _
38557 (substitute* "pyproject.toml"
38558 ((" \"error\",") " \"ignore\","))))
38559 (add-before 'check 'set-env
38560 (lambda _
38561 ;; Tests require a writable home.
38562 (setenv "HOME" "/tmp")
38563 ;; #$output is first in path which causes "import file mismatch"
38564 (setenv "PYTHONPATH" (string-append (getcwd) "/src:$PYTHONPATH")))))))
38565 (native-inputs
38566 (append
38567 (if (supported-package? python-pyopenssl)
38568 (list python-pyopenssl)
38569 '())
38570 (list python-pytest
38571 python-setuptools)
38572 (if (supported-package? python-trustme)
38573 (list python-trustme)
38574 '())
38575 (list python-wheel)))
38576 (propagated-inputs
38577 (list python-attrs
38578 python-cffi
38579 python-exceptiongroup
38580 python-idna
38581 python-outcome
38582 python-sniffio
38583 python-sortedcontainers))
38584 (home-page "https://github.com/python-trio/trio")
38585 (synopsis "Friendly Python library for async concurrency and I/O")
38586 (description
38587 "Trio strives to be a production-quality, async/await-native I/O library
38588for Python. Like all async libraries, its main purpose is to help you write
38589programs that do multiple things at the same time with parallelized I/O.")
38590 ;; Either license applies.
38591 (license (list license:expat license:asl2.0))))
38592
38593(define-public python-trio-typing
38594 (package
38595 (name "python-trio-typing")
38596 (version "0.10.0")
38597 (source
38598 (origin
38599 (method url-fetch)
38600 (uri (pypi-uri "trio-typing" version))
38601 (sha256
38602 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
38603 (build-system pyproject-build-system)
38604 (native-inputs (list python-pytest python-setuptools python-wheel))
38605 (propagated-inputs
38606 (list python-async-generator
38607 python-importlib-metadata
38608 python-mypy-extensions
38609 python-packaging
38610 python-trio
38611 python-typing-extensions))
38612 (home-page "https://github.com/python-trio/trio-typing")
38613 (synopsis "Static type checking support for Trio and related projects")
38614 (description
38615 "This package provides:
38616
38617@itemize
38618@item PEP 561 typing stubs packages for the Trio project packages:
38619
38620@itemize
38621@item trio (@code{trio-stubs})
38622@item outcome (@code{outcome-stubs})
38623@item async_generator (@code{async_generator-stubs})
38624@end itemize
38625
38626@item A package @code{trio_typing} containing types that Trio programs often
38627want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
38628a mypy plugin that smooths over some limitations in the basic type hints.
38629@end itemize")
38630 ;; Either license applies.
38631 (license (list license:expat license:asl2.0))))
38632
38633(define-public python-trubar
38634 (package
38635 (name "python-trubar")
38636 (version "0.3.4")
38637 (source
38638 (origin
38639 (method url-fetch)
38640 (uri (pypi-uri "trubar" version))
38641 (sha256
38642 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
38643 (build-system pyproject-build-system)
38644 (arguments
38645 (list
38646 #:test-flags
38647 #~(list "-k" (string-join
38648 ;; AttributeError: module 'libcst' has no attribute
38649 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
38650 (list "not test_import_from_future"
38651 "test_inport_after_docstring"
38652 ;; AssertionError: Items in the second set but not
38653 ;; the first
38654 "test_walk_files")
38655 " and not "))))
38656 (native-inputs
38657 (list python-pytest
38658 python-setuptools
38659 python-wheel))
38660 (propagated-inputs
38661 (list python-libcst
38662 python-pyyaml))
38663 (home-page "https://github.com/janezd/trubar")
38664 (synopsis "Utility for translation of Python sources")
38665 (description
38666 "This package provides a tool for translation and localization of Python
38667programs via modification of source files. Trubar supports f-strings and does
38668not require any changes to the original source code, such as marking strings
38669for translation.")
38670 (license license:expat)))
38671
38672(define-public python-twine
38673 (package
38674 (name "python-twine")
38675 (version "6.2.0")
38676 (source
38677 (origin
38678 (method url-fetch)
38679 (uri (pypi-uri "twine" version))
38680 (sha256
38681 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
38682 (build-system pyproject-build-system)
38683 (arguments
38684 (list
38685 ;; tests: 228 passed, 1 deselected
38686 #:test-flags
38687 ;; Assertion is not equal for one tests.
38688 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
38689 (native-inputs
38690 (list python-pretend
38691 python-pytest
38692 python-pytest-socket
38693 python-setuptools
38694 python-setuptools-scm))
38695 (propagated-inputs
38696 (list python-id
38697 python-keyring
38698 python-packaging
38699 python-readme-renderer
38700 python-requests
38701 python-requests-toolbelt
38702 python-rfc3986
38703 python-rich
38704 python-urllib3))
38705 (home-page "https://github.com/pypa/twine")
38706 (synopsis "Collection of utilities for interacting with PyPI")
38707 (description
38708 "@code{twine} currently supports registering projects and uploading
38709distributions. It authenticates the user over HTTPS, allows them to pre-sign
38710their files and supports any packaging format (including wheels).")
38711 (license license:asl2.0)))
38712
38713(define-public python-twisted
38714 (package
38715 (name "python-twisted")
38716 (version "25.5.0")
38717 (source
38718 (origin
38719 (method git-fetch)
38720 (uri (git-reference
38721 (url "https://github.com/twisted/twisted")
38722 (commit (string-append "twisted-" version))))
38723 (file-name (git-file-name name version))
38724 (sha256
38725 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
38726 (build-system pyproject-build-system)
38727 (arguments
38728 (list
38729 ;; tests: skips=638, successes=9759
38730 #:test-backend #~'custom
38731 #:test-flags
38732 #~(list "-m" "twisted.trial"
38733 "--temp-directory=/tmp/_trial_temp"
38734 (string-append "-j" (number->string (min 8 (parallel-job-count))))
38735 "twisted")
38736 #:phases
38737 #~(modify-phases %standard-phases
38738 (add-after 'unpack 'disable-broken-tests
38739 (lambda _
38740 (for-each delete-file
38741 (list
38742 ;; No idea why they fail
38743 "src/twisted/test/test_log.py"
38744 ;; Network tests
38745 "src/twisted/conch/test/test_cftp.py"
38746 "src/twisted/internet/test/test_endpoints.py"
38747 "src/twisted/protocols/test/test_tls.py"
38748 "src/twisted/test/test_sslverify.py"
38749 "src/twisted/web/test/test_agent.py"
38750 "src/twisted/web/test/test_tap.py"
38751 ;; These need a git executable
38752 "src/twisted/python/test/test_release.py"
38753 ;; These leave behind a socket file, which breaks the
38754 ;; build with "...has an unsupported type"
38755 "src/twisted/internet/test/test_unix.py"
38756 "src/twisted/test/test_unix.py"
38757 ;; These complain about missing test modules.
38758 "src/twisted/test/test_failure.py"
38759 "src/twisted/web/test/test_http2.py"
38760 "src/twisted/conch/test/test_forwarding.py")))))))
38761 (propagated-inputs
38762 (list python-attrs
38763 python-automat
38764 python-bcrypt
38765 python-constantly
38766 python-hyperlink
38767 python-incremental
38768 python-typing-extensions
38769 python-zope-interface
38770 ;; [conch]
38771 python-appdirs
38772 python-bcrypt
38773 python-cryptography
38774 ;; [http2]
38775 python-h2
38776 python-priority
38777 ;; [tls]
38778 python-idna
38779 python-pyopenssl
38780 python-service-identity
38781 ;; [serial]
38782 python-pyserial))
38783 (native-inputs
38784 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
38785 python-hatch-fancy-pypi-readme
38786 python-hatchling
38787 python-httpx
38788 python-hypothesis
38789 python-incremental
38790 python-pyhamcrest
38791 python-pytest))
38792 (home-page "https://twistedmatrix.com/")
38793 (synopsis "Asynchronous networking framework written in Python")
38794 (description
38795 "Twisted is an extensible framework for Python programming, with special
38796focus on event-based network programming and multiprotocol integration.")
38797 (license license:expat)))
38798
38799(define-public python-txredisapi
38800 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
38801 ;; The latest version is 1.4.11, but it contains a bug:
38802 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
38803 ;; patched in commit d2259a3.
38804 (revision "0"))
38805 (package
38806 (name "python-txredisapi")
38807 (version (git-version "1.4.11" revision commit))
38808 (source
38809 (origin
38810 (method git-fetch)
38811 ;; The source distribution on PyPi is missing test files:
38812 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
38813 (uri (git-reference
38814 (url "https://github.com/IlyaSkriblovsky/txredisapi")
38815 (commit commit)))
38816 (file-name (git-file-name name version))
38817 (sha256
38818 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
38819 (build-system pyproject-build-system)
38820 (arguments
38821 (list #:test-backend #~'custom
38822 #:test-flags #~(list "-m" "twisted.trial" "tests")
38823 #:phases
38824 #~(modify-phases %standard-phases
38825 ;; The tests require a running Redis server.
38826 (add-before 'check 'start-redis
38827 (lambda _
38828 (invoke "redis-server" "--daemonize" "yes"))))))
38829 (propagated-inputs (list python-twisted))
38830 (native-inputs (list python-mock python-setuptools redis))
38831 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
38832 (synopsis "Non-blocking Redis client for Python")
38833 (description "txredisapi is a non-blocking client driver for the Redis
38834database, written in Python. It uses Twisted for asynchronous communication
38835with Redis.")
38836 (license license:asl2.0))))
38837
38838(define-public python-typeapi
38839 (package
38840 (name "python-typeapi")
38841 (version "2.2.4")
38842 (source
38843 (origin
38844 (method url-fetch)
38845 (uri (pypi-uri "typeapi" version))
38846 (sha256
38847 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
38848 (build-system pyproject-build-system)
38849 (arguments
38850 (list
38851 #:tests? #false)) ;there are none
38852 (propagated-inputs (list python-typing-extensions))
38853 (native-inputs (list python-hatchling))
38854 (home-page "https://pypi.org/project/typeapi/")
38855 (synopsis "Type hints")
38856 (description "The typeapi package provides an object-oriented interface
38857for introspecting PEP484 type hints at runtime, including forward references
38858that make use of the more recent PEP585 and PEP604 type hint features in
38859Python versions that don't natively support them.")
38860 (license license:expat)))
38861
38862(define-public python-typeguard
38863 (package
38864 (name "python-typeguard")
38865 (version "4.4.4")
38866 (source
38867 (origin
38868 (method url-fetch)
38869 (uri (pypi-uri "typeguard" version))
38870 (sha256
38871 (base32 "0x2zkskia5lb1838ys0bhpp9v6y80jkhchzdz874spbhzggx4zrs"))))
38872 (build-system pyproject-build-system)
38873 (native-inputs
38874 (list python-mypy
38875 python-pytest
38876 python-setuptools
38877 python-setuptools-scm))
38878 (propagated-inputs
38879 (list python-typing-extensions))
38880 (home-page "https://github.com/agronholm/typeguard")
38881 (synopsis "Run-time type checker for Python")
38882 (description
38883 "@code{typeguard} provides run-time type checking for functions defined
38884with PEP 484 argument (and return) type annotations.")
38885 (license license:expat)))
38886
38887(define-public python-typer
38888 (package
38889 (name "python-typer")
38890 (version "0.20.0")
38891 (source
38892 (origin
38893 (method git-fetch)
38894 (uri (git-reference
38895 (url "https://github.com/fastapi/typer")
38896 (commit version)))
38897 (file-name (git-file-name name version))
38898 (sha256
38899 (base32 "1a2ay2kj3d3rwjscx3hw2adgqifs3hdp7kwcpdh1bl3iy8mn9xdi"))))
38900 (build-system pyproject-build-system)
38901 (arguments
38902 (list
38903 #:test-flags
38904 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count))))))
38905 (native-inputs
38906 (list python-coverage ;this is required in tests
38907 python-pdm-backend
38908 python-pytest
38909 python-pytest-xdist))
38910 (propagated-inputs
38911 (list python-click
38912 python-typing-extensions
38913 ;; [optional]
38914 python-rich
38915 python-shellingham))
38916 (home-page "https://github.com/fastapi/typer")
38917 (synopsis "Typer builds CLI based on Python type hints")
38918 (description
38919 "Typer is a library for building CLI applications. It's based on Python
389203.6+ type hints.")
38921 (license license:expat)))
38922
38923(define-public python-types-aiofiles
38924 (package
38925 (name "python-types-aiofiles")
38926 (version "25.1.0.20251011")
38927 (source
38928 (origin
38929 (method url-fetch)
38930 (uri (pypi-uri "types_aiofiles" version))
38931 (sha256
38932 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
38933 (build-system pyproject-build-system)
38934 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38935 (native-inputs (list python-setuptools))
38936 (home-page "https://github.com/python/typeshed")
38937 (synopsis "Typing stubs for python-aiofiles")
38938 (description "This package providis typing stubs for python-aiofiles.")
38939 (license license:asl2.0)))
38940
38941(define-public python-types-colorama
38942 (package
38943 (name "python-types-colorama")
38944 (version "0.4.15.20250801")
38945 (source
38946 (origin
38947 (method url-fetch)
38948 (uri (pypi-uri "types_colorama" version))
38949 (sha256
38950 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
38951 (build-system pyproject-build-system)
38952 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38953 (native-inputs
38954 (list python-setuptools))
38955 (home-page "https://github.com/python/typeshed")
38956 (synopsis "Typing stubs for colorama")
38957 (description "This package provides typing stubs for colorama.")
38958 (license license:asl2.0)))
38959
38960(define-public python-types-dataclasses
38961 (package
38962 (name "python-types-dataclasses")
38963 (version "0.6.6")
38964 (source
38965 (origin
38966 (method url-fetch)
38967 (uri (pypi-uri "types-dataclasses" version))
38968 (sha256
38969 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
38970 (build-system pyproject-build-system)
38971 (arguments (list #:tests? #f)) ;no tests
38972 (native-inputs (list python-setuptools))
38973 (home-page "https://github.com/python/typeshed")
38974 (synopsis "Typing stubs for dataclasses")
38975 (description
38976 "This package provides a collection of library stubs for Python, with
38977static types.")
38978 (license license:asl2.0)))
38979
38980(define-public python-types-dateutil
38981 (package
38982 (name "python-types-dateutil")
38983 (version "2.9.0.20240316")
38984 (source
38985 (origin
38986 (method url-fetch)
38987 (uri (pypi-uri "types-python-dateutil" version))
38988 (sha256
38989 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
38990 (build-system pyproject-build-system)
38991 (arguments (list #:tests? #f)) ; no tests
38992 (native-inputs
38993 (list python-pytest python-setuptools python-wheel))
38994 (home-page "https://github.com/python/typeshed")
38995 (synopsis "Typing stubs for python-dateutil")
38996 (description
38997 "This is a PEP 561 type stub package for the @code{python-dateutil}
38998package.")
38999 (license license:asl2.0)))
39000
39001(define-public python-types-docutils
39002 (package
39003 (name "python-types-docutils")
39004 (version "0.22.2.20251006")
39005 (source
39006 (origin
39007 (method url-fetch)
39008 (uri (pypi-uri "types_docutils" version))
39009 (sha256
39010 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
39011 (build-system pyproject-build-system)
39012 (arguments (list #:tests? #f)) ;no tests
39013 (native-inputs (list python-setuptools))
39014 (home-page "https://github.com/python/typeshed")
39015 (synopsis "Typing stubs for docutils")
39016 (description "This package provides a collection of library stubs for
39017Python, with static types.")
39018 (license license:asl2.0)))
39019
39020(define-public python-types-freezegun
39021 (package
39022 (name "python-types-freezegun")
39023 (version "1.1.8")
39024 (source
39025 (origin
39026 (method url-fetch)
39027 (uri (pypi-uri "types-freezegun" version))
39028 (sha256
39029 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
39030 (build-system pyproject-build-system)
39031 (arguments
39032 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39033 ;; right files from source, so ignore them for now.
39034 (list #:tests? #f))
39035 (native-inputs (list python-setuptools python-wheel))
39036 (home-page "https://github.com/python/typeshed")
39037 (synopsis "Typing stubs for @code{freezegun}")
39038 (description "This package contains typing stubs for for @code{freezegun}, a
39039very small subset the Python stubs contained in the complete @code{typeshed}
39040collection.")
39041 (license license:asl2.0)))
39042
39043(define-public python-types-orjson
39044 (package
39045 (name "python-types-orjson")
39046 (version "3.6.2")
39047 (source
39048 (origin
39049 (method url-fetch)
39050 (uri (pypi-uri "types-orjson" version))
39051 (sha256
39052 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
39053 (build-system pyproject-build-system)
39054 (arguments (list #:tests? #f)) ;no tests
39055 (native-inputs (list python-setuptools))
39056 (home-page "https://github.com/python/typeshed")
39057 (synopsis "Typing stubs for orjson")
39058 (description "This is a PEP 561 type stub package for the @code{orjson}
39059package. It can be used by type-checking tools like mypy, PyCharm, pytype
39060etc. to check code that uses @code{orjson}.")
39061 (license license:asl2.0)))
39062
39063(define-public python-types-protobuf
39064 (package
39065 (name "python-types-protobuf")
39066 (version "3.20.1")
39067 (source (origin
39068 (method url-fetch)
39069 (uri (pypi-uri "types-protobuf" version))
39070 (sha256
39071 (base32
39072 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
39073 (build-system pyproject-build-system)
39074 (arguments
39075 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39076 ;; right files from source, so ignore them for now.
39077 (list #:tests? #f))
39078 (native-inputs (list python-setuptools python-wheel))
39079 (home-page "https://github.com/python/typeshed")
39080 (synopsis "Typing stubs for @code{protobuf}")
39081 (description "This package contains typing stubs for @code{protobuf}, a
39082very small subset the Python stubs contained in the complete @code{typeshed}
39083collection.")
39084 (license license:asl2.0)))
39085
39086(define-public python-types-python-dateutil
39087 (package
39088 (name "python-types-python-dateutil")
39089 (version "2.9.0.20250708")
39090 (source
39091 (origin
39092 (method url-fetch)
39093 (uri (pypi-uri "types_python_dateutil" version))
39094 (sha256
39095 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
39096 (build-system pyproject-build-system)
39097 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39098 (native-inputs (list python-setuptools))
39099 (home-page "https://github.com/python/typeshed")
39100 (synopsis "Typing stubs for python-dateutil")
39101 (description "This package providis typing stubs for python-dateutil.")
39102 (license license:asl2.0)))
39103
39104(define-public python-types-pytz
39105 (package
39106 (name "python-types-pytz")
39107 (version "2025.2.0.20250809")
39108 (source
39109 (origin
39110 (method url-fetch)
39111 (uri (pypi-uri "types_pytz" version))
39112 (sha256
39113 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
39114 (build-system pyproject-build-system)
39115 (arguments
39116 (list #:tests? #f)) ;no tests provided
39117 (native-inputs (list python-setuptools))
39118 (home-page "https://github.com/python/typeshed")
39119 (synopsis "Typing stubs for pytz")
39120 (description "This package contains typing stubs for @code{pytz}, a very
39121small subset the Python stubs contained in the complete @code{typeshed}
39122collection.")
39123 (license license:asl2.0)))
39124
39125(define-public python-types-pyyaml
39126 (package
39127 (name "python-types-pyyaml")
39128 (version "6.0.12.20250915")
39129 (source
39130 (origin
39131 (method url-fetch)
39132 (uri (pypi-uri "types_pyyaml" version))
39133 (sha256
39134 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
39135 (build-system pyproject-build-system)
39136 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39137 (native-inputs
39138 (list python-setuptools))
39139 (home-page " https://github.com/python/typeshed")
39140 (synopsis "Typing stubs for PyYAML")
39141 (description "This package provides typing stubs for @code{PyYAML}.")
39142 (license license:asl2.0)))
39143
39144(define-public python-types-regex
39145 (package
39146 (name "python-types-regex")
39147 (version "2025.9.18.20250921")
39148 (source
39149 (origin
39150 (method url-fetch)
39151 (uri (pypi-uri "types_regex" version))
39152 (sha256
39153 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
39154 (build-system pyproject-build-system)
39155 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39156 (native-inputs (list python-setuptools))
39157 (home-page "https://github.com/python/typeshed")
39158 (synopsis "Typing stubs for regex")
39159 (description "This package provides typing stubs for regex.")
39160 (license license:asl2.0)))
39161
39162(define-public python-types-requests
39163 (package
39164 (name "python-types-requests")
39165 (version "2.32.4.20250611")
39166 (source
39167 (origin
39168 (method url-fetch)
39169 (uri (pypi-uri "types_requests" version))
39170 (sha256
39171 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
39172 (build-system pyproject-build-system)
39173 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39174 (native-inputs
39175 (list python-setuptools))
39176 (propagated-inputs
39177 (list python-urllib3))
39178 (home-page "https://github.com/python/typeshed")
39179 (synopsis "Typing stubs for requests")
39180 (description "This package provides typing stubs for requests.")
39181 (license license:asl2.0)))
39182
39183(define-public python-types-setuptools
39184 (package
39185 (name "python-types-setuptools")
39186 (version "80.9.0.20250529")
39187 (source
39188 (origin
39189 (method url-fetch)
39190 (uri (pypi-uri "types_setuptools" version))
39191 (sha256
39192 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
39193 (build-system pyproject-build-system)
39194 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39195 (native-inputs
39196 (list python-setuptools))
39197 (home-page "https://github.com/python/typeshed")
39198 (synopsis "Typing stubs for setuptools")
39199 (description "This package provides typing stubs for setuptools.")
39200 (license license:asl2.0)))
39201
39202(define-public python-types-simplejson
39203 (package
39204 (name "python-types-simplejson")
39205 (version "3.19.0.20241221")
39206 (source
39207 (origin
39208 (method url-fetch)
39209 (uri (pypi-uri "types_simplejson" version))
39210 (sha256
39211 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
39212 (build-system pyproject-build-system)
39213 (arguments
39214 (list
39215 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
39216 (native-inputs
39217 (list python-setuptools python-wheel))
39218 (home-page "https://github.com/python/typeshed")
39219 (synopsis "Typing stubs for simplejson")
39220 (description "Typing stubs for simplejson.")
39221 (license license:asl2.0)))
39222
39223(define-public python-types-toml
39224 (package
39225 (name "python-types-toml")
39226 (version "0.10.8.20240310")
39227 (source
39228 (origin
39229 (method url-fetch)
39230 (uri (pypi-uri "types-toml" version))
39231 (sha256
39232 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
39233 (build-system pyproject-build-system)
39234 (arguments
39235 (list #:tests? #f)) ;no tests provided
39236 (native-inputs (list python-setuptools))
39237 (home-page "https://github.com/python/typeshed")
39238 (synopsis "Typing stubs for TOML")
39239 (description
39240 "This package contains typing stubs for TOML, a very small subset the
39241Python stubs contained in the complete @code{typeshed} collection.")
39242 (license license:asl2.0)))
39243
39244(define-public python-types-tqdm
39245 (package
39246 (name "python-types-tqdm")
39247 (version "4.67.0.20250809")
39248 (source
39249 (origin
39250 (method url-fetch)
39251 (uri (pypi-uri "types_tqdm" version))
39252 (sha256
39253 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
39254 (build-system pyproject-build-system)
39255 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39256 (native-inputs (list python-setuptools))
39257 (propagated-inputs (list python-types-requests))
39258 (home-page "https://github.com/python/typeshed")
39259 (synopsis "Typing stubs for python-tqdm")
39260 (description "This package providis typing stubs for python-tqdm.")
39261 (license license:asl2.0)))
39262
39263(define-public python-types-ujson
39264 (package
39265 (name "python-types-ujson")
39266 (version "5.10.0.20250822")
39267 (source
39268 (origin
39269 (method url-fetch)
39270 (uri (pypi-uri "types_ujson" version))
39271 (sha256
39272 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
39273 (build-system pyproject-build-system)
39274 (arguments
39275 (list #:tests? #f)) ;no tests provided
39276 (native-inputs (list python-setuptools))
39277 (home-page "https://github.com/python/typeshed")
39278 (synopsis "Typing stubs for ujson")
39279 (description
39280 "This is a PEP 561 type stub package for the ujson package. It can be
39281used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
39282uses ujson.")
39283 (license license:asl2.0)))
39284
39285(define-public python-types-urllib3
39286 (package
39287 (name "python-types-urllib3")
39288 (version "1.26.25.14")
39289 (source
39290 (origin
39291 (method url-fetch)
39292 (uri (pypi-uri "types-urllib3" version))
39293 (sha256
39294 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
39295 (build-system pyproject-build-system)
39296 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39297 (native-inputs
39298 (list python-setuptools))
39299 (home-page "https://github.com/python/typeshed")
39300 (synopsis "Typing stubs for urllib3")
39301 (description "This package provides typing stubs for urllib3.")
39302 (license license:asl2.0)))
39303
39304(define-public python-typeshed-client
39305 (package
39306 (name "python-typeshed-client")
39307 (version "2.8.2")
39308 (source
39309 (origin
39310 (method git-fetch)
39311 (uri (git-reference
39312 (url "https://github.com/JelleZijlstra/typeshed_client")
39313 (commit (string-append "v" version))))
39314 (file-name (git-file-name name version))
39315 (sha256
39316 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
39317 (build-system pyproject-build-system)
39318 (arguments
39319 (list #:test-backend #~'custom
39320 #:test-flags #~(list "tests/test.py")))
39321 (native-inputs
39322 (list python-setuptools))
39323 (propagated-inputs
39324 (list python-importlib-resources
39325 python-typing-extensions))
39326 (home-page "https://github.com/JelleZijlstra/typeshed_client")
39327 (synopsis "Library for accessing stubs in typeshed")
39328 (description
39329 "This package provides a library for accessing stubs in typeshed.")
39330 (license license:expat)))
39331
39332(define-public python-typing-inspect
39333 (package
39334 (name "python-typing-inspect")
39335 (version "0.9.0")
39336 (source
39337 (origin
39338 (method url-fetch)
39339 (uri (pypi-uri "typing_inspect" version))
39340 (sha256
39341 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
39342 (build-system pyproject-build-system)
39343 (native-inputs
39344 (list python-pytest
39345 python-setuptools
39346 python-wheel))
39347 (propagated-inputs
39348 (list python-mypy-extensions
39349 python-typing-extensions))
39350 (home-page "https://github.com/ilevkivskyi/typing_inspect")
39351 (synopsis "API for inspection of types in the Python @code{typing} module")
39352 (description
39353 "The @code{typing_inspect} module defines experimental API for runtime
39354inspection of types defined in the Python standard typing module.")
39355 (license license:expat)))
39356
39357(define-public python-typing-inspection
39358 (package
39359 (name "python-typing-inspection")
39360 (version "0.4.2")
39361 (source
39362 (origin
39363 (method git-fetch)
39364 (uri (git-reference
39365 (url "https://github.com/pydantic/typing-inspection")
39366 (commit (string-append "v" version))))
39367 (file-name (git-file-name name version))
39368 (sha256
39369 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
39370 (build-system pyproject-build-system)
39371 ;; tests: 89 passed, 3 skipped
39372 (native-inputs
39373 (list python-pytest
39374 python-hatchling))
39375 (propagated-inputs
39376 (list python-typing-extensions))
39377 (home-page "https://github.com/pydantic/typing-inspection")
39378 (synopsis "Runtime typing introspection tools")
39379 (description
39380 "@code{typing-inspection} provides tools to inspect type annotations at
39381runtime.")
39382 (license license:expat)))
39383
39384(define-public python-typogrify
39385 (package
39386 (name "python-typogrify")
39387 (version "2.1.0")
39388 (source
39389 (origin
39390 (method url-fetch)
39391 (uri (pypi-uri "typogrify" version))
39392 (sha256
39393 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
39394 (build-system pyproject-build-system)
39395 (arguments
39396 (list
39397 #:test-flags
39398 #~(list "--doctest-modules"
39399 "typogrify/filters.py"
39400 "typogrify/packages/titlecase/tests.py")))
39401 (native-inputs
39402 (list python-pytest
39403 python-hatchling))
39404 (propagated-inputs
39405 (list python-smartypants))
39406 (home-page "https://github.com/justinmayer/typogrify")
39407 (synopsis "Filters to transform text into typographically-improved HTML")
39408 (description
39409 "@code{typogrify} provides a set of custom filters that automatically
39410apply various transformations to plain text in order to yield
39411typographically-improved HTML. While often used in conjunction with Jinja and
39412Django template systems, the filters can be used in any environment.")
39413 (license license:bsd-3)))
39414
39415(define-public python-ua-parser
39416 (package
39417 (name "python-ua-parser")
39418 (version "0.10.0")
39419 (source
39420 (origin
39421 (method url-fetch)
39422 (uri (pypi-uri "ua-parser" version))
39423 (sha256
39424 (base32
39425 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
39426 (build-system pyproject-build-system)
39427 (arguments
39428 `(#:tests? #f)) ;no test suite in release
39429 (native-inputs
39430 (list python-pyyaml
39431 python-setuptools))
39432 (home-page "https://github.com/ua-parser/uap-python")
39433 (synopsis "User agent parser")
39434 (description
39435 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
39436 (license license:asl2.0)))
39437
39438(define-public python-ubelt
39439 (package
39440 (name "python-ubelt")
39441 (version "1.3.6")
39442 (source
39443 (origin
39444 (method git-fetch)
39445 (uri (git-reference
39446 (url "https://github.com/Erotemic/ubelt")
39447 (commit (string-append "v" version))))
39448 (file-name (git-file-name name version))
39449 (sha256
39450 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
39451 (build-system pyproject-build-system)
39452 (arguments
39453 (list
39454 ;; The builder user home doesn't match HOME, which causes this test to
39455 ;; fail.
39456 #:test-flags #~(list "-k" "not userhome")
39457 #:phases
39458 #~(modify-phases %standard-phases
39459 (add-before 'check 'pre-check
39460 (lambda _
39461 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
39462 (native-inputs
39463 (list python-pytest
39464 python-requests
39465 python-setuptools
39466 python-wheel
39467 python-xdoctest))
39468 (propagated-inputs
39469 (list python-ordered-set))
39470 (home-page "https://github.com/Erotemic/ubelt")
39471 (synopsis "Python library for hashing, caching, timing and more")
39472 (description
39473 "Ubelt is a small library of simple functions that extend the Python
39474standard library. It includes an @acronym{API, Application Programming
39475Interface} to simplify common problems such as caching, timing, computing
39476progress, among other things.")
39477 (license license:asl2.0)))
39478
39479(define-public python-uc-micro-py
39480 (package
39481 (name "python-uc-micro-py")
39482 (version "1.0.1")
39483 (source (origin
39484 (method git-fetch) ;for tests
39485 (uri (git-reference
39486 (url "https://github.com/tsutsu3/uc.micro-py")
39487 (commit (string-append "v" version))))
39488 (file-name (git-file-name name version))
39489 (sha256
39490 (base32
39491 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
39492 (build-system pyproject-build-system)
39493 (native-inputs (list python-pytest python-setuptools python-wheel))
39494 (home-page "https://github.com/tsutsu3/uc.micro-py")
39495 (synopsis "Unicode data files for linkify-it-py projects")
39496 (description "This package contains a micro subset of Unicode data files
39497for linkify-it-py projects.")
39498 (license license:expat)))
39499
39500(define-public python-ujson
39501 (package
39502 (name "python-ujson")
39503 (version "5.10.0")
39504 (source
39505 (origin
39506 (method url-fetch)
39507 (uri (pypi-uri "ujson" version))
39508 (sha256
39509 (base32
39510 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
39511 (modules '((guix build utils)))
39512 (snippet
39513 #~(begin (delete-file-recursively "deps")))))
39514 (build-system pyproject-build-system)
39515 (arguments
39516 (list
39517 #:phases
39518 #~(modify-phases %standard-phases
39519 (add-after 'unpack 'link-to-system-double-conversion
39520 (lambda* (#:key inputs #:allow-other-keys)
39521 (let ((d-c (assoc-ref inputs "double-conversion")))
39522 (substitute* "setup.py"
39523 (("./deps/double-conversion/double-conversion\"")
39524 (string-append d-c "/include/double-conversion\""))
39525 (("-lstdc++" stdc)
39526 (string-append "-L" d-c "/lib\","
39527 " \"-ldouble-conversion\","
39528 " \"" stdc)))))))))
39529 (native-inputs
39530 (list double-conversion
39531 python-pytest
39532 python-setuptools
39533 python-setuptools-scm
39534 python-wheel))
39535 (home-page "https://github.com/ultrajson/ultrajson")
39536 (synopsis "Ultra fast JSON encoder and decoder for Python")
39537 (description
39538 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
39539bindings for Python 3.")
39540 (license license:bsd-3)))
39541
39542(define-public python-ukkonen
39543 (package
39544 (name "python-ukkonen")
39545 (version "1.0.1")
39546 (source
39547 (origin
39548 ;; There are no tests in the PyPI tarball.
39549 (method git-fetch)
39550 (uri (git-reference
39551 (url "https://github.com/asottile/ukkonen")
39552 (commit (string-append "v" version))))
39553 (file-name (git-file-name name version))
39554 (sha256
39555 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
39556 (build-system pyproject-build-system)
39557 (native-inputs (list python-pytest python-setuptools python-wheel))
39558 (propagated-inputs (list python-cffi))
39559 (home-page "https://github.com/asottile/ukkonen")
39560 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
39561 (description "This package is an implementation of of bounded Levenshtein
39562distance (Ukkonen).")
39563 (license license:expat)))
39564
39565(define-public python-ukpostcodeparser
39566 (package
39567 (name "python-ukpostcodeparser")
39568 (version "1.1.2")
39569 (source (origin
39570 (method url-fetch)
39571 (uri (pypi-uri "UkPostcodeParser" version))
39572 (sha256
39573 (base32
39574 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
39575 (build-system pyproject-build-system)
39576 (arguments
39577 (list
39578 #:test-flags
39579 #~(list
39580 ;; Tests for lowercase postcodes fail.
39581 "-k" (string-join
39582 (list "not test_091 "
39583 "test_097 "
39584 "test_098 "
39585 "test_125 "
39586 "test_131")
39587 " and not ")
39588 "ukpostcodeparser/test/parser.py")))
39589 (native-inputs
39590 (list python-pytest python-setuptools))
39591 (home-page "https://github.com/hamstah/ukpostcodeparser")
39592 (synopsis "UK Postcode parser for Python")
39593 (description
39594 "This library provides the @code{parse_uk_postcode} function for
39595parsing UK postcodes.")
39596 (license license:expat)))
39597
39598(define-public python-ulid
39599 (package
39600 (name "python-ulid")
39601 (version "3.1.0")
39602 (source
39603 (origin
39604 (method git-fetch)
39605 (uri (git-reference
39606 (url "https://github.com/mdomke/python-ulid")
39607 (commit version)))
39608 (file-name (git-file-name name version))
39609 (sha256
39610 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
39611 (build-system pyproject-build-system)
39612 (arguments
39613 (list
39614 #:phases
39615 #~(modify-phases %standard-phases
39616 (add-after 'unpack 'set-version
39617 (lambda _
39618 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
39619 (native-inputs
39620 (list python-freezegun
39621 python-hatch-fancy-pypi-readme
39622 python-hatch-vcs
39623 python-hatchling
39624 python-pytest))
39625 (propagated-inputs
39626 (list python-pydantic))
39627 (home-page "https://github.com/mdomke/python-ulid")
39628 (synopsis "Universally unique lexicographically sortable identifier")
39629 (description
39630 "ULID is a universally unique lexicographically sortable identifier.
39631It is:
39632@itemize
39633@item 128-bit compatible with UUID
39634@item 1.21e+24 unique ULIDs per millisecond
39635@item lexicographically sortable!
39636@item canonically encoded as a 26 character string, as opposed to the 36
39637character UUID
39638@item uses Crockford's base32 for better efficiency and readability (5 bits
39639per character)
39640@item case insensitive
39641@item no special characters (URL safe)
39642@item monotonic sort order (correctly detects and handles the same
39643millisecond)
39644@end itemize")
39645 (license license:expat)))
39646
39647(define-public python-uncertainties
39648 (package
39649 (name "python-uncertainties")
39650 (version "3.2.3")
39651 (source
39652 (origin
39653 (method url-fetch)
39654 (uri (pypi-uri "uncertainties" version))
39655 (sha256
39656 (base32
39657 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
39658 (build-system pyproject-build-system)
39659 (native-inputs
39660 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
39661 (propagated-inputs (list python-numpy))
39662 (home-page "https://uncertainties.readthedocs.io/en/latest/")
39663 (synopsis "Calculations with uncertainties")
39664 (description
39665 "The uncertainties package transparently handles calculations with
39666numbers with uncertainties. It can also yield the derivatives of any
39667expression.")
39668 (license license:bsd-3)))
39669
39670(define-public python-unicodedata2
39671 (package
39672 (name "python-unicodedata2")
39673 (version "16.0.0")
39674 (source
39675 (origin
39676 (method url-fetch)
39677 (uri (pypi-uri "unicodedata2" version))
39678 (sha256
39679 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
39680 (build-system pyproject-build-system)
39681 (native-inputs
39682 (list python-pytest
39683 python-setuptools))
39684 (home-page "https://github.com/fonttools/unicodedata2")
39685 (synopsis "Python unicodedata backport")
39686 (description "This package corresponds to the latest @code{unicodedata}
39687standard Python module.")
39688 (license license:asl2.0)))
39689
39690(define-public python-unicode-linebreak
39691 (package
39692 (name "python-unicode-linebreak")
39693 (version "0.0.2")
39694 (source
39695 (origin
39696 (method git-fetch)
39697 (uri (git-reference
39698 (url "https://github.com/mondeja/py-unicode-linebreak")
39699 (commit (string-append "v" version))))
39700 (file-name (git-file-name name version))
39701 (sha256
39702 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
39703 (build-system pyproject-build-system)
39704 (arguments
39705 (list
39706 #:imported-modules `(,@%cargo-build-system-modules
39707 ,@%pyproject-build-system-modules)
39708 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
39709 (guix build pyproject-build-system)
39710 (guix build utils))
39711 #:test-backend #~'unittest
39712 #:phases
39713 #~(modify-phases %standard-phases
39714 (add-after 'unpack 'prepare-cargo-build-system
39715 (lambda args
39716 (for-each
39717 (lambda (phase)
39718 (format #t "Running cargo phase: ~a~%" phase)
39719 (apply (assoc-ref cargo:%standard-phases phase)
39720 #:cargo-target #$(cargo-triplet)
39721 args))
39722 '(unpack-rust-crates
39723 configure
39724 check-for-pregenerated-files
39725 patch-cargo-checksums)))))))
39726 (native-inputs
39727 (append
39728 (list maturin
39729 rust
39730 `(,rust "cargo"))
39731 (or (and=> (%current-target-system)
39732 (compose list make-rust-sysroot))
39733 '())))
39734 (inputs (cargo-inputs 'unicode_linebreak))
39735 (home-page "https://github.com/mondeja/py-unicode-linebreak")
39736 (synopsis "Markdown paragraph wrapper")
39737 (description
39738 "This package provides a Markdown paragraph wrapper using Unicode Line
39739Breaking Algorithm written in Rust with Python bindings.")
39740 (license license:expat)))
39741
39742(define-public python-unicodeitplus
39743 (package
39744 (name "python-unicodeitplus")
39745 (version "0.3.1")
39746 (source
39747 (origin
39748 (method url-fetch)
39749 (uri (pypi-uri "unicodeitplus" version))
39750 (sha256
39751 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
39752 (build-system pyproject-build-system)
39753 (native-inputs
39754 (list python-pytest
39755 python-setuptools
39756 python-setuptools-scm))
39757 (propagated-inputs
39758 (list python-lark))
39759 (home-page "https://github.com/HDembinski/unicodeitplus")
39760 (synopsis "Convert simple LaTeX to an Unicode approximation")
39761 (description
39762 "This package provides a more complete LaTeX to Unicode converter than
39763@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
39764Backus-Naur Form} with the Lark library.")
39765 (license license:bsd-3)))
39766
39767(define-public python-unidecode
39768 (package
39769 (name "python-unidecode")
39770 (version "1.4.0")
39771 (source
39772 (origin
39773 (method url-fetch)
39774 (uri (pypi-uri "Unidecode" version))
39775 (sha256
39776 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
39777 (build-system pyproject-build-system)
39778 (native-inputs
39779 (list python-pytest python-setuptools))
39780 (home-page "https://pypi.org/project/Unidecode/")
39781 (synopsis "ASCII transliterations of Unicode text")
39782 (description
39783 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
39784useful when integrating with legacy code that doesn't support Unicode, or for
39785ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
39786machine identifiers from human-readable Unicode strings that should still be
39787somewhat intelligible.")
39788 (license license:gpl2+)))
39789
39790(define-public python-unique-log-filter
39791 (package
39792 (name "python-unique-log-filter")
39793 (version "0.1.0")
39794 (source
39795 (origin
39796 (method git-fetch)
39797 (uri (git-reference
39798 (url "https://github.com/twizmwazin/unique_log_filter")
39799 (commit (string-append "v" version))))
39800 (file-name (git-file-name name version))
39801 (sha256
39802 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
39803 (build-system pyproject-build-system)
39804 (arguments
39805 (list #:test-backend #~'custom
39806 #:test-flags #~(list "test_unique_log_filter.py")))
39807 (native-inputs (list python-flit-core))
39808 (home-page "https://github.com/twizmwazin/unique_log_filter")
39809 (synopsis "Log filter that removes duplicate log messages")
39810 (description
39811 "This library provides a filter for the @code{logging} module
39812from the Python standard library which allows removing duplicate log
39813messages.")
39814 (license license:bsd-2)))
39815
39816(define-public python-uniseg
39817 (package
39818 (name "python-uniseg")
39819 (version "0.10.0")
39820 (source
39821 (origin
39822 (method url-fetch)
39823 (uri (pypi-uri "uniseg" version))
39824 (sha256
39825 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
39826 (build-system pyproject-build-system)
39827 (native-inputs
39828 (list python-pytest
39829 python-setuptools
39830 python-setuptools-scm))
39831 (home-page "https://bitbucket.org/emptypage/uniseg-python")
39832 (synopsis "Python library to determine Unicode text segmentations")
39833 (description
39834 "Uniseg is a Python package used to determine Unicode text segmentations.
39835Supported segmentations include:
39836@enumerate
39837@item @dfn{Code point} (any value in the Unicode codespace)
39838@item @dfn{Grapheme cluster} (user-perceived character made of a single or
39839multiple Unicode code points, e.g. \"G\" + acute-accent)
39840@item Word break
39841@item Sentence break
39842@item Line break
39843@end enumerate")
39844 (license license:expat)))
39845
39846(define-public python-universal-pathlib
39847 (package
39848 (name "python-universal-pathlib")
39849 (version "0.2.6")
39850 (source
39851 (origin
39852 (method git-fetch)
39853 (uri (git-reference
39854 (url "https://github.com/fsspec/universal_pathlib")
39855 (commit (string-append "v" version))))
39856 (file-name (git-file-name name version))
39857 (sha256
39858 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
39859 (build-system pyproject-build-system)
39860 (arguments
39861 (list
39862 #:tests? #f ;requires network
39863 #:phases
39864 #~(modify-phases %standard-phases
39865 (add-after 'unpack 'set-version
39866 (lambda _
39867 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
39868 (native-inputs
39869 (list python-setuptools
39870 python-setuptools-scm))
39871 (propagated-inputs
39872 (list python-fsspec
39873 python-pathlib-abc))
39874 (home-page "https://github.com/fsspec/universal_pathlib")
39875 (synopsis
39876 "@code{pathlib} API extended to use @code{fsspec} backends")
39877 (description
39878 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
39879API to support a variety of backend filesystems via filesystem_spec.")
39880 (license license:expat)))
39881
39882(define-public python-unpaddedbase64
39883 (package
39884 (name "python-unpaddedbase64")
39885 (version "2.1.0")
39886 (source
39887 (origin
39888 (method git-fetch)
39889 (uri (git-reference
39890 (url "https://github.com/matrix-org/python-unpaddedbase64")
39891 (commit (string-append "v" version))))
39892 (file-name (git-file-name name version))
39893 (sha256
39894 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
39895 (build-system pyproject-build-system)
39896 (native-inputs (list python-poetry-core
39897 python-pytest
39898 python-setuptools
39899 python-wheel))
39900 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
39901 (synopsis "Encode and decode Base64 without “=” padding")
39902 (description
39903 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
39904using “=” characters. However this conveys no benefit so many protocols
39905choose to use Base64 without the “=” padding.")
39906 (license license:asl2.0)))
39907
39908(define-public python-update-checker
39909 (package
39910 (name "python-update-checker")
39911 (version "0.18.0")
39912 (source
39913 (origin
39914 (method url-fetch)
39915 (uri (pypi-uri "update-checker" version))
39916 (sha256
39917 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
39918 (build-system pyproject-build-system)
39919 (native-inputs
39920 (list python-pytest
39921 python-setuptools))
39922 (propagated-inputs
39923 (list python-requests))
39924 (home-page "https://github.com/bboe/update_checker")
39925 (synopsis "Python module that will check for package updates")
39926 (description "This package provides a Python module that will check for
39927package updates.")
39928 (license license:bsd-2)))
39929
39930(define-public python-uri-template
39931 (package
39932 (name "python-uri-template")
39933 (version "1.3.0")
39934 (source
39935 (origin
39936 (method url-fetch)
39937 (uri (pypi-uri "uri-template" version))
39938 (sha256
39939 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
39940 (build-system pyproject-build-system)
39941 (arguments
39942 (list
39943 #:phases
39944 '(modify-phases %standard-phases
39945 (replace 'check
39946 (lambda* (#:key tests? #:allow-other-keys)
39947 (when tests?
39948 (invoke "python3" "test.py")))))))
39949 (native-inputs
39950 (list python-setuptools
39951 python-setuptools-scm
39952 python-wheel))
39953 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
39954 (synopsis "RFC 6570 URI Template Processor")
39955 (description "This package implements URI Template expansion in strict
39956adherence to RFC 6570, but adds a few extensions.")
39957 (license license:expat)))
39958
39959(define-public python-urwid
39960 (package
39961 (name "python-urwid")
39962 (version "3.0.3")
39963 (source
39964 (origin
39965 (method url-fetch)
39966 (uri (pypi-uri "urwid" version))
39967 (sha256
39968 (base32
39969 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
39970 (build-system pyproject-build-system)
39971 (arguments
39972 (list
39973 #:test-flags
39974 #~(list "tests"
39975 ;; According to Debian these tests are cursed.
39976 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
39977 "--ignore=tests/test_vterm.py")))
39978 (native-inputs
39979 (list python-pytest
39980 python-pytest-cov
39981 python-setuptools
39982 python-setuptools-scm))
39983 (propagated-inputs
39984 (list python-wcwidth
39985 ;; [optional]
39986 python-pygobject
39987 python-pyzmq
39988 python-tornado
39989 python-pyserial
39990 python-twisted))
39991 (home-page "https://urwid.org")
39992 (synopsis "Console user interface library for Python")
39993 (description
39994 "Urwid is a curses-based UI/widget library for Python. It includes many
39995features useful for text console applications.")
39996 (license license:lgpl2.1+)))
39997
39998(define-public python-urwid-2
39999 (package
40000 (inherit python-urwid)
40001 (name "python-urwid")
40002 (version "2.6.16")
40003 (source
40004 (origin
40005 (method url-fetch)
40006 (uri (pypi-uri "urwid" version))
40007 (sha256
40008 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
40009
40010(define-deprecated/public-alias python-urwid-3
40011 python-urwid) ;may be removed after 2025-11-12
40012
40013(define-public python-urwid-for-zulip-term
40014 ;; [email protected] requires exact 2.1.2 version otherewise some tests fail
40015 ;; to pass, remove when no longer required.
40016 (hidden-package
40017 (package
40018 (inherit python-urwid)
40019 (version "2.1.2")
40020 (source
40021 (origin
40022 (method url-fetch)
40023 (uri (pypi-uri "urwid" version))
40024 (sha256
40025 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
40026 (arguments
40027 (list #:tests? #f)))))
40028
40029(define-public python-urwid-readline
40030 (package
40031 (name "python-urwid-readline")
40032 (version "0.15.1")
40033 (source
40034 (origin
40035 (method git-fetch)
40036 (uri (git-reference
40037 (url "https://github.com/rr-/urwid_readline")
40038 (commit version)))
40039 (file-name (git-file-name name version))
40040 (sha256
40041 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
40042 (build-system pyproject-build-system)
40043 (native-inputs
40044 (list python-pytest
40045 python-setuptools))
40046 (propagated-inputs
40047 (list python-urwid))
40048 (home-page "https://github.com/rr-/urwid_readline")
40049 (synopsis "Text input widget for urwid that supports readline shortcuts")
40050 (description
40051 "This package provides a textbox edit widget for @code{python-urwid} that
40052supports @code{readline} shortcuts.")
40053 (license license:expat)))
40054
40055(define-public python-urwidgets
40056 (package
40057 (name "python-urwidgets")
40058 (version "0.2.1")
40059 (source
40060 (origin
40061 (method url-fetch)
40062 (uri (pypi-uri "urwidgets" version))
40063 (sha256
40064 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
40065 (build-system pyproject-build-system)
40066 (arguments
40067 (list #:tests? #f)) ;no tests
40068 (native-inputs
40069 (list python-setuptools))
40070 (propagated-inputs
40071 (list python-urwid-2))
40072 (home-page "https://github.com/AnonymouX47/urwidgets")
40073 (synopsis "Collection of widgets for urwid")
40074 (description
40075 "This package provides a collection of widgets for urwid.")
40076 (license license:expat)))
40077
40078(define-public python-urwidtrees
40079 (package
40080 (name "python-urwidtrees")
40081 (version "1.0.4")
40082 (source
40083 (origin
40084 (method git-fetch)
40085 ;; package author intends on distributing via github rather than pypi:
40086 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
40087 (uri (git-reference
40088 (url "https://github.com/pazz/urwidtrees")
40089 (commit version)))
40090 (file-name (git-file-name name version))
40091 (sha256
40092 (base32
40093 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
40094 (build-system pyproject-build-system)
40095 (arguments
40096 '(#:tests? #f)) ; no tests
40097 (propagated-inputs (list python-urwid))
40098 (native-inputs (list python-mock python-setuptools python-wheel))
40099 (home-page "https://github.com/pazz/urwidtrees")
40100 (synopsis "Tree widgets for urwid")
40101 (description "Urwidtrees is a Widget Container API for the @code{urwid}
40102toolkit. Use it to build trees of widgets.")
40103 (license license:gpl3+)))
40104
40105(define-public python-user-agents
40106 (package
40107 (name "python-user-agents")
40108 (version "2.2.0")
40109 (source
40110 (origin
40111 (method git-fetch)
40112 (uri (git-reference
40113 (url "https://github.com/selwin/python-user-agents")
40114 (commit (string-append "v" version))))
40115 (file-name (git-file-name name version))
40116 (sha256
40117 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
40118 (build-system pyproject-build-system)
40119 (arguments
40120 (list #:test-backend #~'unittest))
40121 (native-inputs
40122 (list python-setuptools))
40123 (propagated-inputs
40124 (list python-ua-parser))
40125 (home-page "https://github.com/selwin/python-user-agents")
40126 (synopsis "User Agent strings parsing library")
40127 (description
40128 "A library to identify devices (phones, tablets) and their capabilities by
40129parsing (browser/HTTP) user agent strings.")
40130 (license license:expat)))
40131
40132(define-public python-userpath
40133 (package
40134 (name "python-userpath")
40135 (version "1.9.2")
40136 (source
40137 (origin
40138 (method url-fetch)
40139 (uri (pypi-uri "userpath" version))
40140 (sha256
40141 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
40142 (build-system pyproject-build-system)
40143 (arguments
40144 ;; See https://github.com/ofek/userpath/issues/43.
40145 ;; In Guix, tests try to find the temporary build directory in PATH, but
40146 ;; only the store output is present.
40147 (list #:tests? #f))
40148 (native-inputs (list python-hatchling python-pytest))
40149 (propagated-inputs (list python-click))
40150 (home-page "https://github.com/ofek/userpath")
40151 (synopsis "Add locations to the user's PATH")
40152 (description "This package provides a tool for modifying a user's PATH.")
40153 (license license:expat)))
40154
40155(define-public python-userspacefs
40156 (package
40157 (name "python-userspacefs")
40158 (version "3.1.1")
40159 (source
40160 (origin
40161 (method url-fetch)
40162 (uri (pypi-uri "userspacefs" version))
40163 (sha256
40164 (base32 "0lfzgijza3p4wbrhlf8pzj89j7caj8x6aij78d4izppvq4kfjqs6"))))
40165 (build-system pyproject-build-system)
40166 (arguments
40167 (list #:tests? #f ;no tests
40168 #:phases
40169 #~(modify-phases %standard-phases
40170 (add-after 'unpack 'hardcode-libfuse
40171 (lambda* (#:key inputs #:allow-other-keys)
40172 (substitute* "userspacefs/fusepy.py"
40173 (("^_libfuse_path.*")
40174 (string-append "_libfuse_path = '"
40175 (search-input-file inputs "lib/libfuse.so")
40176 "'\n"))))))))
40177 (inputs (list fuse-2))
40178 (native-inputs (list python-setuptools))
40179 (propagated-inputs (list python-aiohttp python-typing-extensions))
40180 (home-page "https://thelig.ht/code/userspacefs/readme.html")
40181 (synopsis "User-space file systems for Python")
40182 (description
40183 "@code{userspacefs} is a library that allows you to easily write
40184user-space file systems in Python.")
40185 (license license:gpl3+)))
40186
40187(define-public python-utils
40188 (package
40189 (name "python-utils")
40190 (version "3.9.1")
40191 (source
40192 (origin
40193 (method url-fetch)
40194 (uri (pypi-uri "python_utils" version))
40195 (sha256
40196 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
40197 (build-system pyproject-build-system)
40198 (arguments
40199 (list
40200 #:phases
40201 #~(modify-phases %standard-phases
40202 (add-after 'unpack 'fix-pytest-config
40203 (lambda _
40204 ;; Drop test coverage requirements.
40205 (substitute* "pytest.ini"
40206 ((".*--cov.*") "")))))))
40207 (native-inputs
40208 (list python-pytest
40209 python-pytest-asyncio
40210 python-setuptools))
40211 (propagated-inputs
40212 (list python-loguru
40213 python-typing-extensions))
40214 (home-page "https://github.com/WoLpH/python-utils")
40215 (synopsis "Convenient utilities not included with the standard Python install")
40216 (description
40217 "Python Utils is a collection of small Python functions and classes
40218which make common patterns shorter and easier.")
40219 (license license:bsd-2)))
40220
40221(define-public python-uuid6
40222 (package
40223 (name "python-uuid6")
40224 (version "2025.0.1")
40225 (source
40226 (origin
40227 (method git-fetch)
40228 (uri (git-reference
40229 (url "https://github.com/oittaa/uuid6-python")
40230 (commit version)))
40231 (file-name (git-file-name name version))
40232 (sha256
40233 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
40234 (build-system pyproject-build-system)
40235 (arguments
40236 (list
40237 #:test-flags
40238 ;; Test is time based: AssertionError: 13987034766.015247 !=
40239 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
40240 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")
40241 #:phases
40242 #~(modify-phases %standard-phases
40243 (add-after 'unpack 'set-version
40244 (lambda _
40245 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
40246 (native-inputs
40247 (list python-pytest
40248 python-setuptools
40249 python-setuptools-scm))
40250 (home-page "https://github.com/oittaa/uuid6-python")
40251 (synopsis "Time-based UUID formats which are suited for use as a database key")
40252 (description
40253 "This module extends immutable UUID objects (the UUID class) with the
40254functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
40255@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
40256 (license license:expat)))
40257
40258(define-public python-validate-email
40259 (package
40260 (name "python-validate-email")
40261 (version "1.3")
40262 (source
40263 (origin
40264 (method url-fetch)
40265 (uri (pypi-uri "validate_email" version))
40266 (sha256
40267 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
40268 (build-system pyproject-build-system)
40269 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
40270 (native-inputs
40271 (list python-setuptools))
40272 (home-page "https://github.com/syrusakbary/validate_email")
40273 (synopsis "Verifies if an email address is valid and really exists")
40274 (description
40275 "@code{validate_email} can be used to verify if an email address is
40276valid and really exists.")
40277 (license license:lgpl3+)))
40278
40279(define-public python-validators
40280 (package
40281 (name "python-validators")
40282 (version "0.34.0")
40283 (source
40284 (origin
40285 (method url-fetch)
40286 (uri (pypi-uri "validators" version))
40287 (sha256
40288 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
40289 (build-system pyproject-build-system)
40290 (arguments
40291 (list
40292 ;; python-eth-hash is not packed yet.
40293 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
40294 (native-inputs
40295 (list python-pytest
40296 python-setuptools
40297 python-wheel))
40298 (propagated-inputs
40299 (list python-decorator
40300 ;; python-eth-hash ; optional, not packed yet.
40301 python-six))
40302 (home-page "https://github.com/kvesteri/validators")
40303 (synopsis "Data validation library")
40304 (description
40305 "This package contains validators for different things such as email
40306addresses, IP addresses, URLs, hashes and more. It has been designed to be
40307easy to use and not require defining a schema or form just to validate some
40308input.")
40309 (license license:expat)))
40310
40311(define-public python-valkey
40312 (package
40313 (name "python-valkey")
40314 (version "6.1.1")
40315 (source
40316 (origin
40317 (method git-fetch)
40318 (uri (git-reference
40319 (url "https://github.com/valkey-io/valkey-py")
40320 (commit (string-append "v" version))))
40321 (file-name (git-file-name name version))
40322 (sha256
40323 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
40324 (build-system pyproject-build-system)
40325 (arguments
40326 ;; XXX: A lot of tests fail with ConnectionError
40327 ;; Maybe we need to spawn a valkey server?
40328 (list #:tests? #f))
40329 (native-inputs
40330 (list python-setuptools))
40331 (home-page "https://github.com/valkey-io/valkey-py")
40332 (synopsis "Python client for Valkey")
40333 (description
40334 "This package provides a python client for the @code{Valkey} key-value
40335store, forked from redis-py.")
40336 (license license:expat)))
40337
40338;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
40339;; package.
40340(define-public python-vcversioner
40341 (package
40342 (name "python-vcversioner")
40343 (version "2.16.0.0")
40344 (source
40345 (origin
40346 (method url-fetch)
40347 (uri (pypi-uri "vcversioner" version))
40348 (sha256
40349 (base32
40350 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
40351 (build-system pyproject-build-system)
40352 (arguments
40353 (list #:tests? #f)) ;no tests in PyPI archvie
40354 (native-inputs
40355 (list python-setuptools))
40356 (home-page "https://github.com/habnabit/vcversioner")
40357 (synopsis "Python library for version number discovery")
40358 (description
40359 "Vcversioner is a Python library that inspects tagging information in a
40360variety of version control systems in order to discover version numbers.")
40361 (license license:isc)))
40362
40363(define-public python-vdf
40364 (package
40365 (name "python-vdf")
40366 (version "3.4")
40367 (source
40368 (origin
40369 (method git-fetch) ; no tests in PyPI release
40370 (uri (git-reference
40371 (url "https://github.com/ValvePython/vdf")
40372 (commit (string-append "v" version))))
40373 (file-name (git-file-name name version))
40374 (sha256
40375 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
40376 (build-system pyproject-build-system)
40377 (native-inputs
40378 (list python-pytest python-setuptools))
40379 (home-page "https://github.com/ValvePython/vdf")
40380 (synopsis "Work with Valve's VDF text format")
40381 (description
40382 "This package provides @code{python-vdf}, a library for working with
40383 Valve's VDF text format.")
40384 (license license:expat)))
40385
40386(define-public python-vendetect
40387 (package
40388 (name "python-vendetect")
40389 (version "0.0.3")
40390 (source
40391 (origin
40392 (method url-fetch)
40393 (uri (pypi-uri "vendetect" version))
40394 (sha256
40395 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
40396 (build-system pyproject-build-system)
40397 (propagated-inputs (list python-copydetect python-rich))
40398 (native-inputs (list python-hatchling python-pytest))
40399 (home-page "https://github.com/trailofbits/vendetect")
40400 (synopsis "Detect vendored and copy-pasted code")
40401 (description
40402 "Vendetect helps identify copied or vendored code between repositories,
40403making it easier to detect when code has been copied with or without
40404attribution. It uses similarity detection algorithms to compare code files
40405and highlight matching sections.")
40406 (license license:agpl3+)))
40407
40408;; XXX: No updates since 2017.
40409(define-public python-verboselogs
40410 (package
40411 (name "python-verboselogs")
40412 (version "1.7")
40413 (source
40414 (origin
40415 (method url-fetch)
40416 (uri (pypi-uri "verboselogs" version))
40417 (sha256
40418 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
40419 (build-system pyproject-build-system)
40420 (arguments
40421 (list
40422 #:test-flags
40423 ;; Do not run pylint plugin test, as astroid is an old unsupported
40424 ;; version.
40425 #~(list "-k" "not test_pylint_plugin"
40426 "verboselogs/tests.py")))
40427 (native-inputs
40428 (list python-mock
40429 python-pytest
40430 python-setuptools))
40431 (home-page "https://verboselogs.readthedocs.io")
40432 (synopsis "Verbose logging level for Python's logging module")
40433 (description
40434 "The @code{verboselogs} package extends Python's @code{logging} module to
40435add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
40436 (license license:expat)))
40437
40438(define-public python-verlib2
40439 (package
40440 (name "python-verlib2")
40441 (version "0.3.1")
40442 (source
40443 (origin
40444 (method git-fetch)
40445 (uri (git-reference
40446 (url "https://github.com/pyveci/verlib2")
40447 (commit (string-append "v" version))))
40448 (file-name (git-file-name name version))
40449 (sha256
40450 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
40451 (build-system pyproject-build-system)
40452 (propagated-inputs (list python-importlib-metadata))
40453 (native-inputs
40454 (list python-pretend python-pytest python-pytest-cov python-setuptools))
40455 (home-page "https://github.com/pyveci/verlib2")
40456 (synopsis "Python versioning utilities")
40457 (description
40458 "This package provides a standalone variant of @code{distutils.version} and
40459@code{packaging.version}, without anything else.")
40460 (license license:bsd-2)))
40461
40462;; XXX: No updates since 2018, consider to remove when fails to build, it's a
40463;; leaf package.
40464(define-public python-version
40465 ;; No version tags available in the git repo; just using bare commit instead.
40466 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
40467 (revision "1"))
40468 (package
40469 (name "python-version")
40470 (version (git-version "0.0.2" revision commit))
40471 (source
40472 (origin
40473 (method git-fetch)
40474 (uri (git-reference
40475 (url "https://gitlab.com/halfak/python_version")
40476 (commit commit)))
40477 (file-name (git-file-name name version))
40478 (sha256
40479 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
40480 (build-system pyproject-build-system)
40481 (arguments
40482 (list #:tests? #f)) ;no tests
40483 (native-inputs
40484 (list python-setuptools))
40485 (home-page "https://gitlab.com/halfak/python_version")
40486 (synopsis "Python version checking utility")
40487 (description
40488 "This package provides a simple utility for checking the python version.")
40489 (license license:expat))))
40490
40491(define-public python-versioneer
40492 (package
40493 (name "python-versioneer")
40494 (version "0.29")
40495 (source
40496 (origin
40497 (method url-fetch)
40498 (uri (pypi-uri "versioneer" version))
40499 (sha256
40500 (base32
40501 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
40502 (patches (search-patches "python-versioneer-guix-support.patch"))))
40503 (build-system pyproject-build-system)
40504 (arguments
40505 (list
40506 ;; Minimize test requirements.
40507 #:test-flags
40508 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
40509 "--ignore=test/git/test_invocations.py"
40510 "--ignore=test/test_render.py")
40511 #:phases
40512 #~(modify-phases %standard-phases
40513 (add-before 'check 'pre-check
40514 (lambda _
40515 (invoke "python" "setup.py" "make_versioneer"
40516 "make_long_version_py_git"))))))
40517 (native-inputs
40518 (list git-minimal/pinned
40519 python-pytest
40520 python-setuptools
40521 python-wheel))
40522 (propagated-inputs
40523 (list python-tomli))
40524 (home-page "https://github.com/python-versioneer/python-versioneer")
40525 (synopsis "Version-string management for VCS-controlled trees")
40526 (description
40527 "@code{versioneer} is a tool for managing a recorded version number in
40528distutils-based python projects. The goal is to remove the tedious and
40529error-prone \"update the embedded version string\" step from your release
40530process.")
40531 (license license:unlicense)))
40532
40533(define-public python-verspec
40534 (package
40535 (name "python-verspec")
40536 (version "0.1.0")
40537 (source
40538 (origin
40539 (method url-fetch)
40540 (uri (pypi-uri "verspec" version))
40541 (sha256
40542 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
40543 (build-system pyproject-build-system)
40544 (arguments
40545 (list
40546 #:phases
40547 #~(modify-phases %standard-phases
40548 (add-before 'check 'pre-check
40549 (lambda _
40550 (invoke "touch" "test/__init__.py"))))))
40551 (native-inputs
40552 (list python-pretend
40553 python-pytest
40554 python-setuptools))
40555 (home-page "https://github.com/jimporter/verspec")
40556 (synopsis "Flexible version handling for Python")
40557 (description
40558 "This Python library handles software versions and specifiers. It is
40559adapted from the @code{packaging} package.")
40560 (license (list license:bsd-2 license:asl2.0))))
40561
40562(define-public python-vine
40563 (package
40564 (name "python-vine")
40565 (version "5.1.0")
40566 (source
40567 (origin
40568 (method url-fetch)
40569 (uri (pypi-uri "vine" version))
40570 (sha256
40571 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
40572 (build-system pyproject-build-system)
40573 (arguments
40574 (list
40575 #:test-flags
40576 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
40577 #~(list "-k" (string-join
40578 (list "not test_evaluate"
40579 "test_reverse"
40580 "test_cancel"
40581 "test_throw")
40582 " and not "))))
40583 (native-inputs
40584 (list python-pytest python-setuptools python-wheel))
40585 (home-page "https://github.com/celery/vine")
40586 (synopsis "Promises for Python")
40587 (description
40588 "@code{vine} provides a special implementation of promises in that it can
40589be used both for \"promise of a value\" and lazy evaluation. The biggest
40590upside for this is that everything in a promise can also be a promise,
40591e.g. filters, callbacks and errbacks can all be promises.")
40592 (license license:bsd-3)))
40593
40594(define-public python-virtualenv
40595 (package
40596 (name "python-virtualenv")
40597 (version "20.29.1")
40598 (source
40599 (origin
40600 (method url-fetch)
40601 (uri (pypi-uri "virtualenv" version))
40602 (sha256
40603 (base32
40604 "0dfwnn8i1y33kgxhi4xyhsj4yr5vsin7zf9c343bcbyk700rgf5q"))))
40605 (build-system pyproject-build-system)
40606 (arguments
40607 (list
40608 #:test-flags
40609 #~(list "-k" (string-join
40610 (list
40611 ;; These tests require Internet access.
40612 "not test_seed_link_via_app_data"
40613 ;; AssertionError: assert 'python' in ['python3',
40614 ;; 'python3.11'].
40615 ;;
40616 ;; PythonInfo() returns: 'system_executable':
40617 ;; '/gnu/store/...-python-wrapper-3.11.11/bin/python'
40618 "test_fallback_existent_system_executable")
40619 " and not "))))
40620 (native-inputs
40621 (list python-flaky
40622 python-hatch-vcs
40623 python-hatchling
40624 python-packaging
40625 python-pytest
40626 python-pytest-env
40627 python-pytest-freezer
40628 python-pytest-mock
40629 python-pytest-timeout
40630 python-setuptools
40631 python-time-machine))
40632 (propagated-inputs
40633 (list python-distlib
40634 python-filelock
40635 python-platformdirs))
40636 (home-page "https://virtualenv.pypa.io/")
40637 (synopsis "Virtual Python environment builder")
40638 (description
40639 "Virtualenv is a tool to create isolated Python environments.")
40640 (license license:expat)))
40641
40642(define-public python-virtualenv-for-hatch
40643 ;; For [email protected], remove when no longer required.
40644 (hidden-package
40645 (package
40646 (inherit python-virtualenv)
40647 (version "20.25.3")
40648 (source
40649 (origin
40650 (method url-fetch)
40651 (uri (pypi-uri "virtualenv" version))
40652 (sha256
40653 (base32 "1gj57xqgrg53yfn9ypikgky01hvazxdyl556kwsc7b7avyxm9dbv")))))))
40654
40655;; XXX: No new release since 2021, no updates on default branch since 2023, no
40656;; users in Guix; consider to remove if it keeps failing to build.
40657(define-public python-virtualenv-clone
40658 (package
40659 (name "python-virtualenv-clone")
40660 (version "0.5.7")
40661 (source
40662 (origin
40663 (method git-fetch)
40664 (uri (git-reference
40665 (url "https://github.com/edwardgeorge/virtualenv-clone")
40666 (commit version)))
40667 (file-name (git-file-name name version))
40668 (sha256
40669 (base32 "0p0d1y3axvjfnxlgwjx2374gikc8bmc82g0m7yashihbikh7pcxa"))))
40670 (build-system pyproject-build-system)
40671 (arguments
40672 (list
40673 #:test-flags
40674 #~(list "-k" (string-join
40675 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
40676 ;; 0xba in position 10: invalid start byte
40677 (list "not test_clone_contents"
40678 ;; AssertionError: All versions were skipped.
40679 "test_clone_syspath"
40680 "test_clone_version"
40681 "test_virtualenv_syspath"
40682 "test_virtualenv_versions")
40683 " and not "))))
40684 (native-inputs
40685 (list python-pytest
40686 python-setuptools
40687 python-tomli
40688 python-virtualenv
40689 python-wheel))
40690 (home-page "https://github.com/edwardgeorge/virtualenv-clone")
40691 (synopsis "Clone a non-relocatable virtualenv cleanly")
40692 (description
40693 "Clone non-relocatable virtualenvs without breaking site-packages.")
40694 (license license:expat)))
40695
40696(define-public python-vncdotool
40697 (package
40698 (name "python-vncdotool")
40699 (version "1.2.0")
40700 (source
40701 (origin
40702 (method git-fetch)
40703 (uri (git-reference
40704 (url "http://github.com/sibson/vncdotool")
40705 (commit (string-append "v" version))))
40706 (file-name (git-file-name name version))
40707 (sha256
40708 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
40709 (build-system pyproject-build-system)
40710 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
40711 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
40712 python-setuptools python-wheel))
40713 (home-page "http://github.com/sibson/vncdotool")
40714 (synopsis "Command line VNC client")
40715 (description
40716 "This package provides a Python command line VNC client. It can be
40717useful to automating interactions with virtual machines or hardware devices
40718that are otherwise difficult to control.")
40719 (license license:expat)))
40720
40721(define-public python-vncdotool-bootstrap
40722 (hidden-package
40723 (package/inherit python-vncdotool
40724 (arguments (list #:tests? #f))
40725 (native-inputs (list python-pexpect python-pytest python-setuptools
40726 python-wheel)))))
40727
40728(define-public python-vobject
40729 (package
40730 (name "python-vobject")
40731 (version "0.9.9")
40732 (source (origin
40733 (method url-fetch)
40734 (uri (pypi-uri "vobject" version))
40735 (sha256
40736 (base32
40737 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
40738 (build-system pyproject-build-system)
40739 (arguments
40740 '(;; The test suite relies on some non-portable Windows interfaces. Tests
40741 ;; are rewokred on master's HEAD.
40742 #:tests? #f))
40743 (native-inputs
40744 (list python-setuptools))
40745 (propagated-inputs
40746 (list python-dateutil
40747 python-pytz
40748 python-six)) ;it's dropped on master's HEAD
40749 (home-page "https://py-vobject.github.io/")
40750 (synopsis "Parse and generate vCard and vCalendar files")
40751 (description
40752 "Vobject is intended to be a full featured Python package for parsing
40753and generating vCard and vCalendar files. Currently, iCalendar files are
40754supported and well tested. vCard 3.0 files are supported, and all data should
40755be imported, but only a few components are understood in a sophisticated way.")
40756 (license license:asl2.0)))
40757
40758(define-public python-voluptuous
40759 (package
40760 (name "python-voluptuous")
40761 (version "0.15.2")
40762 (source
40763 (origin
40764 (method url-fetch)
40765 (uri (pypi-uri "voluptuous" version))
40766 (sha256
40767 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
40768 (build-system pyproject-build-system)
40769 (native-inputs
40770 (list python-pytest
40771 python-setuptools))
40772 (home-page "https://github.com/alecthomas/voluptuous")
40773 (synopsis "Python data validation library")
40774 (description
40775 "Voluptuous is a Python data validation library. It is primarily
40776intended for validating data coming into Python as JSON, YAML, etc.")
40777 (license license:bsd-3)))
40778
40779(define-public python-wadler-lindig
40780 (package
40781 (name "python-wadler-lindig")
40782 (version "0.1.7")
40783 (source
40784 (origin
40785 ;; GitHub includes the tests, unlike the PyPI tarball
40786 (method git-fetch)
40787 (uri (git-reference
40788 (url "https://github.com/patrick-kidger/wadler_lindig")
40789 (commit (string-append "v" version))))
40790 (file-name (git-file-name name version))
40791 (sha256
40792 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
40793 (build-system pyproject-build-system)
40794 (native-inputs (list python-hatchling python-pytest python-numpy))
40795 (home-page "https://docs.kidger.site/wadler_lindig")
40796 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
40797 (description
40798 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
40799library for Python that implements a simplified version of the Wadler-Lindig
40800algorithm. Designed to consume less horizontal space than Python's
40801built-in pprint.pprint, it produces compact, well-formatted representations
40802even for complex custom types.")
40803 (license license:asl2.0)))
40804
40805(define-public python-wand
40806 (package
40807 (name "python-wand")
40808 (version "0.6.13")
40809 (source
40810 (origin
40811 (method url-fetch)
40812 (uri (pypi-uri "Wand" version))
40813 (sha256
40814 (base32 "1jpwm956vm35hmgjndr2jwrcql0bwvpsl88q5nr0x8ppxa2380gm"))))
40815 (build-system pyproject-build-system)
40816 (arguments
40817 (list
40818 #:test-flags
40819 ;; These two tests fail even though the signatures are identical.
40820 '(list "-k" "not fourier_transform")
40821 #:phases
40822 #~(modify-phases %standard-phases
40823 (add-after 'unpack 'hardcode-lib-path
40824 (lambda _
40825 (substitute* "wand/api.py"
40826 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
40827 (string-append "\"" #$(this-package-input "imagemagick") "\""))
40828 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
40829 "\".Q16\"")))))))
40830 (native-inputs
40831 (list python-setuptools python-pytest python-wheel))
40832 (inputs
40833 (list imagemagick))
40834 (home-page "https://docs.wand-py.org/")
40835 (synopsis "MagickWand API binding for Python")
40836 (description
40837 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
40838 (license license:expat)))
40839
40840(define-public python-wasabi
40841 (package
40842 (name "python-wasabi")
40843 (version "1.1.3")
40844 (source
40845 (origin
40846 (method url-fetch)
40847 (uri (pypi-uri "wasabi" version))
40848 (sha256
40849 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
40850 (build-system pyproject-build-system)
40851 (arguments
40852 (list
40853 #:test-flags
40854 ;; Test requires nbconvert which is huge.
40855 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
40856 (native-inputs
40857 (list python-pytest
40858 python-setuptools))
40859 (propagated-inputs
40860 (list python-colorama))
40861 (home-page "https://github.com/ines/wasabi")
40862 (synopsis "Console printing and formatting toolkit")
40863 (description
40864 "This package provides a lightweight console printing and formatting
40865toolkit for Python.")
40866 (license license:expat)))
40867
40868(define-public python-watchdog
40869 (package
40870 (name "python-watchdog")
40871 (version "6.0.0")
40872 (source
40873 (origin
40874 (method url-fetch)
40875 (uri (pypi-uri "watchdog" version))
40876 (sha256
40877 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
40878 (build-system pyproject-build-system)
40879 (arguments
40880 (list
40881 #:test-flags
40882 #~(list "-k" (string-join
40883 (list "not test_kill_auto_restart"
40884 "test_auto_restart_on_file_change_debounce"
40885 ;; Fails with too many open files.
40886 "test_select_fd")
40887 " and not "))))
40888 (native-inputs
40889 (list python-pytest
40890 python-pytest-cov
40891 python-pytest-timeout
40892 python-setuptools))
40893 (propagated-inputs
40894 (list python-pyyaml))
40895 (home-page "https://github.com/gorakhargosh/watchdog")
40896 (synopsis "File system events monitoring")
40897 (description "This package provides a way to monitor file system events
40898such as a file modification and trigger an action. This is similar to inotify,
40899but portable.")
40900 (license license:asl2.0)))
40901
40902(define-public python-watchfiles
40903 (package
40904 (name "python-watchfiles")
40905 (version "1.1.1")
40906 (source
40907 (origin
40908 (method git-fetch)
40909 (uri (git-reference
40910 (url "https://github.com/samuelcolvin/watchfiles")
40911 (commit (string-append "v" version))))
40912 (file-name (git-file-name name version))
40913 (sha256
40914 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
40915 (build-system pyproject-build-system)
40916 (arguments
40917 (list
40918 ;; Missing file in source.
40919 #:test-flags ''("-k" "not test_docs_examples")
40920 #:imported-modules `(,@%cargo-build-system-modules
40921 ,@%pyproject-build-system-modules)
40922 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
40923 (guix build pyproject-build-system)
40924 (guix build utils))
40925 #:phases
40926 #~(modify-phases %standard-phases
40927 (add-after 'unpack 'prepare-cargo-build-system
40928 (lambda args
40929 (for-each
40930 (lambda (phase)
40931 (format #t "Running cargo phase: ~a~%" phase)
40932 (apply (assoc-ref cargo:%standard-phases phase)
40933 #:cargo-target #$(cargo-triplet)
40934 args))
40935 '(unpack-rust-crates
40936 configure
40937 check-for-pregenerated-files
40938 patch-cargo-checksums))))
40939 (add-after 'build 'install-rust-library
40940 (lambda _
40941 (copy-file "target/release/lib_rust_notify.so"
40942 "watchfiles/_rust_notify.so"))))))
40943 (native-inputs
40944 (append
40945 (list maturin
40946 python-anyio
40947 python-dirty-equals
40948 python-pytest
40949 python-pytest-mock
40950 python-pytest-timeout
40951 rust
40952 `(,rust "cargo"))
40953 (or (and=> (%current-target-system)
40954 (compose list make-rust-sysroot))
40955 '())))
40956 (inputs
40957 (cargo-inputs 'python-watchfiles))
40958 (propagated-inputs
40959 (list python-anyio))
40960 (home-page "https://github.com/samuelcolvin/watchfiles")
40961 (synopsis "Simple, modern file watching and code reload in Python")
40962 (description
40963 "Simple, modern file watching and code reload in Python inspired by
40964@code{watchdog}. Among the differences are a unified approach for each
40965operating systems and an elegant approach to concurrency using threading.")
40966 (license license:expat)))
40967
40968(define-public python-wcwidth
40969 (package
40970 (name "python-wcwidth")
40971 (version "0.2.13")
40972 (source (origin
40973 (method url-fetch)
40974 (uri (pypi-uri "wcwidth" version))
40975 (sha256
40976 (base32
40977 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
40978 (build-system pyproject-build-system)
40979 (native-inputs (list python-pytest
40980 python-pytest-cov
40981 python-setuptools
40982 python-wheel))
40983 (home-page "https://github.com/jquast/wcwidth")
40984 (synopsis "Measure number of terminal column cells of wide-character codes")
40985 (description "Wcwidth measures the number of terminal column cells of
40986wide-character codes. It is useful for those implementing a terminal emulator,
40987or programs that carefully produce output to be interpreted by one. It is a
40988Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
40989specified in POSIX.1-2001 and POSIX.1-2008.")
40990 (license license:expat)))
40991
40992(define-public python-whatever
40993 (package
40994 (name "python-whatever")
40995 (version "0.7")
40996 (source
40997 (origin
40998 (method git-fetch)
40999 (uri (git-reference
41000 (url "https://github.com/Suor/whatever")
41001 (commit version)))
41002 (file-name (git-file-name name version))
41003 (sha256
41004 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
41005 (build-system pyproject-build-system)
41006 (native-inputs
41007 (list python-pytest python-setuptools python-wheel))
41008 (home-page "https://github.com/Suor/whatever")
41009 (synopsis "Make anonymous functions by partial application of operators")
41010 (description "@code{whatever} provides an easy way to make anonymous
41011functions by partial application of operators.")
41012 (license license:bsd-3)))
41013
41014(define-public python-whatthepatch
41015 (package
41016 (name "python-whatthepatch")
41017 (version "1.0.7")
41018 (source
41019 (origin
41020 (method url-fetch)
41021 (uri (pypi-uri "whatthepatch" version))
41022 (sha256
41023 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
41024 (build-system pyproject-build-system)
41025 (native-inputs (list python-pytest python-setuptools))
41026 (home-page "https://github.com/cscorley/whatthepatch")
41027 (synopsis "Patch parsing and application library")
41028 (description
41029 "This package provides a patch parsing and application library.")
41030 (license license:expat)))
41031
41032(define-public python-wheel-filename
41033 (package
41034 (name "python-wheel-filename")
41035 (version "1.4.2")
41036 (source
41037 (origin
41038 (method url-fetch)
41039 (uri (pypi-uri "wheel_filename" version))
41040 (sha256
41041 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
41042 (build-system pyproject-build-system)
41043 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
41044 (home-page "https://github.com/wheelodex/wheel-filename")
41045 (synopsis "Parse wheel filenames")
41046 (description
41047 "This software allows you to verify
41048@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
41049filenames and parse them into their component fields.
41050
41051This package adheres strictly to the standard, with the following
41052exceptions:
41053
41054@itemize @bullet
41055@item
41056Version components may be any sequence of the relevant set of
41057characters; they are not verified for PEP 440 compliance.
41058@item
41059The @file{.whl} file extension is matched case-insensitively.
41060@end itemize")
41061 (license license:expat)))
41062
41063(define-public python-whenever
41064 (package
41065 (name "python-whenever")
41066 (version "0.9.2")
41067 (source
41068 (origin
41069 (method url-fetch)
41070 (uri (pypi-uri "whenever" version))
41071 (sha256
41072 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
41073 (build-system pyproject-build-system)
41074 (arguments
41075 (list
41076 ;; tests: 2170 passed, 3 skipped, 2 warnings
41077 #:phases
41078 #~(modify-phases %standard-phases
41079 ;; Use the pure python version
41080 (add-before 'build 'setenv
41081 (lambda _
41082 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
41083 (add-before 'check 'set-check-environment
41084 (lambda* (#:key inputs #:allow-other-keys)
41085 (setenv "TZ" "UTC")
41086 (setenv "TZDIR"
41087 (search-input-directory inputs
41088 "share/zoneinfo")))))))
41089 (propagated-inputs
41090 (list python-time-machine python-tzdata python-tzlocal))
41091 (native-inputs
41092 (list python-pytest
41093 python-setuptools
41094 tzdata-for-tests))
41095 (home-page "https://whenever.readthedocs.io/")
41096 (synopsis "Modern datetime library for Python")
41097 (description "Modern datetime library for Python. Supports:
41098@itemize
41099@item DST-safe arithmetic
41100@item Nanosecond precision
41101@item Date arithmetic
41102@end itemize")
41103 (license license:expat)))
41104
41105;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
41106(define-public python-whichcraft
41107 (package
41108 (name "python-whichcraft")
41109 (version "0.6.1")
41110 (source
41111 (origin
41112 (method url-fetch)
41113 (uri (pypi-uri "whichcraft" version))
41114 (sha256
41115 (base32
41116 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
41117 (build-system pyproject-build-system)
41118 (native-inputs
41119 (list python-pytest python-setuptools))
41120 (home-page "https://github.com/pydanny/whichcraft")
41121 (synopsis "Cross-platform cross-python shutil.which functionality")
41122 (description
41123 "This package provides a shim of the shutil.which function that's
41124designed to work across multiple versions of Python.")
41125 (license license:bsd-3)))
41126
41127(define-public python-whoosh
41128 ;; XXX: 2.7.4 was placed in 2016 and no longer copatible with how setuptools
41129 ;; parses setup.py, use the latest commit, see:
41130 ;; <https://codeberg.org/guix/guix/issues/3318>,
41131 ;; <https://github.com/whoosh-community/whoosh/issues/561>.
41132 (let ((commit "d9a3fa2a4905e7326c9623c89e6395713c189161")
41133 (revision "0"))
41134 (package
41135 (name "python-whoosh")
41136 (version (git-version "2.7.4" revision commit))
41137 (source
41138 (origin
41139 (method git-fetch)
41140 (uri (git-reference
41141 (url "https://github.com/mchaput/whoosh")
41142 (commit commit)))
41143 (file-name (git-file-name name version))
41144 (sha256
41145 (base32 "1i16229nkggl9qi57kxapbc4f2p2wpr67fswvr97w13839d6dxpp"))))
41146 (build-system pyproject-build-system)
41147 (native-inputs
41148 (list python-pytest python-setuptools))
41149 (propagated-inputs
41150 (list python-cached-property))
41151 (home-page "https://github.com/mchaput/whoosh")
41152 (synopsis "Full text indexing, search, and spell checking library")
41153 (description
41154 "Whoosh is a fast, pure-Python full text indexing, search, and spell
41155checking library.")
41156 (license license:bsd-2))))
41157
41158(define-public python-widgetsnbextension
41159 (package
41160 (name "python-widgetsnbextension")
41161 (version "4.0.14")
41162 (source
41163 (origin
41164 (method url-fetch)
41165 (uri (pypi-uri "widgetsnbextension" version))
41166 (sha256
41167 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
41168 (build-system pyproject-build-system)
41169 (arguments
41170 (list #:tests? #f)) ;no tests in PyPI or git
41171 (native-inputs
41172 (list python-jupyter-packaging
41173 python-setuptools))
41174 (home-page "https://ipython.org")
41175 (synopsis "IPython HTML widgets for Jupyter")
41176 (description "This package provides interactive HTML widgets for Jupyter
41177notebooks.")
41178 (license license:bsd-3)))
41179
41180(define-public python-wrapt
41181 (package
41182 (name "python-wrapt")
41183 (version "1.17.0")
41184 (source
41185 (origin
41186 (method url-fetch)
41187 (uri (pypi-uri "wrapt" version))
41188 (sha256
41189 (base32
41190 "00886b7ry1vdbvpc2wi880y563xf6y4mxwwfm1q12wvw66i7l60n"))))
41191 (build-system pyproject-build-system)
41192 (native-inputs (list python-pytest python-setuptools python-wheel))
41193 (home-page "https://github.com/GrahamDumpleton/wrapt")
41194 (synopsis "Module for decorators, wrappers and monkey patching")
41195 (description
41196 "The aim of the wrapt module is to provide a transparent object proxy for
41197 Python, which can be used as the basis for the construction of function
41198 wrappers and decorator functions.")
41199 (license license:bsd-2)))
41200
41201(define-public python-wurlitzer
41202 (package
41203 (name "python-wurlitzer")
41204 (version "3.1.1")
41205 (source
41206 (origin
41207 (method url-fetch)
41208 (uri (pypi-uri "wurlitzer" version))
41209 (sha256
41210 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
41211 (build-system pyproject-build-system)
41212 (arguments
41213 (list #:test-flags #~(list "test.py")))
41214 (native-inputs
41215 (list python-pytest
41216 python-setuptools))
41217 (home-page "https://github.com/minrk/wurlitzer")
41218 (synopsis "Capture C-level output in context managers")
41219 (description
41220 "This library helps to redirect @code{sys.stdout} to a stream or a file
41221while executing some piece of code, including C code running within a Python
41222process.")
41223 (license license:expat)))
41224
41225(define-public python-xattr
41226 (package
41227 (name "python-xattr")
41228 (version "1.2.0")
41229 (source
41230 (origin
41231 (method url-fetch)
41232 (uri (pypi-uri "xattr" version))
41233 (sha256
41234 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
41235 (build-system pyproject-build-system)
41236 (native-inputs
41237 (list python-pytest
41238 python-setuptools))
41239 (propagated-inputs
41240 (list python-cffi))
41241 (home-page "https://github.com/xattr/xattr")
41242 (synopsis "Python wrapper for extended file system attributes")
41243 (description "This package provides a Python wrapper for using extended
41244file system attributes. Extended attributes extend the basic attributes of files
41245and directories in the file system. They are stored as name:data pairs
41246associated with file system objects (files, directories, symlinks, etc).")
41247 (license license:expat)))
41248
41249(define-public python-xdg
41250 (package
41251 (name "python-xdg")
41252 (version "6.0.0")
41253 (source (origin
41254 (method url-fetch)
41255 (uri (pypi-uri "xdg" version))
41256 (sha256
41257 (base32
41258 "14hwk9j5zjc8rvirw95mrb07zdnpjaxjx2mj3rnq8pnlyaa809r4"))))
41259 (build-system pyproject-build-system)
41260 (arguments (list #:tests? #f)) ; No tests in PyPi tarball.
41261 (native-inputs
41262 (list python-poetry-core))
41263 (home-page "https://github.com/srstevenson/xdg-base-dirs")
41264 (synopsis "Variables defined by the XDG Base Directory Specification")
41265 (description "xdg-base-dirs is a Python module that provides functions to
41266return paths to the directories defined by the XDG Base Directory
41267Specification, to save you from duplicating the same snippet of logic in every
41268Python utility you write that deals with user cache, configuration, or data
41269files.")
41270 (license license:isc)))
41271
41272(define-public python-xlib
41273 (package
41274 (name "python-xlib")
41275 (version "0.33")
41276 (source
41277 (origin
41278 (method git-fetch)
41279 (uri (git-reference
41280 (url "https://github.com/python-xlib/python-xlib")
41281 (commit version)))
41282 (file-name (git-file-name name version))
41283 (sha256
41284 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
41285 (build-system pyproject-build-system)
41286 (arguments
41287 `(#:phases
41288 (modify-phases %standard-phases
41289 (add-before 'check 'start-xserver
41290 (lambda* (#:key inputs #:allow-other-keys)
41291 (let ((xorg-server (assoc-ref inputs "xorg-server")))
41292 ;; There must be a running X server and make check doesn't
41293 ;; start one. Therefore we must do it.
41294 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
41295 (setenv "DISPLAY" ":1")))))))
41296 (native-inputs
41297 (list python-mock
41298 python-pytest
41299 python-setuptools
41300 xorg-server))
41301 (propagated-inputs
41302 (list python-six))
41303 (home-page "https://github.com/python-xlib/python-xlib")
41304 (synopsis "Python X11 client library")
41305 (description
41306 "The Python X Library is intended to be a fully functional
41307X client library for Python programs. It is useful to implement
41308low-level X clients. It is written entirely in Python.")
41309 (license license:gpl2+)))
41310
41311(define-public python-xlrd
41312 (package
41313 (name "python-xlrd")
41314 (version "2.0.2")
41315 (source
41316 (origin
41317 (method git-fetch) ;no tests in PyPI archive
41318 (uri (git-reference
41319 (url "https://github.com/python-excel/xlrd")
41320 (commit version)))
41321 (file-name (git-file-name name version))
41322 (sha256
41323 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
41324 (build-system pyproject-build-system)
41325 (native-inputs
41326 (list python-pytest
41327 python-setuptools))
41328 (home-page "https://www.python-excel.org/")
41329 (synopsis "Library for extracting data from Excel files")
41330 (description "This package provides a library to extract data from
41331spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
41332@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
41333Unicode-aware. It is not intended as an end-user tool.")
41334 (license license:bsd-3)))
41335
41336(define-public python-xlsxwriter
41337 (package
41338 (name "python-xlsxwriter")
41339 (version "3.2.0")
41340 (source
41341 (origin
41342 ;; There are no tests in the PyPI tarball.
41343 (method git-fetch)
41344 (uri (git-reference
41345 (url "https://github.com/jmcnamara/XlsxWriter")
41346 (commit (string-append "RELEASE_" version))))
41347 (file-name (git-file-name name version))
41348 (sha256
41349 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
41350 (build-system pyproject-build-system)
41351 (native-inputs
41352 (list python-setuptools
41353 python-wheel))
41354 (home-page "https://github.com/jmcnamara/XlsxWriter")
41355 (synopsis "Python module for creating Excel XLSX files")
41356 (description
41357 "XlsxWriter is a Python module that can be used to write text, numbers,
41358formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
41359 (license license:bsd-2)))
41360
41361;;; Note: this package is unmaintained since 2018 (archived on GitHub).
41362(define-public python-xlwt
41363 (package
41364 (name "python-xlwt")
41365 (version "1.3.0")
41366 (source
41367 (origin
41368 (method url-fetch)
41369 (uri (pypi-uri "xlwt" version))
41370 (sha256
41371 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
41372 (build-system pyproject-build-system)
41373 (native-inputs (list python-pytest python-setuptools python-wheel))
41374 (home-page "https://www.python-excel.org/")
41375 (synopsis "Library for creating spreadsheet Excel files")
41376 (description
41377 "@code{xlwt} is a library for writing data and formatting information to
41378older Excel files (i.e. .xls). The package itself is pure Python with no
41379dependencies on modules or packages outside the standard Python distribution.
41380It is not intended as an end-user tool.")
41381 (license license:bsd-3)))
41382
41383(define-public python-xmldiff
41384 (package
41385 (name "python-xmldiff")
41386 (version "3.0b1")
41387 (source
41388 (origin
41389 (method git-fetch)
41390 (uri (git-reference
41391 (url "https://github.com/Shoobx/xmldiff")
41392 (commit version)))
41393 (file-name (git-file-name name version))
41394 (sha256
41395 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
41396 (build-system pyproject-build-system)
41397 (native-inputs (list python-pytest python-setuptools))
41398 (propagated-inputs (list python-lxml))
41399 (home-page "https://github.com/Shoobx/xmldiff")
41400 (synopsis "Creates diffs of XML files")
41401 (description "This Python tool figures out the differences between two
41402similar XML files, in the same way the @command{diff} utility does it.")
41403 (license license:expat)))
41404
41405(define-public python-xmlsec
41406 (package
41407 (name "python-xmlsec")
41408 (version "1.3.16")
41409 (source
41410 (origin
41411 (method url-fetch)
41412 (uri (pypi-uri "xmlsec" version))
41413 (sha256
41414 (base32 "178zg6jl3v7j4cdxxzqzr16m3wqfisai98xa0sh4q7bd9ia70v1b"))))
41415 (build-system pyproject-build-system)
41416 (arguments
41417 (list
41418 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
41419 #:test-flags '(list "-n" "1"
41420 ;; This causes other tests to segfault.
41421 "-k" "not test_reinitialize_module")
41422 #:phases
41423 #~(modify-phases %standard-phases
41424 ;; FIXME: This is very unfortunate. I can't seem to find a way to
41425 ;; hardcode the location of this library, so users will also need to
41426 ;; set LD_LIBRARY_PATH.
41427 (add-before 'check 'pre-check
41428 (lambda* (#:key inputs #:allow-other-keys)
41429 (setenv "LD_LIBRARY_PATH"
41430 (dirname (search-input-file inputs "lib/libxmlsec1-openssl.so.1.3.7"))))))))
41431 (inputs (list openssl libltdl libxslt libxml2))
41432 (propagated-inputs (list python-lxml xmlsec-openssl))
41433 (native-inputs (list pkg-config
41434 python-lxml
41435 python-pkgconfig
41436 python-pytest
41437 python-pytest-xdist
41438 python-setuptools
41439 python-setuptools-scm
41440 python-wheel))
41441 (home-page "https://github.com/xmlsec/python-xmlsec")
41442 (synopsis "Python bindings for the XML Security Library")
41443 (description "This package provides Python bindings for the XML Security
41444Library.")
41445 (license license:expat)))
41446
41447(define-public python-xmp-toolkit
41448 (package
41449 (name "python-xmp-toolkit")
41450 (version "2.1.0")
41451 (source
41452 (origin
41453 (method url-fetch)
41454 (uri (pypi-uri "python_xmp_toolkit" version))
41455 (sha256
41456 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
41457 (build-system pyproject-build-system)
41458 (arguments
41459 (list
41460 #:phases
41461 #~(modify-phases %standard-phases
41462 (add-after 'unpack 'patch-source
41463 (lambda* (#:key inputs #:allow-other-keys)
41464 (substitute* "libxmp/exempi.py"
41465 (("ctypes.util.find_library\\('exempi'\\)")
41466 (format #f "~s" (search-input-file
41467 inputs "lib/libexempi.so")))))))))
41468 (native-inputs
41469 (list python-pytest
41470 python-flit-core))
41471 (inputs
41472 (list exempi))
41473 (propagated-inputs
41474 (list python-pytz))
41475 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
41476 (synopsis "Python XMP Toolkit for working with metadata")
41477 (description "Python XMP Toolkit is a library for working with XMP
41478metadata, as well as reading/writing XMP metadata stored in many different
41479file formats.
41480
41481Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
41482based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
41483are easily incorporated into the library with a minimum amount of work.")
41484 (license license:bsd-3)))
41485
41486(define-public python-yamllint
41487 (package
41488 (name "python-yamllint")
41489 (version "1.37.1")
41490 (source
41491 (origin
41492 (method url-fetch)
41493 (uri (pypi-uri "yamllint" version))
41494 (sha256
41495 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
41496 (build-system pyproject-build-system)
41497 (arguments
41498 (list #:test-backend #~'unittest))
41499 (native-inputs
41500 (list python-setuptools))
41501 (propagated-inputs
41502 (list python-pathspec python-pyyaml))
41503 (home-page "https://github.com/adrienverge/yamllint")
41504 (synopsis "Linter for YAML files")
41505 (description
41506 "Yamllint is a linter for YAML files. yamllint does not only check for
41507syntax validity, but for weirdnesses like key repetition and cosmetic problems
41508such as lines length, trailing spaces, indentation, etc.")
41509 (license license:gpl3+)))
41510
41511(define-public python-yamlloader
41512 (package
41513 (name "python-yamlloader")
41514 (version "1.5.2")
41515 (source
41516 (origin
41517 (method url-fetch)
41518 (uri (pypi-uri "yamlloader" version))
41519 (sha256
41520 (base32 "06y4xaajsjjynrv2m6ar3hwiif2mk3z3lgwxn2l1qsv238rc22n1"))))
41521 (build-system pyproject-build-system)
41522 (arguments
41523 (list #:test-backend #~'unittest
41524 #:test-flags #~(list "discover" "-v")))
41525 (native-inputs
41526 (list python-hatch-vcs
41527 python-hatchling
41528 python-hypothesis))
41529 (propagated-inputs
41530 (list python-pyyaml))
41531 (home-page "https://github.com/Phynix/yamlloader")
41532 (synopsis "Ordered YAML loader and dumper for PyYAML")
41533 (description
41534 "This package provides loaders and dumpers for PyYAML. Currently, an
41535OrderedDict loader/dumper is implemented, allowing to keep items order when
41536loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
41537dicts are supported and are the default items to be loaded to. As of Python
415383.7 preservation of insertion order is a language feature of regular dicts.)
41539It was originally mirrored from
41540@url{https://github.com/fmenabe/python-yamlordereddictloader,
41541yamlordereddict}.")
41542 (license license:expat)))
41543
41544;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
41545;; an improved version of this library with unit tests, performance
41546;; improvements (by providing access to the C implementation of PyYAML) and is
41547;; more actively developed.
41548(define-public python-yamlordereddictloader
41549 (package
41550 (name "python-yamlordereddictloader")
41551 (version "0.4.2")
41552 (source
41553 (origin
41554 (method git-fetch)
41555 (uri (git-reference
41556 (url "https://github.com/fmenabe/python-yamlordereddictloader")
41557 (commit version)))
41558 (file-name (git-file-name name version))
41559 (sha256
41560 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
41561 (build-system pyproject-build-system)
41562 (arguments
41563 (list #:tests? #f)) ;no tests
41564 (native-inputs
41565 (list python-setuptools))
41566 (propagated-inputs
41567 (list python-pyyaml))
41568 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
41569 (synopsis "Loader and a dumper for PyYAML")
41570 (description
41571 "yamlordereddictloader is a Python package that provides a loader and a
41572dumper for PyYAML allowing to keep items order when loading a file (by putting
41573them in OrderedDict objects) and to manage OrderedDict objects when dumping to
41574a file.")
41575 (license license:expat)))
41576
41577(define-public python-yapf
41578 (package
41579 (name "python-yapf")
41580 (version "0.43.0")
41581 (source
41582 (origin
41583 (method url-fetch)
41584 (uri (pypi-uri "yapf" version))
41585 (sha256
41586 (base32
41587 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
41588 (build-system pyproject-build-system)
41589 (propagated-inputs
41590 (list python-platformdirs python-tomli))
41591 (native-inputs
41592 (list python-pytest python-setuptools python-wheel))
41593 (home-page "https://github.com/google/yapf")
41594 (synopsis "Formatter for Python code")
41595 (description "YAPF is a formatter for Python code. It's based off of
41596@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
41597takes the code and reformats it to the best formatting that conforms to the
41598style guide, even if the original code didn't violate the style guide.")
41599 (license license:asl2.0)))
41600
41601(define-public python-yapsy
41602 (package
41603 (name "python-yapsy")
41604 (version "1.12.2")
41605 (source
41606 (origin
41607 (method url-fetch)
41608 (uri (pypi-uri "Yapsy" version))
41609 (sha256
41610 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
41611 (build-system pyproject-build-system)
41612 (arguments
41613 (list #:test-backend #~'unittest))
41614 (native-inputs
41615 (list python-setuptools))
41616 (home-page "https://yapsy.sourceforge.net")
41617 (synopsis "Simple plugin system for Python applications")
41618 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
41619implementing the core mechanisms needed to build a plugin system into a wider
41620application.
41621
41622The main purpose is to depend only on Python's standard libraries and to
41623implement only the basic functionalities needed to detect, load and keep track
41624of several plugins.")
41625 (license license:bsd-3)))
41626
41627(define-public python-yaspin
41628 (package
41629 (name "python-yaspin")
41630 (version "3.2.0")
41631 (source
41632 (origin
41633 (method url-fetch)
41634 (uri
41635 (pypi-uri "yaspin" version))
41636 (sha256
41637 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
41638 (build-system pyproject-build-system)
41639 ;; tests: 3007 passed, 1758 skipped
41640 (native-inputs
41641 (list python-poetry-core
41642 python-pytest
41643 python-pytest-mock))
41644 (propagated-inputs
41645 (list python-termcolor-next))
41646 (home-page "https://github.com/pavdmyt/yaspin")
41647 (synopsis "Yet Another Terminal Spinner")
41648 (description "Yaspin provides a terminal spinner to indicate the progress
41649during long operations.")
41650 (license license:expat)))
41651
41652(define-public python-yattag
41653 (package
41654 (name "python-yattag")
41655 (version "1.16.1")
41656 (source
41657 (origin
41658 (method url-fetch)
41659 (uri (pypi-uri "yattag" version))
41660 (sha256
41661 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
41662 (build-system pyproject-build-system)
41663 (native-inputs
41664 (list python-pytest
41665 python-setuptools
41666 python-wheel))
41667 (home-page "https://www.yattag.org/")
41668 (synopsis "HTML or XML generator for Python")
41669 (description
41670 "Yattag is a Python library for generating HTML or XML in a pythonic
41671way.")
41672 (license license:lgpl2.1)))
41673
41674(define-public python-yq
41675 (package
41676 (name "python-yq")
41677 (version "3.4.3")
41678 (source
41679 (origin
41680 (method url-fetch)
41681 (uri (pypi-uri "yq" version))
41682 (sha256
41683 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
41684 (build-system pyproject-build-system)
41685 (arguments
41686 (list
41687 #:test-backend #~'custom
41688 #:test-flags #~(list "test/test.py" "-v")
41689 #:phases
41690 #~(modify-phases %standard-phases
41691 (add-after 'unpack 'patch
41692 (lambda _
41693 (substitute* "yq/__init__.py"
41694 (("Popen\\(\\[\"jq")
41695 (string-append
41696 "Popen([\""
41697 #$(this-package-input "jq") "/bin/jq"))))))))
41698 (native-inputs
41699 (list python-hatchling
41700 python-hatch-vcs))
41701 (inputs
41702 (list jq))
41703 (propagated-inputs
41704 (list python-argcomplete
41705 python-pyyaml
41706 python-tomlkit
41707 python-xmltodict))
41708 (home-page "https://github.com/kislyuk/yq")
41709 (synopsis "Command-line YAML/XML processor")
41710 (description
41711 "This package provides @command{yq} and @command{xq} for processing YAML
41712and XML respectively. The processing is done through @command{jq},
41713@command{jq} filters can be used to process the data as it passes through.")
41714 (license license:asl2.0)))
41715
41716(define-public python-yte
41717 (package
41718 (name "python-yte")
41719 (version "1.8.1") ;TODO higher versions depend on uv_build
41720 (source
41721 (origin
41722 (method git-fetch)
41723 (uri (git-reference
41724 (url "https://github.com/koesterlab/yte")
41725 (commit (string-append "v" version))))
41726 (sha256
41727 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
41728 (build-system pyproject-build-system)
41729 (arguments
41730 (list
41731 #:test-flags #~(list "tests.py")
41732 #:phases
41733 '(modify-phases %standard-phases
41734 (add-after 'unpack 'set-HOME
41735 (lambda _ (setenv "HOME" "/tmp"))))))
41736 (propagated-inputs (list python-dpath python-plac python-pyyaml))
41737 (native-inputs (list python-numpy python-poetry-core python-pytest))
41738 (home-page "https://github.com/koesterlab/yte")
41739 (synopsis "YAML template engine with Python expressions")
41740 (description
41741 "This package provides a YAML template engine with Python expressions.")
41742 (license license:expat)))
41743
41744(define-public python-zarr
41745 (package
41746 (name "python-zarr")
41747 (version "2.18.7")
41748 (source
41749 (origin
41750 (method url-fetch)
41751 (uri (pypi-uri "zarr" version))
41752 (sha256
41753 (base32
41754 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
41755 (build-system pyproject-build-system)
41756 (arguments
41757 (list
41758 #:test-flags
41759 #~(list "--numprocesses" (number->string (parallel-job-count))
41760 ;; This tests are flaky. The pass several times on my laptop
41761 ;; but occasionally fail. They fail pretty reliably on the
41762 ;; build farm.
41763 "-k" (string-append "not test_lazy_loader and not open_array"
41764 ;; File not found.
41765 " and not test_filesystem_path"))
41766 #:phases
41767 #~(modify-phases %standard-phases
41768 (add-before 'build 'set-version
41769 (lambda _
41770 (substitute* "pyproject.toml"
41771 (("^version_file.*") "")
41772 (("dynamic = \\[\"version\"\\]")
41773 (string-append "version = \"" #$version "\"")))))
41774 (add-after 'unpack 'disable-service-tests
41775 (lambda _
41776 (setenv "ZARR_TEST_ABS" "0")
41777 (setenv "ZARR_TEST_MONGO" "0")
41778 (setenv "ZARR_TEST_REDIS" "0"))))))
41779 (propagated-inputs
41780 (list python-asciitree
41781 python-fasteners
41782 python-numcodecs
41783 python-numpy))
41784 (native-inputs
41785 (list python-pytest
41786 python-pytest-xdist
41787 python-setuptools
41788 python-wheel))
41789 (home-page "https://github.com/zarr-developers/zarr-python")
41790 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
41791 (description
41792 "This package provides an implementation of chunked, compressed,
41793N-dimensional arrays for Python.")
41794 (license license:expat)))
41795
41796(define-public python-zeroc-ice
41797 (package
41798 (name "python-zeroc-ice")
41799 (version "3.7.10.1")
41800 (source (origin
41801 (method url-fetch)
41802 (uri (pypi-uri "zeroc-ice" version))
41803 (sha256
41804 (base32
41805 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
41806 (build-system pyproject-build-system)
41807 (arguments
41808 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
41809 ;; tag.
41810 ;;
41811 ;; See:
41812 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
41813 ;; - File: <ice/refs/heads/main/python/allTests.py>
41814 (list #:tests? #f))
41815 (inputs (list openssl))
41816 (native-inputs (list python-setuptools))
41817 (home-page "https://zeroc.com")
41818 (synopsis "RPC framework")
41819 (description
41820 "Ice is a comprehensive RPC framework. Ice helps you network your
41821software by taking care of all interactions with low-level network programming
41822interfaces.")
41823 (license license:gpl2)))
41824
41825;; Package variant to build [email protected]
41826(define-public python-zeroc-ice-3.6
41827 (package
41828 (inherit python-zeroc-ice)
41829 (version "3.6.5")
41830 (source (origin
41831 (method url-fetch)
41832 (uri (pypi-uri "zeroc-ice" version))
41833 (sha256
41834 (base32
41835 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
41836 (patches
41837 (search-patches
41838 "python-zeroc-ice-3.6.5-python-3.11-support.patch"))))
41839 (arguments
41840 (substitute-keyword-arguments (package-arguments python-zeroc-ice)
41841 ((#:phases phases #~%standard-phases)
41842 #~(modify-phases #$phases
41843 (add-before 'build 'relax-gcc-14-strictness
41844 (lambda _
41845 (setenv "CFLAGS"
41846 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
41847
41848(define-public python-zeroconf
41849 (package
41850 (name "python-zeroconf")
41851 (version "0.38.1")
41852 (source
41853 (origin
41854 (method git-fetch)
41855 (uri (git-reference
41856 (url "https://github.com/jstasiak/python-zeroconf")
41857 (commit version)))
41858 (file-name (git-file-name name version))
41859 (sha256
41860 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
41861 (build-system pyproject-build-system)
41862 (arguments
41863 (list
41864 #:test-flags
41865 #~(list
41866 "-k" (string-append
41867 ;; XXX: Despite asyncio, this test fails.
41868 "not test_run_coro_with_timeout and not "
41869 ;; XXX: Networking isn't available.
41870 (string-join
41871 (list "test_integration_with_listener_ipv6"
41872 "test_launch_and_close_v4_v6"
41873 "test_launch_and_close_context_manager"
41874 "test_launch_and_close"
41875 "test_close_multiple_times")
41876 " and not ")))))
41877 (native-inputs
41878 (list python-pytest python-pytest-asyncio python-setuptools))
41879 (propagated-inputs
41880 (list python-ifaddr))
41881 (home-page "https://github.com/jstasiak/python-zeroconf")
41882 (synopsis "Pure Python mDNS service discovery")
41883 (description "Pure Python multicast DNS (mDNS) service discovery library
41884(Bonjour/Avahi compatible).")
41885 (license license:lgpl2.1+)))
41886
41887(define-public python-zict
41888 (package
41889 (name "python-zict")
41890 (version "3.0.0")
41891 (source
41892 (origin
41893 (method url-fetch)
41894 (uri (pypi-uri "zict" version))
41895 (sha256
41896 (base32
41897 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
41898 (build-system pyproject-build-system)
41899 (arguments
41900 (list
41901 #:test-flags
41902 ;; This uses "importorskip", but it won't skip.
41903 '(list "--ignore=tests/test_lmdb.py")))
41904 (propagated-inputs
41905 (list python-heapdict))
41906 (native-inputs
41907 (list python-pytest
41908 python-pytest-asyncio
41909 python-pytest-repeat
41910 python-pytest-timeout
41911 python-setuptools
41912 python-wheel))
41913 (home-page "https://zict.readthedocs.io/en/latest/")
41914 (synopsis "Composable mutable mapping tools")
41915 (description "This package provides abstract @code{MutableMapping} classes
41916that consume and build on other @code{MutableMappings}. Several of these can
41917be composed with one another to form intuitive interfaces over complex storage
41918systems policies.")
41919 (license license:bsd-3)))
41920
41921(define-public python-zipfly
41922 (package
41923 (name "python-zipfly")
41924 (version "6.0.5")
41925 (source
41926 (origin
41927 (method url-fetch)
41928 (uri (pypi-uri "zipfly" version))
41929 (sha256
41930 (base32
41931 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
41932 (build-system pyproject-build-system)
41933 (arguments
41934 (list #:test-backend #~'unittest))
41935 (native-inputs (list python-setuptools))
41936 (home-page "https://github.com/sandes/zipfly")
41937 (synopsis "Zip archive generator")
41938 (description "ZipFly is a zip archive generator. It was created to
41939generate very large zip archives for immediate sending out to clients, or
41940for writing large zip archives without memory inflation.")
41941 (license license:expat)))
41942
41943(define-public python-zipstream-new
41944 (package
41945 (name "python-zipstream-new")
41946 (version "1.1.8")
41947 (source
41948 (origin
41949 (method git-fetch) ; no tests in PyPI release
41950 (uri (git-reference
41951 (url "https://github.com/arjan-s/python-zipstream")
41952 (commit (string-append "v" version))))
41953 (file-name (git-file-name name version))
41954 (sha256
41955 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
41956 (build-system pyproject-build-system)
41957 (arguments
41958 (list #:test-backend #~'unittest))
41959 (native-inputs (list python-setuptools))
41960 (home-page "https://github.com/arjan-s/python-zipstream")
41961 (synopsis "Zipfile generator that takes input files as well as streams")
41962 (description "@code{zipstream.py} is a zip archive generator based on
41963@code{zipfile.py}. It was created to generate a zip file generator for
41964streaming. This is beneficial for when you want to provide a downloadable
41965archive of a large collection of regular files, which would be infeasible
41966to generate the archive prior to downloading or of a very large file that
41967you do not want to store entirely on disk or on memory.")
41968 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
41969 (license license:gpl3)))
41970
41971(define-public python2-dbus
41972 (package/inherit python-dbus
41973 (name "python2-dbus")
41974 (inputs `(("python" ,python-2)
41975 ("libxcrypt" ,libxcrypt) ;required by Python.h
41976 ,@(alist-delete "python"
41977 (package-inputs python-dbus))))
41978 (arguments
41979 `(#:configure-flags '("PYTHON_VERSION=2")))))
41980
41981(define-public shrinkwrap
41982 (package
41983 (name "shrinkwrap")
41984 (version "0.1.0")
41985 (source
41986 (origin
41987 (method git-fetch)
41988 (uri (git-reference
41989 (url "https://github.com/fzakaria/shrinkwrap")
41990 (commit (string-append "v" version))))
41991 (file-name (git-file-name name version))
41992 (sha256
41993 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
41994 (build-system pyproject-build-system)
41995 (native-inputs
41996 (list python-click
41997 python-poetry-core
41998 python-pypa-build
41999 python-pytest))
42000 (inputs (list python-lief python-sh))
42001 (home-page "https://github.com/fzakaria/shrinkwrap")
42002 (synopsis "Emboss needed dependencies on the top level executable")
42003 (description
42004 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
42005shared objects, and lift them up to the executable referenced by absolute
42006path.")
42007 (license license:expat)))
42008
42009(define-public staticsite
42010 (package
42011 (name "staticsite")
42012 (version "2.5")
42013 (source
42014 (origin
42015 (method git-fetch)
42016 (uri (git-reference
42017 (url "https://github.com/spanezz/staticsite")
42018 (commit (string-append "v" version))))
42019 (file-name (git-file-name name version))
42020 (sha256
42021 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
42022 (build-system pyproject-build-system)
42023 (arguments
42024 (list
42025 #:phases
42026 #~(modify-phases %standard-phases
42027 (add-after 'unpack 'use-themes-in-output
42028 (lambda _
42029 (substitute* "staticsite/global_settings.py"
42030 (("/usr/share/staticsite") #$output))))
42031 (add-after 'install 'install-themes
42032 (lambda _
42033 (let ((themedir (string-append #$output "/themes")))
42034 (copy-recursively "themes" themedir)))))))
42035 (native-inputs
42036 (list python-hatchling
42037 python-pytest))
42038 (inputs
42039 (list perl-image-exiftool
42040 python-dateutil
42041 python-docutils
42042 python-jinja2
42043 python-markdown
42044 python-pillow
42045 python-pytz
42046 python-pyyaml
42047 python-ruamel.yaml
42048 python-slugify
42049 python-toml
42050 tzdata-for-tests))
42051 (home-page "https://github.com/spanezz/staticsite")
42052 (synopsis "Static site generator")
42053 (description
42054 "Statistic is a static site generator based on Markdown and Jinja2.")
42055 (license (list license:gpl3+ license:expat))))
42056
42057;;;
42058;;; Avoid adding new packages to the end of this file. To reduce the chances
42059;;; of a merge conflict, place them above by existing packages with similar
42060;;; functionality or similar names.
42061;;;